确定相对于字体大小的字母高度和深度

确定相对于字体大小的字母高度和深度

我想根据字体大小缩放图形元素(如图像tikztikz-timing图表),使它们具有与普通大写字母相同的高度(即XM;我注意到它们的高度大致相同,但 的尖端略高)。我有时也喜欢使用普通字母深度(例如或A的深度)来执行此操作。yg

我知道,除了可以使用exem单位表示字体大小的相对长度(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用于检索宽度和斜体校正。同样,这些长度是边界框的长度,不一定是字符本身的长度。

相关内容