
我正在製作幻燈片beamer
,我想在標題中包含一些點,指示當前部分(左)和小節(右)。不應包含章節/小節的名稱。
這是一個 MWE:
\documentclass{beamer}
\makeatletter
\setbeamertemplate{headline}
{%
\leavevmode%
\hbox{%
\begin{beamercolorbox}[wd=0.5\paperwidth,ht=2.25ex,dp=1ex,left]{section in head/foot}
section dots
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=0.5\paperwidth,ht=2.25ex,dp=1ex,right]{section in head/foot}
subsection dots (of current section)
\end{beamercolorbox}}%
}
\makeatother
\begin{document}
\section{Section1}
\begin{frame}
\frametitle{Frame11}
\end{frame}
\subsection{Subsection1}
\begin{frame}
\frametitle{Frame12}
\end{frame}
\subsection{Subsection2}
\begin{frame}
\frametitle{Frame13}
\end{frame}
\section{Section2}
\begin{frame}
\frametitle{Frame21}
\end{frame}
\subsection{Subsection1}
\begin{frame}
\frametitle{Frame22}
\end{frame}
\subsection{Subsection2}
\begin{frame}
\frametitle{Motivation}
\end{frame}
\subsection{Subsection3}
\begin{frame}
\frametitle{Frame23}
\end{frame}
\end{document}
對於這個特定數量的幀,我希望左上角有兩個點表示各個部分,右上角有兩個或三個點分別表示第 1 部分和第 2 部分的子部分。顯然,我想要一個不特定於此範例的通用解決方案。
這在我目前的設定中是否可以輕鬆完成,或者需要完全不同的東西?
答案1
可能有更好的方法來做到這一點,但我不想搞亂投影機導航,而是想嘗試一些新的東西並使用這個xcntperchap
包。
\documentclass{beamer}
\usepackage{tikz}
\usepackage{totcount}
\regtotcounter{section}
\usepackage{xcntperchap}
\RegisterCounters{section}{subsection}
\newcounter{totalsubsection}
\setcounter{totalsubsection}{0}
\usepackage{etoolbox}
\preto\frame{\ifnum\thesection>0\setcounter{totalsubsection}{\ObtainTrackedValueExp[\thesection]{section}{subsection}}\fi}
\setbeamertemplate{headline}{%
\hbox{%
\begin{beamercolorbox}[wd=.48\paperwidth,ht=2.25ex,dp=1ex]{section in head/foot}%
\hfill%
\ifnum\totvalue{section}>0%
\ifnum\thesection>0%
\foreach\x in {1,...,\totvalue{section}}{%
\ifnum\x=\thesection%
\usebeamertemplate{mini frame}~%
\else%
\usebeamertemplate{mini frame in other section}~%
\fi%
}%
\fi%
\fi%
\end{beamercolorbox}%
\qquad%
\begin{beamercolorbox}[wd=.48\paperwidth,ht=2.25ex,dp=1ex]{subsection in head/foot}%
\ifnum\thetotalsubsection>0%
\foreach\x in {1,...,\thetotalsubsection}{%
\ifnum\x=\thesubsection%
\usebeamertemplate{mini frame}~%
\else%
\usebeamertemplate{mini frame in other subsection}~%
\fi%
}%
\fi%
\end{beamercolorbox}%
}}
\title{title}
\author{author}
\begin{document}
\begin{frame}
\titlepage
\end{frame}
\section{Section1}
\frame{}
\subsection{Subsection1}
\begin{frame}
\frametitle{Frame11}
\end{frame}
\subsection{Subsection2}
\begin{frame}
\frametitle{Frame12}
\end{frame}
\section{Section2}
\begin{frame}
\frametitle{Frame2}
\end{frame}
\subsection{Subsection1}
\begin{frame}
\frametitle{Frame21}
\end{frame}
\subsection{Subsection2}
\begin{frame}
\frametitle{Frame22}
\end{frame}
\subsection{Subsection3}
\begin{frame}
\frametitle{Frame23}
\end{frame}
\section{Section3}
\begin{frame}
\frametitle{Frame3}
\end{frame}
\end{document}
答案2
我的回答只是為了展示所接受的解決方案的靈活性。所有功勞都歸功於 samcarter。透過更改 if/else 中的小內容並將內容從頁首移到頁腳,我獲得了以下 nMWE 結果:
nMWE:
\documentclass{beamer}
\beamertemplatenavigationsymbolsempty
\usetheme{rochester}
\usecolortheme{beaver}
\usepackage{tikz}
\usepackage{totcount}
\regtotcounter{section}
\usepackage{xcntperchap}
\RegisterCounters{section}{subsection}
\newcounter{totalsubsection}
\setcounter{totalsubsection}{0}
\usepackage{etoolbox}
\preto\frame{\ifnum\thesection>0\setcounter{totalsubsection}{\ObtainTrackedValueExp[\thesection]{section}{subsection}}\fi}
\setbeamertemplate{footline}{%
\hbox{%
\begin{beamercolorbox}[wd=0.2\paperwidth,ht=2.25ex,dp=1ex,left,leftskip=1ex]{subsection in head/foot}%
\ifnum\totvalue{section}>0%
\foreach\x in {1,...,\totvalue{section}}{%
\ifnum\numexpr\x-1<\thesection%
\usebeamertemplate{mini frame}~%
\else%
\usebeamertemplate{mini frame in other section}~%
\fi%
}%
\fi%
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=0.6\paperwidth,ht=2.25ex,dp=1ex,center]{title in head/foot}
\usebeamerfont{title in head/foot} \inserttitle
\end{beamercolorbox}%
\begin{beamercolorbox}[wd=0.2\paperwidth,ht=2.25ex,dp=1ex,right,rightskip=1ex]{subsection in head/foot}%
\ifnum\thetotalsubsection>0%
\foreach\x in {1,...,\thetotalsubsection}{%
\ifnum\x>\numexpr\thetotalsubsection-\thesubsection%
\usebeamertemplate{mini frame}~%
\else%
\usebeamertemplate{mini frame in other subsection}~%
\fi%
}%
\fi%
\end{beamercolorbox}%
}}
\title{Super fancy long title which will fit in the footer}
\author{The Champion}
\date{\today}
\begin{document}
\begin{frame}
\thispagestyle{empty}
\maketitle
\end{frame}
\begin{frame}
\thispagestyle{empty}
\frametitle{Outline}
\tableofcontents
\end{frame}
\section{The first section}
\subsection{The first subsection}
\begin{frame}
\frametitle{The first section}
\framesubtitle{The first subsection}
\end{frame}
\subsection{The second subsection}
\begin{frame}
\frametitle{The first section}
\framesubtitle{The second subsection}
\end{frame}
\subsection{The third subsection}
\begin{frame}
\frametitle{The first section}
\framesubtitle{The third subsection}
\end{frame}
\section{The second section}
\subsection{The first subsection}
\begin{frame}
\frametitle{The second section}
\framesubtitle{The first subsection}
\end{frame}
\subsection{The second subsection}
\begin{frame}
\frametitle{The second section}
\framesubtitle{The second subsection}
\end{frame}
\section{The third section}
\subsection{The first subsection}
\begin{frame}
\frametitle{The third section}
\framesubtitle{The first subsection}
\end{frame}
\end{document}