\DeclareMathOperator 与 unicode-math 冲突

\DeclareMathOperator 与 unicode-math 冲突

考虑以下 MWE:

\documentclass[preview]{standalone}

\usepackage{fontspec}
\usepackage[english]{babel}
\usepackage[babel]{microtype}

\usepackage{mathtools}
\usepackage{amsthm}
\usepackage{unicode-math}

% Operators
\DeclareMathOperator{\E}{\mathbb{E}}
\DeclareMathOperator{\var}{var}

\begin{document}
Let \(X\) be a random variable.  Its expected value is denoted by
\(\E X\), and its variance by \(\var X\).

\(\sin X\) and \(\cos X\) are also random variables.
\end{document}

%%% Local Variables:
%%% mode: latex
%%% TeX-command-extra-options: "-shell-escape"
%%% TeX-engine: luatex
%%% TeX-master: t
%%% End:

生成的输出如下所示。显然,\DeclareMathOperator{\E}{\mathbb{E}}没有起作用。日志不包含任何有用的信息。

\DeclareMathOperator{\E}{\mathbb{E}} 无法正常工作

现在,如果我在和unicode-math之前加载,如下所示:mathtoolsamsthm

\usepackage{unicode-math}
\usepackage{mathtools}
\usepackage{amsthm}

我得到了如下所示的输出。 \DeclareMathOperator{\E}{\mathbb{E}}似乎可以工作,但是其他运算符(例如\sin\cos和自定义)\var以斜体而不是罗马字体排列。

\DeclareMathOperator{\E}{\mathbb{E}} 似乎可以工作,但其他运算符以斜体显示

这些文档使用以下版本的 LuaLaTeX、mathtools和排版unicode-math

# LuaLaTeX
This is LuaTeX, Version 1.0.4 (TeX Live 2017)

# unicode-math
package:     unicode-math
category:    Package
shortdesc:   Unicode mathematics support for XeTeX and LuaTeX
revision:    46300
cat-version: 0.8k
cat-date:    2018-01-13 15:04:43 +0100

# mathtools
package:     mathtools
category:    Package
shortdesc:   Mathematical tools to use with amsmath
cat-version: 1.21
cat-date:    2018-01-08 15:01:37 +0100

答案1

以下是该问题的一个更简单的例子:

\documentclass{article}
\usepackage{unicode-math}
\begin{document}
\makeatletter
${\operator@font foo}$
${\operator@font \mathbb{foo}}$
\makeatother
\end{document}

(顺便说一下,日志文件显示了问题的本质。)

短期内解决办法如下:

\documentclass{article}
\usepackage{unicode-math}
\setoperatorfont\symup
\begin{document}
\makeatletter
${\operator@font foo}$
${\operator@font \mathbb{foo}}$
\makeatother
\end{document}

但是,此修复会稍微扰乱您的其他操作符(如\sin和)\cos,这取决于您对这些事情的挑剔程度。

我可能需要定义多个操作员字体!

相关内容