当我尝试构建以下最小文档时,我看到构建失败:
\documentclass{article}
\usepackage{newtxmath}
\usepackage{unicode-math}
\begin{document}
abc
\end{document}
运行xelatex -halt-on-error min.tex
出现如下错误:
! LaTeX error: "kernel/command-already-defined"
!
! Control sequence \not= already defined.
我附上了完整的日志这里而不是问题中的,因为它有点长。有趣的是,颠倒两个包的顺序会显示不同的错误消息:
! LaTeX Error: Command `\arrowvert' already defined.
我正在使用全新安装的 MacTex 2018。如能得到任何帮助我将不胜感激!
答案1
您不应同时加载unicode-math
和传统 (NFSS) 数学字体。如果您想要 的外观newtxmath
,\setmathfont[Scale=MatchLowercase]{TeX Gyre Termes Math}
。还有一个 Times 变体,经过调整后看起来更像newtx
,但您可能想要\setmainfont{TeX Gyre Termes}
。
TeX Gyre Termes 应该包含您需要的任何符号newtxmath
。如果缺少某个符号,您可以使用类似 的字体(如 XITS)导入它\setmathfont[range="220E, Scale=MatchUppercase]{XITS Math}
。
要在数学模式下将 OpenType 或 TrueType 文本字体与旧式数学符号一起使用,请使用mathspec
。要在数学模式下将旧式文本字体与 Unicode 数学字体一起使用,请使用mathastext
。
答案2
没有必要同时加载newtxmath
和unicode-math
。前者在旧版 TeX 引擎 (pdftex) 中实现了 Times 兼容数学字体,后者使用 Unicode 数学字体。因此这两个包在很大程度上是不兼容的。
如果你想要基于 Times 的数学字体,你可以这样做
\usepackage{unicode-math}
\setmathfont{STIX Two Math}
或者
\usepackage{unicode-math}
\setmathfont{TeX Gyre Termes Math}
选择字体的精确语法可能因 TeX 发行版和操作系统设置而异。可能
\setmathfont{STIX2Math.otf}
或者
\setmathfont{texgyretermes-math.otf}
是需要的。
答案3
我假设您希望加载该newtxmath
包,因为它提供了其他数学字体包未提供的一些数学模式字形。
newtx
这对软件包的用户指南的第 10 页(texdoc newtx
在命令提示符下输入以调出此文档)解释了如何使用LuaLaTeX 和 XeLaTeX 下的newtxtext
and/ornewtxmath
软件包。用户指南摘录如下:
据我所知,
newtxmath
它适用于 [XeLaTeX 和 LuaLaTeX],但需要非常具体的加载顺序和选项选择。简而言之,... 在加载和使用之前,必须先加载所有数学选项fontspec
。
例如,下面的代码应该对你有用。请注意,该fontspec
包,但不是使用 时应加载该unicode-math
包(顺便说一下,它会自动加载) 。此外,请注意,应使用 选项加载该包。fontspec
newtxmath
fontspec
no-math
...
\usepackage[T1]{fontenc}
\usepackage{newtxmath}
\usepackage[no-math]{fontspec}
% load a suitable text font
...
或者——egreg 的回答中已经指出了一个想法——继续加载包,unicode-math
但放弃newtxmath
包。相反,考虑使用 Times Roman 克隆数学字体,例如Stix Two Math
(可以Stix Two Text
从 中下载,与 一起下载)http://stixfonts.org/。
这是一个完整的 MWE(最小工作示例):
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{newtxmath}
\usepackage[no-math]{fontspec}
\usepackage{newtxtext}
\begin{document}
$abc$def\emph{ghi}
\end{document}
答案4
也许你需要覆盖newtxmath 与 unicode-math 结合使用,例如,因为您正在使用无条件加载 newtxmath 的日志类文件。此咒语将完成此工作:
\usepackage{expl3} % if necessary
\ExplSyntaxOn
\makeatletter
\@ifpackageloaded{unicode-math}{}{%else
% both newtxmath and unicodemath try to define these, producing
% multiple definition errors
\cs_undefine:c { not= }
\cs_undefine:c { not> }
\cs_undefine:c { not< }
% tweak as you see fit
\usepackage{unicode-math}
\setmathfont[Scale=MatchLowercase]{TeX Gyre Termes Math}
}
\makeatother
\ExplSyntaxOff
我在这里严格使用 expl3 \cs_undefine:c
,它比 2e 等效项(我认为类似于\expandafter\let\csname ... \endcsname\@undefined
— 未经测试)更容易输入。\@ifpackageloaded
用于面向未来:如果类文件的未来版本加载 unicode-math 本身,则该块将自行关闭。