这个最小的工作示例无法在我的计算机上的 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
如果您想在数学中使用文本数字,请删除该选项。