电脑现代

电脑现代

有多种测量单位可供使用(例如 pt、mm、in、em、ex 等)来指定长度和高度。对于基于字体的单位(em 和 ex),实际间距将根据字体略有不同。对于其他类型的单位,间距固定在给定的测量值。

在某些情况下,优先选择其中某些单位是否更好?例如,在指定缩进文本的长度时(例如在 listings 包中设置 xleftmargin 和 xrightmargin 时),“em”单位是否比固定测量值更好。何时使用“ex”单位来指定高度?我认为在设置页边距时应始终使用固定单位。

所以,我想我要问的是,决定使用哪种测量单位的指导原则是什么?

答案1

没有硬性规定,但这里有一份简短的指导方针:

  • “1em” 可以视为水平长度,“1ex” 视为垂直长度,因此请相应地使用它们,但可以根据需要进行混合搭配(它们可以是水平的也可以是垂直的,但通常您会听到人们谈论“1em”是“m”的宽度 — 通常是错误的 — 而“1ex”是“x”的高度 — 通常是正确的)。我通常认为它1em与字体大小(以点为单位)大致相同。

  • 2emem 和 ex 是相对长度,因此它们更适合围绕文本进行设计;就像您所说的那样,无论字体大小是9pt还是 ,缩进都可以起作用12pt

  • 当然,固定大小的事物(例如页面大小)应该用固定单位来定义。

  • 当事物应该是相对的时候,用页面设计来定义它们往往更有意义。例如,可能比用图形来width=0.5\linewidth定义更有意义。width=5cm

  • 注意pt单位!在 TeX 中,1pt1/72.27in,而大多数其他软件使用的更常见的“PostScript 点”是1/72inTeX 中的1bp。如果您正在处理其他程序并且需要精确的长度,请使用bp或使用标准cmin测量值。

  • 请记住,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

Computer Modern 字体中的 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 相比,还有更多样式可供选择,因此我将它们添加到列表中。此外,粗体斜体打字机样式不是不适用于拉丁现代,所以我将其删除了。

pdfLaTeX 中拉丁现代字体的 1em 和 1ex

该表的值与 Computer Modern 的值相对应,列值相差百分之一1emM 高度1exx 深度(又全为零)。

这次有点不同x 高度值。在大多数情况下,它们对应于 的值1ex。然而,它们确实不是对应这些样式:中型小型罗马字体,全部中等无衬线字体,以及全部除了中等斜体之外的打字机样式。


XeLaTeX 和拉丁现代

使用 XeLaTeX 而不是 pdfLaTeX 生成上述表格,无需更改代码,即可得到完全相同的值。

我继续研究 XeLaTeX 和 Latin Modern 字体。我过去常常fontspec“手动”加载字体,\fontspec{fontname}字体名称列于表格第一列。[见结论关于fontspec。] 它通过库使用系统范围(非 TeX 特定)目录fontconfig来定位和加载字体。在这个特定情况下,它加载.pfb恰好存在于我的主要 texmf 树中的 Type1 字体(-files)。

XeLaTeX 中的拉丁现代字体为 1em 和 1ex

再次,的值与1ex测量的 x 高度完全匹配(即使 x 深度不为零)。但这次,它1em正好是指定的字体大小(10 pt)。还有一点需要注意,测量值对应于 Computer Modern 的值(四舍五入到百分之一点)除了当 x 深度非零时。


更多字体

为了方便起见,我还为其他一些字体编制了一个表格。这些都是 TrueType 和 OpenType 字体。

对于其他一些字体,则为 1em 和 1ex


结论

[编辑:在添加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;欧洲大陆的印刷工人会使用ccdd来达到相同的目的(但您不会看到太大的区别)。

除了传统之外,没有其他特别的理由来偏爱这些单位。

相关内容