
ファイルから行をタイプセットしようとしています:
\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