LuaTeX beta-0.79.1 是否正确地认为以下内容是有效输入:
\iftrue
\bye
答案1
宏\outer
仅在条件的跳过分支中(以及宏的参数中,但与此无关)才是非法的。
当 TeX 处理以下形式的条件时会发生什么
<if><test><true text>\else<false text>\fi
其中<if>
代表原始条件, 是<test>
其决定遵循真分支还是假分支所需的标记列表:
测试结果正确:
<if><test>
从输入流中删除测试结果为假:删除
<if><test>
所有匹配到的标记(包括匹配项)\else
(跟踪条件<true text>
)
在两种情况下,条件级别都会增加一级,当\else
或\fi
将被扩大时,条件级别就会降低。
就你的情况而言
\iftrue\bye
删除\iftrue
并增加条件级别;<test>
对于 , 为空\iftrue
。然后\bye
展开并导致作业结束。由于此时条件级别大于 0,因此会显示警告
(\end occurred when \iftrue was incomplete)
已发出。
这是原始 TeX 中的标准行为:它不会“一路”到达匹配的\fi
。\else
条件为真时,剩余的 会跳过匹配之前的标记\fi
并降低级别。如果未\else
找到 ,则扩展 会\fi
降低级别,输入流中不会留下任何内容。
被跳过的分支中的宏\outer
将导致“条件不完整”的错误,因为 TeX 认为发生了错误。但未跳过的标记会正常扩展或执行。