[Tex/LaTex] Beamer miniframes: side-by-side section names and navigation dots

beamermini-framesnavigation

I'm using the beamer miniframes outer theme (with subsection=false). Currently the navigation shows navigation dots below each section name. I would prefer it if the dots came to the right the section name. Is this possible?

Right now it looks like:

Sec 1           Sec 2
o o o o         o o o o

But I want it to look like:

Sec 1 o o o o               Sec 2 o o o o

MWE:

\documentclass{beamer}  
\useoutertheme[subsection=false]{miniframes}  
\begin{document}  
\section{Sec 1}  
\subsection{}  
\begin{frame}[t]  
  hi  
\end{frame}  
\end{document}`

Best Answer

This can be obtained by patching the internal beamer commands responsible for creating the mini frame navigation:

\documentclass[compress]{beamer}  
\useoutertheme[subsection=false]{miniframes}

\usepackage{etoolbox}
\makeatletter
\patchcmd{\slideentry}{\advance\beamer@tempdim by -.05cm}{\advance\beamer@tempdim by\beamer@vboxoffset\advance\beamer@tempdim by\beamer@boxsize\advance\beamer@tempdim by 1.2\pgflinewidth}{}{}
\patchcmd{\slideentry}{\kern\beamer@tempdim}{\advance\beamer@tempdim by 2pt\advance\beamer@tempdim by\wd\beamer@sectionbox\kern\beamer@tempdim}{}{}
\makeatother

\begin{document}
\section{Sec 1}
\subsection{}
\frame{}\frame{}\frame{}\frame{}
\section{Sec 2}
\subsection{}
\frame{}\frame{}\frame{}\frame{}
\end{document}

This hack moves the mini frames one line up* and (length of the section title + 2pt) units to the right, to end up in the desired position:

mini frame navigation for "Sec 1", with mini frames to the right of the section name

I have also added the compress option to the minimal working example, as if you have multiple subsections in your presentation, it may look strange if each subsection starts in a new line.

*To be more precise, it's one line plus 1.2\pgflinewidth: The default circular mini frames descend exactly the amount of \pfglinewidth below the baseline, so I raised them to be a tiny amount above the baseline. You may have to play around with this value a little, especially if you use another mini frame style (box, tick) than the default circle.