$\displaystyle{#1}$与$\displaystyle#1$对比

$\displaystyle{#1}$与$\displaystyle#1$对比

在阅读 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

相关内容