[cstex] csname

Jan Sustek Jan.Sustek at seznam.cz
Mon Aug 27 15:48:36 CEST 2012


Dobry den,

uz na konferenci jsem se chtel zeptat, jak je to s expanzi \csname...\endcsname, pokud prislusna ridici sekvence neni definovana. Ale zapomnel jsem, proto se ptam tady.

Pokud prislusna ridici sekvence neni definovana, definuje ji expand procesor jako \relax. Otazkou je, jestli toto definovani ma byt lokalni, nebo globalni. Podle TeXbooku (strany 40 a 213) se to tvari, ze se jedna o definici jako kazdou jinou. Presneji, TeXbook se tvari, jako by expand procesor definoval
\expandafter\let\csname...\endcsname\relax
To znamena, ze by dle meho nazoru pri nastavenem \globaldefs=1 melo byt ono \relax definovano globalne.

Ale jak si muzete vyzkouset, i pri nastaveni \globaldefs=1 je toto \relax definovano lokalne.

{\globaldefs1 \csname bflmpsvz\endcsname}
\ifx\bflmpsvz\relax globalni\else lokalni\fi
\bye

Nebo se muzete podivat do sekce 372 souboru tex.web, kde je tento \relax natvrdo definovan lokalne, bez testu na globalitu, ktery se provadi jinde, napriklad v sekci 1221, kde je implementovan primitiv \let.

Otazkou je, jestli je nejaky zdokumentovany duvod, proc se TeX takto chova. Pripada mi to jako chyba TeXu, ale DEK o tomto vi, protoze o zmenach ve verzi TeXu 2.9 z prosince 1987 pise [[made \csname\endcsname's "relax" local']].

Nevite, proc to tak je nebo proc to neni zdokumentovano?

Diky.

Honza Sustek



More information about the csTeX mailing list