Here's a solution that doesn't mess around with the subsection numbering, but just patches beamer so that "subsections numbered 0" show their slide entries. Frames immediately below \section
s without \subsection
s get treated as subsection 0 and highlighted in a different group to any actual later \subsection
s. Therefore, subsections are not needed to get frames to show corresponding the navigation circles, but it doesn't prevent (or rather, obfuscate) subsection use.
Beamer's \slideentry
has a test that checks if the current subsection number exceeds zero before it agrees to show the navigation circle; I have just patched that test by replacing it with something that's always true (but still in the if
conditional form so it shouldn't break anything).
\usepackage{etoolbox}
\makeatletter
\patchcmd{\slideentry}{\ifnum#2>0}{\ifnum2>0}{}{\@error{unable to patch}}% replace the subsection number test with a test that always returns true
\makeatother
Note that it may also be necessary to do the same for \fakeslideentry
(if using multiple parts?). If not using the compress
option, it may also be necessary to \advance\beamer@ypos by1\relax
before the \fi
in the \ifbeamer@compress
else
clause. However, the above alone "works" in the following example:
\documentclass{beamer}
\usepackage{etoolbox}
\makeatletter
\patchcmd{\slideentry}{\ifnum#2>0}{\ifnum2>0}{}{\@error{unable to patch}}% replace the subsection number test with a test that always returns true
\makeatother
\usetheme{Frankfurt}
% to illustrate the subsection numbering
\setbeamertemplate{subsection in toc}[subsections numbered]
\begin{document}
\frame{\tableofcontents}
\section{Test I}
\frame{one}
\frame{two}
\subsection{A}
\frame{three}
\frame{four}
\subsection{B}
\frame{five}
\section{Test II}
\frame{six}
\subsection{C}
\frame{seven}
\section{Test III}
\frame{eight}
\end{document}
(I realise that this may no longer be useful to the original poster, but it might help someone. This is what I wanted to do but found only this question and its original answers.)
compress
option which does what you want.