我目前正在准备讲义beamer
。我将课程结构化为部分、章节等,并希望在整个课程中始终使用编号方案。无需进行大量手动复制和粘贴操作,这对我来说意味着整个课程的单个文件.tex
(可能包含一些部分)是最佳解决方案。但这当然意味着 LaTeX 总是必须处理很多东西,而我总是得到包含整个课程的 PDF,这并不实际。
为了解决这个问题,beamer
课堂上有\lecture
命令和附带的\includeonlylecture
命令。但是,如果我使用这个,我的结构就会被破坏,因为 Latex 将忽略当前讲座之外的所有结构元素(部分、章节等),为每个讲座生成新的编号。安德鲁的回答整个课程均由 Beamer 提供提供了一种更为严格的机制方法\lecture
,但它也会忽略一切。
因此我的问题是:我怎样才能\includeonlylecture{}
只忽略\frame
命令和框架环境?
以下是 MWE 的尝试:
\documentclass[11pt, t, xcolor=dvipsnames, utf8x]{beamer}
\includeonlylecture{day2}
\begin{document}
\lecture{27. April 2014}{day1}
\part{one}
\frame{Ignore this....}
\section{one-one}
\lecture{24. April 2014}{day2}
\section{one-two}
\frame{Use this frame and let it be in section one-two}
\part{two}
\end{document}
答案1
我自己找到了一个解决方案。基本上,它重新定义了 beamer 的 \beamer@section 等宏,这样即使不在当前讲座中,在节(或部分或子节)开始时执行的大部分操作也已完成。
以下是各部分的代码(其他两个非常相似):
\long\def\beamer@section[#1]#2{%
\beamer@savemode%
\mode<all>%
\refstepcounter{section}%
\beamer@ifempty{#2}%
{\long\def\secname{#1}\long\def\lastsection{#1}}%
{\global\advance\beamer@tocsectionnumber by 1\relax%
\long\def\secname{#2}%
\long\def\lastsection{#1}%
\addtocontents{toc}{\protect\beamer@sectionintoc{\the\c@section}{#2}{\the\c@page}{\the\c@part}%
{\the\beamer@tocsectionnumber}}}%
{\let\\=\relax\xdef\sectionlink{{Navigation\the\c@page}{\noexpand\secname}}}%
\beamer@tempcount=\c@page\advance\beamer@tempcount by -1%
\beamer@ifempty{#1}{}{%
\addtocontents{nav}{\protect\headcommand{\protect\sectionentry{\the\c@section}{#1}{\the\c@page}{\secname}{\the\c@part}}}%
\addtocontents{nav}{\protect\headcommand{\protect\beamer@sectionpages{\the\beamer@sectionstartpage}{\the\beamer@tempcount}}}%
\addtocontents{nav}{\protect\headcommand{\protect\beamer@subsectionpages{\the\beamer@subsectionstartpage}{\the\beamer@tempcount}}}%
}%
\beamer@sectionstartpage=\c@page%
\beamer@subsectionstartpage=\c@page%
\def\insertsection{\expandafter\hyperlink\sectionlink}%
\def\insertsubsection{}%
\def\insertsubsubsection{}%
\def\insertsectionhead{\hyperlink{Navigation\the\c@page}{#1}}%
\def\insertsubsectionhead{}%
\def\insertsubsubsectionhead{}%
\def\lastsubsection{}%
\Hy@writebookmark{\the\c@section}{\secname}{Outline\the\c@part.\the\c@section}{2}{toc}%
\hyper@anchorstart{Outline\the\c@part.\the\c@section}\hyper@anchorend%
\ifbeamer@inlecture
\beamer@ifempty{#2}{\beamer@atbeginsections}{\beamer@atbeginsection}%
\fi%
\beamer@resumemode}%
当我们不在当前讲座中时,唯一省略的是 \AtBeginSection 类型宏的执行。
该解决方案效果很好,因为当前讲座之前的所有部分、章节和小节都添加到了目录中。因此,我可以在整个讲座中保持一致的章节编号方案。但是,对我来说,当前讲座之后的所有全局结构元素都没有添加,这似乎有点奇怪。这其实并不麻烦,但我记得它曾经在那里,但现在它不见了。