$\LaTeX{}$之如何加快编译速度
本文首先介绍了在 LaTeX 大文件编译过程中影响编译速度的一些原因,然后根据这些原因介绍了相关的方法来加快编译速度以提高效率,最后结合实验数据对比分析了这些方法的实际提升效果。
什么拖慢了编译速度
影响 LaTeX 编译速度原因主要可以归纳为两方面,一方面是文档外部的,这方面主要与编译 LaTeX 的环境和机器有关。另一方面是文档内部的,这一方面主要与文件的反复读写各种中间文件,加载图片和字体等有关。
文档外部的原因主要有:
- LaTeX编译的操作系统
- 编译LaTeX的电脑配置
- 本地编译还是云端
首先是编译的操作系统,LaTeX 是“为 Unix 设计的工具链”,Windows 能跑,但不是它最擅长的舞台。
类Unix系统(Linux、Mac等)编译速度快于Windows。由于LaTeX编译过程中,需要创建很多短生命周期进程(pdflatex,bibtex/biber,makeindex,python(minted)、repstopdf、epstopdf、synctex等),类Unix的进程创建成本低于Windows,其次在编译过程中会读写很多中间文件.aux,.toc,.log,.out,.bbl,.bcf等,类Unix的文件I/O速度优于Windows。总体来说,由于类Unix系统的内核设计,其在编译LaTeX文件时速度远胜于Windows。
其次,电脑的硬件配置也会对编译速度有影响。因此,如果电脑的CPU性能比较一般,内存较小或读写速度较慢,会降低编译速度。
一般云端的网页编译(Overleaf、TeXPage等)通常是架构在服务器的服务,服务器基本上也都采用Linux作为操作系统,其速度通常也是比本地的Windows系统要快。然而云端编译存在网络波动、付费、编译时长限制、隐私性等这样那样的问题,在实际排版中需要考虑自身情况来选择是否使用。(在我看来,云端相比本地唯一的优势在于多人协同支持的较好。)
文档内部的原因主要有:
- 反复多轮编译
- 图片与图形
- 字体系统(XeLaTeX / LuaLaTeX)
最主要原因是 LaTeX 天生是多遍编译系统,在输出最终pdf前会反复编译文件以获取之前不知道的位置的信息。
加载图片与图形需要大量的I/O,并且不缓存,即每轮编译都要重新加载图片,编译速度自然就会被严重降低。
pdfLaTeX使用的是TeX字体,字体加载几乎“零成本”,而XeLaTeX
/
LuaLaTeX使用的是系统字体,字体加载成本较高,但是功能也更强大,可支持多语言(中文/日文/韩文等)。
如何加快编译
针对这些影响编译速度的原因,可以选择相应的加快编译速度的方法。
更换操作系统
由于类Unix系统的内核设计,在编译LaTeX文件时速度远胜于Windows,因此可以使用Linux或Mac,或者使用WSL2(Windows下的Linux子系统)。也可以在云端编译(Overleaf、TeXPage等)(电脑性能一般最好使用云端)。
使用 latexmk 编译
latexmk 在思想上就是 LaTeX 世界的 make,
但它内置了 LaTeX
的“依赖规则和收敛逻辑”,自动多次调用编译器直到稳定,不用再像make需要手写依赖关系。核心思想是增量编译(减少编译次数),通过检测文档是否“收敛”,只执行“必需的最少编译轮数”。
draft 模式
在有大量图片的情况下,编译速度变慢, 可采用 draft
模式,最终版再取消该模式。
对 documentclass 或 graphicx 加一个
draft 选项: \documentclass[draft]{article} 或
\usepackage[draft]{graphicx}。
draft 模式下,如果希望看某张图片,可以单独对该图片取消
draft 模式:
\includegraphics[draft=false]{image.pdf}。
图片格式选择
尽量选用
pdf或eps格式,速度快又清晰。png和jpeg格式编译时会对图片解码和重解码,svg会调用外部程序转换为pdf,而pdf格式直接嵌入对象,因此速度比其他格式快。
取消压缩,最终版本再压缩
取消 LaTeX 编译器对 PDF 的内容压缩和对象压缩,生成一个体积大但结构清晰、可读的 PDF,主要用于调试。
方法是在 tex 文档开头加入如下代码:
1 | % XeTeX |
或
1 | % 非 XeTeX(pdfTeX / LuaTeX) |
或自动判断使用以上两种的哪个方式:
1 | \ifx\XeTeXversion\undefined |
最终版本要注释或删掉这些优化命令。
实验
实验配置
CPU:12th Gen Intel® Core™ i7-12700H 核心数:14 逻辑处理器:20 频率:2.3GHz
内存:DDR5 32G 频率:4800MT/s
实验文档:lshort-zh-cn + 10张外部图片(文档本身没有外部图片)
实验条件
Windows png格式图片:
Windows pdf格式图片:
Windows + draft:
Windows + 取消压缩:
Windows + draft +取消压缩:
WSL2 png格式图片:
WSL2 pdf格式图片:
WSL2 + draft:
WSL2 + 取消压缩:
WSL2 + draft +取消压缩:
Linux:
Linux 格式图片:
Linux 格式图片:
Linux + draft:
Linux + 取消压缩:
Linux+ draft +取消压缩:
实验结果
参考博文
- LaTeX 编译原理,如何降低编译时间