
Intentando componer líneas desde un archivo:
\openin0=MyFile
\loop
\read0to\linein
\linein
\ifeof0 % Fails here
\repeat
Claramente, quiero probarno\ifeof, pero no veo un operador de negación booleano en el capítulo 20 del TeXBook. ¿Puedo hacer esto en TeX simple?
Respuesta1
Depende un poco de lo que quieras decir con TeX simple.
Como cmhughes acaba de mencionar en los comentarios, puede usar el unless
comando e-TeX para negar la expresión o puede copiar la definición de LaTeX \loop
que le permitiría hacer
\openin0=MyFile
\loop
\read0to\linein
\linein
\ifeof0 % Fails here
\else
\repeat
para que puedas trabajar con un TeX no extendido.
la llanura \loop
es
\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 la siguiente definición y \else
funciona.
\def\loop#1\repeat{\def\iterate{#1\relax\expandafter\iterate\fi}%
\iterate \let\iterate\relax}
\let\repeat\fi
Respuesta2
Si te gusta la teoría, aquí tienes \ifnot
la macro de David Kastrup:
\def\ifnot#1{#1\else\expandafter\expandafter\fi\iffalse\iftrue\fi}
Esto se puede utilizar como
\loop ... \ifnot{\ifeof\stream} ... \repeat