![将章节标题添加到框架列表 - \insertsection 不起作用](https://linux22.com/image/340861/%E5%B0%86%E7%AB%A0%E8%8A%82%E6%A0%87%E9%A2%98%E6%B7%BB%E5%8A%A0%E5%88%B0%E6%A1%86%E6%9E%B6%E5%88%97%E8%A1%A8%20-%20%5Cinsertsection%20%E4%B8%8D%E8%B5%B7%E4%BD%9C%E7%94%A8.png)
通过答案的帮助有没有什么办法可以用投影仪生成帧列表?我成功创建了框架列表。但我还想包括章节标题之间。这个答案不幸的是它对我来说不起作用,因为我需要不受影响的原始 ToC。
因此,我想我可以创建一个命令\sectioninlbf
,每次执行后都会调用它\section
(以后可以自动执行...),并在 lbf 文件中创建一个新的内容行。然而\insertsection
命令似乎被完全忽略了。
我究竟做错了什么?
平均能量损失
\documentclass{beamer}
\usepackage{hyperref}
\makeatletter
\newcommand\listofframes{\@starttoc{lbf}}
\makeatother
\makeatletter
\addtobeamertemplate{frametitle}{}{%
\mode<presentation>
{
\only<1>{
\hypertarget{\insertframetitle}{}%
\addcontentsline{lbf}{section}{\protect\makebox[2em][l]{%
\protect\usebeamercolor[fg]{structure}\scriptsize\insertframenumber\hfill}%
\ifx\insertframesubtitle\@empty%
\scriptsize\protect\hyperlink{\insertframetitle}{\insertframetitle}%
\else%
\scriptsize\protect\hyperlink{\insertframetitle}{\insertframesubtitle}%
\fi%
\par}%
}
}
}
\makeatother
\newcommand{\sectioninlbf}{
\addcontentsline{lbf}{section}{%
\vspace{0.3\baselineskip}
\protect\footnotesize%
\protect\insertsection Here I want the section title.\par}%
}
\begin{document}
\begin{frame}
\frametitle{General outline}
\tableofcontents[hideallsubsections]
\end{frame}
\begin{frame}
\frametitle{List of Frames}
\listofframes
\end{frame}
\section{Test section one}\sectioninlbf
\begin{frame}
\frametitle{Test Frame One}
test
\end{frame}
\section{Test section two}\sectioninlbf
\begin{frame}
\frametitle{Test Frame Two}
\framesubtitle{Test Frame Two Subtitle}
test
\end{frame}
\begin{frame}
\frametitle{Test Frame Three}
\uncover<1->{test}
\uncover<2->{test}
\uncover<3->{test}
\end{frame}
\end{document}
更新
由于 Sam Carter 的回答改变了我最初的方法,我需要扩展 MWE 以包含更多要求:如果存在 framesubtitle,framesubtitle 应该替换目录中的 frametitle。还需要帧号。我还使用不同的 frametitle 模板,其中一些将 frametitles 和 framesubtitles 添加到目录中,而另一些则不添加。所以我不知道修补 frametitle 的基本命令是否是个好主意,除非存在开/关开关。
答案1
基于https://tex.stackexchange.com/a/17233/36296
我看到你问题中的两个要求:
“正常”目录应该仍然可用:
\tableofcontents[hideallsubsections]
应该与覆盖一起工作:我稍微修改了代码,以便只有框架中的第一个幻灯片被添加到目录中。
显示帧数
包括字幕(如果有)
\documentclass{beamer}
\makeatletter
\addtobeamertemplate{frametitle}{}{%
\only<1>{%
\addtocontents{toc}{%
\protect\beamer@subsectionintoc{\the\c@section}{0}{%
\insertframenumber\quad%
\ifx\insertframesubtitle\@empty%
\insertframetitle%
\else%
\insertframesubtitle%
\fi%
}{\the\c@page}{\the\c@part}{\the\beamer@tocsectionnumber}%
}%
}%
}%
\makeatother
\begin{document}
\begin{frame}
\tableofcontents[hideallsubsections]
\end{frame}
\begin{frame}
\tableofcontents
\end{frame}
\section{First Section}
\begin{frame}{First frame}
Text
\end{frame}
\begin{frame}{Second frame}
Text
\end{frame}
\section{Second Section}
\begin{frame}
\frametitle{Third frame}
\framesubtitle{mySubtitle}
Text
\end{frame}
\begin{frame}
\frametitle{Fourth frame}
Text
\pause
more text
\end{frame}
\end{document}