MinionPro、microtype 和 \j - 有没有办法摆脱奇怪的警告?

MinionPro、microtype 和 \j - 有没有办法摆脱奇怪的警告?

当我排版我的免费物理教科书时,我得到了microtype警告

Unknown slot number of character `\j'  

(这种情况只发生在这个字符上,其他字符都不会发生。)多年来,我都收到此消息,无论是在我的 2008 tex 系统上,还是在我全新、完全更新的 2014 texlive 系统中。旧系统显示 microtype.cfg/183(protrusion),新系统 显示microtype.cfg/201(protrusion)

系统使用 MinionPromicrotype和许多其他带有 latex2e 的软件包。我该如何摆脱这个消息?只有microtype和 MinionPro 一起使用时才会出现这个消息。

这是一个触发错误的最小工作示例:

\documentclass{book} 
\usepackage{MinionPro}
\usepackage{microtype}
\usepackage[T1]{fontenc}

\begin{document}
Hallo.
\end{document} 

事实上,如果先加载微类型,错误就会消失。但我读到 MinionPro 不允许这样做。该怎么办?

答案1

编辑:感谢@sebschub,这个问题现在已经修复。


此警告意味着microtype,在读取(突出)设置时,无法将命令转换\j为字体的插槽号。由于 MinionPro 中确实没有无点 j,因此此消息无害且可以忽略 - 它不是错误。

鉴于此警告无害,最简单的解决方案可能是在microtype之前加载MinionPro,正如您所说,这将使消息消失。(我不明白为什么这会成为问题。)另一个解决方案是microtype加载verbose=silent这会将所有警告变成纯粹的信息消息,这样它们只会显示在日志文件中,而不是控制台上(但这适用于全部警告,因此相关警告可能会被忽视)。

现在来解释一下发生了什么:MinionPro取消声明命令\j,因为字体中没有无点 j(或者插槽用于另一个字形)。但是microtype的默认继承设置仍然包含继承对j = \j。因此,在解析这些设置时,microtype会遇到未定义的\j。这也解释了为什么第一次加载时消息会消失microtype:此时,\j仍然是定义的。

因此,正确的解决方案是将 MinionPro 的自定义继承设置添加到mt-MinionPro.cfg,其中包含默认设置(来自microtype.cfg)中的所有内容,但以下设置除外j

\DeclareCharacterInheritance
   { encoding = T1,
     family = {MinionPro-OsF,MinionPro-LF,MinionPro-TOsF,MinionPro-TLF} }
   { A = {\`A,\'A,\^A,\~A,\"A,\r A,\k A,\u A},
     a = {\`a,\'a,\^a,\~a,\"a,\r a,\k a,\u a},
% ...
%     j = {\j},
% ...
     Z = {\'Z,\.Z,\v Z},
     z = {\'z,\.z,\v z}
   }

(如果LY1编码存在突出设置,则其继承设置也必须进行相应调整。)

相关内容