7

When I make presentations (with beamer), I like to have a bar along the bottom showing progress through the presentation visually. The interesting bit of the code below is the division on the node[fill=navfg,...] line:

\usebeamercolor{palette primary}
\colorlet{navfg}{fg!80!white}
\colorlet{navbg}{fg!40!white}
\newcommand{\navradius}{0.25ex}
\setbeamertemplate{footline}{
    \tikz\draw[text height=2*\navradius,inner sep=0ex,rounded corners=\navradius]
        node[fill=navbg,minimum width=\textwidth-\navradius](back){} (back.west)
        node[fill=navfg,minimum width=(\insertframenumber-1)/(\inserttotalframenumber-1)*(\textwidth-\navradius),right]{}
        (back.south) node[below]{}
        ;
}

This works great, except during the first attempt to build a presentation using this snippet. During the first build, \inserttotalframenumber has the value 1, so this makes a division by zero. The obvious fix is to use max:

node[fill=navfg,minimum width=(\insertframenumber-1)/max(1,\inserttotalframenumber-1)*(\textwidth-\navradius),right]{}

But this results in an error:

! Missing \endcsname inserted.
<to be read again> 
                   \textwidth 
l.10 \begin{document}

!  ==> Fatal error occurred, no output PDF file produced!

Why do I get this error? What can I do to solve this problem correctly?

1 Answers1

4

If TikZ doesn't want to evaluate some expression correctly, you can often help it by surrounding the expression with braces. In your case,

node[fill=navfg,minimum width={(\insertframenumber-1)/max(1,inserttotalframenumber-1)*(\textwidth-\navradius)},right]{}

works correctly.

Caramdir
  • 89,023
  • 26
  • 255
  • 291