chyba: Missing character

Stepan Kasal kasal at math.cas.cz
Wed Nov 17 18:06:05 CET 2004


Dobry den,

In cz.comp.cstex, you wrote:
>> \catcode`\^^a0=13 \def^^a0{~}
>
> Rovnako som riesil podobny problem so znakom s cislom 0, ktory   mal mat
> tiez vyznam medzery.
> Nebol som vsak uspesny s o nieco ambicioznejsim planom zadefinovat len jedno
> makro, ktoreho pouzitie by vyzeralo nejako takto: \zmen{0}{\space} . Ide to?

Priciny Vaseho neuspechu jsou jiste vysvetleny napr. v Olsakove TBN.
Asi se ^^xx interpretuje brzy, podobne jako prirazeni catcode a vytvoreni
ridicich sekvenci.

Makro \zmen by jiste slo napsat s pomoci dvou dlouhych \ifcase (to druhe by
bylo utvoreno tak, aby v nem byly vsechny znaky aktivni), ale to lze stezi
povazovat za elegantni reseni.

Lze je vsak napsat na tri radky, pokud pouzijeme eTeX a jeho primitivum
\scantokens:
{\catcode`^=12
\gdef\zmen#1#2{\scantokens{\catcode`\^^#1=\active \def^^#1{#2}}}
}

Pri pouziti bezneho TeXu je poteba toto primitivum emulovat; k tomu jsem
si vypujcil definici z texinfo.tex.  Kompletni priklad, ktery funguje v obou
variantach, prikladam nize.

Zdravim,
	Stepan Kasal

% To do this right we need a feature of e-TeX, \scantokens,
% which we arrange to emulate with a temporary file in ordinary TeX.
\ifx\eTeXversion\undefined
  \csname newwrite\endcsname \macscribble
  \def\scantokens#1{%
    \toks0={#1}%
    \immediate\openout\macscribble=\jobname.tmp
    \immediate\write\macscribble{\the\toks0}%
    \immediate\closeout\macscribble
    \input \jobname.tmp
  }
\fi

{\catcode`^=12
\gdef\zmen#1#2{\scantokens{\catcode`\^^#1=\active \def^^#1{#2}}}
}

\zmen{68}{slon} % predefinuj pismenko h, ^^68
\message{h}
\end



More information about the csTeX mailing list