有时我喜欢使用-a warning
make4ht 来减少打印的信息量。
最大的问题是它不会在第一次出错时停止。它会继续运行。
当我改变它时,-a debug
它会停止在错误处。
如何使用but 让它在第一个错误时停止?下面是一个加载不存在的图像-a warning
的示例。使用以下命令运行a.tex
ZZZ
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
将在第一个错误时停止处理您的文件,这将加快编译速度。