![在出现错误的 tex 文件上运行 latexmk 时,第二次运行不会报告任何错误](https://linux22.com/image/291026/%E5%9C%A8%E5%87%BA%E7%8E%B0%E9%94%99%E8%AF%AF%E7%9A%84%20tex%20%E6%96%87%E4%BB%B6%E4%B8%8A%E8%BF%90%E8%A1%8C%20latexmk%20%E6%97%B6%EF%BC%8C%E7%AC%AC%E4%BA%8C%E6%AC%A1%E8%BF%90%E8%A1%8C%E4%B8%8D%E4%BC%9A%E6%8A%A5%E5%91%8A%E4%BB%BB%E4%BD%95%E9%94%99%E8%AF%AF.png)
我在 Jenkins 服务器上使用 latexmk 将大量 tex 文件编译为 PDF,其中一些 tex 文件已知有错误。我想尽可能减少构建时间,为了实现这一点,我尝试在运行前不清理 latexmk (-gg) 选项,但这会在第二次运行时给出错误的输出。
考虑以下 tex 文件
\documentclass{article}
\usepackage{graphics}
\begin{document}
Trying to include missing file
\includegraphics{missing_file}
\end{document}
如果我运行这个
latexmk -latexoption=-interaction=nonstopmode mwe.tex
第一次返回
<lines deleted...>
latex: Command for 'latex' gave return code 256
Latexmk: Use the -f option to force complete processing,
unless error was exceeding maximum runs of latex/pdflatex
第二次(没有报错,返回码为0)
Latexmk: This is Latexmk, John Collins, 10 Nov 2013, version: 4.39.
**** Report bugs etc to John Collins <collins at phys.psu.edu>. ****
Latexmk: All targets (mwe.dvi) are up-to-date
有没有办法避免这种行为而不使用-gg
选项
更新:
我尝试echo X|latex -interaction=errorstopmode mwe.tex
在 Ubuntu 和 Windows 上运行并且它确实有效,即它确实产生了任何输出文件。
然而,使用真实的 tex 文件,会生成 dvi 文件。我将尝试想出一个发生这种情况的 MWE。
答案1
对于那些“已知包含错误”的文件,它们是您想要修复的错误,还是它们会永远留在这里?
显然,即使出现错误,nonstopmode
和都会生成输出文件。这会让人误以为文件实际上是最新的。batchmode
latexmk
因此,作为第一种情况下的肮脏的解决方法(您将在某一天修复错误),您可以使用以下任一命令行进行编译:
echo X | latex -interaction=errorstopmode main.tex
echo X | latex -interaction=scrollmode main.tex
效果是在X
编译器第一次(也是最后一次)询问问题时发出(中止编译),即如果出现错误*。使用errorstopmode
,它会在任何错误时取消编译,而使用 ,scrollmode
它只会在出现严重错误(如文件丢失)时取消编译。
要与 一起使用latexmk
,您可以添加以下.latexmkrc
行:
$latex = 'echo X | latex -interaction=errorstopmode %O %S';
结果是所有有错误的文件都不会产生任何输出。
如果即使出现错误您仍希望获得输出,或者修复错误不是一种选择,则问题会变得更加困难,因为latexmk
必须将“已知”错误与不需要的错误区分开来。
您可以使用-f
命令行开关(强制处理)来完全latexmk
忽略错误。我不确定这是否会再次使构建时间过长。
或者,您可以尝试向编译器隐藏已知错误。例如,对于丢失的文件,您可以按照这个问题。
*。如果您在创建文档时将交互用于其他目的,它将不起作用。但那为什么要使用呢latexmk
?