我想知道如何显示目录:
- 如果没有小节,则位于节的开头
- 在 else 小节的开头
每个选项都可以通过命令轻松单独实现
\AtBeginSection[]
{
\begin{frame}
\frametitle{Outline}
\tableofcontents[currentsection]
\end{frame}
}
或者
\AtBeginSubsection[]
{
\begin{frame}
\frametitle{Outline}
\tableofcontents[currentsection,currentsubsection]
\end{frame}
}
分别。
答案1
因此,您基本上需要测试某个部分内的子部分数量是否为 0。幸运的是,有一个包可以执行此操作:xcntperchap
\documentclass{beamer}
\usepackage{xcntperchap}
\RegisterCounters{section}{subsection}
\newcounter{totalsubsection}
\setcounter{totalsubsection}{0}
\usepackage{etoolbox}
\AtBeginSection[]
{
\setcounter{totalsubsection}{\ObtainTrackedValueExp[\value{section}]{section}{subsection}}
\ifnum\value{totalsubsection}=0%
\begin{frame}
\frametitle{Outline}
\tableofcontents[currentsection]
\end{frame}
\fi%
}
\AtBeginSubsection[]
{
\begin{frame}
\frametitle{Outline}
\tableofcontents[currentsection,currentsubsection]
\end{frame}
}
\title{title}
\author{author}
\begin{document}
\begin{frame}
\titlepage
\end{frame}
\section{Section1}
\frame{}
\subsection{Subsection1}
\frame{}
\subsection{Subsection2}
\frame{}
\section{Section2}
\frame{}
\subsection{Subsection1}
\frame{}
\subsection{Subsection2}
\frame{}
\subsection{Subsection3}
\frame{}
\section{Section3}
\frame{}
\end{document}
只要不对小节使用特殊的阴影样式,另一种方法可以是在每个节后显示节目录,但如果小节页面紧跟在节页面之后,则删除小节页面:
\documentclass{beamer}
\newcounter{foo}
\AtBeginSection[]
{
\begin{frame}
\frametitle{Outline}
\tableofcontents[currentsection]
\end{frame}
}
\AtBeginSubsection[]
{
\setcounter{foo}{\insertsectionstartpage}
\addtocounter{foo}{1}
\ifnum\thefoo=\thepage
\else
\begin{frame}
\tableofcontents[currentsection,currentsubsection]
\end{frame}
\fi
}
\begin{document}
\section{Section1}
\subsection{Subsection1}
\frame{sec 1 sub 1}
\section{Section2}
\frame{sec 2}
\subsection{Subsection1}
\frame{sec 2 sub 1}
\section{Section 3}
\frame{sec 3}
\section{Section4}
\subsection{Subsection1}
\frame{sec 4 sub 1}
\end{document}