# Make ToC in the center and left aligned in beamer

Using the following code I could put the ToC lines in the center in beamer:

\begin{frame}
\begin{center}
\tableofcontents
\end{center}
\end{frame}


But how to make these ToC lines left aligned and still in the center?

-
You can only put the \tableofcontents inside a minipage-environment which can be centered via \centering. –  Marco Daniel Dec 10 '11 at 17:12
The question tex.stackexchange.com/questions/47702/… contains a fairly simple solution (manually calculated though) –  naught101 May 2 '12 at 0:27

A small calculation could advance the margins sufficiently to obtain the centered & left-aligned \tableofcontents display.

\documentclass{beamer}% http://ctan.org/pkg/beamer
\newsavebox{\longestsec}% Box to save longest sectional heading
\begin{document}

\begin{frame}
\begin{lrbox}{\longestsec}Last section in the presentation\end{lrbox}% Capture longest title
\tableofcontents
\end{frame}

\section{First section}
​\begin{frame}
\frametitle{First slide}
This is a slide.
\end{frame}

\section{Last section in the presentation}% Longest sectional title
\begin{frame}
\frametitle{Another slide}
This is another slide
\end{frame}
\end{document}


​The reason for this round-about way is because beamer collapses the spacing when putting \tableofcontents within a minipage or varwidth (from the varwidth package).

Here is an automated way of capturing the width of the longest section:

\documentclass{beamer}% http://ctan.org/pkg/beamer
\usepackage{etoolbox}% http://ctan.org/pkg/etoolbox
\makeatletter
\newlength{\secnamelength}
\newsavebox{\longestsec}% Box to save longest sectional heading
\patchcmd{\beamer@section}% <cmd>
{\beamer@savemode}% <search>
{\begin{lrbox}{\longestsec}#1\end{lrbox}%
\ifdim\wd\longestsec>\secnamelength\relax\setlength{\secnamelength}{\wd\longestsec}\fi%
\beamer@savemode}% <replace>
{}{}% <success><failure>
\AtEndDocument{% http://tex.stackexchange.com/q/137495/5764
\immediate\write\@auxout{\global\secnamelength=\the\secnamelength}%
}
\makeatother
\begin{document}

\begin{frame}
\tableofcontents
\end{frame}

\section{First section}
​\begin{frame}
\frametitle{First slide}
This is a slide.
\end{frame}

\section{Last section in the presentation}% Longest sectional title
\begin{frame}
\frametitle{Another slide}
This is another slide
\end{frame}
\end{document}


The above stores the length of the longest section in \secnamelength that is written to the .aux at the end of the document. A patch of \beamer@section (with the aid of etoolbox is necessary to grab the maximum length of a section name and drop it into the .aux \AtEndDocument so it can be retrieved in a successive run.

-
Great. But is it possible to automatically find out the longest sectional title? –  Z.H. Dec 16 '11 at 12:07
Is this still a valid solution? Doesn't work in my texlive 2012 ... –  BandGap Oct 11 '13 at 16:12
@Z.H.: A little late, but added the automation procedure. –  Werner Oct 12 '13 at 18:05
@BandGap: Yes, and I've just added some automation. What is the problem you're experiencing with the above MWE? –  Werner Oct 12 '13 at 18:06
@Werner Thanks. I love this solution. –  Z.H. Oct 13 '13 at 8:28