对于出版商,我必须生成不包含任何 Type3 字体的 pdf 文件。
到目前为止,我认为pdflatex
在当前的 LaTeX 发行版上使用应该足以获得没有任何 Type3 字体的 pdf 文件,但对于当前文档而言,情况并非如此:
$ pdffonts paper.pdf
name type emb sub uni object ID
------------------------------------ ----------------- --- --- --- ---------
ZFUCHW+NimbusRomNo9L-Medi Type 1 yes yes no 41 0
VNQOQC+NimbusRomNo9L-Regu Type 1 yes yes no 42 0
[none] Type 3 yes no no 43 0
NXAFJF+NimbusRomNo9L-ReguItal Type 1 yes yes no 46 0
CBNMRR+NimbusRomNo9L-MediItal Type 1 yes yes no 48 0
MNSAJN+NimbusRomNo9L-Regu-Slant_167 Type 1 yes yes no 52 0
FJTKHV+CMSY7 Type 1 yes yes no 53 0
VVITQE+CMMI9 Type 1 yes yes no 54 0
CHSHRJ+CMR9 Type 1 yes yes no 56 0
EAPUQB+CMR6 Type 1 yes yes no 57 0
KBHVYI+CMMI6 Type 1 yes yes no 58 0
EHULJT+CMTI9 Type 1 yes yes no 59 0
JLLCEK+CMSY9 Type 1 yes yes no 61 0
YEIEPQ+CMEX9 Type 1 yes yes no 64 0
DFKMIY+CMSY8 Type 1 yes yes no 84 0
NEDAGG+CMSY6 Type 1 yes yes no 87 0
QDTWCG+MSBM10 Type 1 yes yes no 127 0
[none] Type 3 yes no no 198 0
OKAOPP+CMMI8 Type 1 yes yes no 199 0
TIGOKK+CMR8 Type 1 yes yes no 200 0
GWSFMB+CMTI8 Type 1 yes yes no 201 0
[none] Type 3 yes no no 397 0
令我惊讶的是,所有的 Type3 字体都没有真实的名字。
文档使用 documentclass sigplanconf
。对于图形,仅使用tikz
和listings
包(不使用 graphicx 包,即不\includegraphics
使用且不嵌入 postscript 文件)。
我正在使用带有 TeX Live 的 Ubuntu 10.04:
$ pdflatex --version
pdfTeX 3.1415926-1.40.10-2.2 (TeX Live 2009/Debian)
我发现了一个有关 Type1 字体的 ACM 常见问题解答,但它似乎已经过时了,并且建议的方法仍然会产生带有 Type3 字体的 pdf 文件。
pk 字体:pk
在 doc.log 中查找字体时我发现了以下输出:
75i,27n,56p,866b,2711s stack positions out of 5000i,500n,10000p,200000b,50000s
</mnt/max/.texmf-var/fonts/pk/ljfour/jknappen/ec/ectt0800.600pk> </mnt/max/.texmf-var/fonts
/pk/ljfour/jknappen/ec/ectt0900.600pk>{/usr/share/texmf-texlive/fonts/enc/dvips/base/8r.enc}
</mnt/max/.texmf-var/fonts/pk/ljfour/jknappen/ec/ecss0900.600pk>
这可能是什么原因?缺少一些字体包吗?还是与 tikz 有关?
答案1
查看 pdflatex 日志文件的末尾。它会告诉您包含哪些字体以及哪些是位图 (pk) 字体。
答案2
首先,现在大多数人都使用 pdflatex。如果可能的话,将每个图像都更改为 pdf,使用 pdf 替换 eps 文件
convert file.eps file.pdf
convert 位于 imagemagick 包中。删除 epsfig 并改用 includegraphics。
下次运行:
pdffonts final_upload_document.pdf | less
确保问题确实出在 Type 3 字体上。如果不是,那么问题很可能与文件名中的空格有关。
下次运行:
pdffonts each_image.pdf
在单个 pdf 文件上查找任意 3 型字体,以找出导致问题的图像。这可能是 xfig 或 matlab 问题,也可能是其他图像生成器的问题。
如果所包含的 pdf 没有产生问题,那么很可能是包含诸如黑板字体之类的内容导致了源 latex 文件内部出现问题。
使用上述方法,我发现,如果您使用导出到 latex+pdf 部分,那么除了 matlab 之外,xfig 也会导致相同的伪影。
当您找到 pdf + latex 文件时,您可以运行:
xfig -specialtext -latexfonts -startlatexFont default
使用正确的设置启动 xfig。您还可能会发现,就像我的情况一样,xfig 图像是几年前生成的,原本要放到论文中,但现在它甚至无法在较新版本的 xfig 中打开,并出现 sigsegv 错误。在这种情况下,您唯一的选择是使用上面的 xfig 调用重新生成图像。
答案3
Type 3 字体是不是默认情况下为位图字体。这意味着只有不是 1 型。这就是为什么 Type 3 字体也可以是矢量字体的原因。如果日志文件中没有列出 pk 字体,则说明您已包含此类 Type 3 字体。它也可以通过带有\includegraphics
答案4
我也遇到了 matplotlib 生成的图像的问题,并尝试了这里提出的其他建议,但都没有真正起到作用。最终起作用的是我在这里找到的建议(http://phyletica.org/matplotlib-fonts/):
import matplotlib.pyplot as plt
plt.rcParams['pdf.fonttype'] = 42
重新生成图像后,我的 PDF 终于不再有 Type3 字体了。