![什么时候空格才算数?](https://linux22.com/image/301136/%E4%BB%80%E4%B9%88%E6%97%B6%E5%80%99%E7%A9%BA%E6%A0%BC%E6%89%8D%E7%AE%97%E6%95%B0%EF%BC%9F.png)
我想这个问题太笼统了,但为什么
\underbar{word}
给出不同的答案
\underbar{ word}
然后额外的空白不计算在内
\underbar{ word}
答案1
关于空格的规则非常简单(或者可能不太简单)。
当 TeX 读取一行输入时,它会处于以下三种状态之一状态: 状态否(新行),状态年代(跳过空白)或说明米(中间线)。
很明显,在一行的开头它处于状态否;在此状态下,任何空格(技术上是字符代码为 10 的字符,通常是空格和 TAB)都将被忽略。此状态停止并变为状态米找到非空白字符。
如果下一个字符是行尾字符(更准确地说,是类别代码为 5 的字符),\par
则会生成一个标记,并且 TeX 会重新进入状态否对于下一行,丢弃可能跟在该字符后面的所有内容。
当 TeX 处于状态米它会为找到的每个字符生成字符标记,除非
- 下一个字符是空格,或者
- 下一个字符是行尾字符,或者
- 下一个字符是转义字符(反斜杠)。
如果情况 1,TeX 会生成一个空格标记并进入状态年代。如果情况 2,TeX 会插入一个空格标记,丢弃该行剩余的内容并进入状态否读取下一行。在案例 3 中,TeX 继续形成符号标记,并且有两个子案例:
- 下一个字符是字母(专业上,是类别代码为 11 的字符)
- 下一个字符是任何其他字符
在子情况 4 中,TeX 通过累积字符直到它们变成字母来形成符号标记的名称,并且在找到非字母时,它进入状态年代在子情况 5 中,符号标记的名称是单个非字母(例如,\,
或的情况\\
),并保持状态米,除非那个非字母是空格,在这种情况下它进入状态年代。
当 TeX 处于状态年代,空格字符将被忽略,直到找到任何非空格字符,从而触发状态米再次。
上述讨论并不尽可能具有普遍性,但对于类别代码的正常状态来说已经足够。
让我们检查一下你的例子。首先
\underbar{word}
触发器\
状态米而且,由于u
是字母,我们处于子情况 4,因此\underbar
生成符号标记,因为{
不是字母。所以我们有以下标记
\underbar • { • w • o • r • d • }
(此处空格不重要,仅•
用于分隔标记)。
在第二个例子中
\underbar{ word}
我们处于相同的情况,但后面的空格{
会生成一个空格标记,并使 TeX 进入状态年代,变成状态米由 组成w
。因此形成的标记是
\underbar • { • <SP> • w • o • r • d • }
(其中<SP>
表示空格标记)。第三个例子
\underbar{ word}
给出相同的结果,因为在看到 之后的第一个空格字符时{
,TeX 进入状态年代生成空间令牌之后。
与第一个例子相同的情况
\underbar {word}
因为空格会停止控制序列名称的形成,并且根据规则,它进入状态年代 没有生成一个空间标记。唯一可疑的情况是
\⍽⍽
现在⍽
表示空格字符(只是为了清楚说明有两个空格)。但根据子案例 5 中解释的规则,这会生成 token \⍽
,TeX 进入状态年代。因此输入\⍽
、\⍽⍽
或\⍽⍽⍽
是一样的。
答案2
摘自“LaTeX 2e 的简短介绍”:
“空白”字符(例如空格或制表符)在 LaTeX 中被统一视为“空格”。多个连续的空白字符被视为一个“空格”。行首的空白通常会被忽略,单个换行符将被视为“空白”。两行文本之间的空行定义段落的结束。多个空行被视为与一个空行相同。
基本上,多个空格被视为一个空格。