我正在尝试使用 LaTeX 来呈现一些较长的线性规划,以解决优化问题。使用该\systeme
软件包可以让我自动将变量和不等式相互对齐,但我无论如何也想不出如何正确地将文本格式化到左侧。理想情况下,文本“min”应直接位于目标函数(第一行)的左侧,文本“st”应直接位于第一个约束(第一个不等式)的左侧。下面是一些示例代码。
如果有人能建议如何将文本“st”与数组中其框的顶部对齐,我将不胜感激。谢谢!
\documentclass[12pt]{article}
\usepackage{systeme}
\begin{document}
\\[
\begin{array}{lc}
min & -0.3x_1-0.7x_2-1.1x_3+0.08x_4-0.32x_5-0.72x_6+1.2x_7+0.8x_8 \\
s.t. &
\sysdelim..
\systeme[][:]{0.1x_1 - 0.2x_2 \geq 0 :
0.25x_4 - 0.05x_5 \geq 0 :
-0.4x_1 - 0.4x_2 + 0.6x_3 \geq 0 :
-0.2x_4 - 0.2x_5 +0.8x_6 \geq 0 :
-x_3 - x_6 +0.6x_7 + 0.3x_8 \geq 0 :
-x_1-x_2-x_3-x_4-x_5-x_6 \geq -3000 :
x_1+x_2+x_3 \geq 1000 :
-x_1-x_2-x_3 \geq -1500 :
0.9x_4+0.9x_5+0.9x_6 \geq 1000 :
-0.9x_4-0.9x_5-0.9x_6 \geq -2000 :
-x_7-x_8 \geq -2000}\\
& \vec{x} \geq \vec{0}
\end{array}
\\]
\end{document}
答案1
\systeme
没有规定根据上下文改变垂直对齐方式:它总是使用\vcenter
。
您可以(本地或全局)修补它以使用\vtop
(用于顶部对齐)或\vbox
(用于底部对齐)。
\documentclass{article}
\usepackage{amsmath}
\usepackage{systeme}
\usepackage{xpatch}
\makeatletter
\newcommand\patchsysteme[1]{%
\xpatchcmd{\SYS@systeme@iii}{\vcenter}{#1}{}{}%
}
\makeatother
\begin{document}
\[
\begin{array}{lc}
\min & -0.3x_1-0.7x_2-1.1x_3+0.08x_4-0.32x_5-0.72x_6+1.2x_7+0.8x_8 \\[2ex]
\text{s.t.} &
\patchsysteme{\vtop}
\sysdelim..
\systeme[][:]{0.1x_1 - 0.2x_2 \geq 0 :
0.25x_4 - 0.05x_5 \geq 0 :
-0.4x_1 - 0.4x_2 + 0.6x_3 \geq 0 :
-0.2x_4 - 0.2x_5 +0.8x_6 \geq 0 :
-x_3 - x_6 +0.6x_7 + 0.3x_8 \geq 0 :
-x_1-x_2-x_3-x_4-x_5-x_6 \geq -3000 :
x_1+x_2+x_3 \geq 1000 :
-x_1-x_2-x_3 \geq -1500 :
0.9x_4+0.9x_5+0.9x_6 \geq 1000 :
-0.9x_4-0.9x_5-0.9x_6 \geq -2000 :
-x_7-x_8 \geq -2000}\\
& \vec{x} \geq \vec{0}
\end{array}
\]
\end{document}
我会使用l
第二列对齐。
如果您只需要顶部对齐,这里有一个\systeme*
提供它的定义,而未装饰的\systeme
继续进行中心对齐。
\documentclass{article}
\usepackage{amsmath}
\usepackage{systeme}
\usepackage{xpatch}
\makeatletter
\xpatchcmd{\SYS@systeme@iii}{\vcenter}{\systeme@center@top}{}{}%
\let\systeme@original\systeme
\let\systeme@center@top\vcenter
\renewcommand{\systeme}{%
\begingroup
\@ifstar{\systeme@top}{\systeme@make}%
}
\newcommand{\systeme@top}{%
\let\systeme@center@top\vtop
\systeme@make
}
\def\systeme@make#1#{%
\def\systeme@options{#1}%
\systeme@@make
}
\def\systeme@@make#1{%
\expandafter\systeme@original\systeme@options{#1}%
\endgroup
}
\makeatother
\begin{document}
\[
\begin{array}{lc}
\min & -0.3x_1-0.7x_2-1.1x_3+0.08x_4-0.32x_5-0.72x_6+1.2x_7+0.8x_8 \\[2ex]
\text{s.t.} &
\sysdelim..
\systeme*[][:]{0.1x_1 - 0.2x_2 \geq 0 :
0.25x_4 - 0.05x_5 \geq 0 :
-0.4x_1 - 0.4x_2 + 0.6x_3 \geq 0 :
-0.2x_4 - 0.2x_5 +0.8x_6 \geq 0 :
-x_3 - x_6 +0.6x_7 + 0.3x_8 \geq 0 :
-x_1-x_2-x_3-x_4-x_5-x_6 \geq -3000 :
x_1+x_2+x_3 \geq 1000 :
-x_1-x_2-x_3 \geq -1500 :
0.9x_4+0.9x_5+0.9x_6 \geq 1000 :
-0.9x_4-0.9x_5-0.9x_6 \geq -2000 :
-x_7-x_8 \geq -2000}\\
& \vec{x} \geq \vec{0}
\end{array}
\]
\end{document}