5

In this thread (including minimal working example)

One navigation bullet per subsection with subsection=false in custom beamer theme

I found a solution for drawing only one circle by subsection instead of a circle per frame when using miniframes. It works very well, except one problem:

In many PDF viewers (e.g. on Windows: Foxit, SumatraPDF, Adobe Acrobat; on Linux: Evince) the circles link to the last frame of the subsection instead of linking to the first. With qpdfview for example the navigation works correctly. My PDF will be distributed, so it should work correctly in most common PDF viewers.

Does anyone have an idea what could be the reason for this behaviour and how I could solve the problem?

EDIT: As nobody seems to have a solution, does anybody know how I could simply remove the links from the navigation circles in order to avoid the problem of linking to the wrong page?

3

To address your original question: The solution provided in One navigation bullet per subsection with subsection=false in custom beamer theme doesn't really generate only one mini frame per subsection, it just stacks all the mini frames for one subsection on top of each other. Like this, many links are created in the same place, causing problems with PDF viewers as they don't know which one to follow.

I developed a workaround by generating a link only for the first mini frame of each subsection: This is done by emptying the definition of \beamer@link, the macro responsible for producing the links, after use. The original definition is restored when a new subsection is started, thus providing the opportunity to generate a link for the following subsection.

\documentclass[compress]{beamer}

\useoutertheme[subsection=false]{miniframes}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\slideentry}{\advance\beamer@xpos by1\relax}{}{}{}    
\newcommand*{\nofurther@beamer@link}{\gdef\beamer@link(##1/##2){}}
\pretocmd{\beamer@link}{\nofurther@beamer@link}{}{}
\let\beamer@linkorig=\beamer@link
\def\beamer@subsectionentry#1#2#3#4#5{\advance\beamer@xpos by1\relax\let\beamer@link=\beamer@linkorig}
\makeatother

\begin{document}
\section{S1}
\subsection{SS1}
  \frame{1}
  \frame{2}
  \frame{3}

\subsection{SS2}
  \frame{1}
  \frame{2}
  \frame{3}
\end{document}
  • Wow, ingenious! It works perfectly. Thanks so much for your effort. How did you find that out? I didn't really know where to look at, I was a bit lost with this problem ... – ecsi Jan 3 '14 at 21:08
  • @ecsi Being the author of the answer to the original question, I knew where my 'hack' might fail ;-) Sorry by the way for not answering earlier, I haven't noticed your follow-up question until now... – diabonas Jan 4 '14 at 15:22
4

The links are provided by calling \beamer@link(a/b) where a and b are the first and last slides of the frame. In the \slideentry command a/b is the fourth argument. So we can remove this call by removing the text \beamer@link(#4) from \slideentry:

Sample navigation

\documentclass[compress]{beamer}

\useoutertheme[subsection=false]{miniframes}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\slideentry}{\advance\beamer@xpos by1\relax}{}{}{}
\patchcmd{\slideentry}{\beamer@link(#4)}{}{}{}
\def\beamer@subsectionentry#1#2#3#4#5{\advance\beamer@xpos by1\relax}%
\makeatother

\begin{document}
\section{S1}
\subsection{SS1}
  \frame{1}
  \frame{2}
  \frame{3}

\subsection{SS2}
  \frame{1}
  \frame{2}
  \frame{3}
\end{document}
  • Thank you. This works, and I think its better to have no links than having links that show strange behaviour in many PDF viewers. Thanks also for the kind explanation! – ecsi Jan 3 '14 at 14:40

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.