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