空组 {} 有什么作用?

空组 {} 有什么作用?

为了在无参数命令后留出语法空间,人们需要用空组({})来分隔命令标记,如下所示:\somecommand{} more LaTeX material

然而空组并非没有意义的:在数学模式下,\({} + a\)其排版方式与不同\( + a\)

此外,\(\somecommand{} + a\)和也有有趣的不同。(在此处\(\somecommand + a\)插入例如\empty或。)(说明:在数学模式下,空格并不重要,因此由于占用了以下空间,我本以为这两个会产生相同的结果。给出了这两个不同的原因的解释\allowbreak\somecommand\(\somecommand + a\)\somecommand这里

这让我想知道使用空组时还需要注意什么。空组有什么作用以及在哪里可以使用空组?

答案1

我的理解是,{}在打印中没有效果(只要它不跟在带参数的宏后面)。由于不是{字母,命令名称的收集会停止(TeX 的一个怪癖是,如果收集在空格处停止,则该空格会被吞噬)。在数学模式下,如果你写$+ a$,这是一个加分项符号,而在$a + b$其中二进制加法符号(写法相同,含义不同,间距不同)。写法${} + a$表示在 中添加任何内容(空组)$a$,即添加。

概括:

  • 在文本中,用来\somecommand{}阻止 (La)TeX 占用以下空间,或\somecommand{}moretext及时停止命令名称(但也许{\somecommand}(如果这是安全的,意味着\somecommand不执行分配)在两种情况下都更清楚)
  • 在数学中,将其用作表达式中的“这里什么都没有,但假装有”的术语/因子,以强制解释/间距作为二元运算符。

答案2

这是对@vonbrand 回答线程中 OP 问题的回复。

事实上,单词中间有一个空组(但不是仅是一个命令本身)可防止字距调整(字母对之间的特殊间距)和连字。对连字的影响最为明显。

\def\f{f}
ffi    % => ligature of ffi
f\f i  % => ligature of ffi
f\f{}i % => ligature of ff, then i.
\bye

在这里,从排版角度来说,在无参数宏后面留一个空格更好\f。诚然,这不是一个实际的例子,因为没有一个头脑正常的人会定义这样的宏。

一个更实际的例子,也许是对于那些定义单词简写的宏的人(不要这样做),例如\c对于constrain,然后添加s、 或,或任何缺少的复数、动词等字母。计算机现代字体(TeX 的默认字体)在和t之间有一点字距(空格)。在前两种情况下,TeX 的肠胃将和视为一个单词,并根据需要应用字距调整。在最后一种情况下, 中的空组使 TeX 的肠胃看到两个单词:和,因此和之间没有应用任何字距调整。ntconstraints\c ts\c{}tsconstraintsnt

\def\c{constrain}
\def\test#1#2{\setbox0\hbox{#2}\immediate\write16{#1: \the\wd0}}
\test{No shorthand}{This constrains $a$ to obey some constraints.}
\test{No braces}{This \c s $a$ to obey some \c ts.}
\test{Braces}{This \c{}s $a$ to obey some \c{}ts.}
\bye

这可能不适用于 LuaTeX。

答案3

要添加到现有信息:在数学模式下,{}也用于影响水平下标/上标定位巧妙地影响垂直下标/上标的定位

相关内容