最近我开始研究 LuaTeX,不得不说,随着我发现的每一个功能,我越来越喜欢它。所以我决定将我的 pdfTeX 前言转移到 LuaTex,检查哪些包仍然有效,哪些包需要替换。
我使用mathtools
带有 pdfTeX 的软件包,因为它具有centercolon
和\smashoperator
功能。不幸的是,它似乎与unicode-math
LuaTeX 下的软件包发生冲突。归结为:
\documentclass{minimal}
\usepackage{mathtools}
\usepackage{unicode-math}
\setmathfont{Latin Modern Math}
\mathtoolsset{centercolon}
\begin{document}
\[:=\coloneq\coloneqq\eqcolon\eqqcolon:=\]
\end{document}
结果是
! Invalid math code.
<to be read again>
\let
l.5 \mathtoolsset{centercolon}
使用 MiKTeX 2.9 下的 LuaTex beta-0.70.1。它似乎unicode-math
知道这个mathtools
包,因为它在日志文件中警告说一些命令已被重新定义。
编辑:如上所述,我没有在处理真正的文档,只是在进行序言转换工作。因此,正如 egreg 指出的那样,随机选择拉丁现代数学是一个糟糕的选择。部分答案是新的 OpenMath OpenType 字体使centercolon
该包的功能mathtools
过时了。我不知道这一点。在少数可用的 OpenMath 兼容字体中,Neo Euler 似乎是唯一:=
不对称的字体。我暂时无法检查 Minion Math。考虑到 egregs 的答案并coloneq
在尝试使用mathtools
Neo Euler 调整时避免使用:=
,但会出现与上述相同的错误:
\documentclass{minimal}
\usepackage{mathtools}
\usepackage{unicode-math}
\setmathfont[version=Asana]{Asana-Math.otf}% Asana Math
\setmathfont[version=Cambria]{Cambria Math}
\setmathfont[version=LatinModern]{Latin Modern Math}
%\setmathfont[version=Minion]{Minion Math}
\setmathfont[version=XITS]{xits-math.otf}% XITS Math
\setmathfont[version=NeoEuler]{Neo Euler}
\begin{document}
\mathversion{Asana} Asana \(:=:=\)
\mathversion{Cambria} Cambria \(:=:=\)
\mathversion{LatinModern} LatinModern \(:=:=\)
\mathversion{XITS} XITS \(:=:=\)
\mathtoolsset{centercolon}
\mathversion{NeoEuler} Neo Euler \(:=:=\)
\end{document}
答案1
主要问题是\coloneq
拉丁现代数学中缺少该字符:
Missing character: There is no ≔ (U+2254) in font name:LatinModernMath:mode=base;script=math;language=DFLT;!
Missing character: There is no ≔ (U+2254) in font name:LatinModernMath:mode=base;script=math;language=DFLT;!
Missing character: There is no ≕ (U+2255) in font name:LatinModernMath:mode=base;script=math;language=DFLT;!
Missing character: There is no ≕ (U+2255) in font name:LatinModernMath:mode=base;script=math;language=DFLT;!
信息重复是由于重新unicode-math
定义\coloneqq
了\coloneq
和\eqqcolon
。\eqcolon
但是,没有必要做任何特殊的事情,因为 Latin Modern Math 和大多数其他数学 OpenType 字体中的数学模式冒号是相对于等号对称,所以:=
可以按你的意愿工作。如果你真的想使用控制序列,那么
\AtBeginDocument{%
\renewcommand{\coloneq}{:=}%
\renewcommand{\eqcolon}{=:}%
}
就是您所需要的。
对于 NeoEuler 字体,冒号相对于 不对称,您可以通过在序言中写入以下代码=
来模拟 的行为:mathtools
\newcommand{\centercolon}{\mathcode`:="8000 }
\begingroup\catcode`\~=\active \lccode`~=`:
\lowercase{\endgroup\def~}{\mathrel{\mathop\normalcolonchar}}
\AtBeginDocument{
\edef\normalcolonchar{\Umathcharnum\the\Umathcodenum`: }
\edef\normalcolon{\Umathcodenum`:=\the\Umathcodenum`: }
}
然后,声明\centercolon
将从那时起将冒号相对于数学轴置于中心;声明\normalcolon
是相反的(因此\centercolon
类似于\mathtoolsset{centercolon}
)。