microtype 产生数十个未知插槽号警告

microtype 产生数十个未知插槽号警告

使用 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,可能包括所有重音字符。我使用 、 和 (我测试的所有字体)时都遇到了同样CardoGentium 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

相关内容