在表述 LP 问题时,我通常使用以下内容
\begin{tabular}{ l c p{1pt} c }
max & \multicolumn{3}{l}{$300x + 100y$} \\
s.t. & $6x + 3y$ & $\leq$ & $40$\\
& $x - 3y$ & $\leq$ & $0$ \\
& $x + \frac{1}{4}y$ & $\leq$ & $4$ \\
\end{tabular}
但这强制使用内联数学,并要求我手动调整列宽(并且它仍然不完美,因为右侧和左侧之间的间距是\leq
错误的)。
我真正想要的是一个可以显示数学运算、具有正确间距并且无需手动格式化的解决方案p{}
。
我该如何编写一个版本来修复这个问题?
答案1
为了获得与显示样式数学相关的更宽间距,您可以结合使用gather*
和aligned
环境(均由amsmath
包提供):
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{gather*}
\max_{x,y}\quad 300x + 100y \\
\begin{aligned}
\textup{s.t.}\quad 6x + 3y &\leq 40\\
x - 3y &\leq 0 \\
x + \tfrac{1}{4}y &\leq 4 \\
\end{aligned}
\end{gather*}
\end{document}
答案2
使用该array
环境,您可以执行以下操作:
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{equation*}
\setlength\arraycolsep{1.5pt}
\begin{array}{l@{\quad} r c r c r}
\max & 300x & + & 100y & & \\
\mathrm{s.t.} & 6x & + & 3y & \geq & 40 \\
& x & - & 3y & \geq & 0 \\
& x & + & \frac{1}{4}y & \geq & 4
\end{array}
\end{equation*}
\end{document}
在我看来,这给出了适当的对齐。
答案3
这是一个老问题,但自 2019 年 4 月 23 日起,还存在一个用于格式化线性程序的特定包,名为optidef
,非常快速和简单。
我已经把参数|s|
(只写max
不写maximize
)和它<b>
用来在上创建中断的选项客观的有一个空白处。这里有一个 MWE:
\documentclass[a4paper,12pt]{article}
\usepackage{amsmath,amssymb}
\usepackage{optidef}
\begin{document}
\begin{maxi*}|s|<b>
{\scriptstyle x,y}{300x + 100y}{}{}%%%% <----objective
\addConstraint {6x+3y}{\leq 40}{}
\addConstraint {x-3y}{\leq 0}{}
\addConstraint {x+\tfrac{1}{4} y}{\leq 4}{}
\end{maxi*}
\end{document}
答案4
在这个例子中,环境gather
运行良好只是因为目标函数和约束具有相似的大小。
如果您不需要将目标函数与约束对齐,则可以array
在align
环境中嵌套:
\documentclass{article}
\usepackage{amsmath}
\usepackage{mathtools,amssymb}
\begin{document}
\begin{align*}
&\mathrm{max} \quad 300x + 100y \\[2pt] % if you need space between objectif and constraints
&\mathrm{s.t.} \quad
\begin{array}[t]{r c r c r}
6x & + & 3y & \geq & 40 \\
x & - & 3y & \geq & 0 \\
x & + & \frac{1}{4}y & \geq & 4
\end{array}
\end{align*}
\end{document}
我注意到该\max
命令在环境中不能很好地对齐align
,我已将其替换为\mathrm{max}
。