笔记:Stack 中有几个关于此问题的线程,但其中任何一个都可以解决我的问题。
我正在使用 Overleaf 编写一份 Latex 文档并将其转换为 PDF。我试图提交给的 ACM 期刊希望 PDF 不包含 Type 3 字体(仅包含 Postscript Type 1 或 TrueType)。编辑说“Type 3 字体出现在文档中的一种常见方式是 PowerPoint 中生成的图形或 Excel 中生成的图表。”我使用 PowerPoint 制作了一些图形,并在 Mac 上截取了它们的屏幕截图。我不知道这些图像是否是问题的根源,但我的文档中有一个名为 BitstramVeraSans-Roman 的 Type 3 字体。因此,我想知道:
- 有没有什么方法可以识别 Mac OS 中 Type 3 字体的来源?
- 如何将 Type 3 字体转换为 Postscript Type 1 或 TrueType 字体?
非常感谢。
答案1
1)正如先前的评论所述,位图(屏幕截图)不包含任何字体,因此不可能是问题的根源。
2) 要检查 Type3 字体是否真的来自图形而不是文本:使用draft
中的选项编译 LaTeX 代码documentclass
。生成的 PDF 将不再包含图形。如果它不再具有 Type3 字体,则意味着(其中一个)图形是从(旧版本的)PowerPoint 中矢量导出的。(Windows 上的 PPT 2010 中的“另存为 PDF”确实将 Vera sans 字体作为 Truetype 而不是 Type3 包含)
3)最明显的解决方案是编辑 Powerpoint 源文件,将 Vera Sans 替换为其他更标准的字体,由您用来生成 PDF 的工具所知(实际上是哪种工具?)
如果你仍然坚持使用 VeraSans,你可以直接使用 Type 1 字体来解决问题:BitstramVera Sans 是 Truetype 字体系列,它有一个名为 Bera 的 TeX 免费 Type 1 克隆(参见这一页)。在您的系统中用 BeraSans Type 1 替换 BitstramVeraSans,可以避免 Type 3 的问题
4) 根据您创建 PDF 的方式,您可能有机会 (i) 不嵌入字体,然后使用 Ghostscript 添加它,或 (ii) 将其转换为轮廓或 (iii) 要求输出设备用 Berasans 替换 VeraSans。
答案2
我在 IEEE 平台上提交的论文中,也遇到了同样的错误,即在某个页面上检测到 Type-3 字体。IEEE 拒绝 Type-3 字体的原因可以在这里找到关联。对于我的情况,我使用 LaTeX 包bbm
和\mathbbm{1}
来表示指示函数,这种用法引入了 type-3 字体。bbm
将dsfont
和替换\mathbbm{1}
为后\mathds{1}
,报告的错误消失了。
答案3
一个有用的工具可以找出哪些文件使用了哪些字体,它pdffonts
来自 poppler 包(Mac:brew install poppler
,Linux:)apt install poppler-utils
,例如:
pdffonts figure1.pdf
如果你曾经matplotlib
创建过任何图形,那么它默认使用 Type 3 字体,可以通过以下方式更改自定义设置例如,禁用 Type 3 字体并对 ps 和 pdf 使用 TrueType:
import matplotlib
matplotlib.rcParams['pdf.fonttype'] = 42
matplotlib.rcParams['ps.fonttype'] = 42
如果您只是使用 pyplot 库,那么您可以使用:
import matplotlib.pyplot as plt
plt.rcParams.update({'pdf.fonttype': 42})