为了更经济地利用页面上的空间,我萌生了将图形排列为表格的想法,表格是图形的一部分。由于我仍然想引用单个图形,所以我还想为每个这样的子图形添加标题。
(直到我遇到问题后,我才意识到确实存在类似的机制,也叫subfigure
和subcaption
)
(我不是 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
)。
最好答案包含解释为什么我的代码不起作用(所有错误),如何正确执行,以及(作为额外的)如何使用库存subfigure
和subcaption
机制实现相同的效果。
答案1
由于到目前为止还没有人有答案,所以我自己尝试了:
\stepcounter{figure}
用替换\refstepcounter{figure}
和 替换\gLab\subcaption{#3}
似乎\subcaption{#3}\gLab
解决了这个问题。剩下的唯一问题是,在图片列表中,标题顺序混乱(我问了另一个问题,以寻求可能的解决方案)。