lualatex、TeXlive2024、Linux を使用します。
で以前の質問、Marcel Krüger は、エラーを追跡するために Lua を使用する方法を示しました。本質的には、そのコードは、エラーが報告された場合にフラグを設定します。最後に、他のコードでフラグを検出し、PDF で何かを実行し (メタデータを変更)、ターミナルに最終メッセージを書き込むことができます。私はこれをいつも使用しています。非常に役に立ちます。
GenericError または GenericWarning メカニズムを介してメッセージが届いたときにフラグを設定するための他の方法 (単純な LaTeX コード ハック) があります。
しかし、文字が欠落しているために問題が発生している場合は、フラグ メソッドを使用できませんでした。 と を grep しましたがMissing character
成功しませんでしMissing~character
たtexmf-dist
。そのため、(少なくとも lualatex の場合) メッセージはバイナリによって生成されます。 MWE:
\documentclass{article}
% Compile with lualatex, which uses fontspec and Latin Modern Roman.
\begin{document}
I could use a ⛾ right now.
\end{document}
でコンパイルするとpdflatex
、次のエラーが発生します:
! LaTeX Error: Unicode character ⛾ (U+26FE) not set up for use with LaTeX.
コンパイラはそこで停止します。ユーザーがエラー メッセージを無視して続行すると、PDF が生成されます。TeXworks を使用している場合、エラーが検出され、「エラー、警告、不良ボックス」の中に報告されます。
でコンパイルされた場合lualatex
、エラー以外のメッセージが表示され、コンパイラは停止せずに最後まで続行します。TeXworks
Missing character: There is no ⛾ (U+26FE) in font [lmroman10-regular]:+tlig;!
を使用する場合、「エラー、警告、不良ボックス」の中には検出されません。
Lua エラー追跡では、欠落した文字のメッセージが検出されません。 (笑いながら一時停止)error
に変更してコードをハッキングしようとしましたwarning
が、うまくいきませんでした。
そこで質問なのですが、文字が欠落しているときにフラグを設定するにはどうしたらよいのでしょうか? 文字やフォント、ページを記録する必要はありません。AtEndDocument を検出できる単純な true/false だけです。疑似コード:
\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}
ちなみに、私はフォールバック フォントのメカニズムを認識しています。フォールバックが使用されている場合、フォールバックでも文字が欠落している場合にのみ、欠落文字メッセージが生成されます。
これを実行する理由: 私のワークフローでは、問題のある PDF には、準備ができていないことをマークするメタデータが含まれている必要があります。そのメタデータを AtEndDocument に書き込む方法はわかっています。
追記: オプションで、lua-typo
PDF の問題ではない可読性の問題を検出するパッケージを有効にします。すばらしい。
答え1
LuaTeX レジスタは\tracinglostchars
3 に設定する必要があります。そうすると、現在のフォントで欠落している文字は通常のエラーとして動作します。