![为什么通过{}改变间距?](https://linux22.com/image/264927/%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%9A%E8%BF%87%7B%7D%E6%94%B9%E5%8F%98%E9%97%B4%E8%B7%9D%EF%BC%9F.png)
上次我用的时候蒂克兹我对一些节点的间距感到有点惊讶,
\documentclass{standalone}
\begin{document}
$-\alpha \qquad
{}-\alpha \qquad
\underbrace{\alpha}\cdot \omega \qquad
\underbrace{\alpha} {} \cdot \omega$
\end{document}
这让我
其中第二个解决方案是所需的解决方案。David 在聊天中提到,这{}
会变成一个二进制表达式,从而为我提供中缀间距。但我仍然对以下内容感到困惑,为什么
{\underbrace{\alpha}}\cdot \omega
给出的结果与
\underbrace{\alpha} {} \cdot \omega
但
\underbrace{\alpha} \cdot \omega
给出了不同的间距。
答案1
egreg 抢在我之前找到了答案,但我要提的一件事是调试这类东西的辅助工具。如果你将 MWE 修改为
\documentclass{standalone}
\begin{document}
\showboxdepth1
\showboxbreadth100
\tracingonline1
$-\alpha \qquad
-{} \alpha \qquad
\underbrace{\alpha}\cdot \omega \qquad
\underbrace{\alpha} {} \cdot \omega
\showlists$
\end{document}
您可以在日志中看到
### math mode entered at line 6
\mathbin
.\fam2 ^^@
\mathord
.\fam1
\glue 20.00003
\mathbin
.\fam2 ^^@
\mathord
.{}
\mathord
.\fam1
\glue 20.00003
\mathop\limits
.\vbox(4.30554+7.19997)x18.00018 []
\mathbin
.\fam2 ^^A
\mathord
.\fam1 !
\glue 20.00003
\mathop\limits
.\vbox(4.30554+7.19997)x18.00018 []
\mathord
.{}
\mathbin
.\fam2 ^^A
\mathord
.\fam1 !
### restricted horizontal mode entered at line 2
它会告诉您mathbin
mathop
数学列表中每个原子的等状态。
答案2
数学模式中的A{}
插入一个(空的)普通原子,它可以影响间距。让我们看看它是如何影响的。
$ - \alpha {} - \alpha \underbrace{\alpha} \cdot
\omega \underbrace{\alpha} {} \cdot \omega $
请注意,\quad
空格不会影响自动数学间距,因此我们可以忽略它们。这将成为以下原子序列:
Bin Ord Ord Bin Ord Op Bin Ord Op Ord Bin Ord
并且两个“Bin”原子被转换为“Ord”,因为它们不在两个可以操作的原子之间。实际上,\underbrace
宏创建了一个 Op 原子:
\def\underbrace#1{\mathop{\vtop{\m@th\ialign{##\crcr
$\hfil\displaystyle{#1}\hfil$\crcr
\noalign{\kern3\p@\nointerlineskip}%
\upbracefill\crcr\noalign{\kern3\p@}}}}\limits}
因此间距是由规则规定的:
{二进制} 0 顺序 0 顺序 2 二进制 2 顺序 1 操作 1 {二进制} 0 顺序 1 操作 1 顺序 2 二进制 2 顺序
其中{Bin}表示一个Bin原子转化为Ord,0表示无空间,1表示稀疏空间,2表示中等空间。
让我们看看你的最后的例子:
${\underbrace{\alpha}}\cdot \omega$
这是“Ord Bin Ord”,因为 Op 原子周围的括号将其转换为 Ord 原子。订单 2 箱 2 订单
$\underbrace{\alpha} {} \cdot \omega$
这是“Op Ord Bin Ord”,因此我们在 Op 之后得到一个细空格,在 Ord 之后得到一个中等空格,在 Bin 之后得到一个中等空格:操作 1 订单 2 仓位 2 订单”
$\underbrace{\alpha} \cdot \omega$
这有点难。我们有“Op Bin Ord”,但为了留出空间,Bin 变成了 Ord,因为它与 相似$\log+2$
。因此,我们在下括号字母后得到了一个细小的空格,而\cdot
和之间没有空格\omega
。Op 1 {Bin} 0 Ord