如何使用 -interaction=batchmode 但同时在出现错误时停止并显示到终端?

如何使用 -interaction=batchmode 但同时在出现错误时停止并显示到终端?

我做了一个实验,发现使用-interaction=batchmodelualatex 可以最大程度地减少我拥有的一个大型 latex 文件的编译时间。从 77 分钟减少到 45 分钟。全部在 Linux WSL-2 Ubuntu 20.04 上进行。这甚至比使用lualatex foo.tex >/dev/null (55 分钟)更快,因为输出直接从源头消除,甚至不需要将输出重定向到/dev/null

http://latexref.xyz/Command-line-options.html

因此我想修改我的 Makefile 来使用它。最大的问题是,当错误发生时,我不再能在屏幕上看到它们。所有内容都进入日志文件。

有没有办法使用它-interaction=batchmode但让它停止在屏幕上显示错误?否则,我现在每次都必须打开日志文件来查看文件编译时是否有错误。

这并不切实际,因为我有数万个 Latex 文件需要编译,并且我需要在发生错误时停下来查看错误消息,而不是稍后再查看。

这是一个有错误的 MWE

\documentclass{report}%   
\begin{document}

This is a test

\sin x
\end{document}

现在

>lualatex -interaction=batchmode foo.tex
This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)
 restricted system commands enabled.
>

屏幕上什么都没显示。错误确实出现在日志文件中。我也试过了

>lualatex -halt-on-error -interaction=batchmode foo.tex
This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)
 restricted system commands enabled.
>

有没有办法让批处理模式在屏幕上显示编译错误然后停止?

我只使用 Lualatex。

更新

感谢提示,只需检查 Lualatex 的存在状态即可确定它是否成功完成。无需查看日志文件。

在此处输入图片描述

答案1

如果您只想确定是否发生了错误,您可以查看命令的退出状态lualatex:如果没有发生错误,则为 0,否则为 1。如果发生错误,您可以查看日志文件。

如果您想直接查看错误,您也可以使用 Lua 回调。

mybatchmode.lua创建包含以下内容的文件

texconfig.interaction = 0           -- Activate batchmode
texconfig.halt_on_error = true -- Stop at first error

callback.register('show_error_message', function(...)
  texio.write_nl('term and log', status.lasterrorstring)
  texio.write('term', '.\n')
end)
callback.register('show_lua_error_hook', function(...)
  texio.write_nl('term and log', status.lastluaerrorstring)
  texio.write('term', '.\n')
end)

然后运行

lualatex -lua=mybatchmode.lua file

对于您问题中的示例文件,这将导致

This is LuaHBTeX, Version 1.15.0 (TeX Live 2022)
 restricted system commands enabled.
! Missing $ inserted.

答案2

您可以使用

lualatex --interaction=batchmode file || cat file.log

所以它只显示登录错误

相关内容