我正在尝试对齐线性规划公式的一组约束。我遇到的问题是,有些求和涉及两个(或更多)集合,而其他求和仅涉及一个集合。无论我将“&”对齐标记放在哪里,这都很难使对齐看起来不错。
我目前正在使用 align 环境和 amsmath 包。
以下是 MWE:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
subject to \\
\begin{align}
& \displaystyle \sum_{j\in P, k\in K}y_{ijkw} = \sum_{a\in A}x_{aiw} && \forall i\in P, w\in S\\
& \displaystyle \sum_{i\in P, k\in K}y_{ijkw} = \sum_{l\in P, k\in K}y_{jlkw} && \forall j\in P, w\in S\\
& \displaystyle \sum_{i\in P, k\in K}y_{iukw} \geq U \\
& \displaystyle \sum_{i\in P}x_{aiw} = area_{a} && \forall a\in A \\
& \displaystyle \sum_{i\in P, w\in S, k\in K}w_{ijkw}y_{ijkw} \geq 0.7Area_w && \forall j\in P\\
\notag
\end{align}
\end{document}
是否存在某种环境,或者对齐内的某些东西,我可以用来使其看起来更好?
答案1
也许你可能对以下提供的一些重叠功能感兴趣mathtools
:
\documentclass{article}
\usepackage{mathtools}% http://ctan.org/pkg/mathtools
\begin{document}
subject to
\begin{align}
\sum_{\mathclap{j\in P, k\in K}} y_{ijkw} &= \sum_{a\in A}x_{aiw} && \forall i\in P, w\in S \\
\sum_{\mathclap{i\in P, k\in K}} y_{ijkw} &= \sum_{\mathclap{l\in P, k\in K}}y_{jlkw} && \forall j\in P, w\in S \\
\sum_{\mathclap{i\in P, k\in K}} y_{iukw} &\geq U \\
\sum_{i\in P} x_{aiw} &= \text{area}_{a} && \forall a\in A \\
\sum_{\mathclap{i\in P, w\in S, k\in K}} w_{ijkw}y_{ijkw} &\geq 0.7\text{Area}_w && \forall j\in P
\end{align}
\end{document}
我不太喜欢大量重叠(使用\mathclap
),但它展示了可以实现的目标。另一种选择是使用,并将\substack
它们一个接一个地列出,而不是将所有求和标准列在一行中。这是一个小例子,仅展示了我针对最后一个等式的意思:
\sum_{\mathclap{\substack{i\in P, w\in S \\ k\in K}}} w_{ijkw}y_{ijkw} &\geq 0.7\text{Area}_w && \forall j\in P
答案2
使用\mathclap
from mathtools
(自动加载amsmath
),并手动调整一点间距以恢复宽限总和右侧的“自然”空间,这是一种可以得到更均匀结果的方法:
\documentclass{article}
\usepackage{mathtools}
\begin{document}
subject to
\begin{align*}
& \sum_{\mathclap{j\in P, k\in K}} \quad y_{ijkw}
= \sum_{a\in A}x_{aiw} && \forall i\in P, w\in S\\
& \sum_{\mathclap{i\in P, k\in K}} \quad y_{ijkw}
= \sum_{l\in P, k\in K}y_{jlkw} && \forall j\in P, w\in S\\
& \sum_{\mathclap{i\in P, k\in K}} \quad y_{iukw} \geq U \\
& \sum_{i\in P}x_{aiw} = area_{a} && \forall a\in A \\
& \sum_{\mathclap{i\in P, w\in S, k\in K}} \hspace{1.75em} w_{ijkw}y_{ijkw}
\geq 0.7Area_w && \forall j\in P
\end{align*}
\end{document}
我不清楚您是否希望对行进行编号,因此我使用了带星号的形式align
;如果您确实想要数字,只需将其删除。您使用的方式\notag
没有效果,因为它本身就在一行上。
此外,“subject to”后的双反斜杠不需要切换到显示数学模式,而且它确实增加了通常不需要的额外空间。
答案3
沃纳的回答给了我一个想法,使对齐更加清晰。
我使用 \phantom 和 \substack 在任何超过一个集合的求和下插入一行相当于两个集合长度的空白。我已将 \phantoms 放在所有求和下方以保持间距一致。
\documentclass{article}
\usepackage{amsmath}
\usepackage{mathtools}
\begin{document}
subject to \\
\begin{align}
& \displaystyle \sum_{\mathclap{\substack{i\in P, k\in K\\ \phantom{i\in P}}}}y_{ijkw} = \sum_{a\in A}x_{aiw} && \forall i\in P, w\in S\\
& \displaystyle \sum_{\mathclap{\substack{i\in P, k\in K\\ \phantom{i\in P}}}}y_{ijkw} = \sum_{\mathclap{\substack{l\in P, k\in K\\ \phantom{i\in P}}}}y_{jlkw} && \forall j\in P, w\in S\\
& \displaystyle \sum_{\mathclap{\substack{i\in P, k\in K\\ \phantom{i\in P}}}}y_{iukw} \geq U \\
& \displaystyle \sum_{\mathclap{\substack{i\in P \\ \phantom{i\in P}\phantom{i\in P}}}}x_{aiw} = area_{a} && \forall a\in A \\
& \displaystyle \sum_{\mathclap{\substack{i\in P, w\in S, \\ k\in K}}}w_{ijkw}y_{ijkw} \geq 0.7Area_w && \forall j\in P\\
\notag
\end{align}
\end{document}