我有许多相关的投影仪幻灯片,我想将它们打印成装订成册的讲义“书”。
我的文件布局如下:
大多数其他文件使用的通用包含文件(include.tex):
\documentclass[12pt,table,english,t,compress]{beamer}
\author{...}
% \usepackage defintions
\title{...}
\usetheme{Warsaw}
\usecolortheme{seahorse}
% Various color and command definitions
然后,对于我的每个幻灯片组,我都有一对文件(deck_1.tex,deck_1_slides.tex),结构如下:
% deck_1.tex
\input{include.tex}
\begin{document}
\input{deck_1_slides.tex}
\end{document}
和:
% deck_1_slides.tex
\subtitle{Deck 1 subtitle}
\begin{frame}
\titlepage
\end{frame}
\begin{frame}
\frametitle{Outline}
%\tableofcontents[pausesections]
\tableofcontents
\end{frame}
\section{Section A}
\begin{frame} \frametitle{XXX} ... \end{frame}
\begin{frame} \frametitle{YYY} ... \end{frame}
\begin{frame} \frametitle{ZZZ} ... \end{frame}
\section{Section B}
\begin{frame} \frametitle{AAA} ... \end{frame}
\begin{frame} \frametitle{BBB} ... \end{frame}
\begin{frame} \frametitle{CCC} ... \end{frame}
...
上述设置对于制作单独的幻灯片组来说效果很好。我在每张幻灯片上都获得了常规编号“第 N 页/总页数”,并且在每个部分的开头都出现了部分目录。一切都很好。
然而,在制作“书”版的幻灯片时,我遇到了困难。我想做的是:
将每张幻灯片视为一个编号章节。制作讲义版本时,将每张幻灯片底部的连续编号设为“章节编号/幻灯片编号”(即删除“幻灯片总数”)。
将每张幻灯片中的“章节目录”更改为“章节标题”或“章节标题”(即上面幻灯片中的 \subtitle)加上“章节标题”。
在“书”的开头制作一个“大目录”,它只包含“章节”标题和“部分”标题。我希望大目录包含各个卡片组中使用的“章节编号/幻灯片编号”页码。
更新:我意识到我脑海中还有另一点,但在我最初的表述中我并没有明确表达出来。在总目录中,我希望看到 Chapter.Section 形式的编号。
例如,Grant TOC 中的 Chapter.Section 编号可能如下所示:
1 Deck 1 title 1-nn
1.1 Deck 1 Section 1 title 1-nn
1.2 Deck 1 Section 2 title 1-nn
1.3 Deck 1 Section 3 title 1-nn
2 Deck 2 title 2-nn
2.1 Deck 2 Section 1 title 2-nn
2.2 Deck 2 Section 2 title 2-nn
(“nn” 是帧编号)
类似地,在 Deck TOCs 中我希望有类似这样的内容(这里,针对 Deck 2)
2 Deck 2 title 2-nn
2.1 Deck 2 Section 1 title 2-nn
2.2 Deck 2 Section 2 title 2-nn
我假设以上所有操作都是可行的,因为 LaTeX 相当灵活(我是新手),但我在尝试实现具有上述功能(尤其是 1 和 3)的书籍版本时有点迷茫。任何提示都将不胜感激。
答案1
正如我的第一个答案的评论中的问题开头所建议的那样,这里是一种不同的方法:更改section
为subsection
并包括不同的甲板部分。
- 没有变化
deck_n.tex
。 - 替换
\section
为。\subsection
deck_n_slides.tex
- 要指定“Deck TOC”的外观,请使用 的选项
\tableofcontents
。(例如,\tableofcontents[sectionstyle=hide,subsection=show]
在 中使用deck_n_slides.tex
)。
include.tex
用。。。来代替
\documentclass[12pt,table,english,t,compress]{beamer}
\author{Author}
\institute{Institute}
\title{Title}
\usetheme{Warsaw}
\useoutertheme{infolines}
\usecolortheme{seahorse}
\makeatletter
\let\origSubsection\subsection
\def\subsection#1{\stepcounter{framenumber} \origSubsection[#1]{#1 \hfill \ \arabic{section} -- \arabic{framenumber}} \addtocounter{framenumber}{-1}}
\let\origSection\section
\def\section#1{\setcounter{framenumber}{1} \origSection[#1]{#1 \hfill \ \arabic{section} -- \arabic{framenumber}} \addtocounter{framenumber}{-1}}
\makeatother
\newcommand{\sectionnumber}[1]{\setcounter{section}{#1} \addtocounter{section}{-1}}
\setbeamertemplate{section in toc}{\inserttocsectionnumber~\inserttocsection}
\setbeamertemplate{subsection in toc}{\inserttocsectionnumber.\inserttocsubsectionnumber~\inserttocsubsection\\}
\makeatletter
\setbeamertemplate{footline}
{
\leavevmode%
\hbox
{%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{author in head/foot}%
\usebeamerfont{author in head/foot}\insertshortauthor~~\beamer@ifempty{\insertshortinstitute}{}{(\insertshortinstitute)}
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{title in head/foot}%
\usebeamerfont{title in head/foot}\insertshorttitle
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,right]{date in head/foot}%
\usebeamerfont{date in head/foot}\insertshortdate{}\hspace*{2em}
\insertsectionnumber{} -- \insertframenumber\hspace*{2ex}
\end{beamercolorbox}
}%
\vskip0pt%
}
\makeatother
对于所有幻灯片的集合,你可以使用handout.tex
以下方法
% handout.tex
\input{include.tex}
\date{yyyy-mm-dd}
\begin{document}
\begin{frame}
\titlepage
\end{frame}
\begin{frame}
\frametitle{Grand TOC}
\tableofcontents
\end{frame}
\input{deck_1_slides.tex}
\input{deck_2_slides.tex}
\end{document}
答案2
我保留我原来的答案。根据问题中的编辑,下面列出了一些可能的更改。仍然缺少一小段涵盖问题所有细节的内容,并在最后一节中进行了解释。
原始答案
我尝试在以下设计原则内寻找解决方案:
- 文件
include.tex
、deck_1.tex
、中没有变化deck_1_slides.tex
,因此各个幻灯片集保持不变。 - 尽可能使用高级命令。
- 尽可能少地使用附加包。在我的解决方案中,仅
nameref
是需要的。
这导致了以下解决方案(完整代码和“Grand TOC”的图像发布如下):
- 所有更改均在名为 的主文件中进行
handout.tex
,其中幻灯片文件(例如deck_1_slide.tex
)已加载,并包含在input
我在课堂上使用
part
的选项。因此我重新定义了\tableofcontents
beamer
\subtitle
\let\origSubtitle\subtitle \renewcommand{\subtitle}[1]{% \origSubtitle{#1}% \stepcounter{chapter} \part{\thechapter}% \labelname{#1} \label{chapter:\thechapter}}
为了改变编号样式,我调整了 beamertemplate
footline
。(在下面的示例代码中,我将其调整为外部主题infolines
。)- 由于此编号样式在开始时无法用于“Grand TOC”,因此`footline`` 再次在本地进行更改。
为了在目录中获得所需的编号,我使用了短节标题功能。因此重新定义了
\section
\makeatletter \let\origSection\section \def\section#1{\stepcounter{framenumber} \origSection[#1]{#1 \dotfill \ \insertpartnumber{} / \arabic{framenumber}} \addtocounter{framenumber}{-1}} \makeatother
最后,我定义了一个新命令
\grandtoc
,以“part”编号作为输入,来设置“Grand TOC”。
完整代码(deck_2.tex
和具有与对应部分和deck_2_slides.tex
相同的形式):deck_1.tex
deck_1_slides.tex
% handout.tex
\input{include.tex}
% Outher theme to have running numbers at the bottom
\useoutertheme{infolines}
\institute{Institute}
\date{yyyy-mm-dd}
\usepackage{nameref} % new package
\makeatletter
\newcommand{\labelname}[1]{\def\@currentlabelname{#1}}
\makeatother
\newcounter{chapter}
% redefinition fo subtitle
\let\origSubtitle\subtitle
\renewcommand{\subtitle}[1]{%
\origSubtitle{#1}%
\stepcounter{chapter} \part{\thechapter}%
\labelname{#1} \label{chapter:\thechapter}}
\makeatletter
\setbeamertemplate{footline}
{
\leavevmode%
\hbox{%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{author in head/foot}%
\usebeamerfont{author in head/foot}\insertshortauthor~~\beamer@ifempty{\insertshortinstitute}{}{(\insertshortinstitute)}
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{title in head/foot}%
\usebeamerfont{title in head/foot}\insertshorttitle
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,right]{date in head/foot}%
\usebeamerfont{date in head/foot}\insertshortdate{}\hspace*{2em}
\insertpartnumber{} / \insertframenumber\hspace*{2ex}
\end{beamercolorbox}}%
\vskip0pt%
}
\makeatother
\AtBeginPart{\setcounter{framenumber}{0}}
% redinition of section
\makeatletter
\let\origSection\section
\def\section#1{\stepcounter{framenumber} \origSection[#1]{#1 \dotfill \ \insertpartnumber{} / \arabic{framenumber}} \addtocounter{framenumber}{-1}}
\makeatother
\newcommand{\grandtoc}[1]
{%
{\usebeamercolor[fg]{structure} \nameref{chapter:#1}}%
\tableofcontents[part=#1,sectionsstyle=show,subsectionstyle=hide]%
}
\begin{document}
{
\makeatletter
\setbeamertemplate{footline}
{
\leavevmode%
\hbox{%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{author in head/foot}%
\usebeamerfont{author in head/foot}\insertshortauthor~~\beamer@ifempty{\insertshortinstitute}{}{(\insertshortinstitute)}
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,center]{title in head/foot}%
\usebeamerfont{title in head/foot}\insertshorttitle
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=.333333\paperwidth,ht=2.25ex,dp=1ex,right]{date in head/foot}%
\usebeamerfont{date in head/foot}\insertshortdate{}\hspace*{2em}
\end{beamercolorbox}}%
\vskip0pt%
}
\makeatother
\begin{frame}
\titlepage
\end{frame}
\begin{frame}
\frametitle{Grand TOC}
\grandtoc{1}
\grandtoc{2}
\end{frame}
}
\input{deck_1_slides.tex}
\input{deck_2_slides.tex}
\end{document}
由此产生了以下“Grand TOC”:
更改(为回答编辑后的问题而进行)
为了不重置新部件的帧号,请删除该行\AtBeginPart{\setcounter{framenumber}{0}}
。
要重置每个部分的章节编号,请包括(以下这)
\makeatletter
\AtBeginPart{%
\beamer@tocsectionnumber=0\relax
\setcounter{section}{0}
}
\makeatother
注意力:您只能有一个活动的\AtBeginPart
。要重置帧编号和节编号,请将它们合并在一起。
要使“大目录”的编号样式(几乎)符合要求,请\section
用\grandtoc
% redinition of section
\makeatletter
\let\origSection\section
\def\section#1{\stepcounter{framenumber} \origSection[#1]{#1 \hfill \ \insertpartnumber{} -- \arabic{framenumber}} \addtocounter{framenumber}{-1}}
\makeatother
\newcommand{\grandtoc}[1]
{%
{\usebeamercolor[fg]{structure} #1 \nameref{chapter:#1}}%
\setbeamertemplate{section in toc}{#1.\inserttocsectionnumber~\inserttocsection}
\tableofcontents[part=#1,sectionsstyle=show,subsectionstyle=hide]%
}
要使“Deck TOC”具有相应的格式,请执行以下操作(与我的设计原则相反 - 但我没有其他想法):
- 在每个 的序言中添加
\newcommand{\grandtoc}[1]{\tableofcontents}
和。\renewcommand{\thepart}{0}
deck_n.tex
- 将所有内容替换
deck_n_slides.tex
\tableofcontents
为\grandtoc{\thepart}
有了这两个命令,编译单个卡片组的风格不会改变,但对于这本书来说,“卡片组目录”被重新定义了。
经过这些改变,“Grand TOC”现在如下所示。
还缺少什么
对于目录,没有显示不同部分开头的帧号。因此,主要原因是,在我的解决方案中,部分标题不存储在文件中.toc
,而是直接排版。要真正将各部分包含在文件中.toc
,可以使用以下想法:这里。但是,我认为这会导致对所提供解决方案的其他部分进行重大必要的更改。此外,上述困难也是各部分标题未正确对齐的原因。