![XeLaTeX/fontspec/Hebrew TeX 容量超出,抱歉](https://linux22.com/image/356959/XeLaTeX%2Ffontspec%2FHebrew%20TeX%20%E5%AE%B9%E9%87%8F%E8%B6%85%E5%87%BA%EF%BC%8C%E6%8A%B1%E6%AD%89%20.png)
以下文档(从 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
。