我有以下乳胶代码来写下线性程序:
\begin{alignat}{5}
\tag{$L(\mu)$} L(\mu) = & \,\textrm{min} && \,\sum_{h \in H} c_h x_h
- \sum_{a \in A} \mu_a \sum_{h in H(a)} x_h
+ \sum_{a \in A} \mu_a y_a \\
&&&- \sum_{t \in T} \mu_t \sum_{h \in H(t)} x_h
+ \sum_{t \in T} \mu_t \nonumber \\
\tag{vehicle-flow} &\textrm{s.t.} && \sum_{ a\in A(v)^{out}} y_a &= \sum_{a \in A(v)^{in} } y_a & \forall\, v \in V\\
\tag{x-space} & && 0 &\leq x_{h} \leq 1 &\forall\, h \in H \\
\tag{y-space} & && 0 &\leq y_{a} \leq 1 &\forall\, a \in A
\end{alignat}$
我想要实现的目标:
将“min”与“st”对齐
打破最小方程,使其不会变得太长
将最后三个方程对齐,不要留太多空白
我不想通过在第一个等式中添加更多对齐标签来实现这一点,因为这会导致总和之间出现奇怪的间距
我研究了分割环境,但分割不允许我在方程式上添加单独的标签。
谢谢!
答案1
你可以欺骗通过将内容放入块中,可以在两个对齐选项卡之间添加更多内容,而无需增加它们的水平间距\makebox
。以下示例显示了如何使用它以您想要的方式排列公式*:
\documentclass{article}
\usepackage{amsmath}
\newlength\stextwidth
\newcommand\makesamewidth[3][c]{%
\settowidth{\stextwidth}{#2}%
\makebox[\stextwidth][#1]{#3}%
}
\begin{document}
\begin{alignat}{4}
L(\mu)=\min&\makebox[0pt][l]{$\displaystyle\sum_{h \in H} c_h x_h- \sum_{a \in A} \mu_a \sum_{h \in H(a)} x_h+ \sum_{a \in A} \mu_a y_a$} \tag{$L(\mu)$} \\
&\makebox[0pt][l]{$\displaystyle- \sum_{t \in T} \mu_t \sum_{h \in H(t)} x_h + \sum_{t \in T} \mu_t$} \notag \\
\makesamewidth[l]{$\min$}{s.t.}&\sum_{ a\in A(v)^{\textrm{out}}} y_a = \sum_{a \in A(v)^{\textrm{in}} } y_a&&\,\forall\, v \in V \tag{vehicle-flow} \\
&&\makebox[0pt][r]{$0\leq x_{h} \leq 1$}&\,\forall\, h \in H \tag{x-space} \\
&&\makebox[0pt][r]{$0\leq y_{a} \leq 1$}&\,\forall\, a \in A \tag{y-space}
\end{alignat}
\end{document}
*(我不确定您希望如何对齐最后三个方程式,所以我按照符号对齐它们\forall
)。
转至\makesamwidth
这个帖子。