重新表述
我仍在努力使用 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
只是文本。然后我们的比较也有效!