灵感来自这个问题,这是我的数学模式间距难题。
我经常会遇到如下这样的方程式:
\begin{equation}
\text{If}\ B_1 \succeq B_2 \ \text{and}\ B_2 \succeq B_3 \ \text{then}\ B_1 \succeq B_3
\end{equation}
现在,您可能会注意到,每个位之前和之后\text{...}
都有一个“正常大小的空格”。我无法想象为什么我不想在那里留出那个空格,但我必须手动添加它。这肯定应该是 mathmode 的文本宏的默认行为吧?
为什么不可以呢?我怎样才能做到这一点?
答案1
这不是默认行为,因为你并不总是需要空间。例如,在你的例子中,你不需要在 之前留出空格\text{If}
,因为这会缩进你的公式。或者考虑
\[ x = \begin{cases}
1 & \text{if $f(x)$}
0 & \text{otherwise}
\end{cases} \]
同样,这不应该间隔开。另外,就像Caramdir 的回答,我重新进入了 中的数学模式\text
,这通常也能解决间距问题。您可以定义一个\stext
用于间隔文本的命令:
\newcommand*{\stext}[1]{\text{ #1 }}
\
(我认为,里面的文字空间与外面的文字空间相同。)另一种选择可能是
\newcommand*{\textop}[1]{\mathbin{\text{#1}}}
\newcommand*{\textrel}[1]{\mathrel{\text{#1}}}
然后\textop{foo}
将设置foo
为二元运算符,并将\textrel{bar}
设置bar
为二元关系。虽然我不确定这个间距看起来会是什么样子,但它可能可以满足您的需要。
答案2
它可能不会添加空间,因为删除空间比添加空间更难。一种可能的用法是类似3-\text{connected graphs}
。
附注:也可以将您的示例写为
\begin{equation}
\text{If $B_1 \succeq B_2$ and $B_2 \succeq B_3$ then $B_1 \succeq B_3$.}
\end{equation}
答案3
如果您想在 之前或之后引入自动间距\text
,最好的选择可能是使其\text
表现得像运算符 ( \mathop
),这是数学模式中最接近文本的东西。引入的间距将比普通文本略小,但仍应可接受。以下是代码(确保\text
在文本模式下仍有效):
\newcommand{\textop}[1]{\relax\ifmmode\mathop{\text{#1}}\else\text{#1}\fi}
如果将其与类型为\textbin
和的各个命令和(在 Antal 的回答中建议)进行比较,您会发现它在这些典型的用法中效果很好,即使间距很紧:\textrel
\mathbin
\mathrel
\text
这些命令在开始时也全部失败{align}
(例如\begin{align} & \text{...}
):
(各命令的顺序与上述相同。)