问题陈述
我想引入一个新的数学运算符(散度运算符)。不幸的是,我想要使用的宏已经定义,所以我使用“释放”它
\let\div\undefined
并声明新的运算符
\DeclareMathOperator{\div}{div}
如果我仅使用,amsmath
一切都会正常工作,但一旦我添加,unicode-math
一切都会中断。
执行
考虑以下 MWE
\documentclass{scrartcl}\pagestyle{empty}
\usepackage{amsmath}
\usepackage{unicode-math}
\setmathfont{TeX Gyre Pagella Math}
\let\div\undefined
\DeclareMathOperator{\div}{div}
\begin{document}
\[ \int_V \div \vec{F} \, \mathrm{d}V = \oint_A \vec{F} \cdot \vec{n} \, \mathrm{d}A \]
\end{document}
输出
我得到的输出包含原始宏的输出\div
。
预期输出
答案1
unicode-math
大部分工作在 完成\begin{document}
,因此您也必须延迟声明:
\documentclass{scrartcl}
\usepackage{amsmath}
\usepackage{unicode-math}
\setmathfont{TeX Gyre Pagella Math}
\newcommand{\diff}{\mathop{}\!\mathrm{d}} % better than using \,\mathrm{d}
\AtBeginDocument{
\let\div\relax
\DeclareMathOperator{\div}{div}
}
\begin{document}
\[
\int_V \div \vec{F} \diff V = \oint_A \vec{F} \cdot \vec{n} \diff A
\]
\end{document}
请注意,这仅仅是因为您想要覆盖由 定义的命令时才需要的unicode-math
。使用\DeclareMathOperator{\Div}{div}
不需要特别注意。
答案2
\documentclass{scrartcl}\pagestyle{empty}
\usepackage{amsmath}
\usepackage{unicode-math}
\setmathfont{TeX Gyre Pagella Math}
\AtBeginDocument{
\let\div\undefined\DeclareMathOperator{\div}{div}
}
\begin{document}
\[ \int_V \div \vec{F} \, \mathrm{d}V = \oint_A \vec{F} \cdot \vec{n} \, \mathrm{d}A \]
\end{document}