LaTeX 指南 (4e) 指出,这\␣
是“在没有参数的命令之后或非句子结尾的句号之后的单词之间的正常空格”(第 467 页)。
对于前一种情况(\somecommand\ nextword
),有{}
(\somecommand{} nextword
),对于后一种情况,有\@
(用作.\@
,不是\@.
!)。那么为什么要使用\␣
呢?\␣
在 LaTeX 中可能不需要?什么时候才是真正\␣
最好的宏(比替代方案{}
和更好\@
)?
注意:~
用于创建不能换行的单词间空间,例如Dr.~Smith
;还有许多其他用例(figure~\ref{...}
和诸如此类),它们已在其他地方列举,但精确的列表在这里并不重要(请参阅下面的链接)。
有关的:
- (旨在)详尽的用例列表
\@
: - (旨在)详尽的用例列表
~
:- “我什么时候应该使用不间断空格?”的答案和
- “在数学表达式前使用不可中断空格的正确方法是什么?”的答案
- 请注意,这些都是根据 Knuth 的个人品味而定的,在 TeX 社区之外并不一定有人知道或遵循!他的建议背后有很好的判断力,但不清楚不遵循这些建议是否会造成很大问题;人们还需要平衡这和过多的单词间距。例如:
- 《芝加哥格式手册》的在线问答写道在“稿件准备”部分的某处:“CMOS 并不禁止在行首使用数字,但如果在特定上下文中该数字看起来令人困惑,请务必将其标记为需要提及。”
答案1
以下两种结构,
This is the 1.{} sentence.
和
This is the 1.\ sentence.
有不同的结果。第一种情况下,您会得到一个句子空间,而第二种情况下,您会得到一个单词之间的空间。为什么?第一种情况下{}
,开始和结束一个组,但最后,效果为零:水平框中的最后一项是 a .
,spacefactor 仍然具有句子空间值(默认为 3000),因此后面的空格附加了句子 spacefactor 值。在第二种情况下,\␣
原始 TeX 命令直接将粘连附加到水平框,“使用与 space 因子为 1000 时空格标记插入的相同量”(TeXbook 第 285 页)。
为了将示例扩展到\␣
无{}
参数命令后的用法,想象一个宏可能会扩展为以 结尾的内容.
。
\def\macro{1.}
那么,和上面同样的原因,下面两段代码的效果也是不一样的。
This is the \macro{} sentence.
This is the \macro\ sentence.
在这种情况下,我会使用第二种构造,因为假设的结果\macro
是一个非句子短语,比如一个单词。然而,如果\macro
可能扩展为句子,那么使用第一种构造会更好,因为宏的结束标点符号(如果有)将控制其后空格的宽度。
编辑:正如 Bruno Le Floch 在评论中指出的那样,编写良好的宏应该定义为\def\macro{1.\@}
,“以避免在宏中隐藏空间因素的变化”。因此,在理想情况下,\macro{}
和之间的差异\macro\␣
会消失。
关于\␣
与\@␣
,我不知道它们之间有什么区别(除非出现某些病态情况,例如某些宏被撕裂\@
或有人更改了依赖于的␣
值)。因此,我同意使用其中一种或另一种确实是一个风格问题的评论。(顺便说一句,我觉得有点好笑的是,表面上看起来更复杂,但实际上是一个原始的 TeX 命令。)\@m
\@
\␣
答案2
Sašo Živanović 的回答非常好,因此我只想补充几点意见。
你说得真有趣
我之所以觉得
{}
比清洁器更清洁\␣
,是因为后者看起来像一个黑客工具
如果我仔细想想的话,我通常会反过来想。{}
是一对复杂的命令,用于打开本地组并再次关闭它,对空白的影响是解析规则的副作用。相比之下, \␣
是一个专门用于添加空格的 TeX 基元。
它在其他地方也很有用,\␣
通常不是数学模式下最合适的空间,但它确实有效,不像{}
它会产生一个空的数学原子,它可能会影响间距,但方式不同,或者\@
会产生错误。
\␣
作为一个原始人生存下来,\typeout
或者说\edef
比\@␣
\documentclass{article}
\begin{document}
%Document outputs
$a\ b$ %"a b"
$a{} b$ %"ab"
$a\@ b$ %outputs error
%.log file outputs
\typeout{a\ b} %"a\ b"
\typeout{a\@ b} %"a\spacefactor \@m {} b"
\typeout{a{} b} %"a{} b"
\end{document}