当 LaTeX 编译出错时,请不要让我手动中止编译。

72
此处所建议的,latexmk是一种方便的方式,可以在源代码更改时持续编译文档。但是,当您在编写文档时,可能会出现错误,并且latex将在继续前等待用户输入。这可能会非常恼人,特别是当我编写了一些东西直接从etherpad文档中编译latex时,它会在您输入时自动保存。

是否有关于latexlatexmk的设置,使其在无法编译时仅中止并显示错误消息?或者,如果必要,如何设置某种期望脚本来自动忽略LaTeX的投诉?

(我曾认为pdflatex的选项-halt-on-error会奏效,但显然不行。)

奖励问题:Skim在Mac OSX上是一个很好的pdf查看器,每当pdf更改时都会自动刷新(不像Preview),但是每当出现latex错误时,它都会让您重新确认是否想要自动刷新。Texniscope没有这个问题,但我因其他原因放弃了Texniscope。有办法使Skim始终自动刷新,或者还有其他可以正确实现此功能的查看器吗?


添加:基于此问题的答案的latexmk小教程:

  1. 在此处获取latexmkhttp://www.phys.psu.edu/~collins/software/latexmk-jcc/

  2. 将以下内容添加到您的〜/ .latexmkrc文件中:

    $pdflatex = 'pdflatex -interaction=nonstopmode';
    

    (适用于 macOS 与 Skim)

    $pdf_previewer = "open -a /Applications/Skim.app";
    
  3. 在编辑源文件 foo.tex 时,在终端运行以下命令:

  4. latexmk -pvc -pdf foo.tex
    
  5. 使用Skim或另一个实时pdf查看器查看foo.pdf。 对于Skim,只需查看Skim首选项中的“同步”选项卡,并为您的编辑器设置它。

  6. 完成!在foo.tex上点击保存现在将会刷新foo.pdf而无需做任何操作。


3
Skim仍然阻碍着一个本来完美的解决方案。即使没有错误,它经常会冻结并显示“无法加载文件”,直到我点击“确定”才能继续。我只想要一个从不打扰我的PDF阅读器! - dreeves
2
你有关于如何在Etherpad中实现这个功能的教程吗? - Rafael S. Calsaverini
我使用-halt-on-error,对我来说很有效。或者说,我不太明白你遇到了什么问题。 关于Skim,我也是这样,没有更好的替代品...最好是与开发人员交流,推动该功能的实现,我想。 - Damien Pollet
您能把您的迷你教程移到一个答案中吗?它不是问题的一部分。 - Paŭlo Ebermann
在使用latexmk时,您也可以直接使用“-interaction = nonstopmode”选项来避免在错误上停止。这对于TexMaker非常重要,因为它会在任何错误上挂起与latexmk。您应该将该选项添加到latexmk命令中,在“选项>配置TexMaker>命令”中进行配置。 - ravemir
4个回答

44

使用MikTeX,pdflatex具有此命令行选项:

  -interaction=MODE               Set the interaction mode; MODE must be one
                                  of: batchmode, nonstopmode, scrollmode,
                                  errorstopmode.

@9999years提出的编辑意见:

这些值相当于一组LaTeX \commands,提供了相同的功能。

来自TeX使用技巧

模式使得TeX以以下方式运行:

  • errorstopmode在所有错误(无论是关于源代码中的错误还是不存在的文件)时都会停止。

  • scrollmode不会在源代码中的错误上停止,但在出现更严重的错误(如缺少文件)时请求输入。

  • 在有点名字不太准确的nonstopmode下,TeX在出现严重错误后不会请求输入,而是完全停止。

  • batchmode防止除那些输出之外的所有输出(用于自动化脚本)。在所有情况下,所有错误都被写入日志文件(yourtexfile.log)。


8
这不仅适用于MixTeX或甚至LaTeX - 据我所知,它从Knuth的第一个版本的TeX就存在了。 - ShreevatsaR
2
即使它不存在,我已经使用echo q|pdflatex一段时间来实现这个目的;效果还不错 :) - Joey
2
我在弄清楚那些模式实际上是什么意思方面遇到了麻烦。手册中写道,“这些模式的含义与相应的 \commands 相同”。它所说的“\commands”是指什么? - dreeves
6
回答:它谈论的是原始的TeX命令,我认为我需要使用nonstopmode:在控制台上显示所有错误,但不提示。 errorstopmode是通常的模式。 scrollmode对于某些错误(如缺少文件)停止。 batchmode既不停止也不将错误输出到控制台。 - dreeves

7
你还可以在tex文件的开头加上\nonstopmode\batchmode; 这样它将适用于任何TeX版本,而不仅仅是pdflatex。有关这些和相关命令的更多信息,请参见David Bausum编写的非常好的(原始)TeX命令参考资料。特别是来自调试系列的命令可能会对此处感兴趣。

这非常有帮助! - Marya

3

另一种可能的黑客攻击方法是简单地使用:

yes x | latexmk source.tex

如果您经常使用这个选项,您可以为“yes x | latexmk”创建一个别名。我认为与其他建议相比的主要优点是,当您偶尔想让latexmk表现得像这样时,它非常快速。

Mehmet


0

还有一个\batchmode命令可以完成这项工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接