Predefinovani pismene v makru

Petr Olsak olsak at math.feld.cvut.cz
Wed Nov 20 12:27:10 CET 1996


On Wed, 20 Nov 1996, Libor Skarvada wrote:

> Jaromir Kuben <kuben at scova.vabo.cz> writes:
>
> >Petr Mikulik:
> >> Mohl by mi nekdo rici, jak spravne predefinovat pismeno v makru? Ono totiz
> >> tohle jede:
> >> ...
> >Potiz je v tom, ze v okamziku uvedeni definice \NewKeyboad jiz
> >musi byt \catcode\`o=\active (aspon tak jsem to pochopil pri cteni
> >knihy V. Eijkhout: TeX by Topic - urcite to bude i v chystane knize
> >p. Olsaka).
> >
> >Takze trik by byl nasledujici:
> > [...]
> >% Format: cslatex2e
> >\documentclass{report}
> >\let\catcde\catcode{\catcode`\o=\active
> >\gdef\NewKeyb{\catcde`\o=\active \def o{XYZ}
> >Kudrnovo kolo
> >}}
> >\let\NewKeyboard\NewKeyb
> >\begin{document}
> >{\NewKeyboard}
> >\end{document}
>
> Mohu se zeptat, proc zde nepomuze \edef ?
>  \edef\NewKeyboard{
>  \catcode`\o=\active \def o{XYZ}
>  Kudrnovo kolo
>  }

\edef "prerovna" telo definice ve fazi "uceni definice" tak, ze expanduje
vsechna makra a expandujici primitivy na sadu (pripadne jinych) tokenu,
ktera se ulozi do tela definice. Pritom ale povel \catcode`\o=\active
se vykonava az v hlavnim procesoru TeXu (tj. neni predmetem expanze).
Proto neni proveden v okamziku expanze \edef.

V uvedenem priklade se tedy telo definice expanduje na

mezera   ... token kategorie 10
\catcode ... to neni expandujici primitiv, takze zustava beze zmeny
`        ... token kategorie 12
\o       ... se expanduje, pokud je \o nejake makro. Jinak krici undefined
             control sequence
=        ... token kategorie 12
\active  ... sekvence deklarovana jako \chardef, zustava nezmenena
\def     ... neexpandujici primitiv, zustava nezmenen
o        ... token kategorie 11 (to je kamen urazu jiz v prvnim prispevku)
{        ... token kategorie 1
XYZ      ... tokeny kategorie 11
}        ... token kategorie 2
mezera   ... token kategorie 10
Kudrnovo ... tokeny kategorie 11
mezera   ... token kategorie 10
kolo     ... tokeny kategorie 11
mezera   ... token kategorie 10

Petr Olsak



More information about the csTeX mailing list