PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Cmd für "Abb.x S.x" einfügen anlegen



aistudy
23-02-2010, 09:37
Hallo,

ich habe mir einen neuen Befehl erstellt der mir im Text den Text "Abb. x S. x" einfügt, falls die Abbildung auf einer anderen Seite ist als der refenzierende Text und nur "Abb. x" falls dieser sich auf der gleichen Seite befindet.

Zunächst hat das ganze auch sehr gut funktioniert, jetzt habe ich jedoch festgestellt, dass falls ein Absatz mit einer Referenz über eine Seite hinaus geht und sich die Referenz auf der zweiten Seite befindet immer noch angenommen wird, es wäre die alte Seite. Ist auf der Seite zunächst ein Floatobjekt welches zum letzten Absatz gehört ist dies genauso.

Dann wird trotzdem "Abb. x S.x" angezeigt obwohl sich das Bild und der Text auf der gleichen Seite befinden.

Ich habe versucht ein Minimalbeispiel zu erstellen bei dem dieses Problem auftritt, leider ist es mir nicht gelungen. Deshalb habe ich ein Bild einer der betreffenden Seiten meines Dokumentes als Anhang angefügt, auf dem zu erkennen ist das am Seitenanfang \thepage immernoch den Wert der letzten Seite hat und dadurch die Bedingung meines Befehls annimmt das Bild sei auf einer anderen Seite als der Text.

Hier der Befehl in dem ich \thepage und \pageref zum vergleichen der Seite verwende:

\newcommand{\picref}[1]{%
(Abb. {\ref{fig:#1}}%
\ifthenelse{\equal{\thepage}{\pageref{fig:#1}}}%Ve rgleich aktuelle Seitenzahl und Seitenzahl der Abbildung
{}%wenn gleich zeige keine Seite an
{ S. {\pageref{fig:#1}}}%wenn ungleich zeige Seite an
)
}

Ist es möglich den Vergleich der Seitenzahl zuverlässiger zu machen um diesen Fehler zu vermeiden?

LuPi
23-02-2010, 09:42
Warum das Rad neu erfinden? Dafür gibt es fertige Pakete, beispielsweise fancyref.

Xenara
23-02-2010, 10:00
Ich verwende varioref (http://www.ctex.org/documents/packages/bibref/varioref.pdf) mit eigener Definition fürs Referenzieren, z.B. so:


\documentclass[ngerman]{scrartcl}
\usepackage[ngerman]{babel}
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{varioref} % Für die schicken Verweise mit "auf dieser Seite", "auf der nächsten Seite"

\usepackage{hyperref}

%% Setzt mit dem Befehl \myref{label} automatisch "Abbildung 1.2 auf dieser Seite" etc.
%% Es verwendet für die Ausgabe von "Abbildung 1.2" den autoref-Befehl aus hyperref.
%% Für den Verweis auf die Seite wird der vpageref-Befehl aus varioref verwendet.
%% Dieser erkennt, ob das label auf der selben Seite, der nächsten oder weiter weg ist
%% und setzt dementsprechend "auf dieser Seite", "auf Seite 8"...
%\newcommand{\myref}[1]{\autoref{#1}\vpageref[\hspace*{-.8ex}]{#1}}
%% Für das \vpageref wurde das optionale Argument so gesetzt, dass wenn die Abbildung
%% auf der gleichen Seite ist wie der Verweis, nichts ausgegeben wird.
%% Der negative hspace musste sein, da normalerweise automatisch ein Leerzeichen gesetzt wird,
%% sobald das optionale Argument auch nur als [] angegeben wird.

% Variante, sodass "auf dieser Seite" angezeigt wird:
\newcommand{\myref}[1]{\autoref{#1}\vpageref{#1}}



% "Abbildung" wird zu "Abb.", "Tabelle" wird zu "Tab."
\addto\captionsngerman{%
\renewcommand{\figurename}{Abb.}
\renewcommand{\tablename}{Tab.}}

\usepackage{blindtext}

\begin{document}

\section{Section 1}
\label{label1}

blablabla \myref{label1}

\blindtext[3]

\section{Section 2}
\label{label2}

blablabla \myref{label1}

\blindtext[3]

\section{Section 3}
\label{label3}

blablabla \myref{label1}

blablabla \myref{label5}


\blindtext[3]

\section{Section 4}
\label{label4}

blablabla \myref{label5}

\blindtext[8]


\section{Section 5}
\label{label5}

blablabla \myref{label5}



\end{document}


(Es sind zwei newcommands für myref drin, einmal mit "auf dieser Seite" und einmal ohne, man muss entweder das eine oder das andere ein/auskommentieren.
Da ich viele Verweise, v.a. Bilder, auf der gleichen Seite hatte, fand ich es albern, jedesmal "auf dieser Seite" stehen zu haben.

aistudy
23-02-2010, 10:34
Hallo,

danke für die Antworten.

Puh für einen Latex-Anfänger ist das ganz schön happig. ^^
Habe mir die beiden Dokus durchgelesen und fancyref scheint mehr Optionen zu bieten varioref dafür etwas einfacher zu sein. Jedoch verstehe ich bei beiden nicht ganz wie ich auf mein gewünschtes Ausgabeformat "Abb. x S. x" statt den ausgeschriebenen Varianten komme.

@Xenara: In deinem Beispiel bekomme ich nur folgende Ausgabe: "Abbildung 1 auf der nächsten Seite" und "Abbildung 1" falls diese auf der gleichen Seite ist.

Kann mir jemand helfen wie ich die Texte für die Abbildung und die Seite ändere?

Danke