在多语种俄语中使用 mathspec 的 \setallmainfonts 会导致编译期间挂起

在多语种俄语中使用 mathspec 的 \setallmainfonts 会导致编译期间挂起

mathspec我刚刚遇到了一个问题,即命令\setallmainfonts和语言设置为俄语的组合polyglossia。我使用的是 MiKTeX 2.9 并使用 XeLaTeX 进行编译,当我将这两者一起使用时,编译会挂起并且无法完成。

我发现在加载俄语和其他语言时,日志文件中存在差异。对于俄语,还有一行加载了类似 babel 简写的内容,而加载其他语言时则不存在。也许这可能与问题有关。

仅当我在文档中实际使用一些数学命令(无论是在环境之间$还是使用equation环境)时才会发生挂起。

这是一个最小的例子:

\documentclass[12pt]{article}
\usepackage{mathspec}
\usepackage{xltxtra}
\setallmainfonts[Mapping=tex-text, Numbers={Lining,Proportional}]{Linux Libertine O}

\usepackage{polyglossia}
\setdefaultlanguage{russian}

\begin{document}
 \begin{equation}
 f(x)=\sigma
 \end{equation}
\end{document}

我正在使用mathspec和,\setallmainfonts因为我想更改数学字体(\setmathsfont也会导致挂起)。因此删除它们不是一个选择。

答案1

您对简写的看法是正确的。加载mathspec会将 重新定义\sigma,使其"处于活动状态,并\let对该字符设置特定的控制序列。polyglossia使用russian选项加载会使其"再次处于活动状态,并覆盖 的先前定义"mathspec还设置"为在数学模式下处于活动状态。但是,在数学模式下使用它会调用polyglossia的意外定义",从而进入无限循环。

由于选项冲突,简单地交换两个包是行不通的fontspec。我们能做的是在加载后恢复mathspec的含义。这必须做,因为那时也会出现问题。"russian\AtBeginDocumentpolyglossia"

\documentclass{article}

\usepackage{mathspec}
\setallmainfonts[Mapping=tex-text, Numbers={Lining,Proportional}]{Linux Libertine O}

\usepackage{polyglossia}
\setdefaultlanguage{russian}

\makeatletter
\begingroup
  \catcode`\"=\active
  \AtBeginDocument{\let"=\eu@active@quote}
\endgroup
\makeatother

\begin{document}
  \begin{equation}
    f(x)=\sigma
  \end{equation}
\end{document}

在我看来,这两个包都有问题:它们在没有明确用户请求的情况下更改了 catcode 和活动字符的定义。

编辑:Polyglossia 错误报告为第 28 期

答案2

尝试这个设置:

\setmathfont{Latin Modern Math}
\setmainfont[Mapping=tex-text, Numbers={Lining,Proportional}]{Linux Libertine O}

如果没有 Latin Modern Math,请使用任何其他数学字体

相关内容