[Tex/LaTex] Configuring Beamer with the Singapore theme

beamermini-framesnavigation

I found the Singapore theme very useful. However I can't find the way to put the small circles on top of the frame that are empty for slides not yet discussed and becomes black for slides discussed. How I can put them?

Best Answer

I guess the proper thing to do is to send a patch to the beamer developers that modifies \slideentry (in beamerbasenavigation.sty) so that it uses three templates (before, current, after).

However, here is a solution that doesn't modify any internal macros.

\documentclass{beamer}
\usetheme{Singapore}
\useoutertheme{miniframes}
\usepackage{etoolbox}

% a flag that tells us how the circles should be drawn
\newif\ifnavbeforecurrent
% reset the flag before every navigation bar
\pretocmd\insertnavigation{\navbeforecurrenttrue}{}{}

% change the circle drawing code so that it changes based on the flag
\defbeamertemplate*{mini frame in current subsection}{changing}[1][50]
{%
  \begin{pgfpicture}{0pt}{0pt}{0.1cm}{0.1cm}
    \pgfpathcircle{\pgfpoint{0.05cm}{0.05cm}}{0.05cm}
    \ifnavbeforecurrent
        \pgfusepath{fill,stroke}
    \else
        \pgfusepath{stroke}
    \fi
  \end{pgfpicture}%
}
\setbeamertemplate{mini frame in current subsection}[changing]

% after the circle for the current frame is drawn, change the flag
\defbeamertemplate*{mini frame}{changing}
{%
  \begin{pgfpicture}{0pt}{0pt}{0.1cm}{0.1cm}
    \pgfpathcircle{\pgfpoint{0.05cm}{0.05cm}}{0.05cm}
    \pgfusepath{fill,stroke}
  \end{pgfpicture}%
  \global\navbeforecurrentfalse
}
\setbeamertemplate{mini frame}[changing]

\begin{document}
\section{A section}
\subsection{A subsection}
\frame{...}
\frame{...}
\frame{...}
\subsection{A second subsection}
\frame{...}
\frame{...}
\frame{...}
\end{document}

result