如何在 LaTeX 中编辑线性规划?

如何在 LaTeX 中编辑线性规划?

如何编辑线性规划如下:

Max  z = x1 + 12x2
s.t.  3x1 + x2 + 12x3 ≤ 5
       x1      +   x3 ≤ 16
     15x1 + x2        = 14
     xj ≥ 0, j=1,2,3.

我希望格式严格按照示例那样。

感谢以下所有回答。我需要的就像下面的图片一样

在此处输入图片描述

答案1

这里使用常规的array就足够了,因为水平对齐非常严格:

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\begin{document}
\[
  \begin{array}{r@{}r@{}r@{}l}
    \text{Max} \quad z=x_1 &{} + 12x_2 \\[\jot]
    \text{s.t.}\qquad 3x_1 &{} + \phantom{12}x_2 &{} + 12x_3 &{} \leq 5 \\
                      x_1 &         &{} +   \phantom{12}x_3 &{} \leq 16 \\
                    15x_1 &{} + \phantom{12}x_2 &           &{} = 14 \\
     \multicolumn{4}{c}{x_j \geq 0, \quad j=1,2,3.}
  \end{array}
\]
\end{document}

使用\phantom是为了允许适当的间距和对齐。


这里可能有另一个对齐选项,主要针对第一列:

在此处输入图片描述

\documentclass{article}
\usepackage{amsmath}% http://ctan.org/pkg/amsmath
\begin{document}
\[
  \begin{array}{ll@{}r@{}r@{}l}
    \text{Max} & z=x_1 &{} + 12x_2 \\[\jot]
    \text{s.t.}& \phantom{15}\llap{3}x_1 &{} + \phantom{12}x_2 &{} + 12x_3 &{} \leq 5 \\
    &    \phantom{15}x_1 &     &{} +   \phantom{12}x_3 &{} \leq 16 \\
    &              15x_1 &{} + \phantom{12}x_2 &           &{} = 14 \\
    & \multicolumn{4}{l}{x_j \geq 0, \quad j=1,2,3.}
  \end{array}
\]
\end{document}

答案2

基本上,您有一个文本列,然后是重复的(数学)列,其中第一个列是右对齐的,然后是关系列,然后是左对齐的,然后是关系列。除了最后一行根本没有对齐,并且第一行的宽度不应该与后续行的对齐一起考虑。

一种方法是:

{\let\DS\displaystyle\mathsurround=0pt\openup\jot
\halign{\hfil#\hfil\enspace&& $\hfil\DS#$& ${}#{}$& $\DS{}#\hfil$& ${}#{}$\crcr
  Max & z = x_1 & + & 12x_2 \hidewidth\cr
  s.t.& 3x_1    & + & x_2 & + & 12x_3 & \leq & 5 \cr
      & x_1     &   &     & + & x_3   & \leq & 16 \cr
      & 15x_1   & + & x_2 &   &       & =    & 14 \cr
  \noalign{\smallskip $\DS x_j \geq 0, \quad j=1,2,3$.}
}}
\bye

在此处输入图片描述

但请注意,这是纯 TeX 方式;它也应该适用于 LaTeX(末尾没有\bye),但一般不被采用。

答案3

mathtools提供\mathrlap
amsmath提供alignat*环境。

我假设Maxs.t.不是变量,因此我将它们排版为直立形状。Lonely
和 empty{}提供了适当的间距。
\plus只是一个短的切 为+{}

代码

\documentclass{article}
\usepackage{amsmath,mathtools}
\newcommand*\plus{+{}}
\newcommand*\boxSizeOfMax[1]{\makebox[\widthof{Max}][c]{#1}}
\begin{document}

\begin{alignat*}{5}
           \text{Max} \quad & \mathrlap{z = x_1 + 12 x_2}   & & & & & & & & \\
  \boxSizeOfMax{s.t.} \quad & & 13 x_1 & \plus & x_2 & \plus & 12x_3 & \leq{}  &  5 & \\
                            & &    x_1 &       &     & \plus &   x_3 & \leq    & 16 & \\
                            & & 15 x_1 & \plus & x_2 &       &       & =       & 14 & \\
                            & \mathrlap{x_J\geq 0, j = 1, 2, 3.} & & & & & & & & 
\end{alignat*}
\end{document}

输出

输出

答案4

\begin{matrix} \end{matrix}也可以使用。示例的排版方式如下:

\documentclass{amsart}
\usepackage{amssymb}
\begin{document}
Maximize $z=x_1 + 12 x_2$ such that 
\[
\begin{matrix}
\phantom{15}x_1 +           &x_2&+&12x_3            &\leqslant 5 &           \\
\phantom{15}x_1 \phantom{+} &   &+&\phantom{12}x_3  &\leqslant 16&           \\
15x_1           +           &x_2& &                 &=         14&           \\
                            &   & & &x_j            &\geqslant 0 & j=1,2,3.  \\
\end{matrix}
\]

\end{document}

输出:

LP(努力!)


尝试2:

这次我尝试alignat*使用彼得·格里尔建议如下:

\begin{alignat*}{6}
  &x_1&{}+{}&x_2&{}+{}&12&&x_3   &&\leqslant 5  &      \\
  &x_1&     &   &{}+{}&  &&      &&\leqslant 16 &      \\
15&x_1&{}+{}&x_2&     &  &&      &&=14          &      \\
  &   &     &   &     &  &&x_3   &&\geqslant0   &\quad j=1,2,3.
\end{alignat*}

输出:

又一次美化!


尝试 3 :(刚好适合彼得·格里尔的建议)

\begin{alignat*}{7}
\text{Max}\quad\rlap{$z = x_1 + 12x_2$}                               \\               
\text{s.t.}\quad&13&x_1&{}+{}&x_2&{}+{}&12&&x_3   &&\;\leqslant &\;5  \\ 
                &  &x_1&     &   &{}+{}&  &&x_3   &&\;\leqslant &\;16 \\
                &15&x_1&{}+{}&x_2&     &  &&      &&\; =        &\;14 \\
                & \rlap{$x_j \geqslant 0,\; j=1,2,3.$}
\end{alignat*}

惊人的!

感谢 Peter 的建议。输出现在看起来好多了。

相关内容