wie kann ich -interaction=Batchmode verwenden, aber gleichzeitig anhalten und im Terminal anzeigen, wenn ein Fehler auftritt?

wie kann ich -interaction=Batchmode verwenden, aber gleichzeitig anhalten und im Terminal anzeigen, wenn ein Fehler auftritt?

Ich habe ein Experiment durchgeführt und festgestellt, dass die Verwendung -interaction=batchmodemit lualatex die Kompilierungszeit bei einer meiner großen Latex-Dateien am meisten reduziert. Von 77 Minuten auf 45 Minuten. Alles auf Linux WSL-2 Ubuntu 20.04. Dies war sogar noch schneller als die Verwendung lualatex foo.tex >/dev/null (55 Minuten), da die Ausgabe direkt aus der Quelle eliminiert wurde und nicht einmal die Ausgabe umgeleitet werden musste/dev/null

http://latexref.xyz/Befehlszeilenoptionen.html

Deshalb möchte ich meine Makefiles ändern, um dies zu verwenden. Das große Problem ist, dass ich die Fehler jetzt nicht mehr auf dem Bildschirm sehe, wenn sie auftreten. Alles geht in die Protokolldatei.

Gibt es eine Möglichkeit, es zu verwenden -interaction=batchmode, aber zu stoppen?Undden Fehler auf dem Bildschirm anzeigen? Ansonsten muss ich jetzt jedes Mal die Logdatei öffnen, um zu sehen, ob die Datei mit oder ohne Fehler kompiliert wurde.

Dies ist nicht praktikabel, da ich Zehntausende von Latex-Dateien kompilieren muss und anhalten und die Fehlermeldung sehen muss, wenn sie auftritt, und nicht später.

Hier ist ein MWE mit einem Fehler

\documentclass{report}%   
\begin{document}

This is a test

\sin x
\end{document}

Jetzt

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

Auf dem Bildschirm wird nichts angezeigt. Der Fehler wird in der Protokolldatei angezeigt. Ich habe auch versucht

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

Gibt es eine Möglichkeit, im Batchmodus die Kompilierungsfehler auf dem Bildschirm anzuzeigen und dann zu stoppen?

Ich verwende nur Lualatex.

Aktualisieren

Dank des Hinweises genügt es, den Exist-Status von Lualatex zu überprüfen, um herauszufinden, ob der Vorgang erfolgreich abgeschlossen wurde oder nicht. Ein Blick in die Protokolldatei ist nicht nötig.

Bildbeschreibung hier eingeben

Antwort1

Wenn Sie lediglich feststellen möchten, ob ein Fehler aufgetreten ist oder nicht, können Sie sich den Exit-Status des lualatexKommandos ansehen: Er ist 0, wenn kein Fehler aufgetreten ist, andernfalls ist er 1. Im Fehlerfall können Sie dann in die Log-Datei schauen.

Wenn Sie Fehler direkt sehen möchten, können Sie auch Lua-Rückrufe verwenden.

Erstellen Sie eine Datei mybatchmode.luamit

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)

und dann laufen

lualatex -lua=mybatchmode.lua file

Für die Beispieldatei in Ihrer Frage würde dies bedeuten:

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

Antwort2

Sie können

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

es wird also nur der Anmeldefehler angezeigt

verwandte Informationen