今天我发现如果我犯了一个错误在序言中我的 tex 文件Latexmk
仅会产生一次错误。
确切地说,例如如果我的文件看起来像这样
\documentclass{article}
\someWrongCommand{foo}
\begin{document}
bar
\end{document}
那么当然,两者latexmk
都会pdflatex
在行中产生错误\someWrongCommand{foo}
。但是,如果我第二次使用编译文件latexmk
(不更改文件中的任何内容),则letexmk
只会说
Latexmk: All targets (file.pdf) are up-to-date
更重要的是,如果我的文档中有错误(不在序言中) 然后latexmk
正如我所希望的那样一直显示错误(不仅在第一次编译时)。
是否可以使其latexmk
表现得像pdflatex
前导码中存在错误一样?我知道我可以使用latexmk
with-g
选项,但这不是一个解决方案,因为它总是从头开始重新编译所有内容。
我只想latexmk
处理序言中的错误,无论在哪个编译中。
答案1
从latexmk
的角度来看,前言中的错误与正文中的错误处理方式并无不同。如果您发现差异,那是因为您pdflatex
对错误的反应不同。
的行为latexmk
遵循pdflatex
和的行为,如下所示:
- 如果
pdflatex
发现错误并让其退出,则不会创建任何 pdf 文件。任何已存在的 pdf 文件将保持不变。 - 如果您通过继续来响应错误
pdflatex
,则通常会生成一个新的 pdf 文件。(但latexmk
会看到存在错误,并且不会进行后期处理,例如,强制更新预览器。)
在后续运行中,如果 pdf 文件存在且源文件未更改,则latexmk
不会重新运行pdflatex
。这通常是正确的行为,因为(通常)重新运行pdflatex
不会改变错误条件,直到源文件发生更改。如果没有 pdf 文件,后续运行latexmk
将注意到 pdf 文件的不存在,因此(毫无意义地)重新运行pdflatex
并重现错误。(也许我需要latexmk
缓存错误条件的存在,并保存额外的运行。)
如果报告错误,我绝对不想更改latexmk
以删除pdf文件pdflatex
,因为通常的原则latexmk
是它应该尊重它调用的程序的行为。