XeLaTeX/fontspec/Hebrew TeX 容量超出,抱歉

XeLaTeX/fontspec/Hebrew TeX 容量超出,抱歉

以下文档(从 Pandoc 问题中提炼)编译失败,出现! TeX capacity exceeded, sorry [input stack size=5000].错误。

\documentclass[hebrew,]{article}
\usepackage{fontspec}
\defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase}
\setmainfont[]{Noto Sans Hebrew}
\usepackage{polyglossia}
\setmainlanguage[]{hebrew}
\date{}

\begin{document}
\section{File test-case.md}\label{file-test-case.md}
A list
\begin{itemize}
\item
  Hello World.
\item
  חַ
\item
  Goodbye World.
\end{itemize}
\end{document}

完整的错误是

! TeX capacity exceeded, sorry [input stack size=5000].
<to be read again> 
                   \q_nil 
l.10 \section{File test-case.md}
                                \label{file-test-case.md}

当我删除该线时它就消失了\defaultfontfeatures

答案1

问题是,带有希伯来语的 polyglossia 重新定义了\rmfamily。它的代码现在包含一个\addfontfeature,并且它隐式调用选项Scale=MatchLowercase

Scale另一边的 -option代码包含\rmfamily。因此有一个\rmfamily调用的循环\rmfamily

您可以使用以下示例测试该问题:

\documentclass{article}
\usepackage{fontspec}

\ExplSyntaxOn
\cs_set:Nn \__fontspec_calc_scale:n
 {
  \group_begin:
    %\rmfamily %breaks
    \fontfamily{\rmdefault}\selectfont %works
    \__fontspec_set_font_dimen:NnN \l__fontspec_tmpa_dim {#1} \font
    \__fontspec_set_font_dimen:NnN \l__fontspec_tmpb_dim {#1} \l_fontspec_font
    \tl_gset:Nx \l__fontspec_scale_tl
     {
      \fp_eval:n { \dim_to_fp:n {\l__fontspec_tmpa_dim} /
                   \dim_to_fp:n {\l__fontspec_tmpb_dim} }
     }
    \__fontspec_info:n {set-scale}
  \group_end:
 }
\ExplSyntaxOff

\setmainfont[Scale=MatchLowercase]{Noto Sans Hebrew}
\usepackage{polyglossia}
\setmainlanguage[]{hebrew}

\begin{document}

{\rmfamily blub }

\end{document}

我不太清楚该怪谁——polyglossia或者fontspec——但总的来说,我认为像这样的用户命令\rmfamily不应该在内部代码中使用fontspec

相关内容