尽管尝试重复 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-A,d+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-A,d+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。因此,前者太小,因此使用后者。