在`split`中设置对齐

在`split`中设置对齐

我想用传统方式来表述线性规划问题。以下代码

\documentclass[11pt]{article}
\usepackage[utf8]{inputenc}

\usepackage{setspace}
\usepackage{multirow}
\usepackage{amsmath}

\begin{document}
\[\setstretch{1.8}
    (LP)
    \begin{cases}
    \begin{split}
        \max \qquad &\sum_{\{i|(i,e)\in\mathcal{A}\}} x_{i,e}\\ \\
        \text{ subject to}\qquad &\sum_{\{i|(i,k)\in\mathcal{A}\}} x_{i,k} = \sum_{\{j|(k,j)\in\mathcal{A}\}} x_{k,j} & \forall k\in(\mathcal{N}\setminus\{s,e\})\\
        &\sum_{\{j|(s,j)\in\mathcal{A}\}} x_{s,j} = \sum_{\{i|(i,e)\in\mathcal{A}\}} x_{i,e}\\
        &0 \le x_{i,j} \le b_{i,j} &\raggedleft \forall(i,j)\in\mathcal{A}
    \end{split}
    \end{cases}
\]
\end{document}

生产

lp 配方

有没有办法让\forall量词左对齐而不是右对齐?也就是说,我希望它们按第一个字符对齐,而不是按最后一个字符对齐。

答案1

array

在此处输入图片描述

\documentclass[11pt]{article}
\usepackage{amsmath}
\usepackage{array}

\begin{document}
\[\setlength\arraycolsep{1pt}
  \renewcommand\arraystretch{1.8}
(LP)\left\{
    \begin{array}{r@{\qquad}c>{\displaystyle}r>{\displaystyle}ll}
\max
    &&\sum_{\{i|(i,e)\in\mathcal{A}\}} x_{i,e}           &   &   \\[5ex]
\text{subject to}
    &&\sum_{\{i|(i,k)\in\mathcal{A}\}} x_{i,k}
        & = \sum_{\{j|(k,j)\in\mathcal{A}\}} x_{k,j}
            &\quad \forall k\in(\mathcal{N}\setminus\{s,e\})\\
    &&\sum_{\{j|(s,j)\in\mathcal{A}\}} x_{s,j}
        & = \sum_{\{i|(i,e)\in\mathcal{A}\}} x_{i,e}        &   \\
    &&0 \le x_{i,j} \le b_{i,j}
        &   &\quad \forall(i,j)\in\mathcal{A}
    \end{array}
    \right.
\]
\end{document}

使用mathrlap该包mathtools您可以获得:

在此处输入图片描述

\documentclass[11pt]{article}
\usepackage{mathtools}
\usepackage{array}

\begin{document}
\[\setlength\arraycolsep{1pt}
  \renewcommand\arraystretch{1.8}
(LP)\left\{
    \begin{array}{r@{\quad}c>{\displaystyle}r>{\displaystyle}ll}
\max
    &&\sum_{\{i|(i,e)\mathrlap{\in\mathcal{A}\}}} x_{i,e}           &   &   \\[5ex]
\text{subject to}
    &&\sum_{\{i|(i,k)\mathrlap{\in\mathcal{A}\}}} x_{i,k}
        & = \sum_{\{j|(k,j)\mathrlap{\in\mathcal{A}\}}} x_{k,j}
            &\quad \forall k\in(\mathcal{N}\setminus\{s,e\})\\
    &&\sum_{\{j|(s,j)\mathrlap{\in\mathcal{A}\}}} x_{s,j}
        & = \sum_{\{i|(i,e)\mathrlap{\in\mathcal{A}\}}} x_{i,e}        &   \\
    &&  0 \le x_{i,j} \le b_{i,j}
        &   &   \quad \forall(i,j)\in\mathcal{A}
    \end{array}
    \right.
\]
\end{document}

答案2

我将向你展示一个避免滥用的技巧setspace

环境aligned将行间距增加一个称为 的尺寸jot。其默认值为 3pt,但可以将其设置为其他值。

\documentclass[11pt]{article}
\usepackage{amsmath}

\begin{document}

\[
\setlength{\jot}{1.5ex} % some more vertical space
(LP)
\begin{cases}
\begin{aligned}
  \max \quad &\! \sum_{\{i|(i,e)\in\mathcal{A}\}} x_{i,e}\\[2ex]
  \text{ subject to}\quad
  &\! \sum_{\{i\mid(i,k)\in\mathcal{A}\}} x_{i,k} =
      \sum_{\{j\mid(k,j)\in\mathcal{A}\}} x_{k,j}
  &&  \forall k\in(\mathcal{N}\setminus\{s,e\})\\
  &\! \sum_{\{j\mid(s,j)\in\mathcal{A}\}} x_{s,j} =
      \sum_{\{i\mid(i,e)\in\mathcal{A}\}} x_{i,e}\\
  &   0 \le x_{i,j} \le b_{i,j}
  && \forall(i,j)\in\mathcal{A}
\end{aligned}
\end{cases}
\]

\end{document}

在此处输入图片描述

一些注释。

竖线应该被称为\mid,这是一个关系符号;在当前情况下,输出是相同的,但使用正确的语义很重要。

&和之间\sum应该有一个负的细空格,因为在偶数列中amsmath隐式添加{}会导致在后面跟着运算符和时插入一个细空格,而在这种特殊情况下我们并不想要它。

答案3

这种对齐方式怎么样alignedat

\documentclass[11pt]{article}
\usepackage[utf8]{inputenc}

\usepackage{setspace}
\usepackage{multirow}
\usepackage{mathtools}

\begin{document}

\[ \setstretch{1.8}
    (LP)
    \begin{cases}
    \begin{alignedat}{2}
 \max \quad\smashoperator[r]{\sum_{\{i\mid (i,e)\in\mathcal{A}\}}} x_{i,e} & \phantom{ =}\\[1ex]%\\
        \text{ subject to} \quad\smashoperator[r]{\sum_{\{i\mid (i,k)\in\mathcal{A}\}}} x_{i,k} & = \smashoperator{\sum_{\{j\mid (k,j)\in\mathcal{A}\}}} x_{k,j} &\qquad & \forall k\in(\mathcal{N}\setminus\{s,e\})\\
        \smashoperator[r]{\sum_{\{j\mid (s,j)\in\mathcal{A}\}}} x_{s,j} & = \smashoperator{\sum_{\{i\mid (i,e)\in\mathcal{A}\}}} x_{i,e}\\
        0 \le x_{i,j} & \le b_{i,j} & & \forall(i,j)\in\mathcal{A}
    \end{alignedat}
    \end{cases}
\]

\end{document} 

在此处输入图片描述

相关内容