3

As a followup to my previous question on the topic of generating a TOC for each subsection, I would like to raise the following challenge.

Produce local and global TOCs, such that a line showing document organizational units: section, subsection, subsubsection will show a the total number of paragraphs in it.

Thanks and request for a bug correction

Many thanks to jfbu for his detailed and clever answer. The cryptic name challenge in his answer took many of hours of my time, but I managed to demote frames into subparagraphs (there is a good reason for doing so, since the document may contain paragraphs that are not frames). However, I was not able to produce the full TOCs as I wanted them.

I narrowed the problem in using it to the case where some of the TOCs are empty.

Here is a MWE modeled after jfbu jfbu work.

\documentclass{article}
\usepackage{beamerarticle}
\usepackage{etoc}

\usepackage{etoc}

% Override action when frame title is encountered:
\setbeamertemplate{frametitle}{\relax
  % Similar to \hrule but above the base line
  \def\Hrulefill{\leavevmode\leaders\hrule height 0.8ex depth -0.6ex\hfill\kern0pt}
  \def\frameTitle{\relax
    \itshape
    \small
    \bfseries
    \protect\(\cdot\protect\)\insertframenumber.~\insertframetitle
    \space
    \footnotesize \mdseries
    \insertframesubtitle
  }%
  \typeout{after defs}\relax
  \Hrulefill
  \typeout{after hrule}\relax
  \fbox{\begin{minipage}{0.7\linewidth}\frameTitle\end{minipage}}%\relax
  \typeout{after title}\relax
  \addcontentsline{toc}{subparagraph}{\frameTitle}\relax
   \Hrulefill
  \typeout{after hrulefill}\relax
  \par\noindent
  \typeout{after par no indent}\relax
}
\newcounter{parinsection}
    \newcounter{parinsubsection}
    \newcounter{parinsubsubsection}


    \makeatletter % cf etoc manual "another compatibility mode"
      \let\orig@lsection\l@section
      \let\orig@lsubsection\l@subsection
      \let\orig@lsubsubsection\l@subsubsection
    %
    \etocsetstyle{section}
     {}
     {\typeout{prefix in section}}
     {\typeout{item is section}\orig@lsection {\numberline{\etocnumber}\etocname{} 
               (\Yossi frames)}{\etocpage}}
     {}

    \etocsetstyle{subsection}
    {\typeout{begin of SUBSECTION}}
     {\typeout{prefix in subsection}}
     {\typeout{item in susection}\orig@lsubsection {\numberline{\etocnumber}\etocname{} 
     \typeout{before frames count}(\Yossi frames)}{\etocpage}}
               {\typeout{end of SUBSECTION}}

    \etocsetstyle{subsubsection}
    {\typeout{Begin SUBSUBSECTION}}
    {\typeout{prefix sub sub section}}
     {\relax
       \typeout{item in sub sub section}\relax
       \orig@lsubsubsection 
       {\etocname{} (\Yossi frames)}{\etocpage}
     }
     {\typeout{End SUBSUBSECTION}}

    \etocsetstyle {subparagraph}
    {\typeout{BEGIN SUBPARAGRAPH}}
     {}
     {\stepcounter{parinsection}%
      \stepcounter{parinsubsection}%
      \stepcounter{parinsubsubsection}}
      {\typeout{END SUBPARAGRAPH}\xdef\yossic{\yossic{\arabic{parinsubsubsection}}}}

    \newcommand\yossia {}
    \newcommand\yossib {}
    \newcommand\yossic {}
    \newcommand\Yossi {\expandafter\Yossi@ \yossia\@nil}
    \def\Yossi@ #1#2\@nil {\gdef\yossia{#2}#1 }

    \makeatother

    \newcommand{\CountFramesFor}[1]{%
        \begingroup % first pass
            \etocsetstyle {section}
                          {}
                          {}%
                          {\setcounter{parinsection}{0}}
                          {}%
            \etocsetstyle {subsection}
                     {\xdef\yossib{}}
                          {}
                          {\setcounter{parinsubsection}{0}}
                     {\xdef\yossia{\yossia{\arabic{parinsection}}\yossib}}%
            \etocsetstyle {subsubsection}
                     {\xdef\yossic{}}
                          {}
                          {\setcounter{parinsubsubsection}{0}}
                     {\xdef\yossib{\yossib{\arabic{parinsubsection}}\yossic}}%
            \gdef\yossia{}\gdef\yossib{}\gdef\yossic{}%
            \etocsettocstyle {}{}%
            \etocsetnexttocdepth {subparagraph}%
            #1%
        \endgroup
    }%

    \newcommand{\GlobalTOC}{%
      \typeout{before counting}\relax
         \CountFramesFor\tableofcontents
         \typeout{after counting}\relax
        \etocsetnexttocdepth{subsubsection}%
        \typeout{after set next toc depth}\relax
        \tableofcontents
        \typeout{after toc}\relax
    }

    \newcommand{\SectionTOC}{% 
         \CountFramesFor\localtableofcontents
         \let\yossia\yossib
    \begingroup
        \etocsetstyle{subsubsection}{}{}{\setbox0\hbox{\Yossi}}{}%
        \etocsetnexttocdepth{subsubsection}%
        \etocsettocstyle {\noindent Contents:\par}{}%
        \localtableofcontents
    \endgroup
    }

    \newcommand{\SubSectionTOC}{% 
         \CountFramesFor\localtableofcontents
         \let\yossia\yossic
        \etocsetnexttocdepth{subsubsection}%
        \etocsettocstyle {\noindent Contents:\par}{}%
        \localtableofcontents
    }

    \newcommand{\listOfFramesInSubSubSection}{%
      \begingroup
           \etocsetlevel {subparagraph}{2}%
           \etocsetlevel {subsubsection}{1}%
           \etocsetlevel {subsection}{6}%
           \etocsetlevel {section}{6}%
           \etocsetlevel {paragraph}{6}%
           \etocsettocstyle {\noindent\emph{Frames:}}{}%
           \etocsetnexttocdepth {subparagraph}%
           \etocdefaultlines
                \etocsetstyle{subsection}
                     {\begingroup}
                     {\footnotesize}
                     {\etocname~\space}%
                     {\endgroup}
           \localtableofcontents
      \endgroup
    }


            \newcommand{\listOfFramesInSubSection}{%
              \begingroup
                   \etocsetlevel {subparagraph}{3}%
                   \etocsetlevel {subsubsection}{2}%
                   \etocsetlevel {subsection}{1}%
                   \etocsetlevel {subsection}{6}%
                   \etocsetlevel {section}{6}%
                   \etocsetlevel {paragraph}{6}%
                   \etocsettocstyle {\noindent\emph{Frames:}\par}{}%
                   \etocsetnexttocdepth {subparagraph}%
                   \etocdefaultlines
           \localtableofcontents
              \endgroup
            }



\begin{document}

\etocsettocdepth {subparagraph}
\GlobalTOC
\section{My First Section}\SectionTOC
    \begin{frame}{My First Frame} has a bit of contents \end{frame}
    \subsection{Subsection [A] in My First Section}
\SubSectionTOC
      \listOfFramesInSubSection
       \begin{frame}{My 2nd Frame} has another bit of contents  \end{frame}
    \subsection{Sububsection [I] in subsection [A] in My First Section}      
 \listOfFramesInSubSubSection
            \begin{frame}{My THIRD Frame} has one bit and another bit of contents   in it      \end{frame}


\end{document}
  • about handling paragraphs which are not frames, it is only a matter to do then as in my very first answer, do \etocsetlevel {beamerframe}{6}, use beamerframe rather than paragraph everywhere, do \etocsetlevel {beamerframe}{4} and \etocsetlevel {paragraph}{6} in \CountFramesFor. This way, paragraphs and frames will coexist. [leave \etocsetstyle{paragraph} with paragraph, because at this location beamerframe is at level 6=ignored; I am assuming here your regular TOCs won't list paragraphs] – user4686 Oct 1 '14 at 19:56
  • actually you can do from the start \etocsetlevel {beamerframe}{4} and the \etocsetstyle {beamerframe}etc. Just make sure the tocdepth is never more than 3 for real TOCs. And that \etocsetlevel{paragraph}{6} is in \CountFramesFor. – user4686 Oct 1 '14 at 20:29
3

UPDATE

As it has been clarified that subsubsections may have no frames, that subsections may have no subsubsections, that sections may have no subsections, I provide a revisited code (see at bottom) which is able to handle these things. Note though that we don't want a subsubsection in a section without intervening subsection.



Here is an adaptation of the answer to the linked question, it adds the counting of paragraphs. This is done à la etoc, i.e. using invisible table of contents to do the job.

Update as per comment, which described more precisely what was intended. It is assumed that there is always a subsection between a section and a subsection, or a subsubsection between a subsection and a paragraph. Here, frame environments create paragraphs, and there are no other paragraphs.

The initial answer is left at bottom. Code sample for the update gives four pages, only first two shown here.

toc with counts toc with counts page 2

\documentclass{article}
\usepackage{beamerarticle}
\usepackage{etoc}

% Override action when frame title is encountered: (Code by Yossi Gil)
\setbeamertemplate{frametitle}{%
   \paragraph{\insertframenumber.~\insertframetitle}\\
   \noindent\emph{\insertframesubtitle}\par
} 

\newcounter{parinsection}
\newcounter{parinsubsection}
\newcounter{parinsubsubsection}


\makeatletter % cf etoc manual "another compatibility mode"
  \let\orig@lsection\l@section
  \let\orig@lsubsection\l@subsection
  \let\orig@lsubsubsection\l@subsubsection
%
\etocsetstyle{section}
 {}
 {}
 {\orig@lsection {\numberline{\etocnumber}\etocname{} 
           (\Yossi frames)}{\etocpage}}
 {}

\etocsetstyle{subsection}
 {}
 {}
 {\orig@lsubsection {\numberline{\etocnumber}\etocname{} 
           (\Yossi frames)}{\etocpage}}
 {}

\etocsetstyle{subsubsection}
 {}
 {}
 {\orig@lsubsubsection {\numberline{\etocnumber}\etocname{} 
           (\Yossi frames)}{\etocpage}}
 {}

\etocsetstyle {paragraph}
 {}
 {}
 {\stepcounter{parinsection}%
  \stepcounter{parinsubsection}%
  \stepcounter{parinsubsubsection}}
 {\xdef\yossic{\yossic{\arabic{parinsubsubsection}}}}

\newcommand\yossia {}
\newcommand\yossib {}
\newcommand\yossic {}
\newcommand\Yossi {\expandafter\Yossi@ \yossia\@nil}
\def\Yossi@ #1#2\@nil {\gdef\yossia{#2}#1 }

\makeatother

\newcommand{\CountFramesFor}[1]{%
    \begingroup % first pass
        \etocsetstyle {section}
                      {}
                      {}%
                      {\setcounter{parinsection}{0}}
                      {}%
        \etocsetstyle {subsection}
                 {\xdef\yossib{}}
                      {}
                      {\setcounter{parinsubsection}{0}}
                 {\xdef\yossia{\yossia{\arabic{parinsection}}\yossib}}%
        \etocsetstyle {subsubsection}
                 {\xdef\yossic{}}
                      {}
                      {\setcounter{parinsubsubsection}{0}}
                 {\xdef\yossib{\yossib{\arabic{parinsubsection}}\yossic}}%
        \gdef\yossia{}\gdef\yossib{}\gdef\yossic{}%
        \etocsettocstyle {}{}%
        \etocsetnexttocdepth {paragraph}%
        #1%
    \endgroup
}%

\newcommand{\GlobalToc}{%
     \CountFramesFor\tableofcontents
% to suppress subsubsections:
%\begingroup
%    \etocsetstyle{subsubsection}{}{}{\setbox0\hbox{\Yossi}}{}%
% to also suppress subsections 
%    \etocsetstyle{subsection}{}{}{\setbox0\hbox{\Yossi}}{}%
    \etocsetnexttocdepth{subsubsection}%
    \tableofcontents
%\endgroup
}

\newcommand{\SectionToc}{% 
     \CountFramesFor\localtableofcontents
     \let\yossia\yossib
% to suppress subsubsections:
\begingroup
    \etocsetstyle{subsubsection}{}{}{\setbox0\hbox{\Yossi}}{}%
    \etocsetnexttocdepth{subsubsection}%
    \etocsettocstyle {\noindent Contents:\par}{}%
    \localtableofcontents
\endgroup
}

\newcommand{\SubsectionToc}{% 
     \CountFramesFor\localtableofcontents
     \let\yossia\yossic
    \etocsetnexttocdepth{subsubsection}%
    \etocsettocstyle {\noindent Contents:\par}{}%
    \localtableofcontents
}

\newcommand{\Listofframes}{%
  \begingroup
       \etocsetlevel {paragraph}{2}%
       \etocsetlevel {subsubsection}{1}%
       \etocsetlevel {subsection}{6}%
       \etocsetlevel {section}{6}%
       \etocsettocstyle {\noindent List of frames in this subsubsection\par}{}%
       %\etocsetnexttocdepth {paragraph}%
       \etocdefaultlines
       \localtableofcontents
  \endgroup
}


\begin{document}

\etocsettocdepth {paragraph}
\GlobalToc

\section{Some frames}
\SectionToc

\subsection {first subsection}
\SubsectionToc

\subsubsection{first subsubsection}
\Listofframes

\begin{frame}\frametitle{AHK}
  Ah Ah 
\end{frame}

\begin{frame}\frametitle{AHJ}
  Oh Oh
\end{frame}

\begin{frame}\frametitle{AHM}
  Ah Ah 
\end{frame}

\subsubsection{second subsubsection}
\Listofframes

\begin{frame}\frametitle{AHN}
  Oh Oh
\end{frame}

\subsection {second subsection}
\SubsectionToc

\subsubsection {subsubsection}
\Listofframes

\begin{frame}\frametitle{HBZ}
  Ah Ah 
\end{frame}

\subsubsection {subsubsection}
\Listofframes

\begin{frame}\frametitle{HBW}
  Oh Oh
\end{frame}

\begin{frame}\frametitle{HBT}
  Oh Oh
\end{frame}

\begin{frame}\frametitle{HBR}
  Oh Oh
\end{frame}

  \section{More frames}
\SectionToc

\subsection {third subsection}
\SubsectionToc

\subsubsection {subsubsection}
\Listofframes

\begin{frame}\frametitle{BHK}
  Ah Ah 
\end{frame}

\begin{frame}\frametitle{BHJ}
  Oh Oh
\end{frame}

\begin{frame}\frametitle{BBZ}
  Ah Ah 
\end{frame}

\subsubsection {subsubsection}
\Listofframes

\begin{frame}\frametitle{BBW}
  Oh Oh
\end{frame}

\begin{frame}\frametitle{BBU}
  Oh Oh
\end{frame}

\subsection {fourth subsection}
\SubsectionToc

\subsubsection {subsubsection}
\Listofframes

\begin{frame}\frametitle{YHK}
  Ah Ah 
\end{frame}

\subsubsection {subsubsection}
\Listofframes

\begin{frame}\frametitle{YHJ}
  Oh Oh
\end{frame}

\begin{frame}\frametitle{YYZ}
  Ah Ah 
\end{frame}

\begin{frame}\frametitle{YYW}
  Oh Oh
\end{frame}

\end{document}

Initial answer:

counting frames in a local toc counting frames, the sequel

\documentclass{article}
\usepackage{beamerarticle}
\usepackage{etoc}
% section=1, subsection=2, subsubsection=3
\etocsettocdepth {all}

%Override action when frame title is encountered: (Code by Yossi Gil)
\setbeamertemplate{frametitle}{%
   \paragraph{\insertframenumber.~\insertframetitle}\\
   \noindent\emph{\insertframesubtitle}\par
} 

\newcounter {mycountofframes}

\newcommand {\listofsubsectionswithframecount}{\begingroup
%%%%% count frames by executing an invisible table of contents
  \setcounter {mycountofframes}{0}%
  \etocsetnexttocdepth {paragraph}%
  \etocsetstyle {subsection}{}{}{}{}%
  \etocsetstyle {paragraph}{}{\stepcounter{mycountofframes}}{}{}%
  \etocsettocstyle {}{}%
  \localtableofcontents % invisible, just to count paragraphs (=frames)
%%%%%
%%%%% now list subsections 
  \etocsettocstyle 
   {\noindent Dear reader, there are in total \arabic{mycountofframes} 
                    frames in this section.\par\medskip }
   {}%
  \etocsetnexttocdepth {subsection}%
  \etocstandardlines % undoes the \etocsetstyle above, 
                     % switches to class default for TOC lines
  \localtableofcontents % Print the table of contents
\endgroup
}

\newcommand {\listofframesinthissubsection}{\begingroup
%%%%% count frames by executing an invisible table of contents
    \setcounter {mycountofframes}{0}%
    \etocsetnexttocdepth {paragraph}%
    \etocsetstyle {paragraph}{}{\stepcounter{mycountofframes}}{}{}%
    \etocnopar % says not to do \par, but doesn't matter here
    \etocsettocstyle {}{}%
    \localtableofcontents % just to count paragraphs (=frames)
%%%%%
%%%%% now list the paragraphs 
    \etocsetlevel {subsection}{1}% artificially pretending subsections are
                                % sections  one up the level
    \etocsetlevel {paragraph}{2}% pretending paragraphs are subsections
    \etocdefaultlines % undoes the \etocsetstyle above, switches to package
                      % default for the TOC lines
    \etocsettocstyle {\noindent The \arabic{mycountofframes} 
                      frames in this subsection:\par\smallskip}{}%
    \etocsetnexttocdepth {paragraph}%
    \localtableofcontents
\endgroup % undo all our mess
}

\begin{document}

\etocsetnexttocdepth {subsection}
\tableofcontents

  \section{Some frames}
\listofsubsectionswithframecount


\subsection {first subsection}
\listofframesinthissubsection

\begin{frame}\frametitle{AHK}
  Ah Ah 
\end{frame}

\begin{frame}\frametitle{AHJ}
  Oh Oh
\end{frame}

\begin{frame}\frametitle{AHM}
  Ah Ah 
\end{frame}

\begin{frame}\frametitle{AHN}
  Oh Oh
\end{frame}

\subsection {second subsection}
\listofframesinthissubsection

\begin{frame}\frametitle{HBZ}
  Ah Ah 
\end{frame}

\begin{frame}\frametitle{HBW}
  Oh Oh
\end{frame}

\begin{frame}\frametitle{HBT}
  Oh Oh
\end{frame}

  \section{More frames}
\listofsubsectionswithframecount

\subsection {third subsection}
\listofframesinthissubsection

\begin{frame}\frametitle{BHK}
  Ah Ah 
\end{frame}

\begin{frame}\frametitle{BHJ}
  Oh Oh
\end{frame}

\subsection {fourth subsection}
\listofframesinthissubsection


\begin{frame}\frametitle{BBZ}
  Ah Ah 
\end{frame}

\begin{frame}\frametitle{BBW}
  Oh Oh
\end{frame}

\begin{frame}\frametitle{BBU}
  Oh Oh
\end{frame}

\end{document}


Updated code to handle missing frames

\documentclass{article}
\usepackage{beamerarticle}
\usepackage{etoc}

% % Override action when frame title is encountered: (Code by Yossi Gil)

\def\Hrulefill
   {\leavevmode\leaders\hrule height 0.8ex depth -0.6ex\hfill\kern0pt }

\def\frameTitle{%
    \itshape
    \small
    \bfseries
    $\cdot$\insertframenumber.~\insertframetitle
    \space
    \footnotesize \mdseries
    \insertframesubtitle
  }%

\setbeamertemplate{frametitle}{\relax
  % Similar to \hrule but above the base line
  \noindent\Hrulefill
  \addcontentsline{toc}{paragraph}{\frameTitle}%
  \fbox{\begin{minipage}{0.7\linewidth}\frameTitle\end{minipage}}%
  \Hrulefill\par
}

\newcounter{parinsection}
\newcounter{parinsubsection}
\newcounter{parinsubsubsection}

\makeatletter % cf etoc manual "another compatibility mode"
 \let\orig@lsection\l@section
 \let\orig@lsubsection\l@subsection
 \let\orig@lsubsubsection\l@subsubsection
%
\etocsetstyle{section}
 {}
 {}
 {\orig@lsection {\numberline{\etocnumber}\etocname{} 
           (\Yossi)}{\etocpage}}
 {}

\etocsetstyle{subsection}
 {}
 {}
 {\orig@lsubsection {\numberline{\etocnumber}\etocname{} 
           (\Yossi)}{\etocpage}}
 {}

\etocsetstyle{subsubsection}
 {}
 {}
 {\orig@lsubsubsection {\numberline{\etocnumber}\etocname{} 
           (\Yossi)}{\etocpage}}
 {}

\etocsetstyle {paragraph}
 {}
 {}
 {\stepcounter{parinsection}%
  \stepcounter{parinsubsection}%
  \stepcounter{parinsubsubsection}}
 {}

\newcommand\yossia {}
\newcommand\yossib {}
\newcommand\yossic {}
\newcommand\Yossi {\expandafter\Yossi@ \yossia\@nil}
\def\Yossi@ #1#2\@nil {\gdef\yossia{#2}\begingroup\color{blue}%
    \ifcase #1 
      no frame%
    \or
      1 frame%
    \else #1 frames%
    \fi\endgroup}% 


\makeatother

\newcommand{\CountFramesFor}[1]{%
    \begingroup % first pass
        \etocsetstyle {section}
                      {\def\yossia{}\def\yossib{}%
                       \setcounter{parinsection}{0}%
                       \etocskipfirstprefix 
                      }
                      {\edef\yossia{\yossia% earlier sec, sub and subsub 
                                    \arabic{parinsection}% add previous
                                      % section 
                                    \yossib % and all sub and subsub therein
                                    }%
                      }
                      {\setcounter{parinsection}{0}\def\yossib{}}
                      {\edef\yossia{\yossia% earlier sec, sub and subsub 
                                    \arabic{parinsection}% add last
                                      % section 
                                    \yossib % and all sub and subsub therein
                                    }%
                      }%
 %
        \etocsetstyle {subsection}
                      {\def\yossib{}\def\yossic{}%
                       \setcounter{parinsubsection}{0}%
                       \etocskipfirstprefix 
                      }
                      {\edef\yossib{\yossib% previous sub and subsub 
                                    \arabic{parinsubsection}% add previous
                                      % subsection 
                                    \yossic % and all subsub therein
                                    }%
                      }
                      {\setcounter{parinsubsection}{0}\def\yossic{}}
                      {\edef\yossib{\yossib% previous sub and subsub 
                                    \arabic{parinsubsection}% add last
                                      % subsection 
                                    \yossic % and all subsub therein
                                    }%
                      }%
%
       \etocsetstyle {subsubsection}
                      {\def\yossic{}%
                       \setcounter{parinsubsubsection}{0}%
                       \etocskipfirstprefix 
                      }
                      {\edef\yossic{\yossic\arabic{parinsubsubsection}}}%
                      {\setcounter{parinsubsubsection}{0}}
                      {\edef\yossic{\yossic\arabic{parinsubsubsection}}}%
%
        \etocsettocstyle {}{\global\let\yossia\yossia 
                            \global\let\yossib\yossib
                            \global\let\yossic\yossic}%
        \etocsetnexttocdepth {paragraph}%
        #1%
    \endgroup
}%

\newcommand{\GlobalToc}{%
     \CountFramesFor\tableofcontents
% to suppress subsubsections:
%\begingroup
%    \etocsetstyle{subsubsection}{}{}{\setbox0\hbox{\Yossi}}{}%
% to also suppress subsections 
%    \etocsetstyle{subsection}{}{}{\setbox0\hbox{\Yossi}}{}%
    \etocsetnexttocdepth{subsubsection}%
    \tableofcontents
%\endgroup
}

\newcommand{\SectionToc}{% 
     \CountFramesFor\localtableofcontents
     \let\yossia\yossib
% this is to suppress listing subsubsections in the Section TOC:
\begingroup
    \etocsetstyle{subsubsection}{}{}{\setbox0\hbox{\Yossi}}{}%
    \etocsetnexttocdepth{subsubsection}%
    \etocsettocstyle {\noindent Contents:\par}{}%
    \localtableofcontents
\endgroup
}

\newcommand{\SubsectionToc}{% 
     \CountFramesFor\localtableofcontents
     \let\yossia\yossic
    \etocsetnexttocdepth{subsubsection}%
    \etocsettocstyle {\noindent Contents:\par}{}%
    \localtableofcontents
}

\newcommand{\Listofframes}{%
  \begingroup
       \etocsetlevel {paragraph}{2}%
       \etocsetlevel {subsubsection}{1}%
       \etocsetlevel {subsection}{6}%
       \etocsetlevel {section}{6}%
       \etocsettocstyle {\noindent List of frames in this subsubsection\par}{}%
       \etocdefaultlines
       \localtableofcontents
  \endgroup
}


\begin{document}

\etocsettocdepth {paragraph}
\GlobalToc

\section{Section A}
\SectionToc

\subsection {subsection}
\SubsectionToc

\subsubsection{subsubsection}
% \Listofframes % don't use \listofframes in a subsubsection 

No frames here.

\subsubsection{subsubsection}
\Listofframes

\begin{frame}\frametitle{AHN}
  Oh Oh
\end{frame}

\begin{frame}\frametitle{BHN}
  Oh Oh
\end{frame}

\subsection {subsection with no subsubsection}

There are no subsubsections here.

\section{Section B}
\SectionToc

\subsection {subsection}
\SubsectionToc

\subsubsection {subsubsection}
\Listofframes

\begin{frame}\frametitle{BHK}
  Ah Ah 
\end{frame}

\begin{frame}\frametitle{BHJ}
  Oh Oh
\end{frame}

\begin{frame}\frametitle{BBZ}
  Ah Ah 
\end{frame}

\subsubsection {subsubsection}
\Listofframes

\begin{frame}\frametitle{BBW}
  Oh Oh
\end{frame}

\begin{frame}\frametitle{BBU}
  Oh Oh
\end{frame}

\subsubsection {subsubsection}

No frames here.

\subsection {subsection with no subsubsection}

Nothing here.

\subsection {subsection}
\SubsectionToc

\subsubsection {subsubsection}
\Listofframes

\begin{frame}\frametitle{YHK}
  Ah Ah 
\end{frame}

\subsubsection {subsubsection}

No frames here.

\subsubsection {subsubsection}
\Listofframes

\begin{frame}\frametitle{YHJ}
  Oh Oh
\end{frame}

\begin{frame}\frametitle{YYZ}
  Ah Ah 
\end{frame}

\begin{frame}\frametitle{YYW}
  Oh Oh
\end{frame}

\subsection {subsection}
\SubsectionToc

\subsubsection {subsubsection }

No frame.

\subsubsection {subsubsection }

No frame.

\end{document}

toc with count of frames toc with count of frames toc with count of frames toc with count of frames

  • I could not work this out. I want each entry in the TOC to show a count, e.g., "1. Introduction (20 paragraphs). 1.1 Introduction to Introduction (5 frames) 1.1.1 Introduction to the Introduction to the Introduction (2 frames) 1.2. Second subsection in section one (13 slides) 1.3 Third subsection of Section 1 (2 slides). Note that 20=13+5+2. – Yossi Gil Sep 26 '14 at 10:12
  • Thanks for fixing this! I am still working on figuring out the mysterious \Yossi and friends macros in the modified version. – Yossi Gil Sep 27 '14 at 16:11
  • @YossiGil Hard to explain, thus I don't try ;-) – user4686 Sep 27 '14 at 17:40
  • I have been battling with this puzzle for tens of hours. I think I have nailed down the bug to the case where there are empty organizational units, e.g., a subsection without subsubsections. Will modify my question to include this case. – Yossi Gil Sep 30 '14 at 11:37

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.