我发现一些只需要一次编译的简单文档在使用时会编译两次latexmk -lualatex
:
$ latexmk -lualatex Homework_5.tex
Rc files read:
/home/firestar/.latexmkrc
Latexmk: This is Latexmk, John Collins, 7 Jan. 2023. Version 4.79.
No existing .aux file, so I'll make a simple one, and require run of *latex.
Latexmk: applying rule 'lualatex'...
Rule 'lualatex': Reasons for rerun
Category 'other':
Rerun of 'lualatex' forced or previously required
------------
Run number 1 of rule 'lualatex'
------------
------------
Running 'lualatex -recorder "Homework_5.tex"'
------------
...
...
Changed files or newly in use/created:
Homework_5.aux
------------
Run number 2 of rule 'lualatex'
------------
------------
Running 'lualatex -recorder "Homework_5.tex"'
------------
Output written on Homework_5.pdf (2 pages, 86722 bytes).
Transcript written on Homework_5.log.
Latexmk: Getting log file 'Homework_5.log'
Latexmk: Examining 'Homework_5.fls'
Latexmk: Examining 'Homework_5.log'
Latexmk: Log file says output to 'Homework_5.pdf'
Latexmk: All targets () are up-to-date
但我仍然找不到为什么它重新运行 lualatex 以及如何阻止它重新运行 lualatex
我发现非常简单的文档只需编译一次,但我不知道是什么触发了重新运行编译。
这是一个将编译两次的示例:家庭作业_5.tex
这是我的 latexmkrc:
sub asy {return system("asy '$_[0]'");}
add_cus_dep("asy","eps",0,"asy");
add_cus_dep("asy","pdf",0,"asy");
add_cus_dep("asy","tex",0,"asy");
答案1
第二次运行的原因是 .aux 文件最后一行发生了变化。最后一行给出了文档中最后一页的编号。在下一次运行 lualatex 时,编译会读取 .aux 文件。它加载的文档或包可以使用有关最后一页的信息,例如,在文档的前面引用它。
在从原始状态第一次运行 lualatex 之前,latexmk 会制作一个简单的 .aux 文件,适用于没有交叉引用等的简单单页文档:
\relax
\gdef \@abspage@last{1}
由于文档长达两页,第一次编译会生成一个 .aux 文件,其中 被1
替换2
。Latexmk 不知道文档是否实际使用了最后一页的信息;如果文档确实使用了该信息,那么第一次编译将使用错误的信息。因此,在发现 .aux 文件被第一次运行 lualatex 更改后,latexmk 会第二次运行 lualatex。.aux 文件中没有进一步的更改,因此不需要进一步运行 lualatex。
在运行 lualatex 之前,latexmk 并不知道文档中的页数,因此无法提供更好的初始 .aux 文件。此外,较长的文档通常有各种交叉引用。带有方程式的文档(如 OP 的文档)通常带有编号的方程式。这些都需要至少第二次运行 *latex。
笔记假设你现在对文档做了一个小改动,但这个改动不会改变页数,也不会导致 aux 文件发生其他变化。那么下次调用 latexmk 时,如果 .aux 文件没有被删除,它将只运行一次 lualatex。