Fancy Ref ohne "auf der nächsten Seite" etc.

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


ierdsebulli
Forum-Newbie
Forum-Newbie
Beiträge: 2
Registriert: Sa 3. Jul 2010, 14:53

Fancy Ref ohne "auf der nächsten Seite" etc.

Beitrag von ierdsebulli »

Hallo,

ich schreibe zur Zeit meine Bachelorarbeit in Latex, und verwende zum Referenzieren das Paket fancyref. Dabei stört mich allerdings die Verwendung von "auf der nächsten Seite", bzw. "auf der vorherigen Seite".

Kurz: die Referenzierung soll die Seiten immer mit der Seitenzahl angeben, außer wenn das referenzierte Objekt auf der aktuellen Seite ist. Dann soll die Seitenangabe gänzlich entfallen.

Kann ich das irgendwie mit fancyref hinkriegen, oder muss ich ein anderes Paket verwenden?

Gruß,

ierdsebulli

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

Beitrag von KOMA »

Wenn ich richtig verstehe, was Du willst, dann geht das mit Hilfe des Pakets zref:
\documentclass{article}
\usepackage[abspage,user]{zref}
\usepackage[ngerman]{babel}
\usepackage{blindtext}
\newcounter{samepage}
\makeatletter
% Note: Alle hier verwendeten zref-Befehle und Module sind in der
%       zref-Anleitung dokumentiert! Es werden die Module abspage
%       und user benötigt, die oben per Option geladen werden.
\newcommand*{\ifsamepage}[1]{%
  \stepcounter{samepage}\zlabel{samepage.\arabic{samepage}}%
  \zref@refused{#1}% zref mitteilen, dass das Label benutzt wurde
  \zref@refused{samepage.\arabic{samepage}}% dito
  \edef\samepageA{\zref@extract{#1}{abspage}}%
  \edef\samepageB{\zref@extract{samepage.\arabic{samepage}}{abspage}}%
  \ifnum \zref@extract{#1}{abspage}
         = \zref@extract{samepage.\arabic{samepage}}{abspage}
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
}
\makeatother
\newcommand*{\xpageref}[2][\ignorespaces]{%
  \ifsamepage{#2}{#1}{Seite~\zpageref{#2}}%
}

\begin{document}
Hier ein Label\zlabel{LabelA}.
Siehe auch \xpageref[auf dieser Seite]{LabelA} und \xpageref{LabelB}.

Labels auf anderen Seiten: \xpageref{LabelA} \xpageref{LabelB}.

\blinddocument\zlabel{LabelB}.
\end{document}
Es sei darauf hingewiesen, dass bei dieser Lösung für jeden Aufruf von \xpageref ein Label angelegt wird. Außerdem werden ggf. mehrere LaTeX-Läufe benötigt, bis sich das ganze stabilisiert, weil ja jeder Aufruf von \xpageref den Text und damit den Umbruch und damit ggf. das Ergebnis anderer \xpageref-Anweisungen verändern kann. Das kann im Extremfall auch zu einer nie terminierenden Suche werden.

Antworten