对齐长线性程序

对齐长线性程序

我正在尝试将一个线性程序与一个非常长的限制对齐。我试过使用 split,但无法成功。这是我所拥有的

\begin{alignat*}{2}
&\text{Maximize} 
&\quad & 7 x_1 + 8x_2 + 9x_3+6x_4 +8x_5+7x_6+6x_7+4x_8+5x_9\\
& \text{subject to } &  &92 x_1 + 45x_2 + 60x_3 +35x_4+50x_5+647x_6+42x_7+72x_8+15x_9 \leq 362.8\\ 
& & & \sum_{i=1}^{9}x_i\geq 6\\
& & & x_4+x_7=1\\
& & & (1-x_9)\geq x_8.  \end{alignat*}

问题在于第一个限制,我不喜欢它太长,所以我想在 x_7 中将其剪断,然后根据那一行,我希望以下限制中的 \leq、\geq 和 = 符号对齐。

答案1

据我所知,您正在寻找双列布局。左列用于注释,右列用于方程式。

为了获得注释的正确垂直对齐,我将它们放在拆分环境中,就像您最初想要拆分的右列中的前两个表达式一样。

在后一列中,我将的开头x_5作为该列中其他表达式可以对齐的点。

对于最后三行,我将等号左右两侧的所有表达式放入从中派生的命令中eqparbox。因此,左侧的所有表达式都排版在宽度相等的框中,就像右侧的表达式一样。使用此技巧可以将所有表达式沿同一点居中。我认为这会给每个公式和整个块的最后三行带来更和谐的印象。

在此处输入图片描述

\documentclass{article}

\usepackage{eqparbox}
\usepackage{amsmath}

\newcommand\EqMathb[2][std]{%
    \eqparbox{#1}{%
        \hfill$\displaystyle\vphantom{\int}#2$\hfill\mbox{}%
    }
}

\setlength\jot{0.4em}

\begin{document}    

\begin{align}
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    \begin{split} 
        \text{Maximize}\quad  & \\ &
    \end{split} & 
    \begin{split}
        7 x_1 + 8x_2 + 9x_3+6x_4 +8      & x_5+7x_6+6x_7  \\
                                         & \quad\qquad+4x_8+5x_9  
    \end{split}\\[0.4em]
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    \begin{split}
        \text{subject to}\quad & \\ &
    \end{split} & 
    \begin{split}
        92 x_1 + 45x_2 + 60x_3 +35x_4+50 & x_5+647x_6+42x_7 \\
                                         & +72x_8+15x_9 \leq 362.8
    \end{split}\\[0.4em]
    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    && \EqMathb{\sum_{i=1}^{9}x_i} \geq \EqMathb[right]{6}    & \\
    && \EqMathb{x_4+x_7}           =    \EqMathb[right]{1}    & \\
    && \EqMathb{(1-x_9)}           \geq \EqMathb[right]{x_8.} &
\end{align}

\end{document}

相关内容