对不同数量集合的求和进行对齐

对不同数量集合的求和进行对齐

我正在尝试对齐线性规划公式的一组约束。我遇到的问题是,有些求和涉及两个(或更多)集合,而其他求和仅涉及一个集合。无论我将“&”对齐标记放在哪里,这都很难使对齐看起来不错。

我目前正在使用 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

使用\mathclapfrom 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}

渲染代码

相关内容