Ausgehend von der Beantwortung dieser Frage durch @Henri hat sich ein weiteres Problem ergeben.

Open in Online-Editor
\documentclass{beamer}
\usetheme{AnnArbor}

\makeatletter

\def\beamer@sectionintoc#1#2#3#4#5{%
  \ifnum\c@tocdepth>0%
  \ifnum#4=\beamer@showpartnumber%
  {
  \beamer@saveanother%
  \gdef\beamer@todo{}%
  \beamer@slideinframe=#1\relax%
  \expandafter\only\beamer@tocsections{\gdef\beamer@todo{%
      \beamer@tempcount=#5\relax%
      \advance\beamer@tempcount by\beamer@sectionadjust%
      \ifnum\beamer@tempcount>0
        \edef\inserttocsectionnumber{\the\beamer@tempcount}%
      \else
        \def\inserttocsectionnumber{}%
      \fi%
      \def\inserttocsection{\hyperlink{Navigation#3}{#2}}%
      \beamer@tocifnothide{\ifnum\c@section=#1\beamer@toc@cs\else\beamer@toc@os\fi}%
      {
        \ifbeamer@pausesections\pause\fi%
        \usebeamertemplate{toc section itemsep}%
        {%
          \hbox{\vbox{%
              \def\beamer@breakhere{\\}%
              \beamer@tocact{\ifnum\c@section=#1\beamer@toc@cs\else\beamer@toc@os\fi}{section in toc}}}%
         \par%
        }%
      }%
    }
  }%
  \beamer@restoreanother%
  }
  \beamer@todo%
  \fi\fi%
}

\long\def\beamer@subsectionintoc#1#2#3#4#5#6{%
  \ifnum\c@tocdepth>1%
  \ifnum#5=\beamer@showpartnumber%
  {%
    \beamer@saveanother%
    \gdef\beamer@todo{}%
    \beamer@slideinframe=#1\relax%
    \expandafter\only\beamer@tocsections{\gdef\beamer@todo{%
      \ifbeamer@pausesubsections\pause\fi%
      \beamer@tempcount=#6%
      \advance\beamer@tempcount by\beamer@sectionadjust%
      \edef\inserttocsectionnumber{\the\beamer@tempcount}%
      \def\inserttocsubsectionnumber{#2}%
      \def\inserttocsubsection{\hyperlink{Navigation#4}{#3}}%
      \beamer@tocifnothide{\ifnum\c@section=#1\beamer@toc@css\else\beamer@toc@oss\fi}%
      {%
        \usebeamertemplate{toc subsection itemsep}%
        \def\beamer@breakhere{\\}%
        \beamer@tocact{\ifnum\c@section=#1\ifnum\c@subsection=#2\beamer@toc@css\else\beamer@toc@oss\fi\else\beamer@toc@ooss\fi}
        {subsection in toc}%
      }%
    }}%
    \beamer@restoreanother%
  }
  \beamer@todo%
  \fi\fi%
}

\long\def\beamer@subsubsectionintoc#1#2#3#4#5#6#7{%
  \ifnum\c@tocdepth>2%
  \ifnum#6=\beamer@showpartnumber%
  {
    \beamer@saveanother%
    \gdef\beamer@todo{}%
    \beamer@slideinframe=#1\relax%
    \expandafter\only\beamer@tocsections{\gdef\beamer@todo{%
      \ifbeamer@pausesubsections\pause\fi%
      \beamer@tempcount=#7%
      \advance\beamer@tempcount by\beamer@sectionadjust%
      \edef\inserttocsectionnumber{\the\beamer@tempcount}%
      \def\inserttocsubsectionnumber{#2}%
      \def\inserttocsubsubsectionnumber{#3}%
      \def\inserttocsubsubsection{\hyperlink{Navigation#5}{#4}}%
      \beamer@tocifnothide{\ifnum\c@section=#1\beamer@toc@csss\else\beamer@toc@osss\fi}%
      {%
        \usebeamertemplate{toc subsubsection itemsep}%
        \def\beamer@breakhere{\\}%
        \beamer@tocact{\ifnum\c@section=#1\ifnum\c@subsection=#2\ifnum\c@subsubsection=#3\beamer@toc@csss\else\beamer@toc@osss\fi\else\beamer@toc@oosss\fi\else\beamer@toc@ooosss\fi}
        {subsubsection in toc}%
      }%
    }}%
    \beamer@restoreanother%
  }
  \beamer@todo%
  \fi\fi%
}

\makeatother

\setbeamertemplate{toc section itemsep}{\vskip1.5\baselineskip}
\setbeamertemplate{toc subsection itemsep}{\vskip1\baselineskip}
\setbeamertemplate{toc subsubsection itemsep}{\vskip0.5\baselineskip}

\begin{document}
\begin{frame}
\tableofcontents[hideallsubsections]
\end{frame}
\section{A}
\begin{frame}
\tableofcontents[hideothersubsections,sectionstyle=hide]
\end{frame}
\subsection{A1}
\begin{frame}
\tableofcontents[subsectionstyle=show/shaded/hide,sectionstyle=hide]
\end{frame}
\subsubsection{A1a}
\begin{frame}
\end{frame}
\subsubsection{A1b}
\begin{frame}
\end{frame}
\subsection{A2}
\begin{frame}
\end{frame}
\subsection{A3}
\begin{frame}
\end{frame}
\section{B}
\begin{frame}
\end{frame}
\end{document}

Die Lösung von @Henri funktioniert gut, allerdings tritt nun bei Folie 2 in obigem Beispiel ein Abstand zwischen der subsection A1 und A2 auf, der dort nicht sein sollte.

alt text

Ich vermute, man muss in dem von Henri veränderten Code eine Abfrage einbauen, ob die subsubsections versteckt sind oder nicht. Eine Option hideothersubsubsections analog zu hideothersubsections schein es in beamer nicht zu geben.

gefragt 12 Mär, 07:20

tom75's gravatar image

tom75
1.9k1545
Akzeptiert: 83%



Diese Antwort löst nur ein Teilproblem.

Eine vollständige Antwort findet sich unter der Frage Wie kann ich unerwünschten Abstand im tableofcontents in beamer beseitigen? (Teil 2)


Es ist tatsächlich richtig, dass der Check gefehlt hat. Ich habe ihn eingebaut und die Stelle markiert.

Open in Online-Editor
\documentclass{beamer}
\usetheme{AnnArbor}

\makeatletter

\def\beamer@sectionintoc#1#2#3#4#5{%
  \ifnum\c@tocdepth>0%
  \ifnum#4=\beamer@showpartnumber%
  {
  \beamer@saveanother%
  \gdef\beamer@todo{}%
  \beamer@slideinframe=#1\relax%
  \expandafter\only\beamer@tocsections{\gdef\beamer@todo{%
      \beamer@tempcount=#5\relax%
      \advance\beamer@tempcount by\beamer@sectionadjust%
      \ifnum\beamer@tempcount>0
        \edef\inserttocsectionnumber{\the\beamer@tempcount}%
      \else
        \def\inserttocsectionnumber{}%
      \fi%
      \def\inserttocsection{\hyperlink{Navigation#3}{#2}}%
      \beamer@tocifnothide{\ifnum\c@section=#1\beamer@toc@cs\else\beamer@toc@os\fi}%
      {
        \ifbeamer@pausesections\pause\fi%
        \usebeamertemplate{toc section itemsep}%
        {%
          \hbox{\vbox{%
              \def\beamer@breakhere{\\}%
              \beamer@tocact{\ifnum\c@section=#1\beamer@toc@cs\else\beamer@toc@os\fi}{section in toc}}}%
         \par%
        }%
      }%
    }
  }%
  \beamer@restoreanother%
  }
  \beamer@todo%
  \fi\fi%
}

\long\def\beamer@subsectionintoc#1#2#3#4#5#6{%
  \ifnum\c@tocdepth>1%
  \ifnum#5=\beamer@showpartnumber%
  {%
    \beamer@saveanother%
    \gdef\beamer@todo{}%
    \beamer@slideinframe=#1\relax%
    \expandafter\only\beamer@tocsections{\gdef\beamer@todo{%
      \ifbeamer@pausesubsections\pause\fi%
      \beamer@tempcount=#6%
      \advance\beamer@tempcount by\beamer@sectionadjust%
      \edef\inserttocsectionnumber{\the\beamer@tempcount}%
      \def\inserttocsubsectionnumber{#2}%
      \def\inserttocsubsection{\hyperlink{Navigation#4}{#3}}%
      \beamer@tocifnothide{\ifnum\c@section=#1\beamer@toc@css\else\beamer@toc@oss\fi}%
      {%
        \usebeamertemplate{toc subsection itemsep}%
        \def\beamer@breakhere{\\}%
        \beamer@tocact{\ifnum\c@section=#1\ifnum\c@subsection=#2\beamer@toc@css\else\beamer@toc@oss\fi\else\beamer@toc@ooss\fi}
        {subsection in toc}%
      }%
    }}%
    \beamer@restoreanother%
  }
  \beamer@todo%
  \fi\fi%
}

\long\def\beamer@subsubsectionintoc#1#2#3#4#5#6#7{%
  \ifnum\c@tocdepth>2%
  \ifnum#6=\beamer@showpartnumber%
  {
    \beamer@saveanother%
    \gdef\beamer@todo{}%
    \beamer@slideinframe=#1\relax%
    \expandafter\only\beamer@tocsections{\gdef\beamer@todo{%
      \ifbeamer@pausesubsections\pause\fi%
      \beamer@tempcount=#7%
      \advance\beamer@tempcount by\beamer@sectionadjust%
      \edef\inserttocsectionnumber{\the\beamer@tempcount}%
      \def\inserttocsubsectionnumber{#2}%
      \def\inserttocsubsubsectionnumber{#3}%
      \def\inserttocsubsubsection{\hyperlink{Navigation#5}{#4}}%
      \beamer@tocifnothide{\ifnum\c@section=#1\beamer@toc@csss\else\beamer@toc@osss\fi}%
      {%
        % <<<<<
        \beamer@tocact{\ifnum\c@section=#1\ifnum\c@subsection=#2\ifnum\c@subsubsection=#3\beamer@toc@csss\else\beamer@toc@osss\fi\else\beamer@toc@oosss\fi\else\beamer@toc@ooosss\fi}
        {toc subsubsection itemsep}%
        % =====
        %\usebeamertemplate{toc subsubsection itemsep}
        % >>>>>
        \def\beamer@breakhere{\\}%
        \beamer@tocact{\ifnum\c@section=#1\ifnum\c@subsection=#2\ifnum\c@subsubsection=#3\beamer@toc@csss\else\beamer@toc@osss\fi\else\beamer@toc@oosss\fi\else\beamer@toc@ooosss\fi}
        {subsubsection in toc}%
      }%
    }}%
    \beamer@restoreanother%
  }
  \beamer@todo%
  \fi\fi%
}

\makeatother

\setbeamertemplate{toc section itemsep}{\vskip1.5\baselineskip}
\setbeamertemplate{toc subsection itemsep}{\vskip1\baselineskip}
\setbeamertemplate{toc subsubsection itemsep}{\vskip0.5\baselineskip}

\begin{document}
\begin{frame}
\tableofcontents[hideallsubsections]
\end{frame}
\section{A}
\begin{frame}
\tableofcontents[hideothersubsections,sectionstyle=hide]
\end{frame}
\subsection{A1}
\begin{frame}
\tableofcontents[subsectionstyle=show/shaded/hide,sectionstyle=hide]
\end{frame}
\subsubsection{A1a}
\begin{frame}
\end{frame}
\subsubsection{A1b}
\begin{frame}
\end{frame}
\subsection{A2}
\begin{frame}
\end{frame}
\subsection{A3}
\begin{frame}
\end{frame}
\section{B}
\begin{frame}
\end{frame}
\end{document}

alt text

Permanenter link

beantwortet 09 Jul, 05:18

Henri's gravatar image

Henri
10.0k31730

bearbeitet 14 Sep, 04:51

@Henri Es gibt leider immer noch Verschiebungen, wenn ich auf einen späteren Folie den tableofcontents nochmal einbaue ist er verschoben. Soll ich dazu eine neue Frage aufmachen oder obiges Beispiel modifizieren?

(13 Sep, 09:34) tom75

@tom75 Mach am besten eine neue Frage. So bekommst du auf jeden Fall auch eine Antwort, falls ich es nicht hinbekommen sollte.

(13 Sep, 10:21) Henri
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs füge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×94
×6

Frage gestellt: 12 Mär, 07:20

Frage wurde angeschaut: 717 Mal

Zuletzt aktualisiert: 14 Sep, 04:51