如何将LaTeX警告视为错误

时间:2010-07-14 09:36:01

标签: latex warnings miktex

我正在使用MiKTeX 2.8 distibution for Windows。

我们主要开发软件,并使用LaTeX来制作用户说明。我们使用LaTeX是因为:

  • 在跟踪更改等的源代码控制下非常棒。
  • 与Word文档不同,源文件不会突然变得腐败。
  • 多个文档可以共享单个部分,因此我们可以将DRY原则应用于我们的文档,并避免某些文档与其他文档不同步。你可以在Word中拥有主文档,但我发现它们像地狱一样片状。

作为构建服务器上无人参与构建过程的一部分,我们使用MiKTeX的texify可执行文件构建文档。这很有效。

但是,当开发人员出错时(例如\ ref为不存在的\标签)会出现问题。这样的错误只会在LaTeX中生成警告。 texify没有注意到这个警告,我们在文档中留下了错误。

我目前有一个构建步骤,它会扫描日志文件以查找以“LaTeX Warning”开头的行,如果存在则无法构建。这有效,但显然非常不稳定,可能会让警告漏掉。它目前不用于开发机器上的本地构建,但如果这是唯一的方法,我可能必须将它与我们当前使用的编辑器集成(TeXworks随MiKTeX一起提供)。

如果出现任何未定义引用等警告,我想使构建失败,而我宁愿不对日志文件进行片状扫描。有什么能提供这个功能吗?

如果我可以在开发机器以及构建服务器上的本地构建中使用此功能,那将是一个巨大的奖励。

2 个答案:

答案 0 :(得分:4)

以下(未经测试的)代码应将任何警告变为错误:

\renewcommand{\GenericWarning}[2]{\GenericError{#1}{#2}{}{This warning has been turned into a fatal error.}}

然后您可能会对silence包感兴趣,以过滤警告。

但是,您还需要安排仅在最后一次运行LaTeX时执行此操作,因为在第一次运行期间会出现一些警告,例如未定义的引用。

具有良好LaTeX支持的编辑器会告诉您是否需要重新运行LaTeX(TeXworks不会这样做吗?)。他们通过解析控制台输出或日志文件来完成它。它实际上是相当健壮的(如果你真的担心你可以重新定义\GenericWarning为所有警告添加一个特征字符串)。我认为解析日志是正确的做法。

将此视为针对文档运行的测试。如果存在未定义的引用,则文档构建成功。构建产品是pdf(或其他)和TeX日志。检查日志中的警告是一种测试。

答案 1 :(得分:1)

最好通过Latex工作管理来做到这一点,但我不知道如何做到这一点。

这是一些可能有用的未经测试的胶带:

\def\exitfromtex{\nonstopmode\read16to\dummy}
\let\writerrmessage\errmessage
\def\errmessage#1{\writerrmessage{#1}\exitfromtex}

它可以放入一个包文件中,您需要您的文档管理员包含或烘焙到您的本地Latex .fmt文件中。