格式化线性程序

格式化线性程序

在表述 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运行良好只是因为目标函数和约束具有相似的大小。

如果您不需要将目标函数与约束对齐,则可以arrayalign环境中嵌套:

\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}

相关内容