我想对齐一个相当复杂的公式,该公式由一个(外部)优化问题和几个(内部)约束块组成,这些约束块应围绕等号对齐。我选择使用嵌套的align
s 并解决了这个问题:
\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}