\iffalse ... \fi 是如何处理?

\iffalse ... \fi 是如何处理?

我们来看一个例子:

Some text.
\iffalse
Nothing to print.
\fi
Further text.

我希望这是这样处理的

Some text.

Further text.

因为系统只是删除了\iffalse和之间的部分\fi。但是当你测试它时,在生成的 PDF 中你读到的Some text. Further text.是同一行。所以这表明文本的处理方式如下

Some text.
Further text.

有人可以解释一下为什么我们丢失了一个换行符吗?

答案1

宏、基元等后面的空格(但不是空行,因为它们是\par)始终会被忽略(它们分隔宏名称)。行尾就是一个空格。因此,您不仅要删除从 到\iffalse末尾的所有内容\fi,还要删除 之后的空格(行尾),然后\fi您将得到:

Some text.
Further text.

换句话说:因为行尾只是一个空格,所以你的原始代码与

Some text. \iffalse Nothing to print. \fi Further text.

并扩展为:

Some text. Further text.

注意:“ ”后面的空格text.不是后面的空格\fi,而是前面的空格\iffalse

注意:在以前版本的答案中,我写的是“与 相同”而不是“扩展为”,但这并不完全正确,因为 TeX 确实会扫描并解析 ,\iffalse因此从 TeX 的角度来看,带有 的行\iffalse永远不会是空行。此外,还会发生 的特殊处理\if…:TeX 读取以下内容而不扩展,直到找到\else\fi。如果在读取过程中发现另一个 TeX \if…(例如 、\iftrue\iffalse\ifcase\ifx\ifcsname\if,则还会读取它直到相应的\fi

相关内容