我想根据字体大小缩放图形元素(如图像tikz
和tikz-timing
图表),使它们具有与普通大写字母相同的高度(即X
或M
;我注意到它们的高度大致相同,但 的尖端略高)。我有时也喜欢使用普通字母深度(例如或A
的深度)来执行此操作。y
g
我知道,除了可以使用ex
或em
单位表示字体大小的相对长度(1.6ex =~ 的高度X
)之外,当前字体大小还存储在\f@size
字符串长度中,并pt
剥离了 。因此,对于普通的 10pt 字体,它包含10
。还有\ht\strutbox
和,分别\dp\strutbox
是.7\baselineskip
和.3\baselineskip
,这又大约是字体大小的 1.2 倍。但是, a\rule{1pt}{10pt}
明显高于 a 10pt X
。这并不奇怪,因为\ht\strutbox
(无论如何都应该高于X
)的大小为 10pt x 1.2 x 0.7 = 8.4pt。
问题: 如果已知字体大小,如何计算实际字母高度和深度?这始终是一个恒定因素吗?这是否依赖于字体?
我想避免装箱X
并测量其尺寸,但这只是 B 计划。
答案1
“ex 高度”是与“x”的高度关系不大的长度;例如,在 中cmr10
两者相等,而在 TeX Gyre Pagella 中它们不相等:“x”高 4.42pt,1ex 是 4.845pt。
通常,根据“字体大小”来预测大写字母的高度是不可能的,正如芭芭拉·比顿在她的评论中强调的那样。还应该记住,TeX 只知道字符的“边界框”,这些字符通常会从边界框中突出:例如,A 的上顶点可能会超出一点。但对于将内置符号适应字体的一般形状的问题,这种超出并不重要。
1ex 的值与字体有关,位于“fontdimen 5”中,可直接用作\fontdimen5\font
:
\dimen0=\fontdimen5\font
\dimen0=1ex
是等效的任务(立即以点的形式转换)。
使用 e-TeX 时无需将字符括起来即可进行测量:
\dimen0=\fontcharht\font`B
\dimen2=\fontchardp\font`q
在 LaTeX 语言中是
\setlength{\dimen0}{\fontcharht\font`B}
\setlength{\dimen2}{\fontchardp\font`q}
分配给\dimen0
和\dimen2
当前字体中大写字母 B 的高度和小写字母 q 的深度。还有\fontcharwd
和\fontcharic
用于检索宽度和斜体校正。同样,这些长度是边界框的长度,不一定是字符本身的长度。