我正在编写一份长篇文档,它既可以用作课堂演示的幻灯片,也可以作为一本迷你教科书。我的文档包含大约 600 张幻灯片,分为章节、小节和小小节。
我使用article
beamer 模式制作讲义。在这些讲义中,我想为每个小节提供一个框架列表。理想情况下,也为子小节提供一个框架列表。为此,我找到了用于框架环境的 beamer 代码/usr/local/texlive/2014/texmf-dist/tex/latex/beamer/beamerbaseframe.sty
:
%
% Frames in article mode
%
\mode
<article>
{
\def\endframe{\egroup}
\def\frame{\@ifnextchar<\beamer@frame{\beamer@frame<*>}}
\def\beamer@frame<#1>{\@ifnextchar[{\beamer@@frame<#1>}{\beamer@@frame<#1>[]}}
\long\def\beamer@@frame<#1>[#2]{%
\global\let\insertframetitle=\@empty%
\global\let\insertframesubtitle=\@empty%
\beamer@slideinframe=1\relax%
\refstepcounter{framenumber}%
\beamer@slideinframe=0\relax%
\beamer@anotherslidefalse%
{\beamer@masterdecode{#1}}%
\ifbeamer@anotherslide%
\let\beamer@howtotreatframe\beamer@dosingleframe%
\else% no slides in frame
\let\beamer@howtotreatframe\beamer@donoframe%
\fi%
\beamer@slideinframe=1\relax%
\beamer@howtotreatframe}
\long\def\beamer@donoframe{%
\setbox\beamer@tempbox\vbox\bgroup%
\beamer@inframetrue%
\let\frame=\framelatex
\usebeamertemplate{frame begin}%
\bgroup\aftergroup\beamer@endframe%
\beamer@article@startframe}%
\def\beamer@dosingleframe{%
\bgroup%
\beamer@inframetrue%
\let\frame=\framelatex
\usebeamertemplate{frame begin}%
\bgroup\aftergroup\beamer@endframe%
\beamer@article@startframe}%
\def\beamer@endframe{%
\usebeamertemplate{frame end}\egroup}
\def\beamer@article@startframe{%
\ifx\@currenvir\beamer@frametext%
\let\beamer@next=\beamer@checkframetitle%
\else%
\let\beamer@next=\beamer@article@framecmd%
\fi%
\beamer@next}%
\def\beamer@article@framecmd{%
\afterassignment\beamer@checkframetitle
\let\beamer@next=}
\providecommand\includeonlyframes[1]{}% no effect
}
我想加入此代码来生成:
- 在每个小节内对框架进行编号
- 为每个子部分生成一个框架列表
我使用它minitoc
来制作每个部分的目录,因此理想情况下,解决方案可以扩展这种用途,或者至少不会干扰它。
有什么建议、想法甚至解决方案吗?
(以下是相关问题和答案:如果框架标题中包含 LaTeX 标签,如何使用 Beamer 生成框架列表? 这是另一个:有没有什么办法可以用投影仪生成帧列表?)
答案1
事实证明,这个问题的答案错了。连接到环境frame
相当于用手撞墙,当beamer
提供了一个简单的界面来做这件事时,例如,
\setbeamertemplate{frametitle}{%
\paragraph{\insertframenumber.~\insertframetitle}\\
\noindent\emph{\insertframesubtitle}\par
}
为此,检查模板的先前内容很有用,如下所述:“检查 beamertemplate 的当前值“。
限制对article
模式的更改,请将上述内容包装在 中\mode<>
,例如,
\mode<article>{\setbeamertemplate{frametitle}{%
\paragraph{\insertframenumber.~\insertframetitle}\\
\noindent\emph{\insertframesubtitle}\par
}}
您还可以使用\addtobeamertemplate
它来添加到模板的当前值,但对于问题中描述的目的,这样的改变是不够的。
其他死胡同方向包括:
- 包裹
minitoc
:此包无法生成子部分的内容 - 软件包
titletoc
:该软件包不能很好地兼容hyperref
似乎解决方案必须手动完成;包装newfile
可能在这里有用。