$$...$$ 是否会在纯 TeX 中产生错误的间距?

$$...$$ 是否会在纯 TeX 中产生错误的间距?

在里面ConTeXt 常见问题解答,可以读到

$$...$$ 是否适用于显示数学,如 (La)TeX?不可以;等式上方和下方的间距会出错,其他方面可能也会出错。

此外,在 LaTeX 中,一个好的做法是用 \[...\] 替换 $$...$$ 语法来源

因此,我想知道双美元符号语法是否在纯 TeX 中也会产生不令人满意的输出。如果是这样,我可以看到一个例子吗?既然 Don Knuth 对排版如此严格,为什么他不修复它呢?

答案1

纯 TeX 中的 间距$$与 LaTeX 中的相同,并且只有当您在显示前使用空白行进行不正确的输入时,才会出错。在 LaTeX 中,在前面留一个空白行也是错误的,\[但它会尝试捕捉这种情况。

一个简单的 TeX 示例

\tracingonline2
\tracingoutput2
\showboxdepth2
\showboxbreadth100

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
$$x=1$$

\bigskip

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

$$x=2$$



\bye

制作

在此处输入图片描述

使用默认设置,两个 aaaaa 之间的间距较小\parskip\abovedisplayskip大小相似,\baselineskip并且以下显示在此图像中可能看起来相似(它们实际上是相同的),但第二个是完全不正确的。

首场演出的日志

..\hbox(4.30554+0.0)x469.75499, glue set 119.75398fil []
..\penalty 10000
..\glue(\abovedisplayskip) 12.0 plus 3.0 minus 9.0
..\glue(\baselineskip) 5.55556
..\hbox(6.44444+0.0)x24.04851, shifted 222.85324, display []

这是一行文本(aaa..),没有中断惩罚,然后因为该行很长并且与公式重叠,\abovedisplayskip所以插入基线跳过到公式 x=1。

第二个方程间距的构造完全不同:

..\hbox(4.30554+0.0)x469.75499, glue set 119.75398fil []
..\glue(\parskip) 0.0 plus 1.0
..\glue(\baselineskip) 12.0
..\hbox(0.0+0.0)x469.75499, glue set 449.75499fil []
..\penalty 10000
..\glue(\abovedisplayshortskip) 0.0 plus 3.0
..\glue(\baselineskip) 5.55556
..\hbox(6.44444+0.0)x24.04851, shifted 222.85324, display []

那是,

文本行 aaa 间距
\parskip(此处为 0pt)和
\baselineskip间距到虚假的不可见段落
由缩进框和 parfillskip 组成的单行段落并且没有文本
nobreak 惩罚
\abovedisplayshortskip因为空段落不与公式重叠
\baselineskip公式
公式文本

除了第二种情况下的可见空间由\abovedisplaysmallskip和组成之外,\baselineskip 值得注意的是,在 aaa 的第二行之后没有 nobreak 惩罚,那里可以发生分页符,在这种情况下,空段落行将不会在分页符处被丢弃,因为它不是垂直空间,所以等式不会从页面顶部开始,而是从太低的一行开始。

如果使用非零设置,\parskip这将影响第二种形式。图像中的空间仅与\abovedisplayskip纯 TeX 中的\abovedisplaysmallskip+\baselineskip 相同(忽略拉伸和收缩)。

LaTeX\[尝试捕捉第二种情况

\DeclareRobustCommand\[{%
   \relax\ifmmode
      \@badmath
   \else
      \ifvmode
         \nointerlineskip
         \makebox[.6\linewidth]{}%
      \fi
      $$%%$$ BRACE MATCH HACK
   \fi
}%

因此,它插入一个超过线宽一半的框以避免使用 abovedisplayshortskip,并避免在此框之前添加粘连(以及分页符的可能性)。

相关内容