我正在做的一个项目需要使用一个不太常见的字符 m̊。与瑞典语中的“带环的 a”不同,Unicode 中不存在此字母的预组合形式,只能通过使用组合字符来创建。然而,让它与 LuaLaTeX 配合使用却是一件令人沮丧的事情。
作为参考,下面是导致问题的代码示例:
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Charis SIL}
\begin{document}
\r{m}abcdefgh
\end{document}
当我尝试使用 LuaLaTeX 编译此代码时,出现以下错误:
("C:/Program Files (x86)/MiKTeX 2.9/tex/generic/oberdiek/ifluatex.sty"))))
("C:/Program Files (x86)/MiKTeX 2.9/tex/generic/oberdiek/pdftexcmds.sty"
("C:/Program Files (x86)/MiKTeX 2.9/tex/generic/oberdiek/ifpdf.sty")
("C:/Program Files (x86)/MiKTeX 2.9/tex/generic/oberdiek/luatex-loader.sty"
(C:/Program Files (x86)/MiKTeX 2.9/scripts/oberdiek/oberdiek.luatex.lua))))error: ...KTeX 2.9/tex/luatex/luaotfload/fontloader-2016-04-27.lua:13071: attempt to index local 'i' (a nil value)
.
l.9
现在,需要注意一些事项。首先,如果我将主字体保留为默认字体,则问题不存在:m̊ 可以很好地显示 Latin Modern。好吧,我说很好,但环的位置不对,看起来很糟糕。此外,Latin Modern 缺少我项目所需的其他一些字符,因此这实际上不是一个选择。现在,这可能使我得出结论,Charis SIL 字体是罪魁祸首,但实际上用 XeLaTeX 编译完全相同的代码可以正常工作,并产生预期的输出:
我推断,该问题与字距调整或诸如此类的问题有关。原因是,问题似乎仅在段落(或框?我不确定正确的术语)中的字符数量超过一定数量后才会发生。例如,以下内容编译正常:
\documentclass{article}
\usepackage{fontspec}
\setmainfont{Charis SIL}
\begin{document}
\r{m}abcdefg
\end{document}
如你所见,这里唯一的区别是我删除了最后的h
。支持这一假设的事实是,以下内容也同样有效:
\r{m}abcdefg
Lorem Ipsum
无论如何,我完全不知道该怎么做。不幸的是,切换到 XeTeX 不是这个项目的选项。