我有一份文件:
\documentclass{article}
\usepackage{fontspec}
\begin{document}
Program the μC, please.
\end{document}
当我使用xelatex
或进行编译lualatex
时,输出中缺少“μ”字符。这是有道理的,因为默认字体不包含该字符,但我需要知道它何时发生。
使用时xelatex
,log
文件包含一个警告:
Missing character: There is no μ in font [lmroman10-regular]:mapping=tex-text!
太棒了。但是lualatex
,输出是错误的,并且找不到任何警告或错误。如何检测 LuaLaTeX 中缺失的字符?
看起来 ConTeXt 可以使用\checkcharactersinfont
或\enabletrackers[fonts.missing]
,而 XeLaTeX 使用 来控制它\tracinglostchars=2
。
答案1
以下是缺失字形的上下文代码的改编版: https://gist.github.com/phi-gamma/5812290。
由于字符表附带加载目前处于实验阶段,不包含必要的元数据。因此,代码需要完整版本的
char-def.lua
来自 Context 分布(从 TL 安装 Context 包就足够了)。
用法:
\startreportmissingglyphs
初始化跟踪器。其对应项\stopreportmissingglyphs
禁用字形检查器。示例:
\startreportmissingglyphs
... some text ...
\stopreportmissingglyphs
如果使用可选参数调用[once]
,
\startreportmissingglyphs
则每个字体的每个缺失字符仅报告一次。示例输出:
请注意,由于所涉及的 Luatex 回调的性质,字形检查器以每个段落为基础进行工作,并
\stopreportmissingglyphs
会强制结束段落。
作为参考,我提供了完整的示例,其中包括来自要点的接口宏的定义:
\documentclass{article}
\usepackage{luacode,fontspec}
%% 1) initialize the tracker code (could go to separate file)
\makeatletter
\directlua{dofile "track-missing-glyphs.lua"}
%% 2) Environment start: the optional argument “once”, in square
%% brackets, requests that the missing glyph message be printed
%% only once per character and font.
\def\startreportmissingglyphs{%
\@ifnextchar[\missingglyphs@start@indeed%
{\missingglyphs@start@indeed[]}%
}
\def\missingglyphs@start@indeed[#1]{%
\directlua{documentdata.missing_glyphs.enable"\luaescapestring{#1}"}%
}
%% 3) Environment stop: we need to force a \par here to
%% have the callback apply to the current paragraph.
\def\stopreportmissingglyphs{%
\endgraf %% paragraph-based callback!
\directlua{documentdata.missing_glyphs.disable()}%
}
\makeatother
%% Usage examples.
\begin{document}
%% Latin modern lacks glyphs for the Greek script so we use that for
%% testing.
\startreportmissingglyphs
Program the μC, please.
%% Works in math mode (different font model) as well.
$f = ma$
\stopreportmissingglyphs
lorem schmipsum
\startreportmissingglyphs[once]
%% With the “once” flag, no message is emitted for repetitions of
%% missing chars.
Θάλαττα, θάλαττα.
\stopreportmissingglyphs
\end{document}