Definice pismene x jako aktivniho znaku

Petr Olsak olsak at math.feld.cvut.cz
Mon Aug 18 10:17:47 CEST 1997



On Mon, 18 Aug 1997, Jakub Zlamal wrote:

> Dobry den,
>   chtel bych nadefinovat pismeno (mam zajem o x) jako aktivni znak s
> tim, ze v matematice by se $x123 +a$ expandovalo na $x_{123}+a$ a v
> normalnim textu by to bylo jen x.
>   Je toto vubec mozne udelat, nebo budou problemy s x vyskytujicim se
> v nazvech maker?
>   Melo by to fungovat v LATEXu.
>
> Dekuji

Vas pozadavek je snadno implementovatelny, protoze nastavenim \mathcodu
znaku na "8000 zustava tento znak obycejny v textovych modech a v
kontrolnich sekvencich, ale v matematickem modu se chova, jako aktivni.
K tomu ucelu je potreba tento znak nejprve na chvili nastavit jako aktivni
a globalne definovat a pak mu vratit puvodni \catcode.

Zde je jednoduche reseni:

-------

\edef\mathX #1 {{\mathchar\the\mathcode`x _{#1}}}
\mathcode`x="8000  {\catcode`x=13 \global\let x=\mathX}

V obycejnem textu je x normalni, da se pouzit i v kontrolnich
sekvencich (napriklad \expandafter,\relax) ale v matematice je:
$ x123 + x321 + y23 = x0 $. Pozor! Za kazdym indexem musi byt jedna
mezera. Nazapomenout psat $x $ misto % $x$.

\end

-------

Pokud chcete timto zpusobem "aktivizovat" vice znaku v matematickem modu,
pak bude asi uzitecne nasledujici makro, ktere precte parametr coby znak a
tento znak pro matematickou sazbu udela aktivnim:

-------

\def\am #1{\bgroup\uccode`~=`#1 \uppercase{\egroup
     \edef~##1 {{\mathchar\the\mathcode`~ _{##1}}}\mathcode`~="8000}}

\am x \am y \am z

$x ^2 + y1 + z3 ^2$.

\end

------

Petr Olsak





More information about the csTeX mailing list