Lualatex + amsthm + polyglossia + CharisSIL = 错误

Lualatex + amsthm + polyglossia + CharisSIL = 错误

下列

\documentclass{article}

\usepackage{amsthm,polyglossia}
\setmainfont{CharisSIL}

\newtheorem{defi}{Definition}

\begin{document}

\begin{defi}
Harmless definition
\end{defi}

\end{document}

当通过 lualatex 运行时,会产生以下错误:

warning  (node filter): error: ...es/MiKTeX/tex/luatex/luaotfload/luaotfload-ha
rf-plug.lua:408: bad argument #1 to 'char' (value out of range)

.
\par ...@m \@noitemerr {\@@par }\fi \else {\@@par 
                                                  }\fi 
l.12 \end{defi}
             
? 

如果我删除 amsthm 或用 Times New Roman 或 Sylfaen 替换 CharisSIL,xelatex 不会出现错误,lualatex 也不会出现错误。

可能是什么原因?

以下是日志:

Command Line:   lualatex.exe --interaction=errorstopmode --synctex=-1 "test.tex"
Startup Folder: C:\Users\me\Desktop\vv

This is LuaHBTeX, Version 1.12.0 (MiKTeX 20.11)
 restricted system commands enabled.
(./test.tex
LaTeX2e <2020-10-01> patch level 2

 L3 programming layer <2020-12-03> xparse <2020-03-03>
("C:/Program Files/MiKTeX/tex/latex/base/article.cls"
Document Class: article 2020/04/10 v1.4m Standard LaTeX document class

...

(./test.aux) ("C:/Program Files/MiKTeX/tex/latex/base/ts1cmr.fd")
warning  (node filter): error: ...es/MiKTeX/tex/luatex/luaotfload/luaotfload-ha
rf-plug.lua:408: bad argument #1 to 'char' (value out of range)

.
\par ...@m \@noitemerr {\@@par }\fi \else {\@@par 
                                                  }\fi 
l.12 \end{defi}
             
? 
[1{C:/Users/me/AppData/Local/MiKTeX/pdftex/config/pdftex.map}] (./test.aux))
 411 words of node memory still in use:
   3 hlist, 1 vlist, 1 rule, 2 glue, 3 kern, 1 glyph, 4 attribute, 49 glue_spec
, 4 attribute_list, 1 write nodes
   avail lists: 2:35,3:14,4:1,5:23,6:2,7:154,9:12,11:6
<C:/Users/me/AppData/Roaming/MiKTeX/fonts/truetype/SIL/charissil/charissil-r.tt
f><C:/Users/me/AppData/Roaming/MiKTeX/fonts/truetype/SIL/charissil/charissil-i.
ttf><C:/Users/me/AppData/Roaming/MiKTeX/fonts/truetype/SIL/charissil/charissil-
b.ttf>

答案1

这是luaotfloadHarfBuzz 渲染器代码中的一个错误,该错误已在开发代码中得到解决。polyglossia强制使用 HarfBuzz 渲染器,从而触发错误,但与此同时,您可以改用节点渲染器,使用 Barbara 或 Davislor 的答案中描述的方法。

答案2

这似乎与 LuaLaTeX HarfBuzz 渲染器有某种关系。当我关闭它时,您的 MWE 会编译:

\documentclass{article}

\usepackage{amsthm}
\usepackage[luatexrenderer=Node]{polyglossia}
\setmainfont{CharisSIL}

\newtheorem{defi}{Definition}

\begin{document}

\begin{defi}
Harmless definition
\end{defi}

\end{document}

无论加载顺序如何,这似乎都可以工作。如果您需要 HarfBuzz 渲染器来渲染其他字体,您也可以将其设置为字体选项。

\documentclass{article}

\usepackage{polyglossia}
\setmainfont{Charis SIL}[Renderer=Node]
\usepackage{amsthm}

\newtheorem{defi}{Definition}

\begin{document}

\begin{defi}
Harmless definition
\end{defi}

\end{document}

另一个解决方法可能是使用 XCharter 作为替代,因为 Charis SIL 基于 Charter。

作为对 Barbara Beeton 的出色解决方法的一个小补充,如果您要进一步向下移动,请务必\usepackage{fontspec}先加载。\setmainfont\usepackage{polyglossia}

答案3

这个答案基于成功的猜测,因为我无法访问 Charis SIL 字体,因此无法测试。

这需要 XeLaTeX 或 LuaLaTeX,因为 Charis SIL 是 8 位(utf8)字体。

必须加载字体 amsthm

\setmainfont{CharisSIL}
\usepackage{amsthm}
\usepackage{polyglossia}

相关内容