分隔符有多大

分隔符有多大

尽管尝试重复 TeX 尺寸计算,我注意到放置在\left…\right轻微地比它们包裹的盒子大。大多少?如何计算?在哪里指定?

具体来说,使用 amsmath 命令$\begin{pmatrix}1\\2\end{pmatrix}$(其内部执行\left(…\right))会生成以下框:

.\mathon
.\hbox(14.5001+9.50012)x19.7223
..\hbox(0.39998+23.60025)x7.36115, shifted -14.10013
...\OMX/cmex/m/n/10 ^^R
..\glue -5.0
..\vbox(14.5+9.5)x15.00002
...\hbox(8.39996+3.60004)x15.00002
....\glue(\tabskip) 0.0
....\hbox(8.39996+3.60004)x15.00002
.....\rule(8.39996+3.60004)x0.0
.....\glue 5.0
.....\glue 0.0 plus 1.0fil
.....\mathon
.....\OT1/cmr/m/n/10 1
.....\mathoff
.....\mathon
.....\hbox(0.0+0.0)x0.0
.....\mathoff
.....\glue 0.0 plus 1.0fil
.....\glue 5.0
....\glue(\tabskip) 0.0
...\glue(\lineskip) 0.0
...\hbox(8.39996+3.60004)x15.00002
....\glue(\tabskip) 0.0
....\hbox(8.39996+3.60004)x15.00002
.....\rule(8.39996+3.60004)x0.0
.....\glue 5.0
.....\glue 0.0 plus 1.0fil
.....\mathon
.....\OT1/cmr/m/n/10 2
.....\mathoff
.....\glue 0.0 plus 1.0fil
.....\glue 5.0
....\glue(\tabskip) 0.0
..\glue -5.0
..\hbox(0.39998+23.60025)x7.36115, shifted -14.10013
...\OMX/cmex/m/n/10 ^^S
.\mathoff

现在分隔符的大小为 0.39998+23.60025=24.00023,而整个框的大小为 14.5001+9.50012=24.00022,这两个值都大于内部 vbox 14.5+9.5=24.0。这个大小是从哪里来的?

答案1

这些公式位于 Donald E. Knuth 的《The TeXbook》第 19 项附录 G“从公式生成框”中:

H= 内部材料的最大高度
d= 材料内部的最大深度
A= 数学轴的高度(σ22 = 符号字体的字体尺寸参数 22,系列 2)

然后使内部材料绕轴对称,并计算总高度:

δ= 最大(H-Ad+A

然后根据此尺寸进行调整

F= \delimiterfactor(默认 = 901)
= \delimitershortfall(默认 = 5 pt)

第一个将尺寸缩小到 90.1%,第二个在默认设置下将尺寸缩小 5 pt。最终的最小尺寸是两个值的最大值:

结果 = 最大值(⌊δ/500⌋F,2δ-

然后就取决于实际采用的字体尺寸。

使用示例中的数字:

\documentclass{article}
\usepackage{amsmath}
\begin{document}
  \showboxdepth=\maxdimen
  \showboxbreadth=\maxdimen
  \tracingonline=1
  \nonstopmode
  \sbox0{$\begin{pmatrix}1\\2\end{pmatrix}$}
  \showbox0

  % math axis, indirect way
  \sbox0{$\vcenter{}$}% show math axis, variable a
  \showbox0

  % math axis, direct way
  \showthe\fontdimen22\textfont2

  \showthe\delimiterfactor
  \showthe\delimitershortfall
\end{document}
\hbox(14.5001+9.50012)x19.7223
.\mathon
.\hbox(14.5001+9.50012)x19.7223
..\hbox(0.39998+23.60025)x7.36115, shifted -14.10013 % => size delimiter
...\OMX/cmex/m/n/10 ^^R
[...]
..\vbox(14.5+9.5)x15.00002 % => inner material
[...]
> \box0=
\hbox(2.5+0.0)x0.0 % => math axis, variable a
.\mathon
.\vbox(2.5+-2.5)x0.0
.\mathoff
[...]
> 2.5pt.
l.18 \showthe\fontdimen22\textfont2
[...]
> 901.
l.18   \showthe\delimiterfactor

> 5.0pt.
l.19   \showthe\delimitershortfall

H= 14.5 点
d= 9.5 分
A= 2.5 点
δ= 最大(H-Ad+A)= 最大(12 pt,12 pt)= 12 pt
F= 901
= 5 pt
结果 = max(⌊δ/500⌋F,2δ-

让 TeX 计算 ⌊δ/500⌋:

\dimen0=12pt
\divide\dimen0 by 500 % division including floor (smallest unit is 1 sp)
\showthe\dimen0
> 0.02399pt.

结果 = 最大值(0.02399 pt ⋅ 901, 24 pt - 5pt)= 最大值(21.61499 pt, 19 pt)=21.61499 分

这是分隔符的最小尺寸。字体的内容更复杂。字体可以提供几种固定尺寸,并为更大的尺寸构建分隔符。在这种情况下,分隔符的大小与 相同\bigg,较小的尺寸将是\Big

\setbox0=\hbox{$\Big($}
\showbox0

\setbox0=\hbox{$\bigg($}
\showbox0

这给出(^^Q^^S是右括号):

...\hbox(0.39998+17.60019)x5.97223, shifted -11.1001
....\OMX/cmex/m/n/10 ^^P

...\hbox(0.39998+23.60025)x7.36115, shifted -14.10013
....\OMX/cmex/m/n/10 ^^R

^^P总高度为 18.00017 pt,^^R宽度为 24.00023 pt。要求的最小尺寸为 21.61499 pt。因此,前者太小,因此使用后者。

相关内容