最近一直埋头毕业的事情,终于在昨天全部完成。
躺了一天后打开了久违的CSDN,看到五个月前写的介绍FFmpeg编解码和图传方面的最后一篇文章,竟回想不起当时为何要做这件事情,顿感时光飞逝。为了避免在CSDN上的排名和粉丝也如时光一般远去,我将在近期把这段日子研究的东西(主要是论文写作相关的)逐步分享出来。
这篇文章要分享的是LaTeX的编译速度优化方案。
相信会搜索到这篇博客的同学肯定明白为什么要用LaTeX而非Word来写毕业论文,因此不在这里赘述。
尽管LaTeX的的确确比Word不知高到哪里去,然而有个问题是非常严重的,就是非可见即可得。
解决这个问题的办法是将论文编译出来,然后去看生成的PDF文档。然而以本人的博士论文为例,132页的论文在“AMD Ryzen 7 2700X”CPU下的编译时间是110秒左右,有时改完按下编译去上个厕所回来还在编。。。
为了解决这个问题,本人研究了三个优化方法,供大家参考。正式介绍前,先放出本人没优化前的论文编译速度和文件大小:
Win10 + AMD Ryzen 7 2700X | ||
第一次 | 第二次 | 第三次 |
112s | 111s | 111s |
文件大小:123M | ||
在查询了知乎各大佬,尤其是“李阿玲”大佬关于LaTeX编译速度的讨论后,发现了最立竿见影的方法是取消LaTeX编译器对PDF的压缩。方法是在tex文档开头加入如下代码:
\special{dvipdfmx:config z 0} %取消PDF压缩,加快速度,最终版本生成的时候最好把这句话注释掉
取消压缩后速度提升接近3倍,具体如下表所示:
Win10 + AMD Ryzen 7 2700X + 取消压缩 | ||
第一次 | 第二次 | 第三次 |
34s | 33s | 34s |
文件大小:380M | ||
从表中可见,这一操作速度提升非常感人,然而文件大小的增加也非常感人,因此需要特别注意在最后一次编译把这句代码给注释掉。
如果想更进一步加快编译速度,可以考虑提升LaTeX编译器的I/O效率。由于该部分和操作系统相关,因此也就是将系统换成Linux或者Mac。
本人在同一台电脑上用Deepin 20操作系统的LaTeX对与Windows同一个文件夹下的论文进行了编译,结果在没使用压缩的情况下快了接近一倍,如下表所示:
Deepin 20(Linux)+ AMD Ryzen 7 2700X | ||
第一次 | 第二次 | 第三次 |
62s | 61s | 62s |
文件大小:123M | ||
而加上"取消压缩"的操作后,速度比相同情况下的Win10也快了不少:
Deepin 20(Linux)+ AMD Ryzen 7 2700X + 取消压缩 | ||
第一次 | 第二次 | 第三次 |
25s | 24s | 24s |
文件大小:380M | ||
而在苹果刚刚发布的M1 Max芯片的16寸Macbook pro上,编译同一篇论文在不取消压缩的情况下速度又有提升(可能和芯片性能以及内存到CPU的速度有关):
Mac OS+ M1 max | ||
第一次 | 第二次 | 第三次 |
56s | 57s | 57s |
文件大小:123M | ||
取消压缩后,性能则更是有接近两倍的提升
Mac OS + M1 max + 取消压缩 | ||
第一次 | 第二次 | 第三次 |
16s | 16s | 15s |
文件大小:123M | ||
从这一测试可以发现,苹果真是牛逼!
另外,值得注意的是,这一操作好是好,但毕竟要换操作系统,对于非计算机学科的同学可能比较要命。因此,有人提出使用Win10、Win11的wsl子系统安装Linux或者虚拟机安装Linux的方式来实现加速。本人对这两个操作的看法是,在不采用取消压缩的情况下可能比直接用Win10好,然而取消压缩后效果可能不明显甚至更差,因此不推荐使用任何形式的虚拟机进行优化操作。
上面是本人亲测的两个对LaTeX编译速度本身有明显改善的操作,至于其他预编译啥的优化方式有点麻烦,本人自己也没弄,有兴趣的同学可以自行搜索。
在这里再介绍一种比较直接的加快编译的方式,那就是把文章按照章节分拆成不同的tex文件,然后用“\include”命令把它们组织成文。这样,在修改的时候可以只生成对应的章节,如下所示:
\input{chapters/chapter1.tex}
% \input{chapters/chapter2.tex}
这一操作是本人非常推荐的,而且在写作上也更加直观,不会整篇文章都堆在一个文件里面。但有个非常要命的缺点,就是无法使用“latexdiff”命令来检查修改痕迹,写过论文的人肯定能理解这个问题的严重性。为此,本人一开始是先分章节写作,然后再建立了一个大文件把东西再拷贝过去,相当麻烦。好在最后发现福昕或者Adobe的编辑器有PDF的文件对比功能,相当直观,因此问题也就解决了。如果不想买这两个软件,也可以用Diffpdf(开源软件)来实现对比,效果稍差但也过得去,链接在这。
到这里我们就介绍完了三种LaTeX编译速度优化的方式。总结起来就是:
使用命令限制LaTeX压缩pdf,最终版本再压缩
按照章节组织论文,注释掉暂时无关的章节
能真机使用Linux或Mac的话不要用Windows
另外,也可以探索下Overleaf、TeXPage这种在线的LaTeX写作平台,本人觉得有可能比在本地搞一大堆方便很多,等尝试过后再来分享体验。