考虑以下 MWE
\documentclass{beamer}
\setbeamertemplate{frametitle continuation}[from second][
\insertcontinuationcountroman]
\usepackage{lipsum}
\begin{document}
\begin{frame}[allowframebreaks]
\frametitle{Foo}
\framesubtitle{Bar}
\lipsum[1]
\framebreak
\framesubtitle{Baz}
\lipsum[2]
\end{frame}
\end{document}
如图所示,第一帧的标题正确,Foo
但副标题错误(应该是Bar
而不是Baz
)。我该如何解决这个问题?我知道对于第二帧,我可以像这样创建一个新帧:
\begin{frame}[allowframebreaks]
\frametitle{Foo II}
\framesubtitle{Baz}
\lipsum[2]
\end{frame}
并避免我目前的问题。但是我想知道是否可以在连续帧中放置一个带有新字幕的明确帧中断,而无需重置第一帧的字幕。
编辑在@Mark 向我展示了这个之后问题我可以做这个:
\documentclass{beamer}
\begin{document}
\begin{frame}
\frametitle{Foo}
\only<+>{
\framesubtitle{Bar}
}
\only<+>{
\framesubtitle{Baz}
}
\end{frame}
\end{document}
在每个帧中获取正确的字幕。如图所示,这种方法的问题在于,我希望第二帧上的标题是Foo II
而不是Foo
(我喜欢allowframebreaks
在连续帧的标题后附加罗马数字的行为)。
所以我的问题是,我可以使用覆盖方法来解决字幕重置问题,但也可以以某种方式将罗马数字附加到连续帧的标题上,就像允许的allowframebreaks
那样?
答案1
根据您编辑的问题和Beamer - 如何添加子帧编号?你可以做这样的事情:
\documentclass{beamer}
\makeatletter
\def\c@slideinframe{\beamer@slideinframe}
\def\beamerslideinframe{\beamer@slideinframe}
\makeatother
\begin{document}
\begin{frame}
\frametitle{Foo}
\only<+>{
\framesubtitle{Bar}
}
\only<+>{
\frametitle{Foo \Roman{slideinframe}}
\framesubtitle{Baz}
}
\end{frame}
\end{document}
编辑:
为了自动实现这一点
\documentclass{beamer}
\makeatletter
\def\c@slideinframe{\beamer@slideinframe}
\def\beamerslideinframe{\beamer@slideinframe}
\newcommand*{\augmentframetitle}[1]{%
\expandafter\frametitle\expandafter
{\beamer@frametitle #1 \expandafter\ifnum\beamer@slideinframe>1\relax\Roman{slideinframe}\fi}%
}
\makeatother
\begin{document}
\begin{frame}
\augmentframetitle{bar}
\only<+>{
\framesubtitle{Bar}
}
\only<+>{
\framesubtitle{Baz}
}
\end{frame}
\end{document}