LaTeX 等软件生成的 PDF 中字体命名的方案是怎样的?

LaTeX 等软件生成的 PDF 中字体命名的方案是怎样的?

大多数 PDF 查看软件都允许查看文档属性,特别是文档中使用的字体。一些查看器(例如 KDE 的 Okular)甚至允许将此类字体提取到 TTF 文件中。我一直想知道为什么字体名称通常如此奇怪 - 它们包含前缀。这适用于由 PDFLaTeX、XeLateX、MS Word 等生成的 PDF。谷歌搜索此主题只会显示有关字体嵌入的信息,这与字体命名无关。

事实上,由此引出两个相关的问题:

  1. PDF 生成应用程序在选择字体名称时是否遵循任何标准?
  2. 有没有什么方法可以影响 LaTeX 生成的字体的命名?

下面是 Foxit Reader 文档属性窗口的截图。请注意,某些字体带有“EAPEGA+”、“EAPHMM+”等前缀。

PDF 文档属性

编辑此主题部分回答了我的第二个问题:可以尝试解压缩 PDF,然后使用查找和替换来替换字体名称字符串,并将所有内容重新打包回 PDF。

编辑2将图像嵌入到帖子中。

答案1

前缀表示——正如@cfr 在评论中指出的那样(以及她几乎同步的回答)– 相应字体仅作为子集嵌入,即仅包含文档中实际使用的字形。这些前缀旨在防止同一字体的不同子集之间发生冲突,并允许合并它们。

PDF 生成应用程序必须遵循的标准是 Adob​​e 的 PDF 规范,其中规定(第 9.6.4 节中,PDF 1.7):

对于字体子集,字体的 PostScript 名称(字体的 BaseFont 条目的值和字体描述符的 FontName 条目)应以标签后面跟着一个加号(+)。标签必须正好由六个大写字母组成;字母的选择是任意的,但同一个 PDF 文件中的不同子集必须具有不同的标签。

命名方案在 中是硬编码的pdftex,因此除了编辑 PDF 文件本身之外,没有其他方法可以更改字体名称,而这总是相当危险的。此外,许多查看器(其中包括 Adob​​e Reader)根本不会显示前缀。

关于 的最后一点说明microtype,正如@cfr 所提到的:与带子集的前缀相反,字体扩展会导致在字体名称中添加后缀,而早期版本的 确实多次包含后缀pdftex。但是,这种情况不再存在(自pdftex1.20 版以来),启用字体扩展的 PDF 文件的大小增加可以忽略不计。

答案2

我不知道问题 (2),但这与问题 (1) 相关,而且对于评论来说太长了,我认为:

根据Adobe 的 PDF 规范(第 9.6.4 节):

对于字体子集,字体的 PostScript 名称(字体的 BaseFont 条目和字体描述符的 FontName 条目的值)应以标记开头,后跟加号 (+)。标记应恰好由六个大写字母组成;字母的选择是任意的,但同一 PDF 文件中的不同子集应具有不同的标记。

示例 EOODIA+Poetica 是 Poetica®(Type 1 字体)子集的名称。

因此,您看到的是由于嵌入了子集。请注意,TimesNewRoman没有前缀,因为它不是嵌入的,而是使用系统字体。(如果您没有安装此字体,您的 PDF 查看器将显示Actual Font和/或的替代值Actual Font Type,具体取决于您可用的内容以及系统上替换的配置方式。)

相关内容