我有一组由以下代码给出的方程式:
\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
。你不能同时拥有两者,尽管你可以执行并行aligned
和gathered
子环境,如我的这个答案...除了这只会为整个显示提供一个数字,违反了最后一个要求。Atabular
非常适合前两个要求的组合,但它也不会对行进行编号。不过,没有其他环境将每行视为一个整体,并且还允许控制每列的对齐方式,所以tabular
它是。
嗯tabu
,我其实没有用到任何特殊功能,但它比内置功能有了很大的改进,tabular
所以我应该提倡使用它。我做了以下事情:
- 正如所承诺的,有两列类型
c
和l
。 - 它们之间有一个
\quad
默认。 \refstepcounter
在第一列之前,我们通过调用来设置行号equation
,这是所有方程式环境(包括align
和gather
)使用的计数器。唉,这只会在本地设置标签,因此一旦我们到达您可能写入的实际文本\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}