Verwenden Sie Lua, um Schriftartwarnungen zu kennzeichnen

Verwenden Sie Lua, um Schriftartwarnungen zu kennzeichnen

Verwende lualatex, TeXlive2024, Linux.

In einem (nfrühere FrageMarcel Krüger zeigte, wie man Lua zur Fehlerverfolgung verwenden kann. Im Wesentlichen setzt dieser Code eine Flagge, wenn ein Fehler gemeldet wurde. Am Ende kann ich die Flagge mit anderem Code erkennen, etwas im PDF tun (seine Metadaten ändern) und eine abschließende Nachricht im Terminal schreiben. Ich verwende das ständig. Sehr hilfreich.

Es gibt andere Methoden (einfache LaTeX-Code-Hacks), um ein Flag zu setzen, wenn eine Nachricht über den GenericError- oder GenericWarning-Mechanismus kommt.

Ich konnte die Flag-Methode jedoch nicht verwenden, da das Problem durch ein fehlendes Zeichen verursacht wurde. Ich habe erfolglos nach Missing characterund Missing~character in gesucht texmf-dist, daher wird (zumindest für lualatex) die Meldung von der Binärdatei generiert. MWE:

\documentclass{article}
% Compile with lualatex, which uses fontspec and Latin Modern Roman.
\begin{document}
I could use a ⛾ right now.
\end{document}

Bei der Kompilierung mit pdflatextritt dieser Fehler auf: ! LaTeX Error: Unicode character ⛾ (U+26FE) not set up for use with LaTeX. Der Compiler hält an dieser Stelle an. Wenn der Benutzer nach der Fehlermeldung weitermacht, wird ein PDF erstellt. Bei Verwendung von TeXworks wird der Fehler erkannt und unter „Fehler, Warnungen, fehlerhafte Boxen“ gemeldet.

Beim Kompilieren mit lualatexgibt es eine Meldung, die keinen Fehler enthält, und der Compiler fährt bis zum Ende fort, ohne anzuhalten: Missing character: There is no ⛾ (U+26FE) in font [lmroman10-regular]:+tlig;! Bei Verwendung von TeXworks wird es unter „Fehler, Warnungen, fehlerhafte Boxen“ nicht erkannt.

Die Lua-Fehlerverfolgung erkennt die Meldung über fehlende Zeichen nicht. Ich habe versucht, den Code zu hacken, indem ich errorihn geändert habe warning(Pause zum Lachen), aber das hat nicht funktioniert.

Meine Frage ist also, wie kann ich ein Flag setzen, wenn ein Zeichen fehlt? Es muss weder das Zeichen, noch die Schriftart, noch die Seite aufgezeichnet werden. Nur ein einfaches Wahr/Falsch, das ich AtEndDocument erkennen kann. Pseudocode:

\documentclass{article}
\newif\iffoo
\directlua{
% This would be the code that sets the foo flag, if missing character.
}
\AtEndDocument{\iffoo\typeout{EEEEEEEK}\fi}
\begin{document}
I could use a ⛾ right now.
\end{document}

Der Fallback-Font-Mechanismus ist mir übrigens bekannt. Wird ein Fallback verwendet, wird die Meldung über fehlende Zeichen nur dann generiert, wenn diese auch im Fallback fehlen.

Warum ich das tun möchte: In meinem Workflow muss ein problematisches PDF Metadaten enthalten, die es als nicht fertig kennzeichnen. Ich weiß, wie man diese Metadaten in „AtEndDocument“ schreibt.

Nachträglicher Einfall: Optional aktiviere ich das lua-typoPaket, um Lesbarkeitsprobleme zu erkennen, die keine PDF-Probleme sind. Erstaunlich.

Antwort1

Das LuaTeX-Register \tracinglostcharssollte auf 3 gesetzt werden. Dann verhält sich das fehlende Zeichen in der aktuellen Schriftart wie ein normaler Fehler.

verwandte Informationen