帮助理解/调整 Beamer 的“讲座”命令的定义

帮助理解/调整 Beamer 的“讲座”命令的定义

Beamer 的“讲座”命令对我来说是一种很好的方式,它可以将所有讲座笔记放在一个文档中,但只排版我在任何一天/一周的课程中需要的部分。最终,我想尝试将此命令应用于其他文档类别(目前它已嵌入“beamer”类别中)。

我认为自己是高级 TeX 用户,但在高级编程方面还是新手(我整理了一些自己的“类”文件,但还不算太高级)。

以下是我在“beamerbasesection.sty”中找到的内容:

%
% Lecture Definitions
%
\newif\ifbeamer@inlecture
\beamer@inlecturetrue

\newcommand{\beamer@if@in@clist@TF}[2]{%
  \def\beamer@if@in@clist@aux##1,#2,{}%
  \expandafter\expandafter\expandafter\ifx
    \expandafter\expandafter\expandafter\@nil
    \expandafter\beamer@if@in@clist@aux\expandafter,#1,{}{},#2,\@nil
    \expandafter\@secondoftwo
  \else
    \expandafter\@firstoftwo
  \fi
}

\newcounter{lecture}
\renewcommand\thelecture{\@arabic\c@lecture}
\let\insertlecturenumber=\thelecture
\newrobustcmd*\lecture{\@dblarg\beamer@lecture}
\long\def\beamer@lecture[#1]#2#3{%
  \beamer@savemode
  \mode<all>%
  \refstepcounter{lecture}%
  \def\beamer@currentlecturelabel{#3}%
  \@onelevel@sanitize\beamer@currentlecturelabel
  \def\beamer@lecturename{#2}%
  \def\beamer@shortlecturename{#1}%
  \ifx\beamer@onlylecture\@empty
  \else
    \expandafter\beamer@if@in@clist@TF\expandafter\beamer@onlylecture
      \expandafter{\beamer@currentlecturelabel}%
      {\beamer@inlecturetrue}%
      {\beamer@inlecturefalse}%
  \fi
  \beamer@atbeginlecture
  \beamer@resumemode
}

那么这个命令是如何发挥它的魔力的呢?当我输入时\includeonlylecture{foo},它怎么知道只抓取下\lecture[]{}{foo}一个“讲座”命令之后和之前的文本呢?感谢您提供的任何见解!

为了完整性,我提供了一个最小的工作示例:

\documentclass[]{beamer}

\includeonlylecture{foo}

\begin{document}
\lecture[]{}{notfoo1}
\begin{frame}
\frametitle{Text1}
This frame won't show.
\end{frame}


\lecture[]{}{foo}
\begin{frame}
\frametitle{Hello, World!}
Greetings.
\end{frame}


\lecture[]{}{notfoo2}
\begin{frame}
\frametitle{Text2}
This frame won't show either.
\end{frame}
\end{document}

相关内容