Beamer 导航点

Beamer 导航点

我正在使用该课程编写演示文稿,我想知道一旦我通过该幻灯片,Beamer是否可以保持导航点保持填充(使用 outerthememiniframes或)。smoothbars

一个例子(我Frankfurt随机选择主题,任何其他主题都可以):

\documentclass{beamer}
\usetheme{Frankfurt}
\useoutertheme{miniframes}
\usepackage{remreset}

\makeatletter
\@removefromreset{subsection}{section}
\makeatother

\setcounter{subsection}{1}

\begin{document}
\section{Test}
\frame{one}
\frame{two}
\frame{three}
\end{document}

如您所见,在第一张幻灯片中,第一个点是实的,而其他点是空白的,在第二张幻灯片中,中间的点是实的,在最后一张幻灯片中,最后一个点是实的。

我希望第一张幻灯片中的第一个点完整,第二张幻灯片中前两个点完整,等等。

答案1

要突出显示所有已看过的幻灯片的迷你框架,可以使用以下代码:

\documentclass[compress]{beamer}

\usetheme{Ilmenau}

\makeatletter
\def\slideentry#1#2#3#4#5#6{%
  %section number, subsection number, slide number, first/last frame, page number, part number
  \ifnum#6=\c@part\ifnum#2>0\ifnum#3>0%
    \ifbeamer@compress%
      \advance\beamer@xpos by1\relax%
    \else%
      \beamer@xpos=#3\relax%
      \beamer@ypos=#2\relax%
    \fi%
  \hbox to 0pt{%
    \beamer@tempdim=-\beamer@vboxoffset%
    \advance\beamer@tempdim by-\beamer@boxsize%
    \multiply\beamer@tempdim by\beamer@ypos%
    \advance\beamer@tempdim by -.05cm%
    \raise\beamer@tempdim\hbox{%
      \beamer@tempdim=\beamer@boxsize%
      \multiply\beamer@tempdim by\beamer@xpos%
      \advance\beamer@tempdim by -\beamer@boxsize%
      \advance\beamer@tempdim by 1pt%
      \kern\beamer@tempdim
      \global\beamer@section@min@dim\beamer@tempdim
      \hbox{\beamer@link(#4){%
          \usebeamerfont{mini frame}%
          \ifnum\c@section>#1%
            %\usebeamercolor[fg]{mini frame}%
            %\usebeamertemplate{mini frame}%
            \usebeamercolor{mini frame}%
            \usebeamertemplate{mini frame in other subsection}%
          \else%
            \ifnum\c@section=#1%
              \ifnum\c@subsection>#2%
                \usebeamercolor[fg]{mini frame}%
                \usebeamertemplate{mini frame}%
              \else%
                \ifnum\c@subsection=#2%
                  \usebeamercolor[fg]{mini frame}%
                  \ifnum\c@subsectionslide<#3%
                    \usebeamertemplate{mini frame in current subsection}%
                  \else%
                    \usebeamertemplate{mini frame}%
                  \fi%
                \else%
                  \usebeamercolor{mini frame}%
                  \usebeamertemplate{mini frame in other subsection}%
                \fi%
              \fi%
            \else%
              \usebeamercolor{mini frame}%
              \usebeamertemplate{mini frame in other subsection}%
            \fi%
          \fi%
        }}}\hskip-10cm plus 1fil%
  }\fi\fi%
  \else%
  \fakeslideentry{#1}{#2}{#3}{#4}{#5}{#6}%
  \fi\ignorespaces
  }
\makeatother

\begin{document}
\section{Section 1}
\subsection{Subsection 1}
\frame{}\frame{}\frame{}
\subsection{Subsection 2}
\frame{}\frame{}
\section{Section 2}
\subsection{Subsection 1}
\frame{}
\subsection{Subsection 2}
\frame{}\frame{}\frame{}\frame{}\frame{}\frame{}
\section{Section 3}
\subsection{Subsection 1}
\frame{}\frame{}\frame{}\frame{}\frame{}\frame{}
\end{document}

结果

迷你框架导航,突出显示已演示的幻灯片的迷你框架(仅在当前部分)

解释

这个问题非常类似于Beamer:如何更改迷你框架的颜色:您必须重写\slideentry负责生成迷你帧的内部宏,以便它检查当前生成的迷你帧是否已经出现。这通过第 29-56 行中的一系列条件语句实现。

相关内容