近期整理了Windows系统中的LaTeX编译环境, 发现MiKTeX的epstopdf功能出现bug, 由eps转出的pdf图片为空。原因在于: MiKTeX未安装该eps中嵌入的字体。本文记录解决此问题的过程。
问题描述
论文中的插图一般以eps
格式存储, 编译过程中会通过epstopdf
包将eps图片转为pdf
格式, 然后嵌入文章中。但最近在修改了某一插图后再编译发现了奇怪的问题: eps图片单独打开正常, 编译未报错, 但文中被修改的图片处留白。
解决过程
由于图片是通过MATLAB导出的, 首先以为问题是MATLAB的问题, 于是先通过MATLAB将fig导出为pdf, 然后通过Adobe Acrobat将pdf转为eps, 经此转换后得到的eps即可成功嵌入文中。而后发现在编译日志中有如下的错误提示:
Error: /invalidfont in /findfont
Operand stack:
Helvetica-Oblique
Execution stack:
%interp_exit .runexec2 --nostringval-- --nostringval-- --nostriMiKTeX GPL Ghostscript 9.25: Unrecoverable error, exit code 1
ngval-- 2 %stopped_push --nostringval-- --nostringval-- --nostringval-- false 1 %stopped_push 2015 1 3 %oparray_pop 2014 1 3 %oparray_pop --nostringval-- 1998 1 3 %oparray_pop 1884 1 3 %oparray_pop --nostringval-- %errorexec_pop .runexec2 --nostringval-- --nostringval-- --nostringval-- 2 %stopped_push --nostringval-- 1967 1 3 %oparray_pop
Dictionary stack:
--dict:973/1684(ro)(G)-- --dict:0/20(G)-- --dict:123/200(L)--
Current allocation mode is local
Last OS error: No such file or directory
Sorry, but "MiKTeX EPS-to-PDF Converter" did not succeed.
The log file hopefully contains the information to get MiKTeX going again:
C:\Users\yuze\AppData\Local\MiKTeX\2.9\miktex\log\epstopdf.log
相应的, 遵循该错误提示找到epstopdf.log
文件, 有如下内容:
2020-03-26 16:58:14,467+0800 INFO epstopdf - starting with command line: epstopdf --outfile=./figures/fig2_-eps-converted-to.pdf ./figures/fig2_.eps
2020-03-26 16:58:15,859+0800 FATAL epstopdf - Invalid argument
2020-03-26 16:58:15,863+0800 FATAL epstopdf - Info:
2020-03-26 16:58:15,868+0800 FATAL epstopdf - Source: Libraries\MiKTeX\Core\Stream\FileStream.cpp
2020-03-26 16:58:15,868+0800 FATAL epstopdf - Line: 68
以上错误提示仍然是一头雾水。Google后找到了相同的问题。根据提供的解决方案的解释1:
I guess you do not have the necessary fonts installed within your MiKTeX. Make sure you have all the packages mentioned here https://github.com/MiKTeX/miktex-packaging/issues/112 installed and try again.
即MiKTeX未安装eps图片中的部分字体(这里是Helvetica-Oblique
), 为此解决方案即相应安装对应字体所属的package即可(这里是helvetic
)。
这也解释了为什么通过Adobe Acrobat转换后的eps图片可以正常嵌入, Acrobat会嵌入字体, 无需由MiKTeX提供。
解决办法
对于此类问题, 解决办法概括如下: 根据提示缺少的字体, 找到相应的字体package, 通过MiKTeX Console安装即可2, 3。
注: 需要先删除已生成的空白pdf文件, 否则编译将跳过
epstopdf
这一过程。
epstopdf
的用法
epstopdf --outfile=fig1.pdf fig1.eps