
Versuch, Zeilen aus einer Datei zu setzen:
\openin0=MyFile
\loop
\read0to\linein
\linein
\ifeof0 % Fails here
\repeat
Natürlich möchte ich testen,nicht\ifeof, aber ich sehe in Kapitel 20 des TeXBook keinen Booleschen Negationsoperator. Kann ich das in reinem TeX machen?
Antwort1
Es hängt ein wenig davon ab, was Sie mit einfachem TeX meinen.
Wie cmhughes gerade in den Kommentaren erwähnt hat, können Sie den e-TeX- unless
Befehl verwenden, um den Ausdruck zu negieren, oder Sie können die LaTeX-Definition kopieren, \loop
was Ihnen Folgendes ermöglichen würde
\openin0=MyFile
\loop
\read0to\linein
\linein
\ifeof0 % Fails here
\else
\repeat
damit Sie mit einem nicht erweiterten TeX arbeiten können.
Die Ebene \loop
ist
\def\loop#1\repeat{\def\body{#1}\iterate}
\def\iterate{\body \let\next\iterate \else\let\next\relax\fi \next}
\let\repeat=\fi
LaTeX verwendet die folgende Definition, damit \else
es funktioniert.
\def\loop#1\repeat{\def\iterate{#1\relax\expandafter\iterate\fi}%
\iterate \let\iterate\relax}
\let\repeat\fi
Antwort2
Wenn Sie Theorie mögen, hier ist David Kastrups \ifnot
Makro:
\def\ifnot#1{#1\else\expandafter\expandafter\fi\iffalse\iftrue\fi}
Dies kann verwendet werden als
\loop ... \ifnot{\ifeof\stream} ... \repeat
SehenVictor Eijkhout, TUGBoat.