In LaTeX mit Varioref/Fancyref automatisch »ab Seite« statt »auf Seite« setzen

Die LaTeX-Pakete fancyref (von Axel Reichert) und durch die Paketoption vario auch varioref (von Frank Mittelbach) bieten Autoren einen erheblichen Komfort beim Schreiben von Texten: Aus einem einfach referenzieren eines Ankers mit einem Befehl wie \fref{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. Nun machte mich meine Lektorin darauf aufmerksam, ich solle doch bitte, wenn ich auf Kapitel verweise, nicht »auf Seite 123« schreiben, sondern »ab Seite 123,« da das Kapitel ja erheblich länger ist und ich durch »auf« doch eine gewisse räumliche Nähe suggerierte.

Als langjährigem LaTeX-Nutzer wäre es mir nun ein Graus, das händisch überall durchführen zu müssen und den doppelten Code zu schreiben:

[tex light=“1″ wraplines=“1″]\fref[plain]{cha:anderes-kapitel} ab Seite~\pageref{cha:anderes-kapitel}[/tex]

Was Sie von den LaTeX-Paketen fancyref und varioref haben, können Sie in meinem Buch »Wissenschaftliche Arbeiten schreiben mit LaTeX« lernen.

Die Lösung fand ich nach ein wenig Suchen im Quelltext der beiden oben angesprochenen Pakete und war angenehm überrascht, dass es relativ einfach von statten geht. Wenige Befehle in der Präambel reichen bereits aus:

[tex highlight=“7,8-19″]
\documentclass[b6paper]{scrbook}
\usepackage{geometry}
\usepackage[ngerman]{babel}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{ifthen,hyperref}
\usepackage[german,vario]{fancyref}
\fancyrefchangeprefix{\fancyrefchaplabelprefix}{cha}
\makeatletter
\let\@f@ref@sav=\@f@ref
\renewcommand*{\@f@ref}[4]{%
\def\@curtlabtype{#3}%
\protect\@f@ref@sav{#1}{#2}{#3}{#4}%
}%
\addto\extrasngerman{%
\renewcommand\reftextfaraway[1]{%
\ifthenelse{\equal{\@curtlabtype}{cha}}{ab Seite}{auf Seite}~\pageref{#1}}%
}
\makeatother

\begin{document}
\chapter{Ein Kapitel}
\label{cha:ein-kapitel}
Sehen wir später in \fref{cha:noch-ein-kapitel}.\\
Sehen wir später in \fref{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 \fref{cha:ein-kapitel}.\\
Sahen wir vorher in \fref{sec:ein-unterkapitel}.
\section{Noch ein Unterkapitel}
\label{sec:noch-ein-unterk}
Blabla.
\end{document}
[/tex]

Laden Sie zunächst in Zeile 7 das Paket fancyref mit der Option vario fürs automatische Einfügen der Seitenzahlen und der Option german für deutsche Sprache. In der darauf folgenden Zeile stelle ich den Präfix für Kapitelanker um, da mein Lieblingseditor Emacs halt »cha« verwendet.

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 9 und 19.

Die Zeilen 10 bis 14 verändern den Befehl \@f@ref 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 Ankerpräfix »cha« lautet, ansonsten das normale »auf Seite.« Und das war’s auch schon. Das Ergebnis sehen Sie in der erstellten PDF-Datei:abseite.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.

Sie wollen jetzt wissen, wie Sie mit den LaTeX-Paketen fancyref und varioref umgehen? Dann empfehle ich Ihnen mein Buch »Wissenschaftliche Arbeiten schreiben mit LaTeX« mit allem, was ein schönes Dokument ausmacht.

Wenn Ihnen dieser Beitrag gefallen hat, empfehlen Sie mich doch bitte weiter.

Teilen & Verweilen

Kommentare

2 Antworten zu „In LaTeX mit Varioref/Fancyref automatisch »ab Seite« statt »auf Seite« setzen“

  1. Genial! :) Aber leider bekomme ich es bei meinen eigenen Querverweisen nicht hin. :) Bsp. für einen eigenen Querverweis:

    \usepackage[english,german,vario]{fancyref}

    \newcommand*{\fancyrefuabschlabelprefix}{uabsch}
    \newcommand*{\uabschnittname}{Unterabschnitt}
    \frefformat{plain}{\fancyrefuabschlabelprefix}{%
    \MakeUppercase{\uabschnittname}\fancyrefdefaultspacing#1#2%
    }%
    \Frefformat{plain}{\fancyrefuabschlabelprefix}{%
    \MakeUppercase{\uabschnittname}\fancyrefdefaultspacing#1#2%
    }%
    \Frefformat{plain}{\fancyrefuabschlabelprefix}{Unterabschnitt~#1}
    \frefformat{plain}{\fancyrefuabschlabelprefix}{Unterabschnitt~#1}

    \frefformat{vario}{\fancyrefuabschlabelprefix}{%
    \MakeUppercase{\uabschnitt}\fancyrefdefaultspacing#1#2%
    }%
    \Frefformat{vario}{\fancyrefuabschlabelprefix}{%
    \MakeUppercase{\Uabschnittname}\fancyrefdefaultspacing#1#2%
    }%
    \Frefformat{vario}{\fancyrefuabschlabelprefix}{Unterabschnitt~#1 auf Seite #2}
    \frefformat{vario}{\fancyrefuabschlabelprefix}{Unterabschnitt~#1 auf Seite #2}

    Meine eigenen Querverweise (Kapitel, Unterkapitel, Abschnitt, Unterabschnitt) funktionieren wunderbar, aber irgendwie will es mir nicht gelingen, auch noch „ab Seite“ reinzubringen. Wie könnte es gehen?

    Beste Grüße

    JF

    1. Was hast du denn versucht? Wie sieht das vollständige Minimalbeispiel aus? Gerne per Mail oder als Link in den Kommentar (nicht einfach ganz reinkopieren).

Schreiben Sie einen Kommentar

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