有没有办法自动使用章节名称作为框架标题,并自动使用小节名称作为框架副标题?
我认为这个问题是相关的,但是当我尝试破解该解决方案以将替换从 更改\insertsubsectionhead
为\insertsectionhead
时,我的框架标题就消失了:
\addtobeamertemplate{frametitle}{
\let\insertframetitle\insertsectionhead}{}
(之后)
\section{Introduction}
\begin{frame}
\frametitle{}
. . .
模板操作出现在哪里有关系吗?我在选择主题后立即将其放在序言中。
底线:我不知道这些内部结构是如何工作的,所以最坏的情况是我将继续将章节和子章节名称复制到框架标题和副标题中。我喜欢在每个框架中保持与大纲的连接的想法。
答案1
要在 beamer 的框架标题中使用章节和小节名称,可以使用\secname
和,\subsecname
如下所示:
\section{About project}
\subsection{Easy stuff}
\begin{frame}{\secname : \subsecname}
...
\end{frame}
答案2
正如您链接的问题中的答案所解释的那样,仅仅添加
\addtobeamertemplate{frametitle}{
\let\insertframetitle\insertsectionhead}{}
如果您明确使用命令来处理每一帧,此方法将有效\frametitle{}
。同样的答案解释了如何通过添加来避免明确使用该命令
\makeatletter
\CheckCommand*\beamer@checkframetitle{\@ifnextchar\bgroup\beamer@inlineframetitle{}}
\renewcommand*\beamer@checkframetitle{\global\let\beamer@frametitle\relax\@ifnextchar\bgroup\beamer@inlineframetitle{}}
\makeatother
因此,对于您的情况,您必须在序言中添加以下几行:
\addtobeamertemplate{frametitle}{
\let\insertframetitle\insertsectionhead}{}
\addtobeamertemplate{frametitle}{
\let\insertframesubtitle\insertsubsectionhead}{}
\makeatletter
\CheckCommand*\beamer@checkframetitle{\@ifnextchar\bgroup\beamer@inlineframetitle{}}
\renewcommand*\beamer@checkframetitle{\global\let\beamer@frametitle\relax\@ifnextchar\bgroup\beamer@inlineframetitle{}}
\makeatother