如何对齐这些方程的“部分”?

如何对齐这些方程的“部分”?

我有一组由以下代码给出的方程式:

\begin{equation}
\label{eqn:eraserStart}
    \max \, d
\end{equation}

\begin{equation}
    a_t \in \{0,1\} \, \forall t \in T
\end{equation}

\begin{equation}
    \sum_{\forall t \in T} a_t = 1
\end{equation}

\begin{equation}
    a_t \in [0,1] \, \forall t \in T
\end{equation}

\begin{equation}
    \sum_{\forall t \in T} c_t \leq m
\end{equation}

\begin{equation}
    d - U_d(t, C) \leq (1-a_t) \cdot Z \, \forall t \in T
\end{equation}

\begin{equation}
\label{eqn:eraserEnd}
    0 \leq k - U_a(t, C) \leq (1-a_t) \cdot Z \, \forall t \in T
\end{equation}

输出如下所示:

在此处输入图片描述

而我希望它看起来像这样:

在此处输入图片描述

我怎样才能实现这个目标?

答案1

这是一种可能性;我使用了一个align环境来对齐量化表达式;为了使左边部分居中,我使用了一些带有居中内容的框;该\Ceneq命令将其参数放在一个框中,该框的宽度与更宽的表达式相对应:

\documentclass{report}
\usepackage{amsmath}

\newlength\longest
\newcommand\Ceneq[1]{%
  \makebox[\longest][c]{$#1$}}

\begin{document}

\settowidth\longest{$0 \leq k - U_a(t, C) \leq (1-a_t) \cdot Z$}
\begin{align}
\label{eqn:eraserStart}
\Ceneq{\max d} \\
\Ceneq{a_t \in \{0,1\}} &\qquad\forall t \in T \\
\Ceneq{\sum_{\forall t \in T} a_t = 1} \\
\Ceneq{a_t \in [0,1]} &\qquad\forall t \in T \\
\Ceneq{\sum_{\forall t \in T} c_t \leq m} \\
\Ceneq{d - U_d(t, C) \leq (1-a_t) \cdot Z} &\qquad\forall t \in T \label{eqn:eraserEnd} \\
\Ceneq{0 \leq k - U_a(t, C) \leq (1-a_t) \cdot Z} &\qquad\forall t \in T 
\end{align}

\end{document}

在此处输入图片描述

使用\displaystyle之前的\sum,可以得到求和符号下的极限:

\documentclass{report}
\usepackage{amsmath}

\newlength\longest
\newcommand\Ceneq[1]{%
  \makebox[\longest][c]{$#1$}}

\begin{document}

\settowidth\longest{$0 \leq k - U_a(t, C) \leq (1-a_t) \cdot Z$}
\begin{align}
\label{eqn:eraserStart}
\Ceneq{\max d} \\
\Ceneq{a_t \in \{0,1\}} &\qquad\forall t \in T \\
\Ceneq{\displaystyle\sum_{\forall t \in T} a_t = 1} \\
\Ceneq{a_t \in [0,1]} &\qquad\forall t \in T \\
\Ceneq{\displaystyle\sum_{\forall t \in T} c_t \leq m} \\
\Ceneq{d - U_d(t, C) \leq (1-a_t) \cdot Z} &\qquad\forall t \in T \label{eqn:eraserEnd} \\
\Ceneq{0 \leq k - U_a(t, C) \leq (1-a_t) \cdot Z} &\qquad\forall t \in T 
\end{align}

\end{document}

在此处输入图片描述

答案2

我确实找到了另一种方法,而且这种方法似乎效果很好。可能比 Gonzalo 的解决方案简单一点。注意事项:您需要有IEEEtran文档类或使用IEEEtrantools 包裹

\begin{IEEEeqnarray}{Ccc} %3 column layout to align the equations
    \label{eqn:startEraser} \max d &&   \\ %empty 2nd/3rd columns
    \label{eqn:a_t=1}       a_t \in \{0,1\} & \quad & \forall t \in T   \\ %add \quad in 2nd column for spacing and \forall... in 3rd
    \label{eqn:sum a_t}     \sum_{\forall t \in T} a_t = 1 &&           \\
    \label{eqn:c_t=1}       c_t \in [0,1] & \quad & \forall t \in T     \\ %same here
    \label{eqn:sum c_t}     \sum_{\forall t \in T} c_t \leq m &&        \\
    \label{eqn:dZ}          d - U_d(t, C) \leq (1-a_t) \cdot Z & \quad & \forall t \in T   \\ %and here
    \label{eqn:eraserEnd}   0 \leq k - U_a(t, C) \leq (1-a_t) \cdot Z & \quad & \forall t \in T %and here   
\end{IEEEeqnarray}

输出如下:

在此处输入图片描述

答案3

以下是我的尝试。看看这个问题,似乎你需要三件事:

  • 每行应该有两列。
  • \quad第一列应居中,第二列应与其右侧对齐。
  • 各行应当编号。

多列建议align;方程式中心化建议gather。你不能同时拥有两者,尽管你可以执行并行alignedgathered子环境,如我的这个答案...除了这只会为整个显示提供一个数字,违反了最后一个要求。Atabular非常适合前两个要求的组合,但它也不会对行进行编号。不过,没有其他环境将每行视为一个整体,并且还允许控制每列的​​对齐方式,所以tabular它是。

tabu,我其实没有用到任何特殊功能,但它比内置功能有了很大的改进,tabular所以我应该提倡使用它。我做了以下事情:

  • 正如所承诺的,有两列类型cl
  • 它们之间有一个\quad默认。
  • \refstepcounter在第一列之前,我们通过调用来设置行号equation,这是所有方程式环境(包括aligngather)使用的计数器。唉,这只会在本地设置标签,因此一旦我们到达您可能写入的实际文本\label,它就会被遗忘,所以我被迫做一些黑客行为\@currentlabel来全球化它。
  • 之后,我们制作一个宽度等于整行的框,在框的右端粘贴一个行号,然后将整个框声明为宽度为零,以免干扰表格的其余部分。也就是说,行号是行上的覆盖。环境不是这样amsmath做的,所以它将要如果您的行异常长(或页面异常窄),则会导致问题。
  • 一切都介于两者之间,$$以便将其设置为显示,就像一个真实的方程式。 在现实生活中千万不要使用它! 这实际上是一个原始命令,我这样做只是因为我真的只想要原始行为,而不是那些能让equation工作良好的东西。
  • 为了方便起见,整个东西被打包成一个环境,我称之为align+“缺乏更好的名字”。

我还编写了一个简单的宏\forallt来缩短第二列的内容。现在你可以像使用任何数组环境一样使用它。

\documentclass{article}
\usepackage{amsmath,tabu}
\makeatletter
\newenvironment{align+}
{$$\tabu
  {
    @{\refstepcounter{equation}%
      \global\let\@currentlabel\@currentlabel
      \rlap{\makebox[\linewidth]{\hfil$(\theequation)$}}
    }%
    >{\displaystyle}c%
    @{\quad}%
    >{\displaystyle}l%
  }
}
{\endtabu$$\ignorespacesafterend}
\makeatother
\newcommand*\forallt{\forall t \in T}
\begin{document}
\noindent
In the table below:
\begin{align+}
    \label{eq1}\max d \\
    a_t \in \{0,1\} & \forallt \\
    \sum_{\forall t \in T} a_t = 1 \\
    a_t \in [0,1] & \forallt \\
    \label{eq5}\sum_{\forall t \in T} c_t \leq m \\
    d - U_d(t, C) \leq (1-a_t) \cdot Z & \forallt \\
    0 \leq k - U_a(t, C) \leq (1-a_t) \cdot Z & \forallt
\end{align+}
on lines \ref{eq1} and \ref{eq5}\dots

\end{document}

在此处输入图片描述

相关内容