Trying to use space on a page more economically, I developed the idea to arrange graphics as a table being part of a figure. As I still wanted to refer to individual graphics, I also wanted to have captions for each such sub-graphic.
(Only after I had problems, I realized that there does exist a similar mechanism, also named subfigure
and subcaption
)
(I'm no TeX expert, I only know LaTeX a bit)
The code shown below outputs the references as Text... 1 (1.2) ... 1 ...
Text... 1 (1.3) ... 1
, so the sub-caption numbers are wrong, while the main caption number is correct. The intended output is Text... 1.2a (1.2) ... 1.2b ...
Text... 1.3a (1.3) ... 1.3b
.
The captions for the example code read (numbers are correct there):
Abbildung 1.1: Caption0
Abb. 1.2a: Caption1a Abb. 1.2b: Caption1b
Abbildung 1.2: Caption1
Abb. 1.3a: Caption2a Abb. 1.3b: Caption2b
Abbildung 1.3: Caption2
So here's the input for this example (use any placeholder graphic for Platzhalter.pdf
):
\documentclass[a4paper,twoside]{report}
\usepackage{german}
\usepackage[latin1]{inputenc}
\usepackage{a4}
\usepackage{makeidx}
\usepackage{showidx}
\usepackage{amsmath}
\usepackage{url}
\usepackage{graphicx}
\usepackage{ifthen}
%
\newcounter{subfigureX}[figure]
\renewcommand{\thesubfigureX}{\thefigure\alph{subfigureX}}
\newcounter{savefigure}
\newcommand{\gtLab}{}
\newcommand{\gtCap}{}
%
\newenvironment{gfxTableCapLab}[4][htbp]{%
\ifthenelse{\equal{#4}{}}%
{\renewcommand{\gtLab}{}}%
{\renewcommand{\gtLab}{\label{#4}}}%
\ifthenelse{\equal{#3}{}}%
{\renewcommand{\gtCap}{\fLab}}%
{\renewcommand{\gtCap}{\caption{\gtLab{}#3}}}%
\begin{figure}[#1]%
\setcounter{savefigure}{\value{figure}}%
\stepcounter{figure}%
\begin{center}%
\begin{tabular}{#2}}%
{\end{tabular}%
\setcounter{figure}{\value{savefigure}}%
\gtCap%
\end{center}
\end{figure}%
}
%
\newcommand{\gLab}{}
\newcommand{\gCap}{}
%
\newcommand{\gfxCapLab}[4]{%
\ifthenelse{\equal{#4}{}}%
{\renewcommand{\gLab}{}}%
{\renewcommand{\gLab}{\label{#4}}}%
\ifthenelse{\equal{#3}{}}%
{\renewcommand{\gCap}{\gLab}}%
{\renewcommand{\gCap}{\par\noindent\gLab\subcaption{#3}}}%
\begin{minipage}[t]{#1\textwidth}%
{\centering\includegraphics[width=\textwidth]{#2}}%
\gCap%
\end{minipage}%
}
%
\newcommand{\gfxCap}[3]{\gfxCapLab{#1}{#2}{#3}{}}
%
\newcommand{\subcaption}[1]{%
%\refstepcounter{subfigureX}
\addtocounter{subfigureX}{1}%
{\small Abb.~\thesubfigureX: #1}%
}
\begin{document}
\chapter{Chap}
%
\begin{figure}
Test
\caption{Caption0}
\end{figure}
\begin{gfxTableCapLab}{lr}{Caption1}{label1}%
\gfxCapLab{0.4}{Platzhalter.pdf}{Caption1a}{label1a}
&
\gfxCapLab{0.4}{Platzhalter.pdf}{Caption1b}{label1b}
\end{gfxTableCapLab}
%
Text...
\ref{label1a} (\ref{label1}) ... \ref{label1b} ...
\begin{gfxTableCapLab}{lr}{Caption2}{label2}%
\gfxCapLab{0.4}{Platzhalter.pdf}{Caption2a}{label2a}
&
\gfxCapLab{0.4}{Platzhalter.pdf}{Caption2b}{label2b}
\end{gfxTableCapLab}
Text...
\ref{label2a} (\ref{label2}) ... \ref{label2b}
\end{document}
(Originally I had named my counter subfigure
also, but then I discovered that a counter with such a name already exists, so I appended the X
).
Preferably the answer contains an explanation why my code does not work (everything that is wrong), how to do it correctly, and (as an extra) how I could achieve the same effect using the stock subfigure
and subcaption
mechanisms.
german
package is obsolete. Don't load it. Instead, run\usepackage[german]{babel}
or, better still,\usepackage[ngerman]{babel}
.\refstepcounter
fixes the complaint, but still it does not fix the problem that the references show the wrong number. On the German package: Will do once the rest works (Thanks!).