[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