我有一个等式,它在联合符号周围浪费了很多空间:
\documentclass{article}
\usepackage[cmex10]{amsmath}
\usepackage{amssymb}
\begin{document}
\begin{equation}
RA_U \left ( new , ref \right ) =
\bigcup_{
\left\{
i \text{ such that } f_i \left( ref \right) < f_i \left( new \right)
\right\}
}
\left\{
X \in \mathbb{R}^M ;
x_i \in \left [ f_i \left( ref \right) ; f_i \left( new \right) \right ]
\right\}
\end{equation}
\end{document}
这尤其可怕,因为我正在使用IEEEtran.cls
有两列的。
我怎样才能压缩联合符号周围的方程式?
答案1
您可以\mathclap
从mathtools
包中使用:
\documentclass{article}
\usepackage[cmex10]{amsmath}
\usepackage{amssymb}
\usepackage{mathtools}
\begin{document}
\begin{equation}
RA_U ( \mathit{new}, \mathit{ref} ) =
\bigcup_{\mathclap{
\left\{
i \text{ such that } f_i (\mathit{ref}) < f_i ( \mathit{new} )
\right\}
}}
\left\{
X \in \mathbb{R}^M ;
x_i \in [ f_i ( \mathit{ref} ) ; f_i ( \mathit{new} ) ]
\right\}
\end{equation}
\end{document}
输出:
答案2
我建议您执行以下操作:
删除所有
\left
和\right
指令,因为它们 (a) 插入不需要的水平空格并且 (b) 在当前上下文中实际上没有任何有用的作用。使用
\substack
(包提供amsmath
)将下面的行分成\bigcup
两部分。在变量名“ref”和“new”的定义中使用
\textup
(或)代替默认的数学斜体。\textnormal
使用
\mathclap
(由软件包提供mathtools
) 来抑制 左右两侧的空格\bigcup
。 (此步骤也在@karlkoeller 的回答中有所提及。)
\documentclass{article}
\usepackage{mathtools,amssymb}
\newcommand\vnew{\textup{new}}
\newcommand\vref{\textup{ref}}
\begin{document}
Before:
\begin{equation}
RA_U \left ( new , ref \right ) =
\bigcup_{
\left\{
i \text{ such that } f_i \left( ref \right) < f_i \left( new \right)
\right\}
}
\left\{
X \in \mathbb{R}^M ;
x_i \in \left [ f_i \left( ref \right) ; f_i \left( new \right) \right ]
\right\}
\end{equation}
After:
\begin{equation}
RA_U (\vnew,\vref) =
\bigcup_{ \mathclap{ \substack{i\text{ such that}\\f_i(\vref) < f_i(\vnew)}} } \,
\bigl\{ X\in\mathbb{R}^M ; x_i \in [ f_i(\vref) ; f_i(\vnew) ] \bigr\}
\end{equation}
\end{document}
答案3
相对于其他答案来说这并不是什么新鲜事,但我想介绍几个技巧:
\documentclass{article}
\usepackage{amsmath,mathtools}
\usepackage{amssymb}
\newcommand{\V}[1]{\mathrm{#1}} % or \mathit
\newcommand{\numberset}[1]{\mathbb{#1}}
\newcommand{\R}{\numberset{R}}
\begin{document}
This is the original equation
\begin{equation}
RA_{U}(\V{new},\V{ref}) =
\bigcup_{
\quad
\mathclap{\substack{
\text{$i$ such that}\\[\jot]
f_i(\V{ref}) < f_i(\V{new})
}}
\quad
}
\{
X \in \R^{M} :
x_i \in [f_i(\V{ref}); f_i(\V{new})]
\}
\end{equation}
\renewcommand{\V}[1]{\mathit{#1}}
\renewcommand{\numberset}[1]{\mathsf{#1}}
Just to see the effect of changing just a couple of commands
\begin{equation}
RA_{U}(\V{new},\V{ref}) =
\bigcup_{
\quad
\mathclap{\substack{
\text{$i$ such that}\\[\jot]
f_i(\V{ref}) < f_i(\V{new})
}}
\quad
}
\{
X \in \R^{M} :
x_i \in [f_i(\V{ref}); f_i(\V{new})]
\}
\end{equation}
\end{document}
主要技巧是\V
用于排版多字母变量的宏;然后还\numberset
定义了它,它间接用于定义\R
(和其他数字集)。我展示了如何通过更改这些定义来改变输出。
\substack
对于我在 a 中使用的宽下标\mathclap
,但在其周围添加了一些空间,以使联合符号不与其周围环境相邻。
注意,\jot
用于在下标中的两行之间留出一些空间。此外,\text{$i$ such that}
输入起来也比 更方便i\text{ such that}
,因为空格是“自然的”。
答案4
我将把关节的索引分成两行,如下所示
您可以通过以下方式获得
\documentclass{article}
\usepackage[cmex10]{amsmath}
\usepackage{amssymb}
\begin{document}
\begin{equation}
RA_U \left ( new , ref \right ) =
\mkern-36mu
\bigcup_{
i, \atop f_i \left( ref \right) < f_i \left( new \right)
}
\mkern-36mu
\left\{
X \in \mathbb{R}^M ;
x_i \in \left [ f_i \left( ref \right) ; f_i \left( new \right) \right ]
\right\}
\end{equation}
\end{document}
请注意,我还手动自定义了字距。您mathtools
也可以使用该包(例如,请参阅@Micos 的答案)。
编辑
根据@egregs 的评论,我想使用\substack
提供的命令来展示多种方法amsmath
,以便在索引大小方面获得更好的结果:
\begin{equation}
RA_U \left ( new , ref \right ) =
\mkern-40mu
\bigcup_{
\substack{
i, \\
f_i \left( ref \right) < f_i \left( new \right)
}
}
\mkern-40mu
\left\{
X \in \mathbb{R}^M ;
x_i \in \left [ f_i \left( ref \right) ; f_i \left( new \right) \right ]
\right\}
\end{equation}