Sie sind hier

Wie kann man auf den Inhalt von \title{} zugreifen?

Die Frage steht eigentlich schon im Betreff. Ich hatte bereits öfter das Problem, Informationen, die eigentlich schon in der Titelei enthalten sind, woanders im Dokument nochmal zu benötigen. Es muss da doch irgend eine einfache Methode geben an die ganzen Werte zu kommen...

Bild von Markus Kohm

Wie schon bei den Standardklassen existieren diese Inhalte nach dem Aufruf von \maketitle gar nicht mehr, weil ihre definierte und dokumentierte Funktion allein darin besteht, Elemente für \maketitle zu definieren. Das ist eines der großen Rätsel aus den Urzeiten von LaTeX: Warum zum Kuckuck werden hier die Argumente für \maketitle nicht als Argumente übergeben, sondern über eigene Anweisungen definiert? Ich vermute, dass die Antwort niemand kennt.

Aber es gibt natürlich eine ganz einfache Lösung: Man verwende das Universalmittel für mehrfach verwendete Informationen: \newcommand (ungetestet):

\documentclass{article}% Oder jede andere Klasse
\usepackage[ngerman]{babel}
\begin{document}
% Ich verwende hier \newcommand ausnahmsweise nach
% \begin{document}, damit auch Babel-Shortcuts verwendbar sind.
\newcommand*{\Titel}{Das ist der Dokument"=Titel}
\newcommand*{\Autor}{Jemand}
\title{\Titel}
\author{\Autor}
\maketitle
\section{"Uber den Autor}
\Autor{} hat "`\Titel"' geschrieben, weil er Lust dazu hatte.
\end{document}
Bild von Markus Kohm

Inzwischen vernichten die KOMA-Script-Klassen die gespeicherten Inhalte durch \maketitle nicht mehr. Allerdings ist es trotzdem nicht schön, auf die internen Makros zuzugreifen, in denen Title, Autor etc. gespeichert sind. Aber es ist möglich:

\documentclass{scrartcl}% Oder jede andere KOMA-Script-Klasse
\usepackage[ngerman]{babel}
\begin{document}
\title{Das ist der Dokument"=Titel}
\author{Jemand}
\maketitle
\section{"Uber den Autor}
\csname @author\endcsname{} hat "`\csname @title\endcsname"' geschrieben, weil er Lust dazu hatte.
\end{document}
Comments for "Wie kann man auf den Inhalt von \title{} zugreifen?" abonnieren