如果我在 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}
frontiersSCNS
与article
预期文档中的结果进行交换
请注意,我并不关心布局的差异。我只希望编号为 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
因此包未定义。 可以在使用定义之后执行此操作,但它却定义了自己的环境(作为浮动环境!),这与包不兼容。subcaption
figure
subcaption
subfigure
frontiersSCNS
figure
\DeclareCaptionSubType
subfigure
subcaption
所以,在这里使用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
但效果并不好。