如何获得反映(平面)大写字母高度的长度?
虽然\em
给了我宽度,\ex
指的是小写字母,\f@size
指的是包括上升和下降在内的整体字体大小。
答案1
1em 的值不一定是任何大写字母的宽度(它的名字指的是大写字母 M 的宽度,但不一定如此,并且该值基本上由字体设计师决定)。
类似地,1ex 传统上是指小写字母 x 的高度,但如果字体设计师另有决定,则可能并非如此。
LaTeX 提供了一种标准方法来获取一个字符(或一组字符)的宽度和高度:
\settoheight{\mylen}{A}
\settowidth{\mylen}{A}
\settodepth{\mylen}{g}
将分配\mylen
(应该用 声明\newlength{\mylen}
)相应的尺寸在呼叫点。
如果要记录默认字体大小下典型大写字母的高度以供日后使用,请执行以下操作
\newlength{\ucht}
\AtBeginDocument{\settoheight{\ucht}{A}}
因为有些字体包在开始文档时就进行了设置,并且\settoheight
在序言中所做的设置可能无法反映主文档字体。
如果要根据当前字体使用大写字母的高度,则构造\fontcharht\font`A
可以在需要长度的任何地方使用该构造。
一位受人尊敬的社区成员在评论中反对使用A
或X
可能会导致不同的结果。事实上,对于某些字体来说,情况确实如此。在 Computer Modern 中,所有大写字母都分配了相同的高度,即使其中一些字母“超出”了高度:通常是 A、C、G、O、Q。其他字体可能会受到设计师的不同决定,因此需要对实际文档字体进行一些实验。
答案2
其他答案很好地解释了如何测量字母的高度。正如 egreg 所补充的,“em”和“ex”这两个术语取决于字体设计师的解释,不能用作字母尺寸的严格测量单位。
我只是想补充一点,字母的高度和深度的概念也同样主观。弯曲的字母通常会延伸到其指定的高度和深度。显然,这与大脑感知小“超调”的方式有关,即平衡或匹配大/平坦的非突出部分。有关此概念的讨论可以在http://ilovetypography.com/2009/01/14/inconspicuous-vertical-metrics/。
我在 MWE 中展示了一些例子,只是为了提醒 OP,如果目标是使用字母的官方高度和深度来截断或封装字母,那么通常是不够的。
\documentclass{article}
\begin{document}
\fboxrule=.1pt
\fboxsep=-\fboxrule
\fbox{e}\fbox{Q}\fbox{A}
\end{document}
答案3
答案4
\newsavebox{\mybox}
\savebox{\mybox}{A} % Put your letter here instead of A
\newlength{\uppercaseHeight}
\setlength{\uppercaseHeight}{\ht\mybox}
\newlength{\uppercaseWidth}
\setlength{\uppercaseWidth}{\wd\mybox}