如何在 beamer ToC 中突出显示特定部分?

如何在 beamer ToC 中突出显示特定部分?

我有一个包含 5 个部分的目录,我想要 5 个框架,每个框架上都有一个目录,其中包含部分以高亮显示,其他部分以阴影显示。

到目前为止我所拥有的是以下内容:

\documentclass{beamer}
\usetheme{Madrid}

\begin{document}
\begin{frame}{Overview} 
  \only<1>{
    \tableofcontents[sections={1}]
    \tableofcontents[sections={2-5},sectionstyle=shaded,subsectionstyle=shaded]
  }
  \only<2>{
    \tableofcontents[sections={1},sectionstyle=shaded,subsectionstyle=shaded]
    \tableofcontents[sections={2}]
    \tableofcontents[sections={3-5},sectionstyle=shaded,subsectionstyle=shaded]
  }
  \only<3>{
    \tableofcontents[sections={1,2},sectionstyle=shaded,subsectionstyle=shaded]
    \tableofcontents[sections={3}]
    \tableofcontents[sections={4-5},sectionstyle=shaded,subsectionstyle=shaded]
  }
  \only<4>{
    \tableofcontents[sections={1-3},sectionstyle=shaded,subsectionstyle=shaded]
    \tableofcontents[sections={4}]
    \tableofcontents[sections={5},sectionstyle=shaded,subsectionstyle=shaded]
  }
  \only<5>{
    \tableofcontents[sections={1-4},sectionstyle=shaded,subsectionstyle=shaded]
    \tableofcontents[sections={5}]
  }
\end{frame}

\section{Section 1}
\begin{frame}{Frame 1}
\end{frame}

\section{Section 2}
\begin{frame}{Frame 2}
\end{frame}

\section{Section 3}
\begin{frame}{Frame 3}
\end{frame}

\section{Section 4}
\begin{frame}{Frame 4}
\end{frame}

\section{Section 5}
\begin{frame}{Frame 5}
\end{frame}

\end{document}

我想知道是否有更好的方法来做到这一点?

谢谢

答案1

输入此代码后\begin{document},它将执行以下操作:

\begin{frame}
\titlepage
\end{frame}

\begin{frame}
\frametitle{Plan}
\tableofcontents[pausesections]
\end{frame}

\AtBeginSection[]{

\begin{frame}
\frametitle{Plan}
\tableofcontents[currentsection]
\end{frame}}

答案2

您可以使用该currentsection选项并在计数器中设置一个临时值section

\documentclass{beamer}
\usetheme{Madrid}
\newcommand\tocforsect[2]{%
  \begingroup
  \edef\safesection{\thesection}
  \setcounter{section}{#1}
  \tableofcontents[#2,currentsection]
  \setcounter{section}{\safesection}
  \endgroup
}
\begin{document}
\begin{frame}{Overview}
  \only<1>{\tocforsect{1}{sectionstyle=shaded,subsectionstyle=shaded}}
  \only<2>{\tocforsect{2}{sectionstyle=shaded,subsectionstyle=shaded}}
  \only<3>{\tocforsect{3}{sectionstyle=shaded,subsectionstyle=shaded}}
  \only<4>{\tocforsect{4}{sectionstyle=shaded,subsectionstyle=shaded}}
  \only<5>{\tocforsect{5}{sectionstyle=shaded,subsectionstyle=shaded}}
\end{frame}
\section{Section 1}
\begin{frame}{Frame 1}
\end{frame}

\section{Section 2}
\begin{frame}{Frame 2}
\end{frame}

\section{Section 3}
\begin{frame}{Frame 3}
\end{frame}

\section{Section 4}
\begin{frame}{Frame 4}
\end{frame}

\section{Section 5}
\begin{frame}{Frame 5}
\end{frame}

\end{document}

答案3

对于普通列表来说,这很简单:

\setbeamercovered{transparent}% see beamer documentation p 190
\beamerdefaultoverlayspecification{<+>}% see beamer documentation p 89

不幸的是,这不起作用,\tableofcontents[pausesections]因为这在内部使用了功能远不够强大的\pause命令。

所以我尝试重新定义\pause命令来调用\onslide。实际上,根据beamer 文档第 78 页\pause通常已经在内部使用\onslide

然而,似乎不可能在框架内定义带有参数的命令(并且\pause有一个可选参数,再次参见beamer 文档第 78 页)并\pause在帧开始时被覆盖。

因此,我在框架前面和\let框架内部定义了一个新命令:

\documentclass{beamer}
\usetheme{Madrid}

\newcommand{\mypause}[1][+]{\onslide<#1>}
\begin{document}
\begin{frame}{Overview} 
    \setbeamercovered{transparent}% doc p 190
    \let\pause\mypause
    \tableofcontents[pausesections]
\end{frame}

\section{Section 1}
\begin{frame}{Frame 1}
\end{frame}

\section{Section 2}
\begin{frame}{Frame 2}
\end{frame}

\section{Section 3}
\begin{frame}{Frame 3}
\end{frame}

\section{Section 4}
\begin{frame}{Frame 4}
\end{frame}

\section{Section 5}
\begin{frame}{Frame 5}
\end{frame}

\end{document}

答案4

\documentclass{beamer}
\usetheme{Madrid}

\begin{document}
\begin{frame}{Contents} 
\tableofcontents
\end{frame}

\section{Section 1}
\tableofcontents[currentsection]
\begin{frame}{Frame 1.1}
\end{frame}
\begin{frame}{Frame 1.2}
\end{frame}
\begin{frame}{Frame 1.3}
\end{frame}
\section{Section 2}
\tableofcontents[currentsection]
\begin{frame}{Frame 2.1}
\end{frame}
\begin{frame}{Frame 2.2}
\end{frame}
\begin{frame}{Frame 2.3}
\end{frame}
\section{Section 3}
\tableofcontents[currentsection]
\begin{frame}{Frame 3.1}
\end{frame}
\begin{frame}{Frame 3.2}
\end{frame}
\begin{frame}{Frame 3.3}
\end{frame}
\section{Section 4}
\tableofcontents[currentsection]
\begin{frame}{Frame 4.1}
\end{frame}
\begin{frame}{Frame 4.2}
\end{frame}
\begin{frame}{Frame 4.3}
\end{frame}
\section{Section 5}
\tableofcontents[currentsection]
\begin{frame}{Frame 5.1}
\end{frame}
\begin{frame}{Frame 5.2}
\end{frame}
\begin{frame}{Frame 5.3}
\end{frame}
\end{document}

相关内容