帮助在 beamer 文章模式下挂接 \begin{frame} 环境,以便生成每个小节的框架列表

帮助在 beamer 文章模式下挂接 \begin{frame} 环境,以便生成每个小节的框架列表

我正在编写一份长篇文档,它既可以用作课堂演示的幻灯片,也可以作为一本迷你教科书。我的文档包含大约 600 张幻灯片,分为章节、小节和小小节。

我使用articlebeamer 模式制作讲义。在这些讲义中,我想为每个小节提供一个框架列表。理想情况下,也为子小节提供一个框架列表。为此,我找到了用于框架环境的 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
}

我想加入此代码来生成:

  1. 在每个小节内对框架进行编号
  2. 为每个子部分生成一个框架列表

我使用它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可能在这里有用。

相关内容