为什么 latexmk 不处理序言中的错误?

为什么 latexmk 不处理序言中的错误?

今天我发现如果我犯了一个错误在序言中我的 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前导码中存在错误一样?我知道我可以使用latexmkwith-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是它应该尊重它调用的程序的行为。

相关内容