“控制空间”的目的

“控制空间”的目的

我在 Google 上找不到有关控制空间 ( \) 的足够信息。它的用途是什么?它应该在哪里使用?

答案1

以下内容直接取自 Knuth 的电子书第三章:控制 TeX,第 8 页):

如果空格位于控制字(全字母控制序列)之后,TeX 会忽略该空格;也就是说,它不被视为正在排版的稿件中的“真实”空格。但是如果空格位于控制符号之后,它就是真正的空格。

现在问题来了,如果你真的控制字后面应该出现一个空格吗?我们稍后会看到 TeX 将两个或多个连续的空格视为一个空格,所以答案是不是答案是“输入两个空格”。正确答案是输入“控制空格”,即

\␣

(转义符后跟一个空格);TeX 会将其视为不能忽略的空格。请注意,控制空格是第二种控制序列,即控制符号,因为转义符后有一个非字母 (␣)。两个连续的空格被认为等同于一个空格,因此紧随其后的空格\␣将被忽略。但如果您想在手稿中输入三个连续的空格,您可以输入\␣\␣\␣。顺便说一句,打字员经常被教导在句子末尾放两个空格;但我们稍后会看到,TeX 有自己的方法来在这种情况下产生额外的空格。因此,您不必保持一致的空格数量。

例如,比较

\TeX\ ignores spaces after control words.

\TeX ignores spaces after control words.

在此处输入图片描述

答案2

~除了在控制序列之后或确保非标点符号句号后没有扩展空格(但在这些情况下,平局会更好)之外,它没有太多用途。

平局的定义如下:在 Plain TeX 中

\def~{\penalty\@M \ } % tie

而在 LaTeX 中我们看到

\def~{\nobreakspace{}}
\DeclareRobustCommand{\nobreakspace}{\leavevmode\nobreak\ }

顺便说一句,Plain 和 LaTeX 中的平局是有区别的:如果你~在 Plain TeX 文档中的空行后面有一个,那么惩罚将以垂直模式插入(实际上,这并不是什么大问题)。

Knuth 有时喜欢添加“非常扩展”的空间。这是第 15 章的结尾,关于分页(摘自texbook.tex):

[...] After the |\output| routine is finished, ^{held-over
insertion} items are placed first on the list of recent contributions, followed
by the vertical list constructed by |\output|, followed by the recent
contributions beginning with the page break. \ (Deep breath.) \ You got that?

这是两个单词之间的空格加上句末句号的额外空格。这种双倍空格可用于标题中。

如果\frenchspacing有效,那么\space将是等效的,因为\space扩展到空间标记,并且空间因素不会发挥作用产生差异。然而,可能比和更清楚\space,它们是不是下等效\nonfrenchspacing

在上面的 Knuth 示例中,

break. \space (Deep Breath.)

会产生更宽的空间,因为两个空间标记都会因为空间因子而扩大,之后.为 3000。


一个小问题:如果你在行尾有 ,空格将被删除并替换为\endlinechar。事实上,Plain 和 LaTeX 都定义了\^^M

\def\^^M{\ } % control <return> = control <space>

输入如下

\endlinechar=`S
abc\
def\bye%

会产生

在此处输入图片描述

如果我发现自己需要在行末加上,我通常会添加%,事实上,

\endlinechar=`S
abc\ %
def\bye%

会产生一个空格。

相关内容