我最近了解到在 LaTeX 中格式化线性程序的最佳方法是这样的:
\begin{alignat}{3}
\text{min:} \quad & \omit{\rlap{$ \sum_{i=1}{n} c_i X_i $}} \\
\text{s.t.} \quad & a_t \leq \sum_{i=1}{n} X_i \leq b_t \quad && t=1,\cdots,T \\
& X_i \in \{0,1\} \quad && i=1,\cdots,n
\end{alignat}
这样,所有约束都在“st”后左对齐,并留有一点空间,所有约束域都在最长约束后左对齐,并留有一点空间,即使目标函数很长(ish),那么我不会得到很大的差距,就像如果我只是&&
在最后放一个而没有 一样\omit{\rlap{$[...]$}}
。
无论如何,上面只是我写的一些废话。但这里有一个在我的文档中行为不端的例子:
\begin{alignat}{3}
\text{min:} \quad & \omit{\rlap{$\alpha\sum_{i=1}^N\sum_{k=1}^K\sum_{l=1}^K b_{k,l}Y_{i,k}Y_{i,l} + \beta\sum_{i=1}^N\sum_{j=1}^M c_{i,j}X_{i,j} + \gamma(\sum_{j=1}^M S_j + T_j)$}} \\
\text{s.t.} \quad & \sum_{i=1}^N X_{i,j} + S_j - T_j = 1 \quad && j=1,\ldots,M \\
& S_j \in \mathbb{Z}^+ \quad && j = 1, \ldots, M \\
& T_j \in \mathbb{Z}^+ \quad && j = 1, \ldots, M
\end{alignat}
当我构建这个时,目标函数(第一行)从页面末尾运行出来,但左边有足够的空间来容纳它。
&
我尝试在每行末尾以及结束后添加一个额外的空对齐点\omit
,但这没有任何作用。
我可以通过将第一行分成两行来解决这个问题,但我更愿意将整个内容移动到左边。
谢谢。
编辑1:实际上我之前甚至没有注意到这一点,但看起来第一个方程式是文本中的内联数学(这是有道理的,因为它在 中$
)。总和的参数不像其他行那样位于上方和下方,而是位于它们旁边。有什么想法可以解决这个问题吗?
编辑2:好的,修复了第一行是内联数学模式的问题\displaystyle
后。$
答案1
手动添加一些空格,在下面的代码中\hspace{9em}
。
我还做了一些小改动:隐藏方程的宏和\bigg
求和括号的宏。应该\ldots
是\dots
。
\documentclass{article}
\usepackage{amsmath,amssymb}
\usepackage{showframe} % just for the example
\newcommand{\eqhide}[1]{%
\omit\makebox[0pt][l]{$\displaystyle#1$}%
}
\begin{document}
\begin{alignat}{2}
\text{min:} \quad & \eqhide{\alpha\sum_{i=1}^N\sum_{k=1}^K
\sum_{l=1}^K b_{k,l}Y_{i,k}Y_{i,l} +
\beta\sum_{i=1}^N\sum_{j=1}^M c_{i,j}X_{i,j} +
\gamma\biggl(\,\sum_{j=1}^M S_j + T_j\biggr)} \\
\text{s.t.} \quad & \sum_{i=1}^N X_{i,j} + S_j - T_j = 1 \quad && j = 1 ,\dots, M \hspace{9em} \\
& S_j \in \mathbb{Z}^+ \quad && j = 1, \dots, M \\
& T_j \in \mathbb{Z}^+ \quad && j = 1, \dots, M
\end{alignat}
\end{document}
答案2
\rlap
这是一个没有也没有的解决方案\omit
,它导致总和的界限是 sym 符号右侧的类型,但更好地使用了&
。顺便说一句,请注意3
对齐点需要5&
。我还建议使用 subequations` 环境,以便为方程本身(第一行)提供主方程编号,并为约束提供 3 个辅助计数器:
\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{showframe}%
\renewcommand{\ShowFrameLinethickness}{0.3pt}
\usepackage{amssymb}%
\usepackage{mathtools}
\begin{document}
\begin{subequations}
\begin{alignat}{3}
\min &\colon & \quad \alpha & \sum_{i=1}^N\sum_{k=1}^K\sum_{l=1}^K b_{k,l}Y_{i,k}Y_{i,l} + \beta & & \sum_{i=1}^N\sum_{j=1}^M c_{i,j}X_{i,j} + \gamma(\sum_{j=1}^M S_j + T_j) \tag{1} \\
\text{s.t.} &\phantom{:} & & \sum_{i=1}^N X_{i,j} + S_j - T_j = 1 & & j=1,\ldots,M \\
& & & S_j \in \mathbb{Z}^+ \quad && j = 1, \ldots, M \\
& & & T_j \in \mathbb{Z}^+ \quad && j = 1, \ldots, M
\end{alignat}
\end{subequations}
\end{document}