使用进度条时幻灯片数量有限制吗?

使用进度条时幻灯片数量有限制吗?

我一直在使用@GonzaloMedina 提供的进度条代码这个帖子获得漂亮的进度条。此代码可自定义,我发现它提供了非常漂亮的进度条。但是,我意识到,当幻灯片数量超过一定数量(44)时,就会出现错误Arithmetic Overflow

这是我的代码:

\documentclass[10pt,fleqn]{beamer}
\mode<presentation>
\usepackage{tikz}   
% PROGRESS BAR 
\usetikzlibrary{calc}
\makeatletter
\def\progressbar@progressbar{} % the progress bar
\newcount\progressbar@tmpcounta% auxiliary counter
\newcount\progressbar@tmpcountb% auxiliary counter
\newdimen\progressbar@pbht %progressbar height
\newdimen\progressbar@pbwd %progressbar width
\newdimen\progressbar@tmpdim % auxiliary dimension
\progressbar@pbwd=\paperwidth
\progressbar@pbht=0.5ex
% the progress bar
\def\progressbar@progressbar{%
    \progressbar@tmpcounta= \insertframenumber % max = ?
    \progressbar@tmpcountb=\inserttotalframenumber      
    \progressbar@tmpdim=\progressbar@pbwd
    \multiply\progressbar@tmpdim by \progressbar@tmpcounta
    \divide\progressbar@tmpdim by \progressbar@tmpcountb
  \begin{tikzpicture}[rounded corners=1.5pt,very thin]
    \shade[top color=blue!20,bottom color=blue!20,middle color=blue!50]
      (0pt, 0pt) rectangle ++ (\progressbar@pbwd, \progressbar@pbht);
      \shade[draw=red,top color=red!50,bottom color=red!50,middle color=red] %
        (0pt, 0pt) rectangle ++ (\progressbar@tmpdim, \progressbar@pbht);
    \draw[color=normal text.fg!50]
      (0pt, 0pt) rectangle (\progressbar@pbwd, \progressbar@pbht)
        node[pos=0.5,color=normal text.fg] {\textnormal{%
        }%
    };
  \end{tikzpicture}%
}
\addtobeamertemplate{headline}{}
{%
  \begin{beamercolorbox}[wd=\paperwidth,ht=1.5ex,center,dp=0ex]{white}%
    \progressbar@progressbar%
  \end{beamercolorbox}%
}
\makeatother    
%
\begin{document}
\frame[t]{
\frametitle{slide}
\small{
}
}

\frame[t]{
\frametitle{slide}
\small{
}
}
\end{document}

为了清晰起见,我只在这里留下了两张幻灯片,但当使用超过 44 张幻灯片时,就会出现算术溢出错误……我不知道为什么。我一直在思考一些事情:它是否与从一张幻灯片到另一张幻灯片的图形增量定义有关?1/45 会是这里的某种下限吗……?但我不知道为什么……

因为帧总数似乎是导致问题的原因,所以我尝试在进度条的定义中添加以下几行:

\multiply\progressbar@tmpcounta by 44
\divide\progressbar@tmpcounta by \progressbar@tmpcountb 

为了以某种方式根据我发现可以接受的最大幻灯片数量对所有值进行标准化,但它不起作用。

答案1

您可以缩放算术以保持在界限内,先减半然后加倍,我用 67 页进行了测试。

\documentclass[10pt,fleqn]{beamer}
\mode<presentation>
\usepackage{tikz}   
% PROGRESS BAR 
\usetikzlibrary{calc}
\makeatletter
\def\progressbar@progressbar{} % the progress bar
\newcount\progressbar@tmpcounta% auxiliary counter
\newcount\progressbar@tmpcountb% auxiliary counter
\newdimen\progressbar@pbht %progressbar height
\newdimen\progressbar@pbwd %progressbar width
\newdimen\progressbar@tmpdim % auxiliary dimension
\progressbar@pbwd=\paperwidth
\progressbar@pbht=0.5ex
% the progress bar
\def\progressbar@progressbar{%
    \progressbar@tmpcounta= \insertframenumber % max = ?
    \progressbar@tmpcountb=\inserttotalframenumber      
    \progressbar@tmpdim=.5\progressbar@pbwd
    \multiply\progressbar@tmpdim by \progressbar@tmpcounta
    \divide\progressbar@tmpdim by \progressbar@tmpcountb
    \progressbar@tmpdim=2\progressbar@tmpdim
  \begin{tikzpicture}[rounded corners=1.5pt,very thin]
    \shade[top color=blue!20,bottom color=blue!20,middle color=blue!50]
      (0pt, 0pt) rectangle ++ (\progressbar@pbwd, \progressbar@pbht);
      \shade[draw=red,top color=red!50,bottom color=red!50,middle color=red] %
        (0pt, 0pt) rectangle ++ (\progressbar@tmpdim, \progressbar@pbht);
    \draw[color=normal text.fg!50]
      (0pt, 0pt) rectangle (\progressbar@pbwd, \progressbar@pbht)
        node[pos=0.5,color=normal text.fg] {\textnormal{%
        }%
    };
  \end{tikzpicture}%
}
\addtobeamertemplate{headline}{}
{%
  \begin{beamercolorbox}[wd=\paperwidth,ht=1.5ex,center,dp=0ex]{white}%
    \progressbar@progressbar%
  \end{beamercolorbox}%
}
\makeatother    
%
\begin{document}
\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}

\frame[t]{
\frametitle{slide}
\small

}
\end{document}

相关内容