$\LaTeX{}$之如何加快编译速度

本文首先介绍了在 LaTeX 大文件编译过程中影响编译速度的一些原因,然后根据这些原因介绍了相关的方法来加快编译速度以提高效率,最后结合实验数据对比分析了这些方法的实际提升效果。


什么拖慢了编译速度

影响 LaTeX 编译速度原因主要可以归纳为两方面,一方面是文档外部的,这方面主要与编译 LaTeX 的环境和机器有关。另一方面是文档内部的,这一方面主要与文件的反复读写各种中间文件,加载图片和字体等有关。

文档外部的原因主要有:

  • LaTeX编译的操作系统
  • 编译LaTeX的电脑配置
  • 本地编译还是云端

首先是编译的操作系统,LaTeX 是“为 Unix 设计的工具链”,Windows 能跑,但不是它最擅长的舞台。

类Unix系统(Linux、Mac等)编译速度快于Windows。由于LaTeX编译过程中,需要创建很多短生命周期进程(pdflatexbibtex/bibermakeindexpython(minted)repstopdfepstopdfsynctex等),类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 模式,最终版再取消该模式。

documentclassgraphicx 加一个 draft 选项: \documentclass[draft]{article}\usepackage[draft]{graphicx}

draft 模式下,如果希望看某张图片,可以单独对该图片取消 draft 模式: \includegraphics[draft=false]{image.pdf}

图片格式选择

尽量选用 pdfeps格式,速度快又清晰。pngjpeg格式编译时会对图片解码和重解码,svg会调用外部程序转换为pdf,而pdf格式直接嵌入对象,因此速度比其他格式快。

取消压缩,最终版本再压缩

取消 LaTeX 编译器对 PDF 的内容压缩和对象压缩,生成一个体积大但结构清晰、可读的 PDF,主要用于调试。

方法是在 tex 文档开头加入如下代码:

1
2
% XeTeX
\special{dvipdfmx:config z 0} %取消PDF压缩,加快速度,最终版本注释掉此行

1
2
3
% 非 XeTeX(pdfTeX / LuaTeX)
\pdfcompresslevel=0
\pdfobjcompresslevel=0

或自动判断使用以上两种的哪个方式:

1
2
3
4
5
6
7
8
\ifx\XeTeXversion\undefined
% 非 XeTeX(pdfTeX / LuaTeX)
\pdfcompresslevel=0
\pdfobjcompresslevel=0
\else
% XeTeX → dvipdfmx
\special{dvipdfmx:config z 0}
\fi

最终版本要注释或删掉这些优化命令。


实验

实验配置

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 +取消压缩:

实验结果


参考博文

  1. LaTeX 编译原理,如何降低编译时间