Expanze \uppercase

Hans GINZEL hans at kolej.mff.cuni.cz
Thu Nov 19 13:15:40 CET 1998


On Thu, 19 Nov 1998, Petr Olsak wrote:
>
> On Wed, 18 Nov 1998, Ivo Jancik wrote:
> >
> > Chci definovat makro do nehoz vstoupi sekvence
> > tokenu typu pismeno, tedy zhruba receno retezec,
> > a uvnitr makra se provede definice noveho makra,
> > jehoz nazev bude jako ten parametr.
> >
> > Z duvodu jednoznacnosti chci prevest parametr na
> > velka pismena a tady je problem. Zkousel jsem neco
> > jako zhruba toto:
> >
> >   \expandafter\gdef
> >   \expandafter\csname\uppercase{#1}\endcsname
> > potom zase toto:
> >
> >   \edef\neco{\uppercase{#1}}
> >   \expandafter\gdef
> >   \expandafter\csname\neco\endcsname
> >
> > ale pak jsem zjistil, ze se \uppercase ani v jednom
> > pripade neexpanduje tak, jak jsem si predstavoval.
> > Je to proto, ze je to primitiv a dal se expanze neprovadi?

Primitiv \uppercase v podstate expanzi nepodleha. Dostane sovo
az na urovni hlavniho processoru. Proto jsou vase pokusy nutit
ho expandovat marne.

> Primitiv \uppercase pracuje az na urovni hlavniho procesoru, ale Vy
> potrebujete prevzit udaj sevreny mezi \csname a \endcsname od expand
> procesoru. Je tedy prirozene, ze primitiv \uppercase nemuzete pouzit.
> Zadna kombinace \expandafter ani \edef nepomuze.

A co vyuzit k praci hlavni procesor:

\def\makro#1#2{\uppercase{\expandafter\def\csname#1\endcsname}{#2}}
\makro a{Ahoj}
\show\A

Parametry (sablonu) muzeme dokonce vystrcit mimo makro:

\def\makro#1{\uppercase{\expandafter\def\csname#1\endcsname}}
\makro a#1 #2 {#1:#2}
\show\A


					Hans





More information about the csTeX mailing list