我们来看一个例子:
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
。