大多数 PDF 查看软件都允许查看文档属性,特别是文档中使用的字体。一些查看器(例如 KDE 的 Okular)甚至允许将此类字体提取到 TTF 文件中。我一直想知道为什么字体名称通常如此奇怪 - 它们包含前缀。这适用于由 PDFLaTeX、XeLateX、MS Word 等生成的 PDF。谷歌搜索此主题只会显示有关字体嵌入的信息,这与字体命名无关。
事实上,由此引出两个相关的问题:
- PDF 生成应用程序在选择字体名称时是否遵循任何标准?
- 有没有什么方法可以影响 LaTeX 生成的字体的命名?
下面是 Foxit Reader 文档属性窗口的截图。请注意,某些字体带有“EAPEGA+”、“EAPHMM+”等前缀。
编辑:此主题部分回答了我的第二个问题:可以尝试解压缩 PDF,然后使用查找和替换来替换字体名称字符串,并将所有内容重新打包回 PDF。
编辑2将图像嵌入到帖子中。
答案1
前缀表示——正如@cfr 在评论中指出的那样(以及她几乎同步的回答)– 相应字体仅作为子集嵌入,即仅包含文档中实际使用的字形。这些前缀旨在防止同一字体的不同子集之间发生冲突,并允许合并它们。
PDF 生成应用程序必须遵循的标准是 Adobe 的 PDF 规范,其中规定(第 9.6.4 节中,PDF 1.7):
对于字体子集,字体的 PostScript 名称(字体的 BaseFont 条目的值和字体描述符的 FontName 条目)应以标签后面跟着一个加号(+)。标签必须正好由六个大写字母组成;字母的选择是任意的,但同一个 PDF 文件中的不同子集必须具有不同的标签。
命名方案在 中是硬编码的pdftex
,因此除了编辑 PDF 文件本身之外,没有其他方法可以更改字体名称,而这总是相当危险的。此外,许多查看器(其中包括 Adobe Reader)根本不会显示前缀。
关于 的最后一点说明microtype
,正如@cfr 所提到的:与带子集的前缀相反,字体扩展会导致在字体名称中添加后缀,而早期版本的 确实多次包含后缀pdftex
。但是,这种情况不再存在(自pdftex
1.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
,具体取决于您可用的内容以及系统上替换的配置方式。)