尝试排版文件中的行:
\openin0=MyFile
\loop
\read0to\linein
\linein
\ifeof0 % Fails here
\repeat
显然,我想测试不是\ifeof,但我在 TeXBook 第 20 章中没有看到布尔否定运算符。我可以在纯 TeX 中执行此操作吗?
答案1
这有点取决于你所说的纯 TeX 是什么意思。
正如 cmhughes 在评论中提到的,您可以使用 e-TeXunless
命令来否定表达式,或者您可以复制\loop
允许您执行的 LaTeX 定义
\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