使用零件时如何正确重置投影机中的帧号?

使用零件时如何正确重置投影机中的帧号?

我使用了在 stackexchange 上找到的一些代码(我记不清具体在哪里了),并使用部分代码构建了 beamer-lecture。我遇到的问题是,帧号无法正确重置。

每帧的底部都印有总帧数。当每个部分的帧数不同时,只打印所有部分中的最大帧数,而不是打印单个部分的总帧数。

请参阅下面的 MWE。也许你需要从以下位置下载 Aalborg Beamer 主题这个网站在这里

我希望我正确地修改了 MWE。还有一个额外的问题,虽然不是很严重,但只是为了快速访问其他部分而提供一些额外的便利:有没有办法在侧边栏中显示所有部分并链接到第一帧?

附言:如您所见,我尝试totalframenumber在重置每个部分开始时重置计数器framenumber。但不起作用。

PPS:至于“使其更简约”部分;我删除了大部分内容,希望这就足够了。

\documentclass[
    10pt,
    ngerman,
    aspectratio=1610,
    ]{beamer}

\usetheme[
    hideothersubsections
]{Aalborg}

% % % % % % % % % % %
% LANGUAGE
% % % % % % % % % % %
\usepackage{polyglossia}
\setmainlanguage[babelshorthands=true]{german}

\addto\captionsngerman{%
    \renewcommand{\partname}{Abschnitt}%
}

% % % % % % % % % % %
% COLORS
% % % % % % % % % % %
\definecolor{AALightBlue}{RGB}{194,193,204}
\definecolor{AADarkBlue}{RGB}{33,26,82}
\definecolor{AAGreyBlue}{RGB}{84,97,110}

% % % % % % % % % % %
% NUPART
% % % % % % % % % % %

\makeatletter
\AtBeginPart{%
    \addtocontents{toc}{\protect\beamer@partintoc{\the\c@part}{\beamer@partnameshort}{\the\c@page}}%
    \setcounter{framenumber}{0}
%   \setcounter{totalframenumber}{0}
}
%% number, shortname, page.
\providecommand\beamer@partintoc[3]{%
    \ifnum\c@tocdepth=-1\relax
    % requesting onlyparts.
    \makebox[6em]{Abschnitt #1:} \textcolor{AADarkBlue}{\hyperlink{#2}{#2}}
    \par
    \fi
}
\define@key{beamertoc}{onlyparts}[]{%
    \c@tocdepth=-1\relax
}
\makeatother%

\newcommand{\nameofthepart}{}
\newcommand{\nupart}[1]{%
    \part{#1}%
    \renewcommand{\nameofthepart}{#1}%
    \frame{\partpage \hypertarget{\nameofthepart}{}}%
}

\newcommand{\nextpart}[1]{
    {
%       \aauwavesbg
        \begin{frame}[plain,noframenumbering]
            \titlepage
        \end{frame}}
        \nupart{#1}

        \begin{frame}{Agenda}{}
            {\footnotesize\tableofcontents}
        \end{frame}
    }

\newcommand{\ftitle}{\frametitle{\secname}\framesubtitle{\subsecname}}

% % % % % % % % % % %
% META-DATA
% % % % % % % % % % %

\title[\LaTeX-Kurs]{\LaTeX-Kurs}

\author{A. Person}

\institute{%
    A. Person\\
    Town}

\begin{document}

\begin{frame}[plain,noframenumbering]{Themeneinteilung}
    \tableofcontents[onlyparts]
\end{frame}

% Neuer Teil
\nextpart{Einführung}
\section{Einführung}
\subsection{Was ist \TeX{}?}

\begin{frame}\ftitle

    text

\end{frame}

\subsection{Vorteile von \LaTeX{}}
\begin{frame}\ftitle

    text

\end{frame}
%%%%%%%%%%%%%%%%

% Neuer Teil
\nextpart{Grundlagen}
\section{Grundlagen}
\subsection{Befehle}

\begin{frame}\ftitle

    text

\end{frame}


\subsection{Erstes Dokument}
\begin{frame}\ftitle

    text

\end{frame}

\subsection{Dokumentklassen}
\begin{frame}\ftitle

    text

\end{frame}

\subsection{Pakete einbinden}
\begin{frame}\ftitle

    text

\end{frame}
%%%%%%%%%%%%%%%%%

\end{document}

答案1

以下答案利用了https://tex.stackexchange.com/a/73346/36296https://tex.stackexchange.com/a/244024/36296

以下答案的思路不是重置总帧数,而是计算当前部分的长度。

\documentclass{beamer}

\usepackage{etoolbox}
\makeatletter
\newcount\beamer@partstartframe
\beamer@partstartframe=1
\apptocmd{\beamer@part}{\addtocontents{nav}{\protect\headcommand{%
    \protect\beamer@partframes{\the\beamer@partstartframe}{\the\c@framenumber}}}}{}{}
\apptocmd{\beamer@part}{\beamer@partstartframe=\c@framenumber\advance\beamer@partstartframe by1\relax}{}{}
\AtEndDocument{\immediate\write\@auxout{\string\@writefile{nav}%
    {\noexpand\headcommand{\noexpand\beamer@partframes{\the\beamer@partstartframe}{\the\c@framenumber}}}}}{}{}
\def\beamer@startframeofpart{1}
\def\beamer@endframeofpart{1}
\def\beamer@partframes#1#2{%
    \ifnum\c@framenumber<#1%
    \else%
    \ifnum\c@framenumber>#2%
    \else%
    \gdef\beamer@startframeofpart{#1}%
    \gdef\beamer@endframeofpart{#2}%
    \fi%
    \fi%
}
\newcommand\insertpartstartframe{\beamer@startframeofpart}
\newcommand\insertpartendframe{\beamer@endframeofpart}
\makeatother

\usepackage{tikz}
\usetikzlibrary{calc}

\def\inserttotalpartframenumber{%
    \pgfmathparse{(\insertpartendframe-\insertpartstartframe+1)}%
    \pgfmathprintnumber[fixed,precision=2]{\pgfmathresult}%
}

\def\insertpartframenumber{%
    \pgfmathparse{(\insertframenumber-\insertpartstartframe+1)}%
    \pgfmathprintnumber[fixed,precision=2]{\pgfmathresult}%
}

\setbeamertemplate{footline}{\insertpartframenumber/\inserttotalpartframenumber}

\begin{document}

\begin{frame}
    \tableofcontents
\end{frame}

\part{Einfuhrung}

\frame{1a}
\frame{2a}

\part{Grundlagen}

\frame{1b}
\frame{2b}
\frame{3b \pause blub}

\end{document}

相关内容