在显示中,分数的分母设置为“狭窄” \textstyle
,可以\cramped[\textstyle]{...}
从mathtools
包中模拟,但有时模拟很完美,有时却将分母往下移,这是为什么?
\documentclass{article}
\usepackage{color}
\usepackage{mathtools}
\newcommand\drawbaseline[1]{%
\ifvmode\leavevmode\fi
\rlap{{\color{red}\vrule width #1 height 0.1pt }}%
}
\begin{document}
The denominators line up in this example:
\[
\frac{k^{2^n}}{\drawbaseline{45pt}k^{2^n}}\quad
\frac{k^{2^n}}{\cramped[\textstyle]{k^{2^n}}}
\]
The denominators don't line up in this example:
\[
\frac{\int_a^b k^2 g(x) f(x)\,dx}%
{\drawbaseline{145pt}\!% <- cancels \, between \hbox{} and \mathop
\int_a^b k^2 f(x)\,dx}\quad
\frac{\int_a^b k^2 g(x) f(x)\,dx}%
{\cramped[\textstyle]{\int_a^b k^2 f(x)\,dx}}
\]
Why?
\end{document}
添加了 tex-core 标签,因为我怀疑这与原始有关\over
。
添加了说明
经过@wipet的回答和我的深入研究,问题变得更加清晰tex.web
和mathtools.dtx
。在上面我的 MWE 的第二个显示中,后者分母的高度恰好为1.25\fontdimen8\textfont3
,这来自于\radical0 {...}
(这反过来又\cramped
用于模仿拥挤的风格)。
现在,\cramped
确实会尝试纠正这个过高的高度(并且通常会成功),但任何后续的拆箱都会破坏这种纠正,因为高度信息将丢失。这种“拆箱”行为被mathtools
称为
最不幸的 TeX “特性”。(错误的重新装箱程序。)
我最初的问题是“有时模拟是完美的,而有时它会将分母向下移动”,@wipet 只回答了部分问题。为什么 TeX 的rebox
子程序似乎表现不同?
由于 @wipet 也提出了一个解决方案(即用 替换\box\z@
)\hbox{\box\z@}
,我想知道这是否是最好的解决方案:请注意mathtools
,现有代码似乎表明,这是在和{}\box\z@
中使用的构造。\mathXlap
\crampedXlap
答案1
这似乎是 mathtools.sty 中的一个错误。在经典 TeX 中,无法将狭窄的样式指定为“原生”,但必须通过\radical
带有空根符号的原始样式来模拟。但构造的框是
\hbox{empty root symbol\vbox{invisible rule (with zero height)
\kern normalrulewidth+something
\hbox{$given math material$}}}
因此,最终的框高出 normalrulewidth+something。normalrulewith+something 的具体含义在 TeXbook 附录 G 步骤 11 中有说明。
mathtools.sty 尝试通过其代码(版本 2020/03/24 v1.24)的第 1449 和 1450 行来纠正此框高度:
\advance\dimen@-\ht\z@ \ht\z@=-\dimen@
\box\z@
问题是结果\box\z@
稍后会被重新装箱,因此此更正会丢失。您可以更正此问题,方法是在工作目录中创建自己的副本mathtools.sty
并将行 1449 和 1450 更改为:
\advance\dimen@-\ht\z@ \ht\z@=-\dimen@
\hbox{\box\z@}%
您的第一个示例$k^{2^n}$
是通过稍微不同的过程创建的,并且激进+校正的框稍后不会被重新装箱,因此结果是正确的。
问题“为什么有时会重新装箱“在 TeXook 的附录 G,步骤 15a 中进行了回答:如果 w(分子)<w(分母),则将分子重新装箱为 w(分母),如果 w(分子)>w(分母),则将分母重新装箱为 w(分子)。我补充了 15a 中缺少的注释:“在重新装箱过程中,箱子两侧的 \hss 内容均被添加。
答案2
@RuixiZhang 如果您认为 TeXbook 和/或 tex.web 中存在错误(即它们不匹配),请向我(karl at freefriends dot org)发送一个最小的纯 TeX 示例和差异描述。谢谢。