直到最近,我总是按照这些步骤来编译我的文档pdflatex -> makeindex/biber -> pdflatex -> pdflatex
(如果有必要,则使用中间步骤)。
Latexmk
对我来说,一个命令就可以完成所有必要的步骤,但我怀疑这样做有一个缺点,是什么?我能想到的一个缺点是,它可能会运行不必要的步骤,因此速度会慢一点,或者这根本不是事实?使用有什么缺点吗latexmk
?
答案1
(作为的作者latexmk
,我自然对我自己的程序有偏见,但无论如何,这是我的看法。)
解决的根本问题latexmk
是,所需的运行次数(pdf)latex
高度动态地依赖于文档和所使用的类文件。如果对文档进行小幅更改,通常只(pdf)latex
需要重新编译一次,但并非总是如此。但在某些情况下,始终需要至少 4 次运行。因此,运行固定的程序序列肯定不是最佳的。 Latexmk
旨在尽可能可靠地执行正确数量的相关程序运行,同时仅使用与被调用程序相比的少量资源;在正常情况下,大部分运行时间都用于(pdf)latex
。
它使用的方法是确定所有输入文件的集合,并有效地测试自上次运行以来内容的变化。如果输入文件的内容发生了变化,则进行新的编译。对于普通文档,此过程可以正常工作。
的另一个优点latexmk
是,如果您的文档包含需要从图形编辑器(例如 xfig)的原始格式转换的图形文件,则latexmk
可以配置为自动转换为所需的格式(pdf)latex
,例如 .pdf 或 .eps。对于人类来说,这是一个机械步骤,偶尔很容易忘记,尤其是在包含数十或数百个图形元素的文档中。
我知道的唯一一个经常latexmk
进行额外运行的常见情况是,在 OP 提到的案例中,在 的第二次和第三次运行之间latexmk
进行一次额外的运行。这样做是因为 .aux 文件在 的第二次运行后发生了变化,并且不知道发生的特定变化实际上与 的输出无关。运行的额外时间很少,因此似乎不值得进行额外的测试来优化它。bibtex
pdflatex
pdflatex
latexmk
bibtex
bibtex
至于何时latexmk
运行次数不足,我所知道的情况是文档编译运行外部程序或luatex
代码来处理外部文件。在这些情况下,latexmk
通常不知道外部文件,因为正在运行的编译不会报告文件名,尽管这可以修复。但是,对于大多数创建 LaTeX 文档的人来说,这种情况不会发生。