[cstex] Zahadny \escapechar
Zdenek Wagner
zdenek.wagner at gmail.com
Wed Dec 29 16:50:32 CET 2010
Vazeni kolegove,
mam jednu "lahudku", kterou nedovedu pochopit. Sice jsem zjistil, ze
tento obrat nakonec ve svem souboru nepotrebuju, ale stejne mam spatny
pocit z toho, ze TeX dela neco, cemu nerozumim. Testovaci soubor je
zde:
\def\Oico{123456789}
\def\Odic{789456123}
\def\Oucet{147852369}
% Varianta 1
\escapechar`\O
\def\redef#1{%
% Varianta 2
%\escapechar`\O
\ifx#1\relax
\let\redef\relax
\else
% Varianta 3
%\bgroup \escapechar`\O \expandafter\egroup
\expandafter\def\expandafter\macro\expandafter{\string#1}%
\show\macro
\expandafter\let\expandafter#1\csname\macro\endcsname
\show#1
\expandafter\def\csname\macro\endcsname{}%
\fi
\redef}
% Varianta 4
%\escapechar`\O
\redef \ico \dic \ucet \adresa \relax
\ico, \dic, \ucet
\bye
Nejvice by se mi libilo, kdyby fungovala varianta 3, protoze bych se
nemusel starat o zpetne nastaveni \escapechar. Pri zapnutem trasovani
jsem si overil, ze \string se skutecne provede pred uzavrenim skupiny,
ale presto neni v jeho expanzi na zacatku pismeno O. Funguje pouze
varianta 1. Varianty 2 a 4 funguji az od druheho tokenu (tedy pocinaje
\dic).
Ted jsem zkusil jeste jednu zmenu, do varianty 3 jsem pripsal \relax,
takze to ted vypada:
\bgroup \escapechar`\O \relax \expandafter\egroup
Tato varianta funguje. Je mozne, ze by TeX po \escapechar`\O ignoroval
mezery a pokracoval v expanzi az do chvile, kdy narazi na neco, co
nelze do \escapechar priradit? Tim by se vysvetlilo to zpozdeni.
--
Zdeněk Wagner
http://hroch486.icpf.cas.cz/wagner/
http://icebearsoft.euweb.cz
More information about the csTeX
mailing list