Negar \ifeof

Negar \ifeof

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 unlesscomando e-TeX para negar la expresión o puede copiar la definición de LaTeX \loopque 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 \loopes

\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 \elsefunciona.

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

VerVictor Eijkhout, remolcador.

información relacionada