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}