correct beamer multicol tableofcontents with page numbers

Layout von Seiten, Rändern, Fusszeilen, usw, modifizieren


hans1967
Forum-Anfänger
Forum-Anfänger
Beiträge: 22
Registriert: Di 10. Mär 2015, 15:24

correct beamer multicol tableofcontents with page numbers

Beitrag von hans1967 »

Hallo zusammen,

Das Vorhaben, in LaTeX Beamer ein Inhaltsverzeichnis über zwei Spalten inklusive Seitenzahlen zu realisieren, scheint in greifbarer Nähe. Leider klappt es noch nicht ganz.

meine Frage bezieht sich u.a auf folgenden Forenthread:
http://tex.stackexchange.com/questions/ ... ge-numbers

Wie mein Minimalbeispiel zeigt, gerät das Ergebnis inkonsistent:
\documentclass[xcolor=dvipsnames]{beamer}

\usepackage{/usr/share/texmf/tex/latex/beamer/themes/color/BeamerColor}
\usepackage[size=a4,scale=0.5]{beamerposter}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[latin1]{inputenc}
\usepackage[german]{babel}
\usepackage{graphicx}
\usepackage{ragged2e}
\usepackage{multicol}
\usepackage{etoolbox}

\usefonttheme{serif}

\useoutertheme{miniframes}

\setbeamerfont{headline}{size=\small,family=\sffamily}
\setbeamerfont{footline}{size=\small,family=\sffamily}
\setbeamerfont{title}{size=\Huge,family=\sffamily,series=\bfseries}
\setbeamerfont{subtitle}{size=\huge,family=\sffamily,series=\bfseries}
\setbeamerfont{author}{size=\huge,family=\sffamily,series=\bfseries}
\setbeamerfont{date}{size=\LARGE,family=\sffamily,series=\bfseries}
\setbeamerfont{institute}{size=\LARGE,family=\sffamily,series=\bfseries}

\setbeamersize{sidebar width left=2.0cm,sidebar width right=2.0cm}



    \defbeamertemplate*{footline}{my footline}
    {%
    \hbox{\begin{beamercolorbox}[wd=27cm,ht=0cm,dp=1cm,leftskip=2.5cm]{title in head/foot}%
        \hyperlink{GO_HERE}{zum Inhaltsverzeichnis}\hfill\insertframenumber
      \end{beamercolorbox}}%
      \vskip0pt%
    }
    \usebeamertemplate{my footline}



\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}%
      \addtocontents{toc}{\protect\beamer@sectionintoc{\the\c@section}{#2\hfill\the\c@page\rightskip4cm}{\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}%
      \addtocontents{toc}{\protect\beamer@subsectionintoc{\the\c@section}{\the\c@subsection}{#2\hfill\the\c@page}{\the\c@page}{\the\c@part}{\the\beamer@tocsectionnumber}\rightskip4cm}%
    }%
    \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



\setbeamertemplate{navigation symbols}{}


\author{Max Mustermann}
\title{Beamer-Book}
\subtitle{how to abuse Beamer to write a book}
\date{first edition 2015}
\institute{try crazy things corp.}

\begin{document}


\begin{frame}[plain]
    \titlepage
\end{frame}



\begin{frame}[label=GO_HERE]{\contentsname}
\begin{multicols}{2}
\tableofcontents
\end{multicols}
\end{frame}



\section{preface}
\section{chapter1}
\subsection{subchapter1.1}
\subsection{subchatper1.2}
\section{chapter2}
\subsection{subchapter2.1}
\subsection{subchapter2.2}
\section{chapter3}
\subsection{subchapter3.1}
\subsection{subchapter3.2}
\section{chapter4}
\subsection{subchapter4.1}
\subsection{subchapter4.2}
\section{chapter5}
\subsection{subchapter5.1}
\subsection{subchapter5.2}
\addtocontents{toc}{\newpage}
\section{chapter6}
\subsection{subchapter6.1}
\subsection{subchapter6.2}
\section{chapter7}
\subsection{subchapter7.1}
\subsection{subchapter7.2}
\section{chapter8}
\subsection{subchapter8.1}
\subsection{subchapter8.2}
\section{chapter9}
\subsection{subchapter9.1}
\subsection{subchapter9.2}
\section{infos}
\subsection{links}
\subsection{literature}



\begin{frame}
\frametitle{frametitle}
\begin{columns}
\begin{column}{12cm}
example text
\end{column}
\begin{column}{12cm}
example text
\end{column}
\end{columns}
\end{frame}


\end{document}
erstens tanzen die Seitenzahlen der ersten drei TOC-items aus der Reihe
zweitens weichen die Zeilenabstände der ersten und zweiten Kolumne voneinander ab

vielen Dank für eure Aufmerksamkeit,

best regards,

hans1967

hans1967
Forum-Anfänger
Forum-Anfänger
Beiträge: 22
Registriert: Di 10. Mär 2015, 15:24

Beitrag von hans1967 »

Hallo zusammen,

Die beschriebenen Probleme konnten zu meiner Zufriedenheit gelöst werden...

Die Seitenzahlen in TOC kommen folgendermaßen in Reih' und Glied:
\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}%
      \addtocontents{toc}{\protect\beamer@sectionintoc{\the\c@section}{#2\hfill\the\c@page}{\the\c@page}{\the\c@part}%
        {\the\beamer@tocsectionnumber\rightskip4cm}}}%
    {\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}%
      \addtocontents{toc}{\protect\beamer@subsectionintoc{\the\c@section}{\the\c@subsection}{#2\hfill\the\c@page}{\the\c@page}{\the\c@part}{\the\beamer@tocsectionnumber}\rightskip4cm}%
    }%
    \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
In der Box befindet sich lediglich der Code-Ausschnitt, der in meinem Minimalbeispiel zu ersetzen ist.

Ein funktionierender WorkAround für die vertikale Justierung der Zeilen und Zeilenabstände in TOC findet sich hier:
http://tex.stackexchange.com/questions/ ... column-toc

Es ist zwar ein Hack, aber besser als nix. Anfangs kam folgende Fehlermeldung bei Kompilierung des zweiten unter obigem Link gelisteten Lösungs-Minimalbeispiels: "Dimension too large". Irgendeine der folgenden Aktionen brachte schließlich den Erfolg: Kolumnenmodus auskommentieren, Neukompilieren, wieder einkommentieren und/oder die 3cm unter \vskip runterskalieren, ferner mal alle Hilfsdateien außer *.tex einschließlich *.pdf löschen und neukompilieren. Auch die 3cm unter \vskip wurden vom Kompiler hernach anstandslos akzeptiert.

best regards,

hans1967

Antworten