仅当显示部分条目时才可见子部分

仅当显示部分条目时才可见子部分

在 Beamer 演示文稿中,一般目录很长。因此,我不想一次性显示包含所有章节和子章节的目录。相反,我想显示带有选项的目录pausesections,但只显示当前章节的子章节。

我的想法就像下一个动态列表,使用命令\only<+>

这是 MWE:

\documentclass{beamer}

\begin{document}

\begin{frame}

\begin{itemize}[<+->]
\item Section 1
\item Section 2 \\
\only<+>{
sub-section 2.1 \\
sub-section 2.2 \\
sub-section 2.3}
\item Section 3 \\
\only<+>{
sub-section 3.1 \\
sub-section 3.2 \\
sub-section 3.3}
\item Section 4
\end{itemize}

\end{frame}

\end{document}

答案1

下面给出三段代码

  1. 仅当显示部分条目时才可见子部分
  2. 子部分仅在部分条目显示后可见一次
  3. 子部分仅对当前部分可见

仅当显示部分条目时才可见子部分

以下与您的要求非常接近 - 子部分将出现在相应部分显示时的同一张幻灯片上,而不是出现在之后的幻灯片上。请参阅下面的部分,了解如何获得其他行为。屏幕截图是内容页的第二和第三视图:

第二页示例

第三页样例

\documentclass{beamer}

\usetheme{Warsaw}

\makeatletter
\def\beamer@tocaction@only#1{\only<.(1)>{\usebeamertemplate**{#1}}}
\define@key{beamertoc}{subsectionsonly}[]{\beamer@toc@subsectionstyle{show/only}\beamer@toc@subsubsectionstyle{show/shaded/hide}}
\makeatother

\begin{document}
\AtBeginSection[]{\begin{frame}{Outline}
  \tableofcontents[subsectionsonly, pausesections] 
\end{frame}}

\section{One}
\begin{frame}
  \frametitle{ff}

\end{frame}
\section{Two}
\begin{frame}
  \frametitle{ff}

\end{frame}

\subsection{Two a}
\begin{frame}
  \frametitle{ff}

\end{frame}

\subsection{Two b}
\begin{frame}
  \frametitle{ff}

\end{frame}

\section{Three}
\begin{frame}
  \frametitle{ff}

\end{frame}

\subsection{Three a}
\begin{frame}
  \frametitle{ff}

\end{frame}

\subsection{Three b}
\begin{frame}
  \frametitle{ff}

\end{frame}

\end{document}

代码添加了一个额外的密钥类型,only用于插入适当的\only覆盖命令。这被打包在一个新密钥subsectionsonly\tableofcontents

子部分仅在部分条目显示后可见一次

在显示节和子节之间插入额外的暂停有点复杂。需要重写函数\beamer@tableofcontents\beamer@subsectionintoc。这可能最好通过修补命令来完成,如下所示。屏幕截图是显示第 3 节的第一页和下一页:

不含子部分的示例页面

带有子部分的示例页面

\documentclass{beamer}

\usetheme{Warsaw}

\usepackage{etoolbox}

\makeatletter
\def\beamer@tocaction@only#1{\only<.(1)>{\usebeamertemplate**{#1}}}
\define@key{beamertoc}{subsectionsonly}[]{\beamer@toc@subsectionstyle{show/only}\beamer@toc@subsubsectionstyle{show/shaded/hide}}

\newif\ifbeamer@pausebeforesubsections
\define@key{beamertoc}{pausebeforesubsections}[true]{\beamer@pausebeforesubsectionstrue}

\patchcmd{\beamer@tableofcontents}{\beamer@pausesectionsfalse}%
  {\beamer@pausesectionsfalse\beamer@pausebeforesubsectionsfalse}{}{}

\patchcmd{\beamer@subsectionintoc}{\ifbeamer@pausesubsections\pause\fi}%
  {\ifbeamer@pausesubsections\pause\else%
   \ifbeamer@pausebeforesubsections\ifnumequal{#2}{1}{\pause}{}\fi\fi}{}{}
\makeatother

\begin{document}
\begin{frame}{Outline}
  \tableofcontents[subsectionsonly,pausebeforesubsections,pausesections] 
\end{frame}

\section{One}
\begin{frame}
  \frametitle{ff}

\end{frame}
\section{Two}
\begin{frame}
  \frametitle{ff}

\end{frame}

\subsection{Two a}
\begin{frame}
  \frametitle{ff}

\end{frame}

\subsection{Two b}
\begin{frame}
  \frametitle{ff}

\end{frame}

\section{Three}
\begin{frame}
  \frametitle{ff}

\end{frame}

\subsection{Three a}
\begin{frame}
  \frametitle{ff}

\end{frame}

\subsection{Three b}
\begin{frame}
  \frametitle{ff}

\end{frame}

\end{document}

上述代码包括第一个例子的代码,并添加了一个新选项,在子节块之前pausebeforesubsections插入一个。这仅在未设置时才有必要。默认情况下设置为 false。\pausepausesubsectionspausebeforesubsections

子部分仅对当前部分可见

使用该hideothersubsections选项。下面的代码在第三节的开头给出了下面的目录,尽管第二节有子节:

示例输出

\documentclass{beamer}

\usetheme{Warsaw}

\begin{document}
\AtBeginSection[]{\begin{frame}{Outline}
  \tableofcontents[hideothersubsections, pausesections] 
\end{frame}}

\section{One}
\begin{frame}
  \frametitle{ff}

\end{frame}
\section{Two}
\begin{frame}
  \frametitle{ff}

\end{frame}

\subsection{Two a}
\begin{frame}
  \frametitle{ff}

\end{frame}

\subsection{Two b}
\begin{frame}
  \frametitle{ff}

\end{frame}

\section{Three}
\begin{frame}
  \frametitle{ff}

\end{frame}

\subsection{Three a}
\begin{frame}
  \frametitle{ff}

\end{frame}

\subsection{Three b}
\begin{frame}
  \frametitle{ff}

\end{frame}

\end{document}

请参阅投影机手册以获得更多选项来控制可见和不可见的内容。

相关内容