原始答案

原始答案

我有许多相关的投影仪幻灯片,我想将它们打印成装订成册的讲义“书”。

我的文件布局如下:

大多数其他文件使用的通用包含文件(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 页/总页数”,并且在每个部分的开头都出现了部分目录。一切都很好。

然而,在制作“书”版的幻灯片时,我遇到了困难。我想做的是:

  1. 将每张幻灯片视为一个编号章节。制作讲义版本时,将每张幻灯片底部的连续编号设为“章节编号/幻灯片编号”(即删除“幻灯片总数”)。

  2. 将每张幻灯片中的“章节目录”更改为“章节标题”或“章节标题”(即上面幻灯片中的 \subtitle)加上“章节标题”。

  3. 在“书”的开头制作一个“大目录”,它只包含“章节”标题和“部分”标题。我希望大目录包含各个卡片组中使用的“章节编号/幻灯片编号”页码。

  4. 更新:我意识到我脑海中还有另一点,但在我最初的表述中我并没有明确表达出来。在总目录中,我希望看到 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

正如我的第一个答案的评论中的问题开头所建议的那样,这里是一种不同的方法:更改sectionsubsection并包括不同的甲板部分。

  • 没有变化deck_n.tex
  • 替换\section为。\subsectiondeck_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

我保留我原来的答案。根据问题中的编辑,下面列出了一些可能的更改。仍然缺少一小段涵盖问题所有细节的内容,并在最后一节中进行了解释。


原始答案

我尝试在以下设计原则内寻找解决方案:

  1. 文件include.texdeck_1.tex、中没有变化deck_1_slides.tex,因此各个幻灯片集保持不变。
  2. 尽可能使用高级命令。
  3. 尽可能少地使用附加包。在我的解决方案中,仅nameref是需要的。

这导致了以下解决方案(完整代码和“Grand TOC”的图像发布如下):

  • 所有更改均在名为 的主文件中进行handout.tex,其中幻灯片文件(例如deck_1_slide.tex)已加载,并包含在input
  • 我在课堂上使用part的选项。因此我重新定义了\tableofcontentsbeamer\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.texdeck_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”:

大 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”现在如下所示。

新款 Grand Toc

还缺少什么

对于目录,没有显示不同部分开头的帧号。因此,主要原因是,在我的解决方案中,部分标题不存储在文件中.toc,而是直接排版。要真正将各部分包含在文件中.toc,可以使用以下想法:这里。但是,我认为这会导致对所提供解决方案的其他部分进行重大必要的更改。此外,上述困难也是各部分标题未正确对齐的原因。

相关内容