使用 tex4ht 的“--interaction=batchmode”会导致错误被忽视。Make 不知道文件有错误

使用 tex4ht 的“--interaction=batchmode”会导致错误被忽视。Make 不知道文件有错误

这是一个大问题。当使用"--interaction=batchmode"mae4ht 选项来减少终端上打印的内容量时,我发现如果发生编译错误,Make 不会停止并转到下一个文件。只有在使用此选项时才会发生这种情况。

如果没有这个选项,make 就会在出现错误时停止,这正是我想要的。

我比较了pdflatex使用相同选项时的行为,我发现 pdflatex 确实会向 shell 生成一个错误,并且即使使用此选项也会导致它停止。

我无法在这里使用 makefile 来演示这一点,但我使用了 Linux bash 脚本并set -e在顶部使用,它表示当其中的一个命令生成错误时停止脚本。然后制作了一个包含错误的坏 tex 文件。然后在脚本中放入 2 个编译命令。因此,人们会期望只有第一个命令运行,而不会运行第二个命令。对吗?这就是 的情况pdflatex

make4ht它继续运行并执行两个编译命令。这意味着它没有产生错误。

如果我删除“--interaction=batchmode”,那么脚本就会在错误处停止。

这是 MWE。首先是出现错误的 latex 文件foo.tex

\documentclass[letterpaper,12pt,reqno]{amsart}
\begin{document}
%\begin{table}[h]
A
\end{table}
\end{document}

这是build.shpdflatex 的。我看到它运行第一个pdflatex 命令而不是第二个命令,这正是我想要的

#!/bin/bash
set -e
# Any subsequent(*) commands which fail will cause the shell script to exit immediately

echo "command which will cause error"
pdflatex -interaction=batchmode  foo.tex

echo "If you see this message, then Why did the script not exit??"

echo "This should never get here"
pdflatex -interaction=batchmode  foo.tex

现在./build.sh给出

>./build.sh 
command which will cause error
This is pdfTeX, Version 3.141592653-2.6-1.40.24 (TeX Live 2022) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
>

你看,它只运行一次。(由于使用是可以的,所以屏幕上没有输出-interaction=batchmode

现在比较一下 tex4ht 的情况。以下是脚本

#!/bin/bash
set -e
# Any subsequent(*) commands which fail will cause the shell script to exit immediately
echo "command which will cause error"
make4ht  -ulm default -a debug  foo.tex "mathjax,htm" "-cunihtf -utf8"  "" "--interaction=batchmode"

echo "If you see this message, then Why did the script not exit??"

echo "This should never get here"

make4ht  -ulm default -a debug  foo.tex "mathjax,htm" "-cunihtf -utf8"  "" "--interaction=batchmode"

现在

>./build.sh 
command which will cause error
[INFO]    mkparams: Output dir: 
[INFO]    mkparams: Compiler: dvilualatex
[INFO]    mkparams: Latex options: -jobname='foo'  --interaction=batchmode 
....
This is LuaTeX, Version 1.15.1 (TeX Live 2023/dev) 
 restricted system commands enabled.
[INFO]    mkutils: Parse LG
[INFO]    make4ht-lib: parse_lg process file: foo.htm
[INFO]    make4ht-lib: parse_lg process file: foo.htm
[WARNING] domfilter: DOM parsing of foo.htm failed:
[WARNING] domfilter: ...ive/2022/texmf-dist/tex/luatex/luaxml/luaxml-mod-xml.lua:175: Unbalanced Tag (/figure) [char=609]
....
[STATUS]  make4ht: Conversion finished


If you see this message, then Why did the script not exit??

This should never get here


[INFO]    mkparams: Output dir: 
[INFO]    mkparams: Compiler: dvilualatex
[INFO]    mkparams: Latex options: -jobname='foo'  --interaction=batchmode 
...
[INFO]    mkutils: Parse LG
[INFO]    make4ht-lib: parse_lg process file: foo.htm
.....
[STATUS]  make4ht: Conversion finished
>

你看,它没有停止!它运行了两次编译命令。当然,如果我删除,"--interaction=batchmode"那么脚本将在错误处停止。

上述情况导致我的递归 make now 继续运行,即使其中一个文件发生错误,而我却不知道。所以我"--interaction=batchmode"暂时删除它。

我喜欢使用它,因为它减少了屏幕输出量,使得长时间构建时更容易看到东西。

如何在使用“--interaction=batchmode”dvilualatex 出现错误时让 tex4ht 停止,, like pdflatex does? It seems这种模式下不会抛出错误?

TL 2022

答案1

您正在使用的-a debug参数用于调试,而不是常规使用。请改用类似的参数-a warning。它不会打印 LateX 的完整输出,但会显示所有错误和警告。此外,我会使用该-m draft参数,因为它只需要运行一次 LaTeX,以节省一些时间。因此,您的构建文件可能如下所示:

#!/bin/bash
set -e
# Any subsequent(*) commands which fail will cause the shell script to exit immediately
echo "command which will cause error"
make4ht  -ulm draft -a warning  foo.tex "mathjax,htm" "-cunihtf -utf8"  "" ""

echo "If you see this message, then Why did the script not exit??"

echo "This should never get here"

make4ht  -ulm draft -a warning  foo.tex "mathjax,htm" "-cunihtf -utf8"  "" ""

它将产生以下输出:

command which will cause error
[ERROR]   htlatex: Compilation errors in the htlatex run
[ERROR]   htlatex: Filename     Line    Message
[ERROR]   htlatex: ./foo.tex    5        Extra \endgroup.
[ERROR]   htlatex: ./foo.tex    5        LaTeX Error: \begin{document} ended by \end{table}.
[ERROR]   htlatex: ./foo.tex    5        Extra \endgroup.
[WARNING] domfilter: DOM parsing of foo.htm failed:
[WARNING] domfilter: /home/michal/texmf/scripts/lua/LuaXML/luaxml-mod-xml.lua:175: Unbalanced Tag (/figure) [char=609]

可以看到,出现错误之后就无法继续了。

相关内容