如何使方程更加紧凑?

如何使方程更加紧凑?

我有一个等式,它在联合符号周围浪费了很多空间:

\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

您可以\mathclapmathtools包中使用:

\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}

相关内容