在 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
下面给出三段代码
- 仅当显示部分条目时才可见子部分
- 子部分仅在部分条目显示后可见一次
- 子部分仅对当前部分可见
仅当显示部分条目时才可见子部分
以下与您的要求非常接近 - 子部分将出现在相应部分显示时的同一张幻灯片上,而不是出现在之后的幻灯片上。请参阅下面的部分,了解如何获得其他行为。屏幕截图是内容页的第二和第三视图:
\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。\pause
pausesubsections
pausebeforesubsections
子部分仅对当前部分可见
使用该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}
请参阅投影机手册以获得更多选项来控制可见和不可见的内容。