\eqalign 中的 {} 有什么作用?

\eqalign 中的 {} 有什么作用?
$$\eqalign{&{}+7=b\cr}$$

$$\eqalign{&+7=b\cr}$$

是一样的;但是

$$\eqalign{{}+7=b\cr}$$

$$\eqalign{+7=b\cr}$$

彼此不同(第一个在+和之间有更多空间7)。在所有情况下,“ +”都显示为\mathbin。为什么当使用 和不使用 时,\showlists间距会有所不同?{}&

注意:在\displaylinesTeXbook 第 196 页的示例中,提到了{}用于进行+二元运算。对于 来说,这可能是正确的\displaylines,但对于 来说,则不正确\eqalign,如上所示。

答案1

\tracingonline1
\showboxdepth\maxdimen

1
$$\eqalign{{}+7=b\cr}\showlists$$


2
$$\eqalign{+7=b\cr}\showlists$$

\bye

a{}只会使 为空\mathord,并且\mathbinfrom+会被视为 a ,\mathord除非它不在列表的开头或结尾。

在第一种情况下,你会看到

.....\hbox(0.0+0.0)x0.0
.....\glue(\medmuskip) 2.22217 plus 1.11108 minus 2.22217
.....\tenrm +
.....\glue(\medmuskip) 2.22217 plus 1.11108 minus 2.22217
.....\tenrm 7

这是一个空的 mathord 原子,medmuskip 在 + 的两侧,因为它是一个 mathbin,那么 7

在第二种情况下,你会看到

.....\tenrm +
.....\tenrm 7

没有前导空字符(显示为\hbox),则 + 和 7 没有间距,因为\mathbin的性质+被抑制。

您的第一个示例,在之后没有效果,因为&宏已经在第二列添加了:{}\eqalign{}

\def\eqalign#1{\null\,\vcenter{\openup\jot\m@th
  \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil
      \crcr#1\crcr}}\,}

因此第二列的模板是{}##并且已经以一个空的 mathord 开始,因此您可以比较哪些{}+7{}{}+7相同的输出。

相关内容