2

Thanks to the wonderful code of Gonzalo Medina (tableofcontents with page numbers), one can show frame numbers of sections and subsections in TOC. If my table of contents has subsubsections. These subsubsections don't have their frame numbers in TOC. I guess one can modify the above code. However, I am just a beginner to beamer. So any help is truly appreciated.

enter image description here

Here is the code:

\documentclass{beamer}
\usetheme{CambridgeUS}

\newcounter{sectionpage}

\makeatletter
\long\def\beamer@section[#1]#2{%
    \beamer@savemode%
    \mode<all>%
    \ifbeamer@inlecture
    \refstepcounter{section}%
    \beamer@ifempty{#2}%
    {\long\def\secname{#1}\long\def\lastsection{#1}}%
    {\global\advance\beamer@tocsectionnumber by 1\relax%
        \long\def\secname{#2}%
        \long\def\lastsection{#1}%
        \setcounter{sectionpage}{\insertframenumber}\stepcounter{sectionpage}%
        \addtocontents{toc}{\protect\beamer@sectionintoc{\the\c@section}{#2\dotfill\thesectionpage}{\the\c@page}{\the\c@part}%
            {\the\beamer@tocsectionnumber}}}%
    {\let\\=\relax\xdef\sectionlink{{Navigation\the\c@page}{\noexpand\secname}}}%
    \beamer@tempcount=\c@page\advance\beamer@tempcount by -1%
    \beamer@ifempty{#1}{}{%
        \addtocontents{nav}{\protect\headcommand{\protect\sectionentry{\the\c@section}{#1}{\the\c@page}{\secname}{\the\c@part}}}%
        \addtocontents{nav}{\protect\headcommand{\protect\beamer@sectionpages{\the\beamer@sectionstartpage}{\the\beamer@tempcount}}}%
        \addtocontents{nav}{\protect\headcommand{\protect\beamer@subsectionpages{\the\beamer@subsectionstartpage}{\the\beamer@tempcount}}}%
    }%
    \beamer@sectionstartpage=\c@page%
    \beamer@subsectionstartpage=\c@page%
    \def\insertsection{\expandafter\hyperlink\sectionlink}%
    \def\insertsubsection{}%
    \def\insertsubsubsection{}%
    \def\insertsectionhead{\hyperlink{Navigation\the\c@page}{#1}}%
    \def\insertsubsectionhead{}%
    \def\insertsubsubsectionhead{}%
    \def\lastsubsection{}%
    \Hy@writebookmark{\the\c@section}{\secname}{Outline\the\c@part.\the\c@section}{2}{toc}%
    \hyper@anchorstart{Outline\the\c@part.\the\c@section}\hyper@anchorend%
    \beamer@ifempty{#2}{\beamer@atbeginsections}{\beamer@atbeginsection}%
    \fi%
    \beamer@resumemode}%

\def\beamer@subsection[#1]#2{%
    \beamer@savemode%
    \mode<all>%
    \ifbeamer@inlecture%
    \refstepcounter{subsection}%
    \beamer@ifempty{#2}{\long\def\subsecname{#1}\long\def\lastsubsection{#1}}
    {%
        \long\def\subsecname{#2}%
        \long\def\lastsubsection{#1}%
        \setcounter{sectionpage}{\insertframenumber}\stepcounter{sectionpage}%
        \addtocontents{toc}{\protect\beamer@subsectionintoc{\the\c@section}{\the\c@subsection}{#2\dotfill\thesectionpage}{\the\c@page}{\the\c@part}{\the\beamer@tocsectionnumber}}%
    }%
    \beamer@tempcount=\c@page\advance\beamer@tempcount by -1%
    \addtocontents{nav}{%
        \protect\headcommand{\protect\beamer@subsectionentry{\the\c@part}{\the\c@section}{\the\c@subsection}{\the\c@page}{\lastsubsection}}%
        \protect\headcommand{\protect\beamer@subsectionpages{\the\beamer@subsectionstartpage}{\the\beamer@tempcount}}%
    }%
    \beamer@subsectionstartpage=\c@page%
    \edef\subsectionlink{{Navigation\the\c@page}{\noexpand\subsecname}}%
    \def\insertsubsection{\expandafter\hyperlink\subsectionlink}%
    \def\insertsubsubsection{}%
    \def\insertsubsectionhead{\hyperlink{Navigation\the\c@page}{#1}}%
    \def\insertsubsubsectionhead{}%
    \Hy@writebookmark{\the\c@subsection}{#2}{Outline\the\c@part.\the\c@section.\the\c@subsection.\the\c@page}{3}{toc}%
    \hyper@anchorstart{Outline\the\c@part.\the\c@section.\the\c@subsection.\the\c@page}\hyper@anchorend%
    \beamer@ifempty{#2}{\beamer@atbeginsubsections}{\beamer@atbeginsubsection}%
    \fi%
    \beamer@resumemode}

\makeatother

\AtBeginSection[] % Do nothing for \section*
{
    \begin{frame}<beamer>
        \frametitle{Outline}
        \tableofcontents[currentsection]
    \end{frame}
}


\begin{document}
    
    \begin{frame}
        \frametitle{Outline}
        \tableofcontents
    \end{frame}
    
    \section{Test Section One}
    \begin{frame}test1\pause test11\end{frame}
    \subsection{Test Subsection One One}
    \begin{frame}test2\end{frame}
    \begin{frame}test3\end{frame}
    \subsubsection{Test Subsubsection One One One}
    \begin{frame}test2\end{frame}
    \begin{frame}test3\end{frame}
    \subsubsection{Test Subsubsection One One Two}
    \begin{frame}test2\end{frame}
    \begin{frame}test3\end{frame}
    \subsection{Test Subsection One Two}
    \begin{frame}test4\end{frame}
    \begin{frame}test5\end{frame}
    
    \section{Test Section Two}
    \begin{frame}test6\end{frame}
    \subsection{Test Subsection Two One}
    \begin{frame}test7\end{frame}
    \begin{frame}test8\end{frame}
    \begin{frame}test9\end{frame}
    \subsection{Test Subsection Two Two}
    \begin{frame}test10\end{frame}
    
\end{document}
2
  • Provide your code please.
    – mmr
    Dec 10, 2021 at 5:03
  • Indeed, it is the code of Gonzalo Medina. I guess one needs to modify it.
    – Truong
    Dec 10, 2021 at 5:47

1 Answer 1

4

Welcome to TeX.SX! The code you present essentially just copies the default commands and adds the page numbers. Therefore, you just need to do the same for \beamer@subsubsection.

However, I would suggest that you patch the underlying commands instead of copying the whole defintions to reduce the amount of code in your preamble.

\documentclass{beamer}
\usetheme{CambridgeUS}
    
\newcounter{sectionpage}
\makeatletter

\patchcmd{\beamer@section}
    {\addtocontents{toc}{\protect\beamer@sectionintoc{\the\c@section}{#2}{\the\c@page}{\the\c@part}{\the\beamer@tocsectionnumber}}}
    {\setcounter{sectionpage}{\insertframenumber}\stepcounter{sectionpage}%
     \addtocontents{toc}{\protect\beamer@sectionintoc{\the\c@section}{#2\dotfill\thesectionpage}{\the\c@page}{\the\c@part}{\the\beamer@tocsectionnumber}}}
    {}{}
    
\patchcmd{\beamer@subsection}
    {\addtocontents{toc}{\protect\beamer@subsectionintoc{\the\c@section}{\the\c@subsection}{#2}{\the\c@page}{\the\c@part}{\the\beamer@tocsectionnumber}}}
    {\setcounter{sectionpage}{\insertframenumber}\stepcounter{sectionpage}%
     \addtocontents{toc}{\protect\beamer@subsectionintoc{\the\c@section}{\the\c@subsection}{#2\dotfill\thesectionpage}{\the\c@page}{\the\c@part}{\the\beamer@tocsectionnumber}}}
    {}{}
    
\patchcmd{\beamer@subsubsection}
    {\addtocontents{toc}{\protect\beamer@subsubsectionintoc{\the\c@section}{\the\c@subsection}{\the\c@subsubsection}{#2}{\the\c@page}{\the\c@part}{\the\beamer@tocsectionnumber}}}
    {\setcounter{sectionpage}{\insertframenumber}\stepcounter{sectionpage}%
     \addtocontents{toc}{\protect\beamer@subsubsectionintoc{\the\c@section}{\the\c@subsection}{\the\c@subsubsection}{#2\dotfill\thesectionpage}{\the\c@page}{\the\c@part}{\the\beamer@tocsectionnumber}}}
    {}{}

\makeatother

\AtBeginSection[] % Do nothing for \section*
{
    \begin{frame}<beamer>
        \frametitle{Outline}
        \tableofcontents[currentsection]
    \end{frame}
}

\begin{document}
    
    \begin{frame}
        \frametitle{Outline}
        \tableofcontents
    \end{frame}
    
    \section{Test Section One}
    \begin{frame}test1\pause test11\end{frame}
    \subsection{Test Subsection One One}
    \begin{frame}test2\end{frame}
    \begin{frame}test3\end{frame}
    \subsubsection{Test Subsubsection One One One}
    \begin{frame}test2\end{frame}
    \begin{frame}test3\end{frame}
    \subsubsection{Test Subsubsection One One Two}
    \begin{frame}test2\end{frame}
    \begin{frame}test3\end{frame}
    \subsection{Test Subsection One Two}
    \begin{frame}test4\end{frame}
    \begin{frame}test5\end{frame}
    
    \section{Test Section Two}
    \begin{frame}test6\end{frame}
    \subsection{Test Subsection Two One}
    \begin{frame}test7\end{frame}
    \begin{frame}test8\end{frame}
    \begin{frame}test9\end{frame}
    \subsection{Test Subsection Two Two}
    \begin{frame}test10\end{frame}
    
\end{document}

enter image description here

1
  • I thank you very much. Have a nice weekend.
    – Truong
    Dec 10, 2021 at 9:37

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .