Jak funguje \csname?
David Necas (Yeti)
yeti at physics.muni.cz
Thu Jan 15 00:37:31 CET 2004
On Thu, Jan 15, 2004 at 12:07:28AM +0100, Helena Vildova wrote:
> byla bych moc vdecna za vysvetleni toho, jak funguje a co vlastne dela
> prikaz \csname a \endcsname v TeXu. Co jsem tak zhruba pochopila je, ze
> je to zrejme prikaz na definovani novych TeXovych prikazu (taky jsem se
> docetla, ze se \csname pouziva na "generovani nazvu prikazu z nahodneho
> textu").
Konstrukce \csname...\endcsname se sice pomerne casto
pouziva jako pomocne makro pri definicich, ale sama o sobe
nic nedefinuje (pominu-li mirne obskurni situaci kdy se
samotnym pouzitim definuje nedefinovana sekvence na \relax).
Napr.
\csname bla\endcsname
znamena presne totez co
\bla
tj. text mezi \csname a \endcsname se stane kontrolni
sekvenci. Ale nic se nedefinuje, proste je to jako bych na
to misto napsal \bla namisto \csname bla\endcsname, jenom to
neudelam ja, ale expand procesor TeXu, a navic na me nezarve,
kdyz \bla neni definovane.
To ma tu vyhodu, ze
(a) lze takto zapsat prastene kontrolni sekvence, kterych
jinymi prostredky stezi dosahnete, napr.
\csname $! ^&\endcsname
se chova jako kontrolni sekvence
jmenem ,$! ^&` (coz samozrejme jako \$! ^& zapsat nejde)
(b) lze takto tvorit kontolni sekvence on-the-fly, tj. napr.
z parametru makra a spol., klasicky priklad by byl
\def\definujAhoj#1{\expandafter\def\csname#1\endcsname{Ahoj}}
ktery umozni definovat [temer] cokoli na Ahoj, napr. po
\definujAhoj{nazdar}
vznikne kontrolni sekvence \nazdar definovana jako ,Ahoj`.
Pokud chcete vedet vice, asi doporucuji koupi Olsakova TeXbooku
naruby.
Yeti
--
Do not use tab characters. Their effect is not predictable.
More information about the csTeX
mailing list