怎样才能在原有框架标题和中间框架的基础上创建一个新的框架标题和中间框架?

怎样才能在原有框架标题和中间框架的基础上创建一个新的框架标题和中间框架?

在我的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}

相关内容