使用 TeX Live 2017 时,microtype
已开始产生数十个未知插槽号警告。使用 TeX Live 2016(完全更新)时不会发生这种情况。以下是 MWE:
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Georgia}
\usepackage[english]{babel}
\usepackage{microtype}
\begin{document}
Test.
\end{document}
这会产生几十条警告,首先是这两条:
Package microtype Warning: Unknown slot number of character
(microtype) `\`A'
(microtype) in font encoding `TU' in inheritance list
(microtype) `microtype.cfg/358(protrusion)'.
Package microtype Warning: Unknown slot number of character
(microtype) `\'A'
(microtype) in font encoding `TU' in inheritance list
(microtype) `microtype.cfg/358(protrusion)'.
该列表一直到 z,可能包括所有重音字符。我使用 、 和 (我测试的所有字体)时都遇到了同样Cardo
的Gentium Plus
错误Times New Roman
。
这似乎是一个错误。
答案1
这是由于 latex 声明 unicode 字符的旧式(LICR)输入的方式发生了变化(警告仅在TU
使用编码时出现,即使用 xelatex 或 lualatex 时,并且仅针对microtype
包含 LICR 输入的设置 - 在您的情况下为默认设置)。
编辑:该问题已在 2.7 版中修复microtype
。
针对旧版本microtype
软件包的解决方案:
\makeatletter
\def\MT@is@composite#1#2\relax{%
\ifx\\#2\\\else
\expandafter\def\expandafter\MT@char\expandafter{\csname\expandafter
\string\csname\MT@encoding\endcsname
\MT@detokenize@n{#1}-\MT@detokenize@n{#2}\endcsname}%
% 3 lines added:
\ifx\UnicodeEncodingName\@undefined\else
\expandafter\expandafter\expandafter\MT@is@uni@comp\MT@char\iffontchar\else\fi\relax
\fi
\expandafter\expandafter\expandafter\MT@is@letter\MT@char\relax\relax
\ifnum\MT@char@ < \z@
\ifMT@xunicode
\edef\MT@char{\MT@exp@two@c\MT@strip@prefix\meaning\MT@char>\relax}%
\expandafter\MT@exp@two@c\expandafter\MT@is@charx\expandafter
\MT@char\MT@charxstring\relax\relax\relax\relax\relax
\fi
\fi
\fi
}
% new:
\def\MT@is@uni@comp#1\iffontchar#2\else#3\fi\relax{%
\ifx\\#2\\\else\edef\MT@char{\iffontchar#2\fi}\fi
}
\makeatother