TeXnicke problemy

Stepan Kasal KASAL at ksvi.mff.cuni.cz
Tue Feb 28 13:01:56 CET 1995


Dobry den,

>   \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}

Ja bych to proste napsal asi takhle:
   \def\Reseni#1{
     \def\zad##1{\if##1#1\let\endzad\endres\res#1%
                 \else\expandafter\voidzad\fi}
     \input \ZadFile}
   \def\voidzad#1\endzad{}

Anebo rovnou asi takhle:
   \def\Reseni#1{
     \def\hopla##1\zad#1{\let\endzad\endinput\res#1}
     \def\zad{\hopla\zad}
     \input \ZadFile\endres}
(Neni mi zcela jasny \endinput, ale snad to bude takhle chodit.)

Pro kratky \ZadFile by snad fungovalo i tohle:
   \def\void#1\endvoid{}
   \def\Reseni#1{
     \def\hopla##1\zad#1{\let\endzad\void\res#1}
     \expandafter \hopla \input \ZadFile\endvoid\endres}


>   \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.    [...]
>
> Otazka zni: neslo by to napsat, aniz bych musel menit catcode mezery

Co takhle
    \def\VOid{\afterassignment\void\let\next = }
(Ty mezery okolo rovnitka jsou podstatne, souvisi se syntaxi \let
(viz TeXbook): <\let> [ <space> ] [ <=> [ <space> ] ] <token> )


Dale:
> Bohuzel, nepodarilo se mi prijit na to, jak zaridit, aby se soubor
> nacital jen jednou.
>   \long\def\aaa{\input \ZadFile}

Lze to obejit treba takhle:

{ \def\zad#1{\expandafter\gdef\csname zad#1\endcsname{%
    \let\endzad}}
  \input \ZadFile
}

\def\Reseni#1{\zad #1
  \csname zad#1\endcsname  \endzad
}

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

> ! File ended while scanning text of \qqqtoks.

Kdyz mu vadi konec souboru, tak bych zkusil:

    \expandafter\qqqtoks\expandafter{\input ahoj }
cili
    \expandafter\qqqtoks\expandafter=\expandafter{\input ahoj }

Vsechno pisu ad hoc, nic z toho jsem neladil, ale doufam, ze vetsina
z naznacenych cest vede k cili.

Uff,
--Stepan



More information about the csTeX mailing list