在 beamer 中,如何使用 \tableofcontents[hidesubsections] 并正确呈现目录?

在 beamer 中,如何使用 \tableofcontents[hidesubsections] 并正确呈现目录?

使用:pdfTeX 3.1415926-2.5-1.40.14 (TeX Live 2013)

当使用\tableofcontentsin beamer、使用主题、Berkeley选项以及隐藏子部分的选项时,它会错误地呈现目录。它会引入过多的空间来分隔部分名称。[hidesubsections][hideothersubsections]

目的是在每个章节开始前放一张幻灯片,目录中会突出显示当前章节并显示其子章节。

给出以下最小不工作示例(MnWE):

    \documentclass[]{beamer}

    \usetheme{Berkeley}

    \begin{document}

    \AtBeginSection[]{
    \frame{
    \tableofcontents[currentsection,hideothersubsections]
    }
    }

    \begin{frame}
    \tableofcontents[hidesubsections]
    \end{frame}

    \begin{frame}
    \tableofcontents[currenthideallsubsections]
    \end{frame}

    \begin{frame}
    \tableofcontents
    \end{frame}

    \section{section 1}
    \subsection{subsection1}
    \begin{frame}
    subsection1
    \end{frame}
    \subsection{subsection2}
    \begin{frame}
    subsection1
    \end{frame}

    \section{section 2}
    \subsection{subsection1}
    \begin{frame}
    subsection1
    \end{frame}
    \subsection{subsection2}
    \begin{frame}
    subsection1
    \end{frame}

    \section{section 3}hidesubsections
    \begin{frame}
    subsection1
    \end{frame}
    \section{section 4}
    \begin{frame}
    subsection1
    \end{frame}
    \section{section 5}
    \begin{frame}
    subsection1
    \end{frame}
    \section{section 6}
    \begin{frame}
    subsection1
    \end{frame}
    \section{section 7}
    \begin{frame}
    subsection1
    \end{frame}
    \section{section 8}
    \begin{frame}
    subsection1
    \end{frame}
    \end{document}

它将显示第一张和第三张幻灯片的以下图像。第二张与第一张相同:

带有 hidesubsections 选项的目录显示错误,部分名称之间的空格太多: 带有 hidesubsections 选项的目录以及用于分隔章节名称的过多空格

没有 hidesubsections 选项的 TOC,显示正确: 没有 hidesubsections 选项的 TOC 可以正确显示。

答案1

这是更新后的答案:

内部命令 \beamer@sectionintoc(在文件 beamerbasetoc.sty 中定义)控制如何在目录中排版章节条目;它发出 \vskip1.5em,在章节条目之间添加垂直间距。借助 etoolbox 包,您可以轻松修补该命令以减少垂直间距。

\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{etoolbox}

\makeatletter
\patchcmd{\beamer@sectionintoc}{\vskip1.5em}{\vskip0.5em}{}{}
\makeatother

\title[Short Title]{My very long title that doesn't fix into the footer}
\author{Me}
\date{\today}
\beamertemplatenavigationsymbolsempty
\setbeamertemplate{footline}[frame number]
\usetheme{CambridgeUS}

\AtBeginSection[]
{
\begin{frame}
\frametitle{Outline}
\tableofcontents[currentsection, hideothersubsections]
\end{frame}
}

\begin{document}

\maketitle
\clearpage

\begin{frame}
\frametitle{Outline}
\tableofcontents[hideothersubsections]
\end{frame}


\section{Intro}
\begin{frame}
\frametitle{Welcome}
...
\end{frame}

\section{Topic 1}
\begin{frame}
\frametitle{Topic 1}
...
\end{frame}

\section{Topic 2}
\begin{frame}
\frametitle{Topic 2}
...
\end{frame}

\subsection{Red}
\begin{frame}
\frametitle{Red}
...
\end{frame}

\subsection{Green}
\begin{frame}
\frametitle{Green}
...
\end{frame}

\subsection{Blue}
\begin{frame}
\frametitle{Blue}
...
\end{frame}

\section{Topic 3}
\begin{frame}
\frametitle{Topic 3}
...
\end{frame}

\section{Topic 4}
\begin{frame}
\frametitle{Topic 4}
...
\end{frame}

\section{Topic 5}
\begin{frame}
\frametitle{Topic 5}
...
\end{frame}

\section{Topic 6}
\begin{frame}
\frametitle{Topic 6}
...
\end{frame}

\section{Topic 7}
\begin{frame}
\frametitle{Topic 7}
...
\end{frame}

\section{Topic 8}
\begin{frame}
\frametitle{Topic 8}
...
\end{frame}

\section{The end}
\begin{frame}
\frametitle{The end}
End of file :-)
\end{frame}

\end{document}

我想这可能应该是正确的答案。

相关内容