软件包冲突 fontspec eulervm amsmath

软件包冲突 fontspec eulervm amsmath

这个最小的工作示例无法在我的计算机上的 lualatex 下编译:

\documentclass{article}
\usepackage{fontspec}
\usepackage{eulervm}
\usepackage{amsmath}

\begin{document}
foo
\end{document}

结果是:

(/usr/local/texlive/2015/texmf-dist/tex/latex/amsmath/amsopn.sty)
Runaway argument?
undefined\@nil \hat  \@tempa {\check } \@tempa {\tilde } \@tempa {\acute \ETC.
! Paragraph ended before \@tempb was complete.
<to be read again> 
\par 
l.950         \noindent##1\par
                            }%

我正在使用 MacTeX 2015,所有软件包都已更新。

答案1

虽然 egreg 正确地观察到改变包顺序可以解决这个问题,但测试amsmath.sty可以改变(Barbara:-)以避免失败,特别是它无法处理它正在测试的未定义的重音命令(因为\meaning在这种情况下没有预期的形式)作为测试这使得原始命令只给出警告而不是奇怪的内部错误

\documentclass{article}
\usepackage{fontspec}
\usepackage{eulervm}
\def\hat{?? }
\def\check{?? }
\def\tilde{?? }
\def\acute{?? }
\def\grave{?? }
\def\dot{?? }
\def\ddot{?? }
\def\breve{?? }
\def\bar{?? }
\def\vec{?? }

\usepackage{amsmath}

\begin{document}
foo
\end{document}

一个可能的解决方法是,如果 amsmath.sty (第 578-9 行)说

\def\@tempa#1{\@xp\@tempb\meaning#1\@nil#1>? \@nil#1\\}
\def\@tempb#1>#2#3 #4\@nil#5#6\\{%

代替

\def\@tempa#1{\@xp\@tempb\meaning#1\@nil#1}
\def\@tempb#1>#2#3 #4\@nil#5{%

答案2

修复软件包的顺序;一般来说,amsmath应该在 之前加载fontspec。此外,如果您打算声明\setmainfont,您还需要修复由于eulervm在 XeTeX 和 LuaTeX 发挥作用之前编写的编码问题。

\documentclass{article}

\usepackage{amsmath}
\usepackage[euler-digits]{eulervm}
\usepackage{fontspec}

% fix the font used for operators and \mathrm
\DeclareSymbolFont{operators}{\encodingdefault}{\familydefault}{m}{n}

\begin{document}
foo $1+\sin x$
\end{document}

euler-digits如果您想在数学中使用文本数字,请删除该选项。

在此处输入图片描述

相关内容