如何从 Beamer 中的导航项目符号中删除一些页面?

如何从 Beamer 中的导航项目符号中删除一些页面?

我正在beamer使用miniframes外部主题制作演示文稿,其中包含导航项目符号和subsection=false选项,这意味着项目符号都位于一行上。我遇到的问题是,如果一个部分包含太多页面,项目符号会溢出到下一个部分:

Section 1 Section 2
oooooooooooooooooooo

我倾向于使用许多框架,其中一些只是提出一个问题,然后引导到下一个详细框架。我并不需要用导航项目符号来表示这些框架,删除它们就可以解决问题。有什么想法吗?

我可以通过使用覆盖来将问题和答案放在同一帧上,但这会很混乱......

回答 percusse 问题的代码示例:这应该为您提供每帧一个圆圈,而不是每个子部分一个圆圈。如果您在一个小部分中添加许多帧,圆圈将溢出到下一个部分。

\documentclass[compress]{beamer}
\useoutertheme[subsection=false]{miniframes}
\begin{document}
\section{S1}
\subsection{SS1}
\frame{1}
\frame{2}
\frame{3}
\subsection{SS2}
\frame{1}
\frame{2}
\frame{3}
...
\end{document}

答案1

迷你框架是使用\beamer@framepages辅助.nav文件中的条目生成的。如果您删除某些框架的这些条目,它们将不会出现在导航1中。为此,您必须修补\beamer@writeslidentry负责将命令写入.nav文件的宏:

\makeatletter
\let\beamer@writeslidentry@miniframeson=\beamer@writeslidentry
\def\beamer@writeslidentry@miniframesoff{%
  \expandafter\beamer@ifempty\expandafter{\beamer@framestartpage}{}% does not happen normally
  {%else
    % removed \addtocontents commands
    \clearpage\beamer@notesactions%
  }
}
\newcommand*{\miniframeson}{\let\beamer@writeslidentry=\beamer@writeslidentry@miniframeson}
\newcommand*{\miniframesoff}{\let\beamer@writeslidentry=\beamer@writeslidentry@miniframesoff}
\makeatother

\miniframeson将此代码包含在您的文档中,然后您可以使用和在原始实现和修改后的实现之间切换而不生成任何小框架\miniframesoff

1然而,这可能会产生一些我不知道的不良后果!

完整示例代码:

\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
    % removed \addtocontents commands
    \clearpage\beamer@notesactions%
  }
}
\newcommand*{\miniframeson}{\let\beamer@writeslidentry=\beamer@writeslidentry@miniframeson}
\newcommand*{\miniframesoff}{\let\beamer@writeslidentry=\beamer@writeslidentry@miniframesoff}
\makeatother
\begin{document}
\section{S1}
\subsection{SS1}
\frame{1}
\miniframesoff
\frame{2}
\miniframeson
\frame{3}
\subsection{SS2}
\miniframesoff
\frame{1}
\miniframeson
\frame{2}
\frame{3}
\end{document}

最终的标题(仅显示六个迷你框架中的四个):

示例代码生成的标题,仅显示四个(最初为六个)小框架

相关内容