使用 lualatex、TeXlive2024、Linux。
在一個先前的問題,Marcel Krüger 展示如何使用 Lua 來追蹤錯誤。本質上,如果報告任何錯誤,則該代碼會設定一個標誌。最後,我可以使用其他程式碼檢測該標誌,在 PDF 中執行某些操作(修改其元資料),並在終端中寫入最終訊息。我常用這個。很有幫助。
當訊息透過 GenericError 或 GenericWarning 機制傳入時,還有其他方法(簡單的 LaTeX 程式碼 hack)用於設定標誌。
但是當問題導致我丟失字元時,我一直無法使用標誌方法。我 grep forMissing character
和Missing~character
intexmf-dist
沒有成功,所以(至少對於 lualatex)訊息是由二進位產生的。微量元素:
\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,錯誤將被偵測到並在「錯誤、警告、壞框」中報告。
如果使用TeXworks編譯lualatex
,則出現非錯誤訊息,編譯器會繼續到最後,不會停止:
Missing character: There is no ⛾ (U+26FE) in font [lmroman10-regular]:+tlig;!
如果使用TeXworks,則不會在「錯誤,警告,壞框」中偵測到。
Lua 錯誤追蹤不會偵測到遺失字元訊息。我嘗試通過更改error
為(停頓大笑)來破解代碼,warning
但這沒有用。
所以我的問題是,當字元丟失時如何設定標誌?它不需要記錄字元、字體或頁面。只是一個簡單的真/假,我可以偵測到 AtEndDocument。虛擬程式碼:
\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。