\ifeofの否定

\ifeofの否定

ファイルから行をタイプセットしようとしています:

\openin0=MyFile

\loop
  \read0to\linein
  \linein
  \ifeof0              % Fails here
\repeat

明らかに、私はテストしたいない\ifeof ですが、TeXBook の第 20 章にブール否定演算子が見つかりません。これをプレーン TeX で実行できますか?

答え1

プレーン TeX が何を意味するかによって多少異なります。

cmhughesがコメントで述べたように、e-TeXunlessコマンドを使用して式を否定するか、LaTeX定義をコピーして\loop次のようにすることができます。

\openin0=MyFile

\loop
  \read0to\linein
  \linein
  \ifeof0              % Fails here
  \else
\repeat

拡張されていない TeX で作業できるようにします。

平野\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 では次の定義が使用されるため、\else動作します。

\def\loop#1\repeat{\def\iterate{#1\relax\expandafter\iterate\fi}%
  \iterate \let\iterate\relax}
\let\repeat\fi

答え2

理論に興味があるなら、David Kastrup の\ifnotマクロをご覧ください。

\def\ifnot#1{#1\else\expandafter\expandafter\fi\iffalse\iftrue\fi}

これは次のように使用できます

\loop ... \ifnot{\ifeof\stream} ... \repeat

見るVictor Eijkhout、タグボート

関連情報