Querverweis - Foto von Ingy The Wingy auf Flickr

In LaTeX mit Cleveref & Varioref »ab Seite« statt »auf Seite« setzen

Die LaTeX-Pakete cleveref (von Toby Cubitt) und varioref (von Frank Mittelbach) bieten Autoren einen erheblichen Komfort beim Schreiben von Texten: Aus einem einfach referenzieren eines Ankers mit einem Befehl wie \vref{sec:anderer-teil} generiert das Paket einen wunderschöne benannten Querverweis »Abschnitt 3.3 auf Seite 123« inklusive der Seitenzahl. Das Paket kann auch selbst erkennen, auf was da verwiesen wird, zum Beispiel Kapitel.

In einem früheren Blogpost über fancyref und varioref können Sie lesen, wie Sie für Verweise auf Kapitel statt »auf Seite 123« automatisch »ab Seite 123« schreiben, da das Kapitel ja erheblich länger ist und das Wort »auf« doch eine gewisse räumliche Nähe suggeriert.

Kapitel sind länger als nur eine Seite – der Querverweis sollte das zeigen

Da mich einige Nachfragen erreichten, wie das ganze denn mit dem neueren Paket cleveref funktioniere. Hier gibt’s die Lösung:

 \documentclass[b6paper,ngerman]{scrbook}
 \usepackage{geometry}
 \usepackage{babel}
 \usepackage[T1]{fontenc}
 \usepackage[utf8]{inputenc}
 \usepackage{ifthen}
 \usepackage{varioref}
 \usepackage{hyperref}
 \usepackage{cleveref}
 \makeatletter
 \def\curtlabtype{}% << define temporary variable
 \let\@old@cref@vref\cref@vref% << save cleveref's definition
 \def\cref@vref#1#2{% << modify cleveref's definition
 \cref@gettype{#2}{\curtlabtype}% << get type of label
 \@old@cref@vref{#1}{#2}}% << call original macro
 \vref@addto\extrasngerman{% << modify varioref macros
 \def\reftextfaraway#1{% << only change far away references
 \ifthenelse{\equal{\curtlabtype}{chapter}}{ab Seite}{auf
 Seite}~\pageref{#1}}}%
 \makeatother
\begin{document}
 \chapter{Ein Kapitel}
 \label{cha:ein-kapitel}
 Sehen wir später in \vref{cha:noch-ein-kapitel}.\\
 Sehen wir später in \vref{sec:noch-ein-unterk}.
 \section{Ein Unterkapitel}
 \label{sec:ein-unterkapitel}
 Blabla.
 \chapter{Noch ein Kapitel}
 \label{cha:noch-ein-kapitel}
 Sahen wir vorher in \vref{cha:ein-kapitel}.\\
 Sahen wir vorher in \vref{sec:ein-unterkapitel}.
 \section{Noch ein Unterkapitel}
 \label{sec:noch-ein-unterk}
 Blabla.
 \end{document}

So geht’s

Das Prinzip ist dasselbe wie bei der Lösung für fancyref, nur eben mit den Befehlen für cleveref. Wichtig ist, dass die Pakete varioref, hyperref und cleveref genau in dieser Reihenfolge geladen werden. Die Sprache sollten Sie als Option der Dokumentklasse mitgeben, da sowohl cleveref als auch babel diese Information benötigen.

Da Sie für die eigentliche Anpassung Makros mit einem @ im Namen brauche, packen Sie den Code in zwischen die Befehle \makeatletter und \makeatother in den Zeilen 10 und 20.

Die Zeilen 12 bis 15 verändern den Befehl \cref@vref und fügen einen Merker für den momentan erkannten Ankertyp zu. Diesen brauchen Sie dann im nächsten Befehl.

Nun verändern Sie für die Sprache ngerman ein weitere Makro namens \reftextfaraway. Im Original schreibt dieses für weiter als eine Seite entfernte Querverweise den Text »auf Seite«. Sie fügen nun eine Verzweigung ein, die »ab Seite« einfügt, wenn der Anker auf ein Kapitel verweist, ansonsten das normale »auf Seite.« Und das war’s auch schon. Das Ergebnis sehen Sie in der erstellten PDF-Datei: abseitecr.pdf und in den folgenden zwei Zeilen:

Sehen wir später in Kapitel 2 ab Seite 3.

Sehen wir später in Abschnitt 2.1 auf Seite 3.

Da ich niemals auf ganze Teile eines Buchs verweise, sondern nur auf Kapitel oder darunter, reicht dies aus.

[latexbuchamz]

Sie wollen jetzt wissen, wie Sie mit den LaTeX-Paketen für Querverweise umgehen? Dann empfehle ich Ihnen mein Buch »Wissenschaftliche Arbeiten schreiben mit LaTeX« mit allem, was ein schönes Dokument ausmacht. Cleveref wird in der (zum Zeitpunkt dieses Blogposts noch nicht terminierten) fünften Auflage besprochen werden.

Foto: Ingy The Wingy auf Flickr, Lizenz CC-BY-ND.

Teilen & Verweilen

Kommentare

2 Antworten zu „In LaTeX mit Cleveref & Varioref »ab Seite« statt »auf Seite« setzen“

  1. Linktracker: http://texwelt.de/wissen/fragen/7013/vref-in-den-appendix

    Die Anpassung von cleveref&varioref erzeugt beim ersten Durchlauf Fehler und erkennt Verweise in den Anhang nicht. Der „Bugfix“ von Clemens auf texwelt.de vermeidet die Fehler und fügt eine Abfrage beim \curtlabtype nach den Labeltyp „appendix“ ein.

    1. Danke sehr! Das war mir noch nicht bewusst – mit Anhang hatte ich nicht getestet. Wird korrigiert.

Schreiben Sie einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert