在下面的代码中, \div 的数学文本是错误的:
\documentclass[]{scrbook}
\usepackage{amsmath}
\usepackage{unicode-math}
\renewcommand{\i}{\symup{i}}
\newcommand{\const}{\symup{const}}
\DeclareMathOperator{\e}{e}
\DeclareMathOperator{\rot}{rot}
\DeclareMathOperator{\grad}{grad}
\DeclareMathOperator{\rect}{rect}
\renewcommand{\div}{\symup{div}\,}
\begin{document}
\begin{equation}
\rot \vec{a} + \grad \vec{a} + \div \vec{a} + \rect f(x) + \e^{-\i x} = \const
\end{equation}
\end{document}
答案1
您需要在开始文档时延迟重新定义,因为unicode-math
需要在那里进行设置,此时所有字体都已确定。
\documentclass[]{scrbook}
\usepackage{amsmath}
\usepackage{unicode-math}
\renewcommand{\i}{\symup{i}}
\newcommand{\const}{\symup{const}}
\DeclareMathOperator{\e}{e}
\DeclareMathOperator{\rot}{rot}
\DeclareMathOperator{\grad}{grad}
\DeclareMathOperator{\rect}{rect}
\AtBeginDocument{\renewcommand{\div}{\operatorname{div}}}
\begin{document}
\begin{equation}
\rot \vec{a} + \grad \vec{a} + \div \vec{a} + \rect f(x) + \e^{-\i x} = \const
\end{equation}
\end{document}
我是肯定“i” 和 “e” 不应该是直立的(至少在很多人的文档中,包括我的文档中),但这只是个人看法。不过,我不明白为什么会有这种不同的处理方式。
请注意,\symup{div}\,
以及还提出了
\ensuremath{\text{div}}
是错误的。你的\symup{div}
操作不符合数学运算符应有的表现。\text{div}
如果 Miyase 的运算符出现在定理的陈述中(并且它周围的间距完全错误),它就会让人大吃一惊。
答案2
我想做同样的事情,但遇到了一些重新定义的包的问题\div
。下面是我最终做的事情,到目前为止,它一直运行良好:
\AddToHook{begindocument/end}{\let\div\relax\newcommand{\div}{\ensuremath{\text{div}}}}
它在我的序言里。
使用\text
可能不是最好的选择,但这是一个不同的(且次要的)问题。
答案3
我已经将\divg
命令替换\div
为除法符号的预定义命令。
\DeclareMathOperator{\divg}{\symup{div}\,}
\documentclass[]{scrbook}
\usepackage{amsmath}
\usepackage{unicode-math}
\renewcommand{\i}{\symup{i}}
\newcommand{\const}{\symup{const}}
\DeclareMathOperator{\e}{e}
\DeclareMathOperator{\rot}{rot}
\DeclareMathOperator{\grad}{grad}
\DeclareMathOperator{\rect}{rect}
\DeclareMathOperator{\divg}{\symup{div}\,}
\begin{document}
\begin{equation}
\rot \vec{a} + \grad \vec{a} + \divg \vec{a} + \rect f(x) + \e^{-\i x} = \const
\end{equation}
\end{document}