更改 subcaptionbox 的计数器

更改 subcaptionbox 的计数器

我正在使用包\subcaptionbox提供的命令subcaption来获取子图。

\documentclass{article}
\usepackage{graphicx}
\usepackage{subcaption}
\begin{document}
    \begin{figure}
        \centering
        % \setcounter{subfloat}{10}
        \subcaptionbox{exa\label{exa}}[.4\textwidth]{\includegraphics[width=2cm]{example-image-a}}
        \subcaptionbox{exb\label{exb}}[.4\textwidth]{\includegraphics[width=2cm]{example-image-b}}
        \caption{total}\label{total}
    \end{figure}
    \ref{exa}
\end{document}

我有在此处输入图片描述

现在我想更改 subcaptionbox 的计数器数字。例如,我想让 subcaptionbox 的计数器从 10 开始,而不是从 1 开始。我看过,subcaption.sty但我没有得到计数器名称的信息\subcaptionbox。我该如何更改它的计数器?


这里我要澄清一下我的问题。我希望子标题标记为(k)、等(l)(m)而不是(a)、等(b)(c)

答案1

看起来很奇怪。在第一个命令之前\subcaptionbox操作计数器的任何命令都不会起作用。但从第二个命令开始,一切正常。所以在前面添加一个subfigure\subcaptionbox\subcaptionbox\subcaptionnox*{}{}\setcounter{subfigure}{10}

\documentclass{article}
\usepackage{graphicx}
\usepackage{subcaption}
\begin{document}
    \begin{figure}
        \centering
        \subcaptionbox*{}{}
        \setcounter{subfigure}{10}
        \subcaptionbox{exa\label{exa}}[.4\textwidth]{\includegraphics[width=2cm]{example-image-a}}
        \subcaptionbox{exb\label{exb}}[.4\textwidth]{\includegraphics[width=2cm]{example-image-b}}
        \caption{total}\label{total}
    \end{figure}
    \ref{exa}
\end{document} 

答案2

第一个\subcaption将执行\stepcounter{figure}重置子图计数器的操作。它首先检查计数器caption@flags以确定是否执行了步骤操作,代码有点像(在定义中\caption@subtypehook,仅在 C++ 中说明)

enum CaptionFlag {
    ContinuedFloat = 0b001;
    Caption        = 0b010;
    Subcaption     = 0b100;
};

int& flag= GetCounter("caption@flags");
if ((flag & Caption) == 0 && (flag & Subcaption) == 0)
{
    if (flag & ContinuedFloat)
        flag &= ~ContinuedFloat;
    else
        StepCounter("figure");
    flag |= Subcaption;
}

为了避免这种情况,请手动\stepcounter{figure}将其设置caption@flags为 1-7(我没有深入研究,但 4 总是安全的)

\documentclass{article}
\usepackage{graphicx}
\usepackage{subcaption}
\begin{document}
    \begin{figure}
        \centering
        \stepcounter{figure}
        \setcounter{caption@flags}{4}
        \setcounter{subfigure}{10}
        
        \subcaptionbox{exa\label{exa}}[.4\textwidth]{\includegraphics[width=2cm]{example-image-a}}
        \subcaptionbox{exb\label{exb}}[.4\textwidth]{\includegraphics[width=2cm]{example-image-b}}
        \caption{total}\label{total}
    \end{figure}
    \ref{exa}
\end{document}

在此处输入图片描述

答案3

可以用来\phantomsubcaption跳过子图(a)至(j):

\documentclass{article}
\usepackage{graphicx}
\usepackage{subcaption}
\begin{document}
    \begin{figure}
        \centering
        {\phantomsubcaption}% (a)
        {\phantomsubcaption}% (b)
        {\phantomsubcaption}% (c)
        {\phantomsubcaption}% (d)
        {\phantomsubcaption}% (e)
        {\phantomsubcaption}% (f)
        {\phantomsubcaption}% (g)
        {\phantomsubcaption}% (h)
        {\phantomsubcaption}% (i)
        {\phantomsubcaption}% (j)
        \subcaptionbox{exa\label{exa}}[.4\textwidth]{\includegraphics[width=2cm]{example-image-a}}
        \subcaptionbox{exb\label{exb}}[.4\textwidth]{\includegraphics[width=2cm]{example-image-b}}
        \caption{total}\label{total}
    \end{figure}
    \ref{exa}
\end{document}

另外,也可以使用组合\phantomsubcaptionplus \setcounter{subfigure}{...}。这基本上与 @Misaya 和 @TuffContender 的解决方案相同,但使用的\phantomsubcaption是空\subcaptionbox或内部标志操作。

\documentclass{article}
\usepackage{graphicx}
\usepackage{subcaption}
\begin{document}
    \begin{figure}
        \centering
        {\phantomsubcaption}% (a)
        \setcounter{subfigure}{10}
        \subcaptionbox{exa\label{exa}}[.4\textwidth]{\includegraphics[width=2cm]{example-image-a}}
        \subcaptionbox{exb\label{exb}}[.4\textwidth]{\includegraphics[width=2cm]{example-image-b}}
        \caption{total}\label{total}
    \end{figure}
    \ref{exa}
\end{document}

(就我个人而言,我更喜欢我的第一个解决方案而不是第二个解决方案,因为它不依赖于子标题包的内部工作方式。)

相关内容