我正在追求数学期望运算符(\mathbb{E}
)。
由于\DeclareMathOperator
对于单字母操作符来说不是很好(因为它在其后增加了一些空格),所以我使用了普通的\newcommand
。但问题是没有空格前它,因此写类似的内容X \MyExpct X
会变成没有空格的内容,而我希望看到第一个X
和之间有一个空格\MyExpct
。
\newcommand
但是在之前添加一个空格\mathbb{E}
,例如
\newcommand{\MyExpct}{\,\mathbb{E}}
当我的运算符位于表达式的开头时,就会失败!因此,我想要的是如果运算符前面有东西(但不是二元运算或左括号!),则在运算符前面添加一个空格,否则会将其删除。
我尝试过\unskip
,,\ignorespaces
甚至研究过如何\DeclareMathOperator
处理它(通过\kern
),但未能找到解决方案。
答案1
数学运算符的规则是,如果运算符前面/后面是普通符号,则插入一个细空格。以下情况正是我们所需要的:
$a\log b$
我们做希望在“log”前后留出一个较短的空格。在以下情况下
$a\log(bc)$
仅在“log”之前插入空格。
我不知道为什么你不希望你的操作符表现不同;也许你不想添加括号并相信字母的不同形状可以进行视觉区分。所以这是方法:
\newcommand{\MExp}{\mathop{}\!\mathbb{E}}
如果\MExp
前面有一个普通运算符,则会插入细空格。但是,由于空\mathop
后面跟着一个普通符号,因此总是插入一个细小的空间,我们用 将其删除\!
。
\documentclass{article}
\usepackage{amsmath,amssymb}
\newcommand{\MExp}{\mathop{}\!\mathbb{E}}
\begin{document}
X$\MExp$ has no space
$X \MExp X$ shows space and no space
\end{document}