
Tentando compor linhas de um arquivo:
\openin0=MyFile
\loop
\read0to\linein
\linein
\ifeof0 % Fails here
\repeat
Claramente, quero testarnão\ifeof, mas não vejo um operador de negação booleano no Capítulo 20 do TeXBook. Posso fazer isso em TeX simples?
Responder1
Depende um pouco do que você entende por TeX simples.
Como cmhughes mencionado nos comentários, você pode usar o unless
comando e-TeX para negar a expressão ou copiar a definição do LaTeX \loop
que permitiria fazer isso
\openin0=MyFile
\loop
\read0to\linein
\linein
\ifeof0 % Fails here
\else
\repeat
para que você possa trabalhar com um TeX não estendido.
A planície \loop
é
\def\loop#1\repeat{\def\body{#1}\iterate}
\def\iterate{\body \let\next\iterate \else\let\next\relax\fi \next}
\let\repeat=\fi
LaTeX usa a seguinte definição, então \else
funciona.
\def\loop#1\repeat{\def\iterate{#1\relax\expandafter\iterate\fi}%
\iterate \let\iterate\relax}
\let\repeat\fi
Responder2
Se você gosta de teoria, aqui está \ifnot
a macro de David Kastrup:
\def\ifnot#1{#1\else\expandafter\expandafter\fi\iffalse\iftrue\fi}
Isto pode ser usado como
\loop ... \ifnot{\ifeof\stream} ... \repeat