Frontiers 文档类中的子标题问题

Frontiers 文档类中的子标题问题

如果我在 frontiersSCNS 文档类中使用 subcaption 包,子图计数器似乎无法正确重置。MWE

\documentclass[utf8]{frontiersSCNS} 
\usepackage{subcaption} 
\def\firstAuthorLast{Sample {et~al.}}

\begin{document} \begin{figure}
    \begin{minipage}[b]{.5\linewidth}
        \centering\large A
        \subcaption{A subfigure}\label{fig:1a}
    \end{minipage}%
    \begin{minipage}[b]{.5\linewidth}
        \centering\large B
        \subcaption{Another subfigure}\label{fig:1b}
    \end{minipage}
    \caption{A figure}\label{fig:1} \end{figure}

\begin{figure}
    \begin{minipage}[b]{.5\linewidth}
        \centering\large A
        \subcaption{A subfigure}\label{fig:2a}
    \end{minipage}%
    \begin{minipage}[b]{.5\linewidth}
        \centering\large B
        \subcaption{Another subfigure}\label{fig:2b}
    \end{minipage}
    \caption{A figure}\label{fig:1} \end{figure}

\end{document}

生产在此处输入图片描述

frontiersSCNSarticle预期文档中的结果进行交换

在此处输入图片描述

请注意,我并不关心布局的差异。我只希望编号为 1a)、1b)、2a)、2b),而不是 1a)、1b)、2c)、2d)。

奇怪的是,frontiers 模板本身会加载subcaption包,因此意味着可以安全使用。frontiers 类和模板可以在此处下载:http://www.frontiersin.org/design/zip/Frontiers_LaTeX_Templates.zip

答案1

我刚刚简单查看了一下类文件,发现了这一行\newcounter{subfigure}。这是一个坏主意,因为这会阻止subcaption包为自己定义此计数器(使用不同的设置)。可以使用

\documentclass[utf8]{frontiersSCNS}
\makeatletter
\@addtoreset{subfigure}{figure}
\makeatother
[...]

作为解决方法,但当然,如果能在文档类中修复这个错误就更好了。

PS:也许我应该在caption3.sty/中检测这种情况\DeclareSubType并发出警告,并尝试纠正它:https://gitlab.com/axelsommerfeldt/caption/issues/65

附录 2020-01-02

我终于抽出时间仔细研究了这个问题并实施了我的建议。但在这种情况下,这无济于事,因为:

在定义 之前加载包,frontiersSCNS因此包未定义。 可以在使用定义之后执行此操作,但它却定义了自己的环境(作为浮动环境!),这与包不兼容。subcaptionfiguresubcaptionsubfigurefrontiersSCNSfigure\DeclareCaptionSubTypesubfiguresubcaption

所以,在这里使用subcaption并不安全,恰恰相反。我不明白为什么frontiersSCNS文档类确实加载了subcaption包,但没有使用它,而是定义了自己的内容。

答案2

我的解决方案是基于@Julian Karch 的回答。好消息是它有效,坏消息是只要有子图,您就必须多次设置计数器。主要思想是 (1) 重置图形计数器和 (2) 重置子图计数器。丑陋,但这个 Frontiers latex 类至少可以说不是一个好类。

\setcounter{figure}{1}
\setcounter{subfigure}{0}
\begin{subfigure}
\setcounter{figure}{2}
\setcounter{subfigure}{0}
    \centering
    \begin{minipage}[b]{0.5\textwidth}
        \includegraphics[width=\linewidth]{img1}
        \caption{blah-1}
        \label{fig:blah1}
    \end{minipage}  
    \begin{minipage}[b]{0.5\textwidth}
        \includegraphics[width=\linewidth]{img2}
        \caption{blah-2}
        \label{fig:blah2}
    \end{minipage}
    \caption{Subfigures for the broken Frontiers template.}
    \label{fig: subfigures}
\end{subfigure}

答案3

偶然间,我发现相关的计数器名为subfigure。因此,通过在两个数字之间插入, \setcounter{subfigure}{0}可以获得所需的行为。这当然是一个相当“快速而粗糙”的解决方案。

答案4

我通过创建一个新的计数器和一个使用它的命令来解决了这个问题。

\newcounter{subfigCounter}[figure]
\newcommand{\countSubFig}{\stepcounter{subfigCounter} (\textbf{\Alph{subfigCounter}})\xspace}

然后,添加子图:

\begin{figure}
    \centering
    \begin{minipage}[b]{0.5\textwidth}
        \includegraphics[width=\linewidth]{img1}
        \text{\countSubFig Foo.}
    \end{minipage}  
    \begin{minipage}[b]{0.5\textwidth}
        \includegraphics[width=\linewidth]{img2}
        \text{\countSubFig Bar.}
    \end{minipage}
    \caption{Subfigures for the broken Frontiers template.}
    \label{fig: subfigures}
\end{figure}

虽然有点丑陋,但即使对于文本中的多个子图,它也能解决问题。剩下要解决的唯一问题是引用子图。我试过,\refstepcounter但效果并不好。

相关内容