![如何在 LaTeX 中编辑线性规划?](https://linux22.com/image/256324/%E5%A6%82%E4%BD%95%E5%9C%A8%20LaTeX%20%E4%B8%AD%E7%BC%96%E8%BE%91%E7%BA%BF%E6%80%A7%E8%A7%84%E5%88%92%EF%BC%9F.png)
如何编辑线性规划如下:
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*
环境。
我假设Max
和s.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}
输出:
尝试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 的建议。输出现在看起来好多了。