如何使 \underset 和 \stackrel 距离相等?

如何使 \underset 和 \stackrel 距离相等?

以下是代码:

\documentclass{article}
\usepackage{mathtools}
\begin{document}
$[ \underset{\scriptscriptstyle [[[[]]]]}
  {\stackrel{\mathclap{\scriptscriptstyle [[[[]]]]}}{[[[[]]]]}} ]$ \\
\end{document}

其渲染效果如下:

在此处输入图片描述

下标与正文之间的距离大于上标与正文之间的距离。如何使它们相等?

答案1

您的问题可以通过原始构造来说明:

$[\mathop{[[[[]]]]}\limits^{[[[[]]]]}_{[[[[]]]]}]$

确实,上面的字距比下面的字距小。TeXbook 附录 G 第 13a 段说,上面的字距最大为 (xi9, xi11-dp),下面的字距最大为 (xi10, xi12-ht)。Computer Modern 给出的值如下:

xi9 = \fontdimen9\textfont3     = 1.11111pt
xi10 = \fontdimen10\textfont3   = 1.66666pt
xi11 = \fontdimen11\textfont3   = 1.99998pt
xi12 = \fontdimen12\textfont3   = 6.0pt
dp = \dp\hbox{$\scriptstyle[]$} = 1.75pt
ht = \ht\hbox{$\scriptstyle[]$} = 5.25pt

我们可以看到上面的最大值是 xi9,下面的最大值是 xi10。因此,我们的 kern 高于 1.11111pt,而 kern 低于 1.66666pt。

您可以通过以下方式设置更好的字距:

\fontdimen9\textfont3=1.666666pt

然后你就会在上方和下方看到相同的字距。已通过测试pdftex document

如果我们使用luatex,那么设置\fontdimen就无关紧要了,我们必须改用LuaTeX 原语:

\Umathlimitabovevgap\textstyle=1.6666666pt

luatex document已由或测试optex document

我也测试了 LatinModern 字体的 Unicode-math,发现 Computer Modern 的 bug 已经在这里修正,上下字距统一设置为 1.666666pt。所以,你可以使用 Unicode-math Latin Modern 来解决你的问题。

相关内容