
嘗試排版文件中的行:
\openin0=MyFile
\loop
\read0to\linein
\linein
\ifeof0 % Fails here
\repeat
顯然,我想測試不是\ifeof,但我在 TeXBook 第 20 章中沒有看到布林否定運算子。我可以用純 TeX 來做這個嗎?
答案1
這在某種程度上取決於你所說的 plain 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