有条件地删除单字母运算符前的空格

有条件地删除单字母运算符前的空格

我正在追求数学期望运算符(\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}

在此处输入图片描述

相关内容