我正在尝试排版一个优化问题,该问题结合使用了变量条件约束 (vif) 和常规约束。我目前的语法(部分问题)是
\begin{align*}
\max \sum_{i \in I} z_i \\
\text{subject to} \\
x_i^0 &= x_i^{\text{start}} &&\forall i \in I, \\
l_i^t + r_i^t + c_i^t &= 1 &&\forall t = 0,...,N-1, i \in I, \\
\text{vif } v_i^t = 1 \text{ then} \\
x_j^t - x_i^t &\leq \epsilon \\
\text{else} \\
x_j^t - x_i^t &\geq \epsilon + \hat{\epsilon}\\
\text{end} &&&\forall t=0,...,N-1, i,j \in I: i < j, \\
k_i^t &= \sum_{j \in I \setminus \{i\}} v_{\min(i,j),max(i,j)}+1+c_i^t &&\forall t=0,...,N-1, i \in I, \\
\end{align*}
我希望将 和else
左end
对齐(就像vif
已经是的一样),同时保持 下方行的轻微缩进。如果我尝试在或vif
前面放置一个 & 符号,我无法正确对齐或符号周围的其他方程式。令人满意的结果大致如下所示(我编辑了图片)else
end
=
\geq
如何才能实现这样的缩进并保持约束以这种方式对齐?
答案1
一个快速解决方法是使和的两条线if
具有else
与线相同的宽度\text{vif } v_i^t = 1 \text{ then}
。您可以makebox
为此使用。calc
还需要包来允许\widthof
自动计算宽度。
\documentclass[12pt]{article}
\usepackage{amsmath}
\usepackage{calc}
\begin{document}
\newcommand{\adjleft}[1]{\makebox[\widthof{$\text{vif } v_i^t = 1 \text{ then}$}][l]{#1}}
\begin{align*}
\max \sum_{i \in I} z_i \\
\text{subject to} \\
x_i^0 &= x_i^{\text{start}} &&\forall i \in I, \\
l_i^t + r_i^t + c_i^t &= 1 &&\forall t = 0,...,N-1, i \in I, \\
\text{vif } v_i^t = 1 \text{ then} \\
x_j^t - x_i^t &\leq \epsilon \\
\adjleft{else} \\
x_j^t - x_i^t &\geq \epsilon + \hat{\epsilon}\\
\adjleft{end} &&&\forall t=0,...,N-1, i,j \in I: i < j, \\
k_i^t &= \sum_{j \in I \setminus \{i\}} v_{\min(i,j),max(i,j)}+1+c_i^t &&\forall t=0,...,N-1, i \in I, \\
\end{align*}
\end{document}