嵌套对齐的垂直对齐

嵌套对齐的垂直对齐

我想对齐一个相当复杂的公式,该公式由一个(外部)优化问题和几个(内部)约束块组成,这些约束块应围绕等号对齐。我选择使用嵌套的aligns 并解决了这个问题:

\begin{equation}
  \begin{aligned}
    \min_{\vec{y}, \vec{v}}\ & f(\vec{y}) + g(\vec{v})  \\
    \textrm{s.t. } &
    \begin{aligned}
      \dot{\vec{y}} & = f(\vec{y}, \vec{v}) \\
      \vec{y}(0) & = \vec{y}_0 \\
    \end{aligned}
  \end{aligned}
\end{equation}

得出以下结果:

渲染代码

不幸的是,s.t.相对于约束块而言是居中的,而我需要两个块在各自的顶部对齐,所以我需要s.t.出现。

我该如何调整代码来实现这个效果?

答案1

像这样?

\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{equation}
  \begin{aligned}
    \min_{\vec{y}, \vec{v}}\ & f(\vec{y}) + g(\vec{v})  \\
    \textrm{s.t. } &
    \begin{aligned}[t]
      \dot{\vec{y}} & = f(\vec{y}, \vec{v}) \\
      \vec{y}(0) & = \vec{y}_0 \\
    \end{aligned}
  \end{aligned}
\end{equation}
\end{document}

在此处输入图片描述

答案2

有一个专用包,optidef它简化了输入并提供了多种选择。下面是三种可能性的演示,最后两种使用esvect包中的矢量箭头,看起来比默认的箭头\vec(8 种不同的箭头尖)更好看。另外,我更喜欢不将约束对齐到 = 符号上:

\documentclass{article}
\usepackage{amsmath}
\usepackage[short]{optidef}
\usepackage[f]{esvect}

\begin{document}

\begin{mini}{\vec{y}, \vec{v}}{ f(\vec{y}) + g(\vec{v})}{\label{eq: example}}{}
  \addConstraint{\dot{\vec{y}}}{ = f(\vec{y}, \vec{v})}
  \addConstraint{\vec{y}(0)}{ = \vec{y}_0}
\end{mini}


\begin{mini!}{\vv{y}, \vv{v}}{ f(\vv{y}) + g(\vv{v})}{\label{eq: example}}{}
  \addConstraint{\vrule}{\dot{\vv{y}} = f(\vv{y}, \vv{v})}
  \addConstraint{\vrule}{\vv{y}(0) = \vv*{y}{0}\notag}
\end{mini!}

\begin{mini!}{\vv{y}, \vv{v}}{ f(\vv{y}) + g(\vv{v})}{\label{eq: example}}{}
  \addConstraint{\begin{array}[t]{|@{\,}l}\dot{\vv{y}} = f(\vv{y}, \vv{v})\\
  \vv{y}(0) = \vv*{y}{0}\end{array}}{}
\end{mini!}

\end{document} 

在此处输入图片描述

相关内容