
Allgemeine Beschreibung des Problems
Ich habe einen Anhang, dessen Abschnittsnamen mit den Abschnittsnamen des Hauptteils der Dissertation identisch sein müssen. Dafür habe ich den \nameref
Befehl des Pakets verwendet nameref
.
[...]
\mainmatter
\section{My section name}
\label{mySection}
[...]
\appendix
\section{\nameref{mySection}}
[...]
Das funktioniert. Allerdings soll die Kopfzeile der linken Seite in der Buchklasse den Namen des ersten Abschnitts der Seite anzeigen. Bei Verwendung \nameref
wird die Kopfzeile ??
anstelle des Abschnittsnamens angezeigt. Warum verhält es sich so? Wie kann ich das umgehen?
Einfaches Beispiel
Erstellen Sie beispielsweise eine neue Datei main.tex
mit
\documentclass[10pt,a4paper]{book}
\usepackage{nameref}
\begin{document}
\section{Alice in wonderland}
\label{section:alice}
\pagebreak
a %Dummy text otherwise calling \pagebreak twice only skips one page
\pagebreak %Need to skip two pages, not just one because only the header of the left page of the book class displays the section name, not the one of the right page
%\section{Alice in wonderland} %Writes the header correctly
\section{\nameref{section:alice}} %Header shows "??"
\end{document}
Kompilieren Sie mit pdflatex main.tex
. Oben auf der dritten Seite wird die Kopfzeile 0.2 ??
anstelle von angezeigt 0.2 ALICE IN WONDERLAND
.
Antwort1
Standardmäßig book
schreibt die Klasse alle Header groß. Die Art und Weise, wie diese Großschreibung funktioniert, bedeutet, dass beim \nameref{section:alice}
Schreiben in den Header die eigentlichen Daten
\nameref{SECTION:ALICE}
Dies ist ein Verweis auf ein unbekanntes Label, das wir auch im Log des MWE sehen
LaTeX Warning: Reference `SECTION:ALICE' on page 3 undefined on input line 17
Eine schmutzige Lösung wäre, \label{SECTION:ALICE}
stattdessen tatsächlich zu verwenden.
Heutzutage kann die Verwendung von Überschriften in reinen Großbuchstaben als Geschrei aufgefasst werden, daher deaktiviere ich normalerweise einfach die automatische Großschreibung.
Normalerweise verwende ich die book
Klasse nie, sondern die memoir
Klasse, die die nameref
Funktion eingebaut hat, wie \titleref
. Außerdem memoir
ist es sehr einfach, die standardmäßige Großschreibung zu deaktivieren über
\nouppercaseheads
\pagestyle{headings} % reactivate the page style (\nou.. changes an internal macro in the headers, thus the header macros has to be applied again)
Die memoir
Klasse kann als Drop-In-Ersatz für die book
Klasse verwendet werden.
Antwort2
Sie könnenDiego Dias‘ Trick hierdas ist vom refcount
Paket inspiriert.
\documentclass[10pt,a4paper]{book}
\usepackage{nameref}
\makeatletter
\newcommand{\getnamereftext}[1]{%
\@ifundefined{r@#1}{}{%
\unexpanded\expandafter\expandafter\expandafter{%
\expandafter\expandafter\expandafter\@thirdoffive\csname r@#1\endcsname
}%
}%
}
\makeatother
\begin{document}
\section{Alice in wonderland}
\label{section:alice}
\clearpage
a %Dummy text otherwise calling \pagebreak twice only skips one page
\clearpage %Need to skip two pages
\section{\getnamereftext{section:alice}}
\end{document}
Antwort3
Ihr \nameref{}
, das ähnlich funktioniert wie \label{}
muss außerhalb des \section{}
Befehls stehen:
\section{\nameref{section:alice}} %Header shows "??"
\section{ Alice in Wonderland} \nameref{section:alice} %works, returns label
Wie von daleif angemerkt: Sowohl \label{}
als auch \nameref{}
in Großbuchstaben zu setzen funktioniert perfekt als schmutziger Workaround, ohne den Inhalt von zurückzugeben\label{}