在里面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,并避免在此框之前添加粘连(以及分页符的可能性)。