我怎样才能在 beamer 中的议程页面上自动显示框架标题?

我怎样才能在 beamer 中的议程页面上自动显示框架标题?

重新表述

我仍在努力使用 beamer。我想要实现的是,议程页面自动包含目录,并在与章节写入的完全相同的位置写入议程,但不明确写入\section*或定义空的{~}框架标题或类似内容。

这是我的 MWE:

\documentclass{beamer}

\defbeamertemplate*{frametitle}{regular}{%
\edef\agendatoken{!!!AGENDA!!!}%
\ifx\insertframetitle\agendatoken
Agenda%
\else
\insertsection\ \textbf{\insertframetitle}%
\fi}

\newcommand{\agendapage}{\frametitle{!!!AGENDA!!!}\tableofcontents}

\begin{document}
\begin{frame}
\agendapage
\end{frame}

\section{Section 1}
\begin{frame}
\frametitle{A frame}
This is a frame
\end{frame}

\section{Section 2}
\begin{frame}
\frametitle{And yet another page}
This is yet another frame
\end{frame}
\end{document}

这是我想要为议程页面实现的视觉效果: 在此处输入图片描述

\insertframetitle但是我的和之间的字符串比较似乎\agendatoken出了问题。你能帮我修复这个比较,以便使用特殊的框架标题实现我想要的行为吗?

答案1

我找到了一个解决方案,虽然不完美,但应该足够好用。代码如下:

\documentclass{beamer}

\makeatletter
\defbeamertemplate*{frametitle}{regular}{%
\def\agendatoken{@special-frametitle-agenda}%
\ifx\agendatoken\beamer@shortframetitle
Agenda%
\else
\insertsection\ \textbf{\insertframetitle}%
\fi}
\newcommand{\agendapage}{\frametitle{@special-frametitle-agenda}\tableofcontents}
\makeatother

\begin{document}
\begin{frame}
\agendapage
\end{frame}

\section{Section 1}
\begin{frame}
\frametitle{A frame}
This is a frame

\end{frame}

\section{Section 2}
\begin{frame}
\frametitle{And yet another page}
This is yet another frame
\end{frame}
\end{document}

因此,诀窍基本上是与 \beamer@shortframetitle 或 \beamer@frametitle 进行比较(最安全的方法可能是检查它们是否相等),而不是\insertframetitle,因为那里面有更多内容,然后我们可以看到,而\beamer@shortframetitle只是文本。然后我们的比较也有效!

相关内容