Beamer 导航圈没有子部分吗?

Beamer 导航圈没有子部分吗?

我最近一直在使用FrankfurtBeamer 中的主题。它在幻灯片顶部包含导航部分标题,当包含子部分时,它会在部分标题下方添加圆圈。每个圆圈代表一张幻灯片。代表活动幻灯片的圆圈被填充,代表活动子部分的圆圈以粗体显示。

我的问题是:

  • 是否可以在 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

由于 Beamer 默认只显示小节的点,我发现最简单的方法是将其放在\AtBeginSection[]{\subsection{}}序言中:

\documentclass{beamer}
\useoutertheme{miniframes}
\AtBeginSection[]{\subsection{}}

我发现这个比其他弄乱计数器的答案更好,并且给我留下了如下输出:

在此处输入图片描述

答案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,而这会将与该幻灯片相对应的圆圈向右移动;太恶心了。)

相关内容