在自定义 beamer 主题中,每个小节一个导航项目符号,且 subsection=false

在自定义 beamer 主题中,每个小节一个导航项目符号,且 subsection=false

我在 beamer 中使用 miniframes 主题,我需要对其进行如下自定义:想法是使用一行项目符号。对于每个部分,我希望每个子部分一个项目符号,而不是每个框架一个项目符号(这是因为我有太多框架,项目符号溢出到下一个部分)。但是,我需要将子部分选项设置为 false,因为我不想让子部分标题出现在标题中。

我尝试了这里提供的答案:如何从 Beamer 中的导航项目符号中删除一些页面? 效果几乎完美。我遇到的唯一问题是,当子部分包含多个框架时,从第二帧开始,项目符号不再突出显示(仅显示为粗体),因此观众不知道我们在哪里。

所以,我的问题是,有什么方法可以让我在每个小节的第一个框架之后的框架中突出显示当前小节项目符号?或者有没有更简单的方法,在不激活小节选项的情况下,每个小节只显示一个项目符号?

我希望我说清楚了。这是我当前代码的一个最小工作示例。它显示了上面描述的问题,其中同一小节中第二(或第三)帧的项目符号未突出显示。

\documentclass[compress]{beamer}
\useoutertheme[subsection=false]{miniframes}
\makeatletter
\let\beamer@writeslidentry@miniframeson=\beamer@writeslidentry
\def\beamer@writeslidentry@miniframesoff{%
\expandafter\beamer@ifempty\expandafter{\beamer@framestartpage}{}% does not happen normally
  {%else
    \clearpage\beamer@notesactions%
  }
}
\newcommand*{\miniframeson}{\let\beamer@writeslidentry= \beamer@writeslidentry@miniframeson}
\newcommand*{\miniframesoff}{\let\beamer@writeslidentry=\beamer@writeslidentry@miniframesoff}
\makeatother

\section{S1}
\subsection{SS1}
  \frame{1}
\miniframesoff
  \frame{2}
  \frame{3}

\miniframeson
\subsection{SS2}
  \frame{1}
\miniframesoff
  \frame{2}
  \frame{3}
\end{document}

答案1

此补丁修改了默认的迷你框架导航,每次显示一个迷你框架小节而不是每一个滑动。整个小节都以迷你框架突出显示:

\documentclass[compress]{beamer}

\useoutertheme[subsection=false]{miniframes}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\slideentry}{\advance\beamer@xpos by1\relax}{}{}{}
\def\beamer@subsectionentry#1#2#3#4#5{\advance\beamer@xpos by1\relax}%
\makeatother

\begin{document}
\section{S1}
\subsection{SS1}
  \frame{1}
  \frame{2}
  \frame{3}

\subsection{SS2}
  \frame{1}
  \frame{2}
  \frame{3}
\end{document}

该代码与Beamer 信息线外部主题带有仅适用于当前部分的迷你框架项目符号:负责生成迷你帧的内部命令被修补,以便X- 迷你框架的位置不会针对每张幻灯片增加,而只会针对每个小节增加。

最终的标题是,每个小节仅显示一个迷你框架:

标题为每个小节显示一个迷你框架,第二个小框架突出显示

相关内容