投影机的节/子节内的进度条

投影机的节/子节内的进度条

这里回答了如何为 Beamer 演示文稿实现进度条。我特别喜欢第一个解决方案。但是它有一个缺点,即进度条对整个演示文稿都有效,因此定义进度条大小的主要代码部分是\insertframenumber/\inserttotalframenumber

现在,假设我有包含多个部分和子部分的幻灯片,每个子部分包含多张幻灯片(整个文档超过 100 页)。因此,我希望有一个进度条来显示当前部分(甚至子部分)的进度。实际上,许多默认主题都具有此功能(如上所述这里),但不是以进度条的形式。

我可以轻松地调整代码第一个解决方案但是为此我需要找到能够给出帧数和当前部分中第一帧的编号(如果存在)的命令。

答案1

将以下内容添加到您的序言中。

    \definecolor{lightgr}{rgb}{0.7 0.7 0.7}
    \makeatletter
    \newcount\beamer@sectionstartframe
    \newcount\beamer@sectionendframe

    \beamer@sectionstartframe=1

    \apptocmd{\beamer@section}{\addtocontents{nav}{\protect\headcommand{%
                    \protect\beamer@sectionframes{\the\beamer@sectionstartframe}{\the\c@framenumber}}}}{}{}
    \apptocmd{\beamer@section}{\beamer@sectionstartframe=\c@framenumber\advance\beamer@sectionstartframe by1\relax}{}{}
    \AtEndDocument{\immediate\write\@auxout{\string\@writefile{nav}%

    {\noexpand\headcommand{\noexpand\beamer@sectionframes{\the\beamer@sectionstartframe}{\the\c@framenumber}}}}}{}{}
    \def\beamer@startframeofsection{1}
    \def\beamer@endframeofsection{1}
    \def\beamer@sectionframes#1#2{%
        \ifnum\c@framenumber<#1%
        \else%
            \ifnum \c@framenumber>#2%
            \else%
                \gdef\beamer@startframeofsection{#1}%
                \gdef\beamer@endframeofsection{#2}%
            \fi%
        \fi%
    }
    \newcommand\insertsectionstartframe{\beamer@startframeofsection}
    \newcommand\insertsectionendframe{\beamer@endframeofsection}

    \def\beamertextwidth{\dimexpr 0.875 \textwidth\relax}
    \makeatother

    \addtobeamertemplate{footline}{%
        \color{lightgr}% to color the progressbar
        \rlap{\rule{\numexpr (\insertframenumber-\insertsectionstartframe)+1  \dimexpr  \beamertextwidth/(\insertsectionendframe -\insertsectionstartframe+1) \relax}{3pt}}%
    }%

上述代码应在每张幻灯片的页脚中创建一个部分进度条。请注意,如果您在环境中创建新的框架,则上述代码可以正常工作AtBeginSection

相关内容