TeXnicke problemy

Michal Kubecek kubecek at karlin.mff.cuni.cz
Tue Feb 28 12:04:58 CET 1995


Mam nasledujici problem: potreboval jsem si napsat makro, ktere by ignorovalo
cast textu. Nejjednodussi reseni

  \long\def\void#1\endvoid{}

se mi nehodilo, protoze jsem potreboval pouzit neco jako

  \def\Reseni#1{
    \def\zad##1{\if##1#1\let\endzad\endres\res##1%
                \else\let\endzad\endvoid\expandafter\fi}
    \input \ZadFile}

(vstupni soubor se sklada z bloku \zad1 ... \endzad, \zad2 ... \endzad atd.
Kdyz jsem zkusil

  \def\Endvoid{}
  \def\endvoid{\Endvoid}
  \def\void{\futurelet\next\Void}
  \def\Void{\ifx\next\endvoid\else\expandafter\VOid\fi}
  \def\VOid#1{\void}

fungovalo to jenom pokud pred \endvoid nebyla mezera nebo nebylo na zacatku
radku, protoze \futurelet sice odchytilo mezeru, ale \VOid uz si jako
parametr vzalo to \endzad. Nakonec jsem to vyresil takhle:

  \def\Endvoid{}
  \def\endvoid{\Endvoid}
  \def\void{\catcode`\ =12\catcode`\^^M=12\catcode`\^^I=12\Void}
  \def\Void{\futurelet\next\VOid}
  \def\VOid{\ifx\next\endvoid\ENDvoid\else\expandafter\VOId\fi}
  \def\VOId#1{\Void}
  \def\ENDvoid{\catcode`\ =10\catcode`\^^M=5\catcode`\^^I=10}

Otazka zni: neslo by to napsat, aniz bych musel menit catcode mezery
a dalsich (navic ani nemuzu predem vedet, ktere vsechny znaky by mohly
mit kategorii 10, 5 (nebo jinou, ktera se v tehle situaci ignoruje))?


Dalsi problem, na ktery jsem zaroven narazil: protoze pomoci \Reseni
postupne nacitam zadani jednotlivych uloh, musim pokazde cist externi
soubor. SmartDrive sice zabrani nejhorsimu, ale ani tak se mi to nelibi.
Bohuzel, nepodarilo se mi prijit na to, jak zaridit, aby se soubor
nacital jen jednou.

  \long\def\aaa{\input \ZadFile}

samozrejme nic nevyresi. Po nahlednuti do TeXbooku jsem zkusil

  \newtoks\qqqtoks
  \qqqtoks=\expandafter{\input ahoj }
  \def\aaa{\the\qqqtoks}

ale taky to nefunguje. Pri zpracovani druheho radku nahlasi chybu (cituji)

(ahoj.tex)
Runaway text?
\par a b c d \par \par \par
! File ended while scanning text of \qqqtoks.
<inserted text>
                }
l.3 \qqqtoks=\expandafter{\input ahoj
                                      }

Nacitany soubor se jmenuje ahoj.tex a obsahuje 'a b c d' a nekolik prazdnych
radek. Nechapu presne, proc mu vadi, ze dospel na konec souboru ahoj.tex.
Pokud by mi to mohl nekdo vysvetlit, budu rad. Pokud ne, nic se nedeje.

                                                       Michal Kubecek




More information about the csTeX mailing list