Makro na zkratky v plainu

David Necas (Yeti) yeti at physics.muni.cz
Tue Jan 6 08:19:12 CET 2004


On Tue, Jan 06, 2004 at 04:10:26AM +0100, Matous Jan Fialka wrote:
> zasekl jsem se na nasledujicim pravdepodobne typicky zacatecnickem problemu:
> 
> \def\zkratka#1#2{\def\#1{#2}}
> \zkratka{ahoj}{Ahoj vespolek}
> 
> \ahoj % nefunguje :(
> 
> Vysledek by mel byt takovy, ze pokud nekam v textu napisu \ahoj, melo by se
> vysazet "Ahoj vespolek", ale to se nedeje. Proc? Asi mi neco unika, prosim
> poradte :)

  \def\zkratka#1#2{\def\#1{#2}}

nadefinuje makro na tuto posloupnost tokenů:

  \def, \#, 1, {, #2, }
        ^^
Z čehož je vidět, co je špatně. Funkční definice je musí
použít konstrukci \csname ... \endcsname, která ze svého
obsahu dělá kontrolní sekvenci, např.

  \def\zkratka#1#2{\expandafter\def\csname#1\endcsname{#2}}

Vysvětlení a podobný příklad viz např. v TBN str. 44-45.

Yeti


--
Do not use tab characters. Their effect is not predictable.




More information about the csTeX mailing list