如何正确使用 \refstepcounter 来尝试实现子图?

如何正确使用 \refstepcounter 来尝试实现子图?

为了更经济地利用页面上的空间,我萌生了将图形排列为表格的想法,表格是图形的一部分。由于我仍然想引用单个图形,所以我还想为每个这样的子图形添加标题。

(直到我遇到问题后,我才意识到确实存在类似的机制,也叫subfiguresubcaption

我不是 TeX 专家,我只了解一点 LaTeX

下面的代码将参考文献输出为Text... 1 (1.2) ... 1 ... Text... 1 (1.3) ... 1,因此子标题编号是错误的,而主标题编号是正确的。预期输出是Text... 1.2a (1.2) ... 1.2b ... Text... 1.3a (1.3) ... 1.3b

示例代码的标题如下(其中的数字是正确的):

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

这是此示例的输入(使用任何占位符图形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}

(最初我也为我的计数器命名subfigure,但后来我发现已存在一个具有相同名称的计数器,因此我附加了X)。

最好答案包含解释为什么我的代码不起作用(所有错误),如何正确执行,以及(作为额外的)如何使用库存subfiguresubcaption机制实现相同的效果。

答案1

由于到目前为止还没有人有答案,所以我自己尝试了:

\stepcounter{figure}用替换\refstepcounter{figure}和 替换\gLab\subcaption{#3}似乎\subcaption{#3}\gLab解决了这个问题。剩下的唯一问题是,在图片列表中,标题顺序混乱(我问了另一个问题,以寻求可能的解决方案)。

相关内容