PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Tabellennummerierung mit Subfig/Continuedfloat falsch



missfranzi
01-09-2010, 11:32
Hallo zusammen,

Ich habe mit meinem Problem ein bissel rumgesucht, bin aber nicht so richtig weitergekommen... Ausser dass es vielleicht an einem Bug bei Subfig liegt - ich aber nicht weiss, wie ich diesen beheben könnte.

Ich habe mehrere Tabellen in meinem Text, und wenn ich mit Subfig arbeite (ich habe oftmals lange Tabellen über mehrere Seiten mit denen ich auch Probleme hatte, jetzt habe ich diese in mehrere kleine zusammengehörende Tabellen aufgeteilt, und eigentlich bin ich mit der Lösung zufrieden), stimmt die Nummerierung der Tabellen nicht mehr. Da bekomme ich dann so Sachen wie '2.-5' und danach dann '2.-4'.

In meinem 'Minimalbeispiel' habe ich zwar keine Minus-Nummerierungen, dafür bekommen aber mehrere Tabellen die gleiche Nummerierung. Dies passiert auch, wenn ich das Hyperref wegnehme (das stand irgendwo, dass Subfig mit Hyperref Probleme haben könnte) oder wenn ich statt mit Subfig mit Subcaption arbeite.
Habt Ihr eine Idee, wo mein Fehler liegt?

Hier mein Beispiel:



\documentclass[a4paper,
11pt,
BCOR10.00mm,
oneside,
DIV10,
headinclude,footinclude=false
]{scrbook}

% ngerman legt die neue deutsche Rechtschreibung fest!
\usepackage[ngerman]{babel}


%Font-Einstellungen
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}


\usepackage{tocbasic}
\usepackage[position=top,singlelinecheck=false,labelformat=emp ty
%,font={rm,bf,sl}
]{subfig}
%\captionsetup[subfigure]{position=top}

%%%anderes Paket für subfigures...(braucht caption)
%\usepackage{caption}
%\usepackage{subcaption}


\usepackage{booktabs}

\usepackage[backref,colorlinks=true,
linkcolor=black, % Farbe für Links auf gleicher Seite
citecolor=black, % Farbe für Links auf Zitatstellen
filecolor=magenta,
urlcolor=blue, % Farbe für Links auf URLs
anchorcolor=blue]{hyperref}



\begin{document}

\chapter{Das Tabellennummerierungsproblem}
\section{sieht man hier:}

\begin{table}
\centering
\caption{eine Tabelle}
\label{einTab}
\begin{tabular}{ccc}
\toprule
A & B & C \\
\midrule
D & E & F \\
\bottomrule
\end{tabular}
\end{table}


\begin{table}[htbp]
\begin{center}
\caption{mehrere Tabellen}
\label{Tabs}
\vspace{0.25cm}
\noindent%

\subfloat[\label{1a}][Tabelle1a]
{
\begin{small}
\begin{tabular}{ccc}
\toprule
A & B & C\\
\midrule
D & E & F\\
\bottomrule
\end{tabular}
\end{small}
}

\vspace{2.5cm}

\subfloat[\label{1b}][Tabelle1b]
{
\begin{small}
\begin{tabular}{ccc}
\toprule
A & B & C\\
\midrule
D & E & F\\
\bottomrule
\end{tabular}
\end{small}
}
\end{center}
\end{table}


\begin{table}
\ContinuedFloat
\begin{center}
\subfloat[\label{1c}][Tabelle 1c]
{
\begin{small}
\begin{tabular}{ccc}
\toprule
A & B & C\\
\midrule
D & E & F\\
\bottomrule
\end{tabular}
\end{small}
}
\end{center}
\end{table}
%%%%%%%%%%%%%%%%%%%%%%

\begin{table}
\centering
\caption{nochmal eine Tabelle}
\label{einTab2}
\begin{tabular}{ccc}
\toprule
A & B & C \\
\midrule
D & E & F \\
\bottomrule
\end{tabular}
\end{table}

%%%%%%%%%%%%%%%%%%%%%%

\begin{table}[htbp]
\begin{center}
\caption{mehrere Tabellen2}
\label{Tabs2}
\vspace{0.25cm}
\noindent%

\subfloat[\label{2a}][Tabelle2a]
{
\begin{small}
\begin{tabular}{ccc}
\toprule
A & B & C\\
\midrule
D & E & F\\
\bottomrule
\end{tabular}
\end{small}
}

\vspace{2.5cm}

\subfloat[\label{2b}][Tabelle2b]
{
\begin{small}
\begin{tabular}{ccc}
\toprule
A & B & C\\
\midrule
D & E & F\\
\bottomrule
\end{tabular}
\end{small}
}
\end{center}
\end{table}


\begin{table}
\ContinuedFloat
\begin{center}
\subfloat[\label{2c}][Tabelle 2c]
{
\begin{small}
\begin{tabular}{ccc}
\toprule
A & B & C\\
\midrule
D & E & F\\
\bottomrule
\end{tabular}
\end{small}
}
\end{center}
\end{table}

%%%%%%%%%%%%%%%%%%%%%%

\begin{table}[htbp]
\begin{center}
\caption{mehrere Tabellen3}
\label{Tabs3}
\vspace{0.25cm}
\noindent%

\subfloat[\label{3a}][Tabelle3a]
{
\begin{small}
\begin{tabular}{ccc}
\toprule
A & B & C\\
\midrule
D & E & F\\
\bottomrule
\end{tabular}
\end{small}
}

\vspace{2.5cm}

\subfloat[\label{3b}][Tabelle3b]
{
\begin{small}
\begin{tabular}{ccc}
\toprule
A & B & C\\
\midrule
D & E & F\\
\bottomrule
\end{tabular}
\end{small}
}
\end{center}
\end{table}


\begin{table}
\ContinuedFloat
\begin{center}
\subfloat[\label{3c}][Tabelle 3c]
{
\begin{small}
\begin{tabular}{ccc}
\toprule
A & B & C\\
\midrule
D & E & F\\
\bottomrule
\end{tabular}
\end{small}
}
\end{center}
\end{table}


%%%%%%%%%%%%%%%%%%%%%%
\begin{table}
\centering
\caption{und nochmal eine...}
\label{einTab3}
\begin{tabular}{ccc}
\toprule
A & B & C \\
\midrule
D & E & F \\
\bottomrule
\end{tabular}
\end{table}

%%%%%%%%%%%%%%%%%%%%%%
\begin{table}
\centering
\caption{und dann nochmal eine...}
\label{einTab4}
\begin{tabular}{ccc}
\toprule
A & B & C \\
\midrule
D & E & F \\
\bottomrule
\end{tabular}
\end{table}


\end{document}



Vielen Dank schonmal!
Liebe Grüße,
Franzi

sommerfee
01-09-2010, 20:13
Das subfig-Paket hat Probleme mit \ContinuedFloat, wenn in der Abbildung (oder Tabelle) kein \caption vorkommt. Was auch nicht leicht zu behandeln ist, weil das Grundübel in LaTeX selber liegt, welches den Abbildungs- bzw. Tabellenzähler nicht bei \begin{figure bzw. table} erhöht, sondern bei \caption. Die Unterabbildungen brauchen aber diesen Zähler, ohne zu wissen, ob da nun noch ggf. ein \caption danach kommt oder nicht. Den Zähler einfach stattdessen bei \begin{figure/table} zu erhöhen ist aber nicht drin, weil dann Gleitumgebungen mit mehr als einer \caption(of) nicht mehr korrekt funktionieren würden.

Eine Lösung dieses Problems mit anderen, besseren Mitteln würde eine Änderung auf beiden Seiten bedeuten, also sowohl caption als auch subfig bzw. subcaption. Das subfig-Paket wird aber leider nicht mehr gewartet.

(Selten blöde Idee von mir entfernt, eine hoffentlich bessere gibt's im nächsten Beitrag)

Liebe Grüße,
Axel

Nachtrag: Mir ist gerade eingefallen, daß ich \ContinuedFloat ja unterschiedlich behandeln könnte, je nachdem ob das subcaption, oder das subfig-Paket geladen ist. Ich habe mir das mal auf meinen TODO-Zettel notiert, komme aber wohl dieses Jahr nicht mehr dazu, das auch umzusetzen.

sommerfee
02-09-2010, 08:11
Mittlerweile habe ich ein ganz neues Konzept für die Problematik auf Papier. Da dies aber auch Anpassungen der ganzen Paketunterstützungen bedeuten würde, und auch subfig noch funktionieren sollte (zumindest nicht schlechter), ist das leider nicht zwischen Tür und Angel mal eben so implementiert. Stattdessen werde ich das in Version 3.2 des caption-Paketes machen, die ist für den Jahreswechsel geplant. Mit der sollte dann dein Testdokument korrekt funktionieren, zumindest mit dem subcaption-Paket.

Bis dahin sollte folgende Methode Abhilfe schaffen: Ein Hilfskommando definieren, welches dort eingesetzt werden muß, wo das caption bzw. subfig-Paket eine \caption erwarten würde. In Anlehnung an \phantomsection etc. vom hyperref-Paket habe ich das mal \phantomcaption genannt; hier nun dein Beispiel etwas eingedampft, welches sowohl mit subfig als auch mit subcaption korrekt funktionieren sollte:



\documentclass[a4paper,
11pt,
BCOR10.00mm,
oneside,
DIV10,
headinclude,footinclude=false
]{scrbook}

% ngerman legt die neue deutsche Rechtschreibung fest!
\usepackage[ngerman]{babel}

%Font-Einstellungen
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}

\usepackage{caption}
\usepackage[position=top,singlelinecheck=false]{subfig}
%%%anderes Paket für subfigures...(braucht caption)
%\usepackage[position=top,singlelinecheck=false]{subcaption}

% Kommando zum Ausbügeln des Bugs "\subfloat ohne \caption"
\makeatletter
\providecommand\phantomcaption{\caption@refstepcou nter\@captype}
\makeatother

\usepackage{booktabs}

\usepackage[backref,colorlinks=true,
linkcolor=black, % Farbe für Links auf gleicher Seite
citecolor=black, % Farbe für Links auf Zitatstellen
filecolor=magenta,
urlcolor=blue, % Farbe für Links auf URLs
anchorcolor=blue]{hyperref}

\begin{document}

\chapter{Das Tabellennummerierungsproblem}
\section{sieht man hier:}

\begin{table}[!htb]
\centering
\caption{mehrere Tabellen}
\label{Tabs}
\vspace{0.25cm}

\subfloat[\label{1a}][Tabelle1a]
{
\begin{small}
\begin{tabular}{ccc}
\toprule
A & B & C\\
\midrule
D & E & F\\
\bottomrule
\end{tabular}
\end{small}
}

\end{table}

\begin{table}[!htb]
\ContinuedFloat
\centering
\phantomcaption % <= NEU!

\subfloat[\label{1b}][Tabelle 1b]
{
\begin{small}
\begin{tabular}{ccc}
\toprule
A & B & C\\
\midrule
D & E & F\\
\bottomrule
\end{tabular}
\end{small}
}
\end{table}

\begin{table}[!htb]
\centering
\caption{Tabelle 2}
\label{einTab2}
\begin{tabular}{ccc}
\toprule
A & B & C \\
\midrule
D & E & F \\
\bottomrule
\end{tabular}
\end{table}

\end{document}


Liebe Grüße,
Axel

missfranzi
02-09-2010, 12:46
Danke - das mit den Phantomen funktioniert auch mit meinem chaotischen grossen Projekt!

Prinzipiell brauch ich die korrekte Nummerierung auch nicht zwingend in nächster Zeit, nur wollte ich vermeiden, dass, wenn beispielsweise in nem halben Jahr da was geändert wird, aber das nicht zu meinen Tabellen passt, ich dann jede wieder ändern muss...
so ist super - nochmal Danke!

Liebe Grüße,
Franzi

PS. das wollte ich schon heut morgen schreiben - aber irgendwie hat die Seite nicht getan...

sommerfee
21-01-2012, 10:01
Nachtrag: Seit Version 3.2 des caption-Paketes ist \phantomcaption mit an Bord, muß also nicht mehr selber definiert werden.