有多种测量单位可供使用(例如 pt、mm、in、em、ex 等)来指定长度和高度。对于基于字体的单位(em 和 ex),实际间距将根据字体略有不同。对于其他类型的单位,间距固定在给定的测量值。
在某些情况下,优先选择其中某些单位是否更好?例如,在指定缩进文本的长度时(例如在 listings 包中设置 xleftmargin 和 xrightmargin 时),“em”单位是否比固定测量值更好。何时使用“ex”单位来指定高度?我认为在设置页边距时应始终使用固定单位。
所以,我想我要问的是,决定使用哪种测量单位的指导原则是什么?
答案1
没有硬性规定,但这里有一份简短的指导方针:
“1em” 可以视为水平长度,“1ex” 视为垂直长度,因此请相应地使用它们,但可以根据需要进行混合搭配(它们可以是水平的也可以是垂直的,但通常您会听到人们谈论“1em”是“m”的宽度 — 通常是错误的 — 而“1ex”是“x”的高度 — 通常是正确的)。我通常认为它
1em
与字体大小(以点为单位)大致相同。2em
em 和 ex 是相对长度,因此它们更适合围绕文本进行设计;就像您所说的那样,无论字体大小是9pt
还是 ,缩进都可以起作用12pt
。当然,固定大小的事物(例如页面大小)应该用固定单位来定义。
当事物应该是相对的时候,用页面设计来定义它们往往更有意义。例如,可能比用图形来
width=0.5\linewidth
定义更有意义。width=5cm
注意
pt
单位!在 TeX 中,1pt
是1/72.27in
,而大多数其他软件使用的更常见的“PostScript 点”是1/72in
TeX 中的1bp
。如果您正在处理其他程序并且需要精确的长度,请使用bp
或使用标准cm
或in
测量值。请记住,TeX 使用定点算法,因此当达到 5 位有效数字时,会出现精度问题。例如,
\newlength\x \x=1in \showthe\x
给出
> 72.26999pt.
答案2
阅读这些答案和评论激起了我的好奇心……尤其是这句话Will Robertson 在他的回答中写道:
[...] 我通常认为它
1em
的大小与字体点数的大小差不多。
它启发了我去研究 TeX(或者更确切地说是 LaTeX)的实际行为。由于我的发现可能会引起那些发现这个问题的人的兴趣,所以我把它们发布在这里。
电脑现代
我首先检查了Roman/Serif/Typewriter、Medium/Bold 和 Upright/Italic/Slanted/SmallCaps 的不同选择的长度1em
和。结果如下:1ex
我们可以看到,1em
变化很大;从 10.00 pt 到 11.82 pt。的长度1ex
更加一致,所有不同样式只有三个不同的值。
表格中包含了字体的一些实际测量值。这些是“M”的宽度(在字体处于活动状态时测量为\wd
)\hbox{M}
,以及“x”的高度和深度(与 的和类似地测量\ht
)。\dp
\hbox{x}
该表的一个有趣之处是,既不1em
是 10 pt(所选字体大小),也不是 M 宽度。另一方面,1ex
除了打字机小写字母外,它恰好对应于“x”的高度。
拉丁现代
[Xavier 询问了使用 pdfLaTeX 的拉丁现代语的结果,因此我添加了此部分。]
为了使用 pdfLaTeX 检查拉丁现代的值,我将其添加到序言中:
\usepackage{lmodern}
\usepackage[T1]{fontenc}
与 Computer Modern 相比,还有更多样式可供选择,因此我将它们添加到列表中。此外,粗体斜体打字机样式不是不适用于拉丁现代,所以我将其删除了。
该表的值与 Computer Modern 的值相对应,列值相差百分之一1em
,M 高度,1ex
和x 深度(又全为零)。
这次有点不同x 高度值。在大多数情况下,它们对应于 的值1ex
。然而,它们确实不是对应这些样式:中型小型罗马字体,全部中等无衬线字体,以及全部除了中等斜体之外的打字机样式。
XeLaTeX 和拉丁现代
使用 XeLaTeX 而不是 pdfLaTeX 生成上述表格,无需更改代码,即可得到完全相同的值。
我继续研究 XeLaTeX 和 Latin Modern 字体。我过去常常fontspec
“手动”加载字体,\fontspec{fontname}
字体名称列于表格第一列。[见结论关于fontspec
。] 它通过库使用系统范围(非 TeX 特定)目录fontconfig
来定位和加载字体。在这个特定情况下,它加载.pfb
恰好存在于我的主要 texmf 树中的 Type1 字体(-files)。
再次,的值与1ex
测量的 x 高度完全匹配(即使 x 深度不为零)。但这次,它1em
正好是指定的字体大小(10 pt)。还有一点需要注意,测量值对应于 Computer Modern 的值(四舍五入到百分之一点)除了当 x 深度非零时。
更多字体
为了方便起见,我还为其他一些字体编制了一个表格。这些都是 TrueType 和 OpenType 字体。
结论
[编辑:在添加pdfLaTeX 中的拉丁现代,我重新考虑了一些结论。
使用 TFM 字体和 Xe(La)TeX 的新字体支持时,字体度量机制似乎有所不同。
(非Xe)LaTeX
(这也适用于使用 TFM 字体的 XeLaTeX。)
- 该值
1em
不等于所选字体的大小,也不是实际“M”的宽度。 - 的值
1ex
与实际“x”的大小无关。
然而,从提供的数据我可以得出1ex
结论最经常实际“x”的高度(\ht
的);而的\hbox{x}
值为1em
(几乎从不\wd
“M”( )的宽度\hbox{M}
。
XeLaTeX/fontspec
笔记:我意识到这可能与 本身无关
fontspec
。这更多的是引擎中“旧”与“新”字体处理机制的问题。然而我使用短语XeLaTeX/fontspec将新的字体处理与 XeTeX 引擎中仍然存在的 TFM 字体处理区分开来。
根据收集的数据,我得出结论,对于非 TFM 字体:
- 的值
1em
就是所选的字体大小。 - 的值
1ex
恰好是“x”的高度。(\ht
的\hbox{x}
)
不同尺寸
关于不同的字体大小,我曾对 12 pt 文本进行过几次测试,没有发现什么奇怪的情况。只需记住 Computer Modern 字体具有光学尺寸,因此1em
(1ex
可能) 会以非简单的方式依赖于字体大小。
答案3
填补威尔没有提到的几个空白:讲英语的印刷工人会\textwidth
在 中指定尺寸 ( )pc
并在 中指定行距 ( \baselineskip
) pt
;欧洲大陆的印刷工人会使用cc
和dd
来达到相同的目的(但您不会看到太大的区别)。
除了传统之外,没有其他特别的理由来偏爱这些单位。