Labels zu Parts

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


ThoRie
Forum-Century
Forum-Century
Beiträge: 127
Registriert: Fr 12. Mai 2017, 11:57

Labels zu Parts

Beitrag von ThoRie »

Hallo,

ich glaube ich drehe bald durch. Überall im Internet steht, dass man auf Parts referenzieren kann, aber nirgends, wie man das anstellen soll. Ich habe es erst so versucht:

Code: Alles auswählen

\documentclass[ngerman]{scrbook}
\usepackage{nameref}
\begin{document}
\part{bla}
\chapter{bla}
\chapter{bla}
\nameref{bla2}

\part{bla2}\label{bla2}
\end{document}

Wie man sieht funktioniert das offensichtlich nicht. Ich frage mich jetzt nur zum einen warum und zum anderen, was ich jetzt machen muss, damit es geht ._.


Bartman
Forum-Meister
Forum-Meister
Beiträge: 2202
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Re: Labels zu Parts

Beitrag von Bartman »

Ich habe nur eine Antwort, wie man das macht: Ein Querverweis von einem Teil auf einen anderen wird erst dann ausgegeben, wenn das Verweisziel wenigstens ein Kapitel hat.

Code: Alles auswählen

\documentclass[ngerman]{scrbook}
\usepackage{babel}
\usepackage{nameref}

\begin{document}
\part{T1}
\chapter{K1}
\chapter{K2}
\nameref{t2}

\part{T2}
\label{t2}
\chapter{K1}
\end{document}

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2662
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Re: Labels zu Parts

Beitrag von KOMA »

ThoRie hat geschrieben:
Do 23. Jul 2020, 22:39

Code: Alles auswählen

\documentclass[ngerman]{scrbook}
\usepackage{nameref}
\begin{document}
\part{bla}
\chapter{bla}
\chapter{bla}
\nameref{bla2}

\part{bla2}\label{bla2}
\end{document}

Du setzt hier das Label zu einem Zeitpunkt, wenn \part die Seite bereits vollständig ausgegeben hat. Danach wird bei Dir nichts mehr ausgegeben. Da \label aber das Label wegen der Seitenreferenz erst mit Ausgabe der nächsten Seite in die aux-Datei schreibt und eben keine Seite mehr ausgegeben wird, wird auch kein Label mehr in die aux-Datei eingetragen. Das ist, wie wenn Du selbst ein \label nach einem abschließenden \clearpage vor \end{document} setzen würdest. Auch das ginge verloren. Um ein Label zu erhalten, würde es also bereits genügen, den Teil mit ein klein wenig Inhalt zu füllen:

Code: Alles auswählen

\documentclass{scrbook}% Die ohnehin nicht verwendete Option habe ich entfernt.
\usepackage{nameref}
\begin{document}
\part{bla}
\chapter{bla}
\chapter{bla}
\nameref{bla2}

\part{bla2}\label{bla2}
Inhalt
\end{document}

Gibt man nun allerdings zusätzlich mit \pageref die Seitenreferenz aus, wird man sehen, dass diese nicht, wie erwartet, Seite 7, sondern Seite 9 referenziert. Hier wird endgültig klar, dass das Label zu spät kommt.

Bei den Standardklassen bliebe zum Setzen der Labels nur, es in das Argument von \part zu verschieben:

Code: Alles auswählen

\documentclass{book}
\usepackage{nameref}
\begin{document}
\part{bla}
\chapter{bla}
\chapter{bla}
\nameref{bla2} auf Seite~\pageref{bla2}.

\part{bla2\label{bla2}}
Inhalt
\end{document}

Keine Sorge, das Label richtet im Inhaltsverzeichnis keinen Schaden an. Diese Methode funktioniert auch bei KOMA-Script. Man kann damit das Label alternativ aber auch per Präambel setzen:

Code: Alles auswählen

\documentclass{scrbook}
\usepackage{nameref}
\begin{document}
\part{bla}
\chapter{bla}
\chapter{bla}
\nameref{bla2} auf Seite~\pageref{bla2}.
\setpartpreamble{\label{bla2}}
\part{bla2}
Inhalt
\end{document}

Mein Tipp: Bei einem Label immer überlegen: Was passiert genau davor? Worauf bezieht sich das Label? Dasselbe gilt für Anweisungen wie \addcontentsline etc. Ich habe beispielsweise auch schon gesehen, dass Leute damit eine nicht nummerierte Teile-Überschrift nach \part* ins Inhaltsverzeichnis eingetragen und gar nicht bemerkt haben, dass damit die falsche Seite eingetragen wird. Bei KOMA-Script würde man dafür natürlich besser \addpart oder die erweiterte Form von \part mit Option nonumber=true verwenden.


Antworten