在 make4ht 中使用 -a warning 不会在第一次出现错误时停止

在 make4ht 中使用 -a warning 不会在第一次出现错误时停止

有时我喜欢使用-a warningmake4ht 来减少打印的信息量。

最大的问题是它不会在第一次出错时停止。它会继续运行。

当我改变它时,-a debug它会停止在错误处。

如何使用but 让它在第一个错误时停止?下面是一个加载不存在的图像-a warning的示例。使用以下命令运行a.texZZZ

make4ht -ulm default -a warning  a.tex "htm,mathjax"

这是 MWE

\documentclass[12pt]{book}
\usepackage{graphicx}
\begin{document} 
My document
\includegraphics[width=\textwidth]{ZZZ}
\end{document}

现在注意当我使用时会发生什么-a warning

>make4ht -ulm default -a warning  a.tex "htm,mathjax"
[ERROR]   htlatex: Compilation errors in the htlatex run
[ERROR]   htlatex: Filename Line    Message
[ERROR]   htlatex: ./a.tex  15   LaTeX Error: File `ZZZ' not found.

[ERROR]   htlatex: Compilation errors in the htlatex run
[ERROR]   htlatex: Filename Line    Message
[ERROR]   htlatex: ./a.tex  15   LaTeX Error: File `ZZZ' not found.

[ERROR]   htlatex: Compilation errors in the htlatex run
[ERROR]   htlatex: Filename Line    Message
[ERROR]   htlatex: ./a.tex  15   LaTeX Error: File `ZZZ' not found.

这是它进行的 3 次传递。它没有在第一次出错时停止,而是继续运行。与使用-a debug

make4ht -ulm default -a debug  a.tex "htm,mathjax"
[INFO]    mkparams: Output dir: 
[INFO]    mkparams: Compiler: dvilualatex
etc...
(./a.aux) (/usr/local/texlive/2022/texmf-dist/tex/latex/base/ts1cmr.fd)

! LaTeX Error: File `ZZZ' not found.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...                                              
                                                  
l.15 \includegraphics[width=\textwidth]{ZZZ}
                                          
? 

并且编译停止并且不会进入下一阶段。这就是我想要的。我只想得到同样的效果-a warning

如何做到这一点?在我的构建中,一次 tex4ht 传递可能需要几个小时。我不想等上几个小时才发现有错误而我却没有看到它。我希望我的 makefile 在第一个错误处停止以节省时间。

我确实尝试了所有a 选项

debug, info, status, warning, error, fatal

并且只-a debug在第一次出现错误时停止。fatal不显示任何内容。所以我不知道它在哪里停止,因为屏幕上什么都没有打印(可能是因为没有出现致命错误?)

>make4ht -ulm default -a status  a.tex "htm,mathjax"
[STATUS]  make4ht: Conversion started
[STATUS]  make4ht: Input file: a.tex
[ERROR]   htlatex: Compilation errors in the htlatex run
[ERROR]   htlatex: Filename Line    Message
[ERROR]   htlatex: ./a.tex  15   LaTeX Error: File `ZZZ' not found.
[ERROR]   htlatex: Compilation errors in the htlatex run
[ERROR]   htlatex: Filename Line    Message
[ERROR]   htlatex: ./a.tex  15   LaTeX Error: File `ZZZ' not found.
[ERROR]   htlatex: Compilation errors in the htlatex run
[ERROR]   htlatex: Filename Line    Message
[ERROR]   htlatex: ./a.tex  15   LaTeX Error: File `ZZZ' not found.
[STATUS]  make4ht: Conversion finished

>make4ht -ulm default -a error  a.tex "htm,mathjax"
[ERROR]   htlatex: Compilation errors in the htlatex run
[ERROR]   htlatex: Filename Line    Message
[ERROR]   htlatex: ./a.tex  15   LaTeX Error: File `ZZZ' not found.
[ERROR]   htlatex: Compilation errors in the htlatex run
[ERROR]   htlatex: Filename Line    Message
[ERROR]   htlatex: ./a.tex  15   LaTeX Error: File `ZZZ' not found.
[ERROR]   htlatex: Compilation errors in the htlatex run
[ERROR]   htlatex: Filename Line    Message
[ERROR]   htlatex: ./a.tex  15   LaTeX Error: File `ZZZ' not found.

>make4ht -ulm default -a fatal  a.tex "htm,mathjax"
>

如果有一个选项可以显示与 -a warning 相同级别的输出,但也会像 -a debug 一样在出错时停止,那就太好了

TL 2022

答案1

这是设计使然。该-a debug选项使用默认的 LaTeX 行为,因此它会打印所有终端输出,并在出现错误时停止,就像 LaTeX 默认所做的那样。在所有其他make4ht日志级别中,LaTeX 以非停止模式运行,并读取终端输出make4ht,然后解析错误或警告。

理论上,你可以尝试运行如下命令:

 $ make4ht -m warning -m draft sample.tex "" "" "" "-interaction=errorstopmode

它将传递-interaction=errorstopmode给底层 LaTeX 编译器。它会在出现错误时停止,但由于输出被抑制make4ht,您看不到任何错误消息,编译只会停止并等待您的输入。所以这实际上没什么用。

我认为,在您的情况下,在出现第一个错误时停止编译可能会很有用。TeX 编译器有一个选项,-halt-on-error。您可以使用以下构建文件将此选项与 一起使用make4ht

Make:htlatex { latex_par="-halt-on-error"}

当您现在使用以下命令编译文件时:

$ make4ht -a warning -e build.lua sample.tex

现在,make4ht将在第一个错误时停止处理您的文件,这将加快编译速度。

相关内容