PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Subfloats referenzieren



Ignatio Memo
08-08-2007, 11:17
Hi!

Ich schreibe gerade an meiner Diplomarbeit und würde gerne meine subfigures mit dem \ref command referenzieren - und zwar in der Form, dass im Text dann ...see Fig. 1(a) steht und NICHT Fig. 1a. Es fehlen also die runden Klammern um das Subfigurelabel.

Hier ein Mimimalbeispiel mit allen von mir verwendeten packages.



\documentclass[a4paper, 8pt]{article}

\usepackage[hang, font=small, labelfont=bf, textfont=it]{caption}
\usepackage{xspace}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{graphicx}
\usepackage{subfig}
\usepackage{upgreek}
\usepackage{textcomp}
\usepackage[squaren, thinqspace]{SIunits}
\usepackage{epsfig}
\usepackage[dvipdfm, pdfauthor=xx]{hyperref}

\begin{document}

\begin{figure}
\centering
\subfloat[sub1]{\label{fig:sub1}}
\\
\subfloat[sub2]{\label{fig:sub2}}
\caption{Two subfigures}
\label{fig:fig1}
\end{figure}

Reference to Fig.~\ref{fig:sub1} should read Fig.~1(a).
It works with the subref command, see Fig. \ref{fig:fig1}\subref{fig:sub1}.
\end{document}


Mit dem alten \subfigure package erhalte ich das gewünschte Verhalten automatisch (im obigen code subfigure statt subfig laden und \subfloat durch \subfigure ersetzen), würde aber ungerne weiter veraltete packages verwenden. Die Variante mit \ref und \subref funktioniert zwar, ist mir allerdings zu viel Tipparbeit... ;)

sommerfee
08-08-2007, 11:40
Das neue subfig-Paket hat eine Trennung vollzogen, die AFAIK im alten subfigure-Paket so noch nicht vorhanden war: Die Trennung zwischen der eigentlichen Abbildungsnummer (z.B. "a") und der Darstellung in der Abbildung, z.B. "("+nummer+")". Eine solche Trennung ist in LaTeX durchaus üblich, so z.B. auch in der Darstellung von Nummerierungen, siehe z.B. hier:

http://www.mrunix.de/forums/showthread.php?t=52275

wo diese Trennung zwischen Zählerdarstellung und Beschriftung mittels der beiden Makros \theenumi und \labelenumi geschieht.

Bei den subfigures ist die Darstellung des reinen Zählers durch \thesubfigure bzw. \thesubtable geregelt, analog zu \thesection, \thefigure etc.

Dies ist als


\newcommand\thesubfigure{\alph{subfigure}}

vordefiniert, sorgt also für die einfache alphanumerische Darstellung des "subfigure"-Zählers, beginnend mit "a". (Wollte man hier z.B. eine normale Nummerierung, beginnend mit "1", so würde man \roman statt \alph nehmen.)

Die Darstellung in der Abbildung wird über die Option "labelformat=" geregelt, voreingestellt ist hier "labelformat=parens", die Nummer wird also in der Abbildungsbeschriftung selber in Klammern dargestellt.

Möchte man nun die Klammern der eigentlichen Nummer zuordnen, so daß sie auch in Referenzen und im Abbildungsverzeichnis erscheinen, muß man diese beiden Dinge umstellen. In deinem konkreten Falle sollte


\captionsetup[subfigure]{labelformat=simple}
\renewcommand\thesubfigure{(\alph{subfigure})}

(nach \usepackage{subfig}) das gewünschte liefern.

Liebe Grüße,
Axel

Ignatio Memo
08-08-2007, 12:00
Hallo Axel,

schonmal vielen Dank für die ausführliche und verständliche Antwort, das funktioniert jetzt mit \ref wie gewünscht!

Allerdings hat sich auch schon in meinem Miminalbeispiel durch diese Umdefinition ein weiterer Schönheitsfehler eingeschlichen: \subref gibt nunmehr nicht mehr (a) aus sondern ((a)) - hier ist nun also eine Klammer auf jeder Seite zu viel... kann man da was machen?

danke nochmal!

sommerfee
08-08-2007, 13:01
Ja, stimmt, an das \subref hatte ich nicht gedacht, sorry. Ich habe mir das gerade mal angesehen und finde es verwirrend.

Auf der einen Seite gibt es das Gestaltungsmerkmal "subrefformat=", mit dem man wohl das Format von \subref einstellen kann, aber nur von \subref*, ich würde naiverweise vermuten, daß es auch bei \subref greifen sollte. (Bug? Ich werde beizeiten mal in der subfig-Dokumentation nach \subref und "subrefformat=" schauen, vielleicht soll das ja so wie es ist.)

Bei \subref (ohne Stern) greift hingegen das "listofformat=", welches eigentlich für die Gestaltung im Abbildungsverzeichnis zuständig ist. Dies ist auf "listofformat=subparens" vordefiniert, so daß man hier zusätzliche Klammern erhält. Mit insgesamt



\captionsetup[subfigure]{labelformat=simple,listofformat=subsimple}
\renewcommand\thesubfigure{(\alph{subfigure})}

solltest du also (endlich) das gewünschte bekommen. (Diesmal habe ich es auch getestet, was ich zugegebenermaßen naiverweise beim letzten Mal nicht getan hatte :D )

Gruß,
Axel

Ignatio Memo
08-08-2007, 14:46
Hallo Axel,

jetzt funktioniert es absolut einwandfrei. Danke für die nette Hilfe, da wäre ich alleine wohl nie drauf gekommen :)