在阅读 TeXBook 的附录 B 时,我注意到 Knuth 始终在 Plain TeX 中定义宏,其样式开关的形式$\displaystyle{#1}$
与简单形式相反$\displaystyle#1$
(例如,在 mathpalette 中、在用于 mathpalette 的宏中、在数学对齐宏中等等)。我看不出这两者之间有什么区别,但一致使用较长的形式让我意识到存在差异,特别是因为对于非样式开关控制序列,Knuth 通常只做\cseq#1
(where\cseq
不带任何参数)。这两种形式有什么区别吗?
编辑:@Werner 要求提供一些示例。我仅根据 TeXBook 的第 360 和 362 页收集了以下示例:
- 在每一个分支中
\mathchoice
:\mathpalette
\def\mathpalette#1#2{\mathchoice{#1\displaystyle{#2}}% {#1\textstyle{#2}}{#1\scriptstyle{#2}}{#1\scriptscriptstyle{#2}}}
- 含
\scriptscriptstyle
内部\root
:\def\root#1\of{\setbox\rootbox \hbox{$\m@th\scriptscriptstyle{#1}$}\mathpalette\r@@t}
- 在 中
\mathph@nt
,其旨在与 一起使用\mathpalette
,因此#1
被样式开关取代:\def\mathph@nt#1#2{\setbox\z@\hbox{$\m@th#1{#2}$}\finph@nt}
\mathsm@sh
类似于\mathph@nt
。- 在模板行中出现两次
\ialign
(\eqalign
第二个实例更有趣一些):\def\eqalign#1{\null\,\vcenter{\openup\jot\m@th \ialign{\strut\hfil$\displaystyle{##}$&$\displaystyle{{}##}$\hfil \crcr#1\crcr}}\,}
\eqalignno
并且\leqalignno
类似于\eqalign
。\displaylines
是几乎一个反例(但不完全是由于以下内容\hfil
),所以也许它有助于揭示一些事情:\def\displaylines#1{\displ@y \tabskip\z@skip \halign{\hbox to\displaywidth{$\@lign\hfil\displaystyle##\hfil$}\crcr #1\crcr}}
答案1
$\displaystyle 1\over2$
与之比较$\displaystyle{1\over2}$
。
使用的宏\displaystyle{#1}
允许使用\macro{1\over2}
,并且这将正确打印。
答案2
请注意,它\displaystyle
从不接受参数,因此区别在于${...}$
,$...$
\over
正如 wipet 所说,但它也{...}
像一个盒子一样,它会将所有白色空间冻结在其自然大小并防止换行。
Compare $\displaystyle 1 + 2$ with $\displaystyle{1 + 2}$ \break here
\bye
\displaylines
对您在问题中添加的示例进行评论,它没有在那里支撑,可能允许胶水拉伸(如下面的 l=l 和 r=r 行所示),但没有支撑会对\over
所示产生不良影响,除非您明确添加括号进行纠正。
wipet:
Compare $\displaystyle 1\over2$ with $\displaystyle{1\over2}$
\bigskip
displaylines
$$\displaylines{
a=b\cr
x=y\cr
l=l\hfill\cr
\hfill r=r\cr
1 \over 2 \cr
{1 \over 2}\cr
}
$$
\bye