我最近一直在使用Frankfurt
Beamer 中的主题。它在幻灯片顶部包含导航部分标题,当包含子部分时,它会在部分标题下方添加圆圈。每个圆圈代表一张幻灯片。代表活动幻灯片的圆圈被填充,代表活动子部分的圆圈以粗体显示。
我的问题是:
- 是否可以在 Beamer 演示文稿中包含导航圈来表示每张幻灯片,同时具有章节但没有小节?
我的动机:
- 我认为这对于向读者强调每个部分的幻灯片数量很有用,并且它也是一个有用的导航工具。
答案1
您不需要声明小节,通过\setcounter{subsection}{1}
或提高它的计数器\stepcounter{subsection}
就足够了。
但是由于节计数器会重置子节计数器,所以我会在序言中执行此操作,同时将其从重置中删除:
\usepackage{remreset}% tiny package containing just the \@removefromreset command
\makeatletter
\@removefromreset{subsection}{section}
\makeatother
\setcounter{subsection}{1}
这样,计数器的值就会保持在 1,并且不会显示任何圆圈\subsection
。
演示解决方案的最小工作示例:
\documentclass{beamer}
\usetheme{Frankfurt}
\usepackage{remreset}
\makeatletter
\@removefromreset{subsection}{section}
\makeatother
\setcounter{subsection}{1}
\begin{document}
\section{Test}
\frame{one}
\frame{two}
\frame{three}
\end{document}
输出:
如果您取消注释该命令\setcounter{subsection}{1}
并编译两次,您就会看到原来缺少圆圈的问题。
答案2
答案3
真的吗?我以为圆圈会一直显示,即使没有声明子部分。这就是文档中的示例所显示的,而且我似乎记得我过去使用该主题时它的行为方式。(那是一段时间前的事了,也许我记错了,而且我的 LaTeX 坏了,所以我无法测试)
无论如何,作为一种快速解决方法,我想您可以每个部分声明一个无名小节。
\section{Axxqzropy}
\subsection{}
也许为其定义一个命令,
\newcommand*{\ssection}[1]{\section{#1}\subsection{}}
尽管这无疑是一种黑客攻击,但并不是理想的解决方案。
答案4
我有同样的问题,cyberSingularity 的答案对我有用。我填写了它,以便它确实适用于选项compact
,并且还修补了\fakeslideentry
。使用 的技巧\ifhadanonsubsecn
意味着您的各个部分可以不同:有些可以有小节,有些可以没有小节,有些可以在第一个小节之前有一些幻灯片。无论如何,也许这对某些人有用。
\RequirePackage{etoolbox}
\makeatletter
\pretocmd\sectionentry{%
\let\ifhadanonsubsecn\@secondoftwo
}{}{\@error{unable to patch \string\sectionentry}{}}
\patchcmd\slideentry{%
\ifnum#2>0%
}{%
\ifnum2>0%
}{}{\@error{unable to patch \string\slideentry}{}}
\patchcmd\slideentry{%
\beamer@xpos=#3\relax%
\beamer@ypos=#2\relax%
}{%
\ifnum#2=0\relax
\let\ifhadanonsubsecn\@firstoftwo
\fi
\beamer@xpos=#3\relax
\beamer@ypos=#2\relax
\ifhadanonsubsecn{%
\advance \beamer@ypos by1\relax
}{}%
}{}{\@error{unable to patch \string#1}}%
\patchcmd\fakeslideentry{%
\beamer@xpos=#3\relax%
\beamer@ypos=#2\relax%
}{%
\ifnum#2=0\relax
\let\ifhadanonsubsecn\@firstoftwo
\fi
\beamer@xpos=#3\relax
\beamer@ypos=#2\relax
\ifhadanonsubsecn{%
\advance \beamer@ypos by1\relax
}{}%
}{}{\PackageError{patchbeamernav}{unable to patch \string#1}}%
\@addtoreset{subsectionslide}{section}
\makeatother
(如果没有\@addtoreset
末尾的 ,当某一节中的第一张幻灯片不在子节中时,它可能会被算作幻灯片#3,而这会将与该幻灯片相对应的圆圈向右移动;太恶心了。)