我正在使用该类beamer
进行演示和amsmath
包optidef
。我在一帧的不同幻灯片中有两个优化。我想修复这两个幻灯片中单词“最小化”和“受制于”的位置,并仅更改“最小化”下方和“最小化”之后的内容(目标函数)的位置。我该怎么做?
\documentclass{beamer}
\usepackage{amsmath}
\usepackage{optidef}
\begin{document}
\begin{frame}
\frametitle{An example}
\only<1>{\begin{mini*}
{x \in V}{\langle c,x\rangle}{}{}
\addConstraint{x \in }{\mathcal{K} \cap \mathcal{L}}
\end{mini*}}
\only<2>{
\begin{mini*}
{X \in \mathcal{S}^N}{\langle C,X\rangle}{}{}
\addConstraint{X \in }{\mathcal{K} \cap \mathcal{L}}
\end{mini*}
}
\end{frame}
\end{document}
答案1
我不太了解这个optidef
包及其对齐机制,所以我想出了一个直接但可能也有点 hack 且可能不是最好的解决方案。代码不太易读,因此使用数组重新创建所有内容可能是一个更好的主意,如这个答案。
无论如何,要确保垂直对齐相同,您可以使用\strut
s。要确保水平对齐相同,您需要为两个输出设置相同的宽度。这并不容易,因为命令的语法,但可以使用\phantom
and \mathrlap
(由mathtools
包提供)来实现。
更具体地说,我创建一个与两个环境中最长的线\mathrlap{\langle c,x\rangle}{\phantom{X \in \mathcal{K} \cap \mathcal{L}}}
一样宽的框并将其放置在里面。这样,第一个环境与第二个环境一样宽,并且水平对齐是固定的。X \in \mathcal{K} \cap \mathcal{L}
\langle c,x\rangle
\documentclass{beamer}
\usepackage{optidef}
\begin{document}
\begin{frame}
\frametitle{An example}
\only<1>{
\begin{mini*}
{\strut x \in V}{\strut\mathrlap{\langle c,x\rangle}{\phantom{X \in \mathcal{K} \cap \mathcal{L}}}}{}{}
\addConstraint{\strut x \in {}}{\mathcal{K} \cap \mathcal{L}}
\end{mini*}
}
\only<2>{
\begin{mini*}
{\strut X \in \mathcal{S}^N}{\strut\langle C,X\rangle}{}{}
\addConstraint{\strut X \in {}}{\mathcal{K} \cap \mathcal{L}}
\end{mini*}
}
\end{frame}
\end{document}
一个类似的想法可能更容易阅读,那就是使用\mathmbox
具有一定合理宽度的 es:
\documentclass{beamer}
\usepackage{optidef}
\begin{document}
\begin{frame}
\frametitle{An example}
\only<1>{
\begin{mini*}
{\strut x \in V}{\strut\mathmakebox[5em][l]{\langle c,x\rangle}}{}{}
\addConstraint{\strut x \in {}}{\mathcal{K} \cap \mathcal{L}}
\end{mini*}
}
\only<2>{
\begin{mini*}
{\strut X \in \mathcal{S}^N}{\strut\mathmakebox[5em][l]{\langle C,X\rangle}}{}{}
\addConstraint{\strut X \in {}}{\mathcal{K} \cap \mathcal{L}}
\end{mini*}
}
\end{frame}
\end{document}