通过缩进对齐多个元素

通过缩进对齐多个元素

我正在尝试排版一个优化问题,该问题结合使用了变量条件约束 (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*}

显示 放错地方,否则

我希望将 和elseend对齐(就像vif已经是的一样),同时保持 下方行的轻微缩进。如果我尝试在或vif前面放置一个 & 符号,我无法正确对齐或符号周围的其他方程式。令人满意的结果大致如下所示(我编辑了图片)elseend=\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}

在此处输入图片描述

相关内容