不完整的 \iftrue 是有效输入吗?

不完整的 \iftrue 是有效输入吗?

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 认为发生了错误。但未跳过的标记会正常扩展或执行。

相关内容