在我的frame
环境的某个阶段,我想访问框架标题的当前值,然后根据原始值构造并影响新的框架标题。
听起来很复杂,不是吗?我希望这能更好地解释我想要实现的目标:
\documentclass{beamer}
\begin{document}
\begin{frame}
\frametitle{Foo} % original title: Foo
...
% Here, I want, for instance, to append "bar" to the 'current' frame title.
% \insertframetitle is defined here
\let\currtitle\insertframetitle % to avoid recursion
\frametitle{\currtitle bar} % desired new title: Foobar
\end{frame}
\end{document}
我以为\let\currtitle\insertframetitle
这足以让我摆脱麻烦,但我得到了错误
Undefined control sequence. \insertframetitle
我不明白为什么......
原始标题仅用于构造新标题,不应在输出中原封不动地打印出来。我必须解决这个问题的原因是我想定义一个新的框架环境,在该环境中处理原始框架标题(由用户提供)并将其用于构造有效的框架标题,基于框架环境的内容。
答案1
您的问题是,它beamer
不只是针对文本进行定义,而且会在各个点重置/删除定义。因此,您要做的就是使用存储的框架名称文本\insertframetitle
重新运行:\frametitle
\beamer@frametitle
\documentclass{beamer}
\makeatletter
\newcommand*{\augmentframtitle}[1]{%
\expandafter\frametitle\expandafter
{\beamer@frametitle #1}%
}
\makeatother
\begin{document}
\begin{frame}
\frametitle{Foo}
...
\augmentframtitle{bar}
\end{frame}
\end{document}