\ref bei subfigures

Tabellen und Grafiken erstellen und anordnen


Firefly
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: So 23. Jan 2011, 11:27

\ref bei subfigures

Beitrag von Firefly »

Guten Abend,

ich schreibe gerade für die Uni an einem Reader und bin auf ein Problem gestoßen. Ich habe mehrere Bilder als \subfigures nebeneinander angeordnet. Das klappt super.
Wenn ich nun aber einer subfigure ein Label gebe und diese dann per \ref abfrage. Bekomme ich nicht wie bei allen anderen "chapter.section.Abbildung"
sondern nur
"chapter.Abbildung.a oder b".

Könnt ihr mir helfen wie ich es hinbekomme, dass auch hier "chapter.section.abbildung.a oder b"
angezeigt wird?

Anbei ein Beispiel mit meinem modifizierten "Wolke" Package für die Abbildungsnummerierung. Die subsection habe ich auskommentiert, da ich sie bei dem Projekt nicht brauche.
\documentclass[12pt, a4paper, twoside, openright, titlepage]{report}
\usepackage{a4wide}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{ngerman}
\usepackage{german}
\usepackage{accents}%f�r mathematische Akzente
%\usepackage[sort]{cite}funktioniert nur unter Linux
\usepackage{amssymb}
\usepackage{floatflt}
\usepackage{picins}
\usepackage{caption}
\usepackage{subfigure}
\usepackage{color}
\usepackage{colortbl}
\usepackage{wrapfig}
\usepackage{wolke}
\usepackage{url}
\definecolor{grau}{gray}{0.9}
\definecolor{darkblue}{rgb}{0,0,.5}
\usepackage{float}
%\restylefloat{table}
\rmfamily
\usepackage[pdftex]{graphicx}
\usepackage{rotating}%zum rotieren von Tabellen
\usepackage{booktabs}%f�r dickere Linien in Tabellen \toprule[Dicke],\midrule[Dicke],\bottomrule[Dicke]
\usepackage[colorlinks]{hyperref}
\hypersetup{colorlinks=true, breaklinks=true, linkcolor=black, menucolor=black,urlcolor=black, citecolor=black, menucolor=black, linktoc=all}
\renewcommand{\baselinestretch}{1}
\newcommand{\leerz}{\vspace{12pt}}
\newcommand{\HRule}{\rule{\linewidth}{0.5mm}}
\newcommand{\chem}[1]{\ensuremath{\mathrm{#1}}}
\setlength{\oddsidemargin}{0cm}%Seitenabstand auf seiten mit ungerader nummer
\setlength{\evensidemargin}{0cm}%Seitenabstand auf seiten mit gerader nummer
\addtolength{\textwidth}{-0.46cm}
\mathcode`\,="013B

\begin{document}

\chapter{1}
\section{2}

\begin{figure}[h]
\subfigure[Rain Frog (\textit{Breviceps} sp.)]{\includegraphics[width=0.63\textwidth]{2}}\hfill
\subfigure[Namib Dune Gecko (\textit{Pachydactylus rangei})]{\includegraphics[width=0.33\textwidth]{1}\label{KarX}}
\caption{}
\end{figure}
\ref{KarX}

\end{document}
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{wolke}[2011/01/29]
\renewcommand{\thefigure}{\arabic{chapter}.\arabic{section}.%\arabic{subsection}.
\arabic{figure}}
\@addtoreset{figure}{chapter}
\@addtoreset{figure}{section}
\@addtoreset{figure}{subsection}
\renewcommand{\thetable}{\arabic{section}.\arabic{subsection}.\arabic{table}}
\@addtoreset{table}{section}
\@addtoreset{table}{subsection}

Gastschreiber66

Loesungshinweise

Beitrag von Gastschreiber66 »

Nach dem obligatorischen Hinweis auf http://www.minimalbeispiel.de noch folgender Hinweis: Die Abbildungsnummer wird erst mit dem \caption-Befehl gesetzt, das \label muss also danach kommen. Wie man eine subfigure referenziert, weiss ich noch nicht.

Xenara
Forum-Meister
Forum-Meister
Beiträge: 682
Registriert: Mi 25. Nov 2009, 09:41

Beitrag von Xenara »

Das Minimalbeispiel ist gar nicht so schlecht. Wenn mans perfekt hätte machen wollen, hätte man die Bilder rausnehmen können, das "Wolke"-Paketes in eine filecontents-Umgebung setzen, zwei oder drei mehr Verweise in den Text bauen können und ein paar unnötige Pakete rausnehmen. Die Referenzierungen und das Setzen der labels stimmen.

Vorweg noch ein paar Anmerkungen:
- Das Paket subfigure wurde durch subfig ersetzt. Überlege dir, ob du das für deine Arbeit auch machen kannst.
- Wieso arbeitest du mir report und nicht scrreprt? Die Koma-Klassen machen vieles einfacher.
- a4wide ist eigentlich verpönt, mit geometry gibt es bessere Ergebnisse.
- Wieso lädst du "german" _und_ "ngerman"? Einmal reicht völlig.
Kommentare auch im MB unten.

Zu deinem eigentlichen Problem:
Wenn ich es richtig eingegrenzt habe, liegt es am Zähler "\p@subfigure". Wenn du das "Wolke"-Paket nach "subfigure" lädst, werden die Änderungen an "thefigure", die für \p@subfigure gebraucht werden, nicht übernommen, scheinbar wird \p@subfigure nur beim Laden von subfigure aktualisiert.
Du kannst also einfach "Wolke" _vor_ "subfigure" laden.

Oder du fügst eine Zeile zusätzlich ein, die \p@subfigure nochmal explizit "thefigure" mitgibt. Dann muss "Wolke" aber unbedingt _nach_ "subfigure" geladen werden, da sonst der Zähler \p@subfigure logischerweise unbekannt ist.

Im Code unten habe ich mir die Sache mit dem Extra-Paket gespart und den Code daraus direkt in den Header geschrieben. Das ist die Variante für "Wolke" nach "subfigure" laden.
\documentclass[12pt, a4paper, twoside, openright, titlepage]{report}% Wieso nicht scrreprt? 
\usepackage{a4wide} % Verpönt
\usepackage[T1]{fontenc} 
\usepackage[utf8]{inputenc} 
\usepackage{ngerman} 
%\usepackage{german}% Entweder ngerman oder german! (ngerman ist neue deutsche Rechtschreibung)
\usepackage{accents}%f�r mathematische Akzente 
%\usepackage[sort]{cite}funktioniert nur unter Linux 
\usepackage{amssymb} 
\usepackage{floatflt} 
\usepackage{picins} 
\usepackage{caption}
\usepackage{subfigure} % Durch subfig ersetzt
\usepackage{color} 
\usepackage{colortbl} 
\usepackage{wrapfig} 
%\usepackage{wolke} 
\usepackage{url} 
\definecolor{grau}{gray}{0.9} 
\definecolor{darkblue}{rgb}{0,0,.5} 
\usepackage{float} 
%\restylefloat{table} 
\rmfamily 
\usepackage[pdftex]{graphicx} % Treiberangabe "pdftex" unnötig
\usepackage{rotating}%zum rotieren von Tabellen 
\usepackage{booktabs}%f�r dickere Linien in Tabellen \toprule[Dicke],\midrule[Dicke],\bottomrule[Dicke] 
\usepackage[colorlinks]{hyperref} 
\hypersetup{colorlinks=true, breaklinks=true, linkcolor=black, menucolor=black,urlcolor=black, citecolor=black, menucolor=black, linktoc=all} 
\renewcommand{\baselinestretch}{1} 
\newcommand{\leerz}{\vspace{12pt}} 
\newcommand{\HRule}{\rule{\linewidth}{0.5mm}} 
\newcommand{\chem}[1]{\ensuremath{\mathrm{#1}}} 
\setlength{\oddsidemargin}{0cm}%Seitenabstand auf seiten mit ungerader nummer 
\setlength{\evensidemargin}{0cm}%Seitenabstand auf seiten mit gerader nummer 
\addtolength{\textwidth}{-0.46cm} 
\mathcode`\,="013B 


% aus Wolke-Usepackage
\makeatletter
\renewcommand{\thefigure}{\arabic{chapter}.\arabic{section}.%\arabic{subsection}. 
\arabic{figure}} 
\@addtoreset{figure}{chapter} 
\@addtoreset{figure}{section} 
\@addtoreset{figure}{subsection} 
\renewcommand{\thetable}{\arabic{section}.\arabic{subsection}.\arabic{table}} 
\@addtoreset{table}{section} 
\@addtoreset{table}{subsection}
% NEU: Entweder hier diese Zeile einfügen oder alles _VOR_ \usepackage{subfigure} laden
\renewcommand{\p@subfigure}{\thefigure}
\makeatother

\begin{document} 

\chapter{1} 
\section{2} 

\begin{figure}[h] 
\subfigure[Rain Frog (\textit{Breviceps} sp.)]{\includegraphics[width=0.63\textwidth]{Testbild}}\hfill 
\subfigure[Namib Dune Gecko (\textit{Pachydactylus rangei})]{\includegraphics[width=0.33\textwidth]{Testbild}\label{KarX}} 
\caption{} 
\label{Abbildung}
\end{figure} 

Verweis auf Abbildung \ref{Abbildung}. Auf Subfigure \ref{KarX} 

\end{document} 

Firefly
Forum-Newbie
Forum-Newbie
Beiträge: 5
Registriert: So 23. Jan 2011, 11:27

Beitrag von Firefly »

Hallo Xenara,

vielen Dank für deine umfassende Antwort mit den Bemerkungen zum Header. Ich bin neu in LaTeX und froh, dass ich mittlerweile halbwegs geradeaus schreiben kann. Ich werde deine Vorschläge bei nächster Gelegenheit testen und umsetzen. Leider war mein Abgabetermin gestern, so dass ich die Nummerierung auf chapter.abbildung.a oder b durchgehen ändern musste, was ich aber bei einem 130seitigen Reader für weiterhin blödsinnig halte.

Gruß, Firefly

Antworten