cmsy10.tfm 为减号赋予正深度:
$ tftopl /usr/local/texlive/2019/texmf-dist/fonts/tfm/public/cm/cmsy10.tfm | grep -A4 'CHARACTER O 0'
(CHARACTER O 0
(CHARWD R 0.777781)
(CHARHT R 0.583334)
(CHARDP R 0.083334) # <- emphasis mine
)
(减号位于零位置,如下所述:
$ grep 'C 0' /usr/local/texlive/2019/texmf-dist/fonts/afm/public/amsfonts/cm/cmsy10.afm
C 0 ; WX 777 ; N minus ; B 83 230 694 270 ;
)
哪里有这个正的深度?减号显然没有下降部分。
这对于 Python 绘图库 matplotlib 来说是个问题,它需要找出某些 tex 构造的基线,以正确对齐 tex 处理的字符串——请参阅https://github.com/matplotlib/matplotlib/issues/6323针对该问题,https://github.com/matplotlib/matplotlib/pull/6333/files对于建议的修复,基本上相当于对此字形进行特殊处理以忽略 tfm 数据。
答案1
这就是减号与加号具有相同高度和深度的原因之一。
\def\nodepthminus{\mathbin{\setbox0=\hbox{$-$}\dp0=0pt\box0}}
\def\noheightminus{%
\mathbin{%
\setbox0=\hbox{$-$}%
\dimen0=\fontdimen22\textfont2
\advance\dimen0 0.4pt
\ht0=\dimen0
\dp0=0pt
\box0
}%
}
\setbox0=\hbox{$\displaystyle\sqrt{a+b}$}
\dimen0=\dp0 \advance\dimen0 0.1pt
\def\guide#1{%
\setbox0=\hbox{$\displaystyle\sqrt{#1}$}
\dimen0=\dp0 \advance\dimen0 0.1pt
\hbox to0pt{\vrule width 2in height -\the\dp0 depth \the\dimen0 \hss}%
}
$$
\guide{a+c}\sqrt{a+c}\sqrt{a-c} \sqrt{a\nodepthminus c}\sqrt{a+c}
$$
$$
\guide{+}\sqrt{+}\sqrt{-} \sqrt{\nodepthminus}\sqrt{+}
$$
$$
\guide{+}\sqrt{+}\sqrt{-} \sqrt{\noheightminus}\sqrt{+}
$$
\bye
差别很小,但很明显。
答案2
我没有检查过,但据我所知,减号的边界框与加号的边界框相同。这确保了$x-z$
和等表达式$x+z$
同样对齐。