Wenn man in einer figure-Umgebung \label vor \caption setzt, gibt \ref die falsche Nummer wieder. Wieso?

Beispieldokument:

\documentclass{article}
\begin{document}
\section{Bla bla}
Ein Abschnitt mit Abbildung~\ref{fig:abbildung}.

\begin{figure}
\label{fig:abbildung}
...
\caption{Meine Abbildung}
\end{figure}

\end{document}

gefragt 10 Jun '13, 12:40

cgnieder's gravatar image

cgnieder
22.1k253463
Akzeptiert-Rate: 60%

bearbeitet 14 Okt '13, 00:54


Der \caption-Befehl aktualisiert die interne Referenz, welche von \label verwendet wird, also er erhöht den Tabellen- bzw. Abbildungszähler und weist ihn zu. Daher muss er vor \label stehen.

Wenn man zuerst \label aufruft, dann bezieht LaTeX sich auf die letzte gesetzte interne Referenz, was im angegeben Beispiel die section ist, daher liefert \ref hier die section-Nummer.

Eine verbreitete Praxis ist daher auch, \label innerhalb des \caption-Arguments zu schreiben. Das vermeidet ein analoges Problem, falls jemand \caption innerhalb einer Gruppe oder Umgebung verwendet, und hinterher \label, wie in (nicht empfohlenem) {\ttfamily\caption{Text}}\label{name} - hier "sieht" \label nicht mehr, was \caption getan hat, da dessen Wirkung durch die Gruppe {...} begrenzt ist, und wieder bezieht sich \label auf eine vorangehende Referenz. Nur als Erklärung, warum man das sehen kann - ich würde es nicht schachteln. Zum Beispiel zeigt das Paket showlabels (sehr nützlich beim Entwurfs-Schreiben) das Label dann an anderer Stelle an, etwa statt im Seitenrand direkt an der Bildunterschrift.

Permanenter link

beantwortet 12 Jun '13, 09:41

stefan's gravatar image

stefan ♦♦
18.3k163148
Akzeptiert-Rate: 50%

bearbeitet 12 Jun '13, 09:47

Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×50
×49
×40
×32
×28

gestellte Frage: 10 Jun '13, 12:40

Frage wurde gesehen: 19,257 Mal

zuletzt geändert: 14 Okt '13, 00:54