XeLaTeX 编译时间太长是什么原因?

有一个六页的基于IEEEtrans 的模板写的PDF文档需要编译,需要用到两种中文字体和四种英文字体,引用相对较多,主要使用的宏包有:tikz, listing, xeCJK, hyperref。初次编译时间3分钟左右,之后在引用不变的情况下大概需要40s,使用的环境是Windows 10 + texlive 2016 + texstudio, 使用xelatex.exe -synctex=1 -interaction=nonstopmode 进行编译, 硬件为i7-4710MQ(2.5-3.4GHz), 12GB, 256G SSD(Samsung 850EVO)请问这样的速…
关注者
44
被浏览
4,755

4 个回答

同类问题反复出现,集中简要回答一下。

XeLaTeX 编译卡时间,一般就是因为找不到字体。XeTeX 会在字体缓存中找不到字体时重新刷新字体缓存,尝试找字体,而这个过程很慢。

特征是,XeLaTeX 编译卡在字体读入的地方,如 Latin Modern 字体字体文件 eu1lmr.fd 之类地方,具体可能有差别。

在长时间等待之后,可能找到字体编译正常完成;也可能显示找不到字体的错误。

一般情况下,如果找到字体编译完成,字体缓存也会得到刷新,于是后续的编译速度会正常。不过,在 Windows 下 TeX Live 2016、2017 似乎实现有问题,自动刷新字体缓存会出问题,此时可能需要手工刷新,即运行

fc-cache

命令,一般不用加 -f 选项(强制刷新);也不用加 -v 选项(显示更详细的信息)。TeX Live 2017 的字体缓存保存在 texlive/2017/texmf-var/fonts/cache/ 路径下,如果刷新出了问题,可以尝试将这个目录中的文件删空,并保证目录权限设置没问题可写。这样通常都会解决问题。

注意,在给系统安装了新字体后,都需要重新刷新字体缓存。

另一方面,如果编译卡了一些时间后显示 font not found 之类找不到字体的错误,那一般是说明字体名拼写错误,改正即可。


此外,还有一些偏门的情形会导致 XeLaTeX 编译时间很长:

  • 内存很小,编译时内存不足。除了升级电脑,没有好的办法。
  • 文档中使用了 PSTricks 作图。此时 XeTeX 会额外花费较多时间调用 ghostscript。这种可以考虑改用 tikz 画图。
如果是卡在 eu1lmr.fd 的话,是因为 XeLaTeX 在定位字体。

用管理员运行
fc-cache -fv
一般能够解决。