通常我使用 amsart 和 hyperref 并将图 1、2、3、4 编号。在某些情况下,我需要将图拆分为多个部分,以便每个部分都能放在一页上,然后我想对这些部分进行子编号,例如 2.1、2.2、2.3。有什么好方法可以做到这一点?我在 Stackexchange 上看到的解决方案对我不起作用;要么是图上的数字不正确,要么是收到消息
pdfTeX 警告(ext4):具有相同标识符(name{figure.1.2})的目标已被使用,重复项被忽略
答案1
您可以使用子图和\ContinuedFloat
,但与普通子图来回切换可能会变得混乱。
\documentclass{article}
\usepackage{subcaption}
\DeclareCaptionLabelFormat{subgroup}{Figure~#2}
\captionsetup[subfigure]{labelformat=subgroup,labelsep=colon}
\renewcommand{\thesubfigure}{\thefigure.\arabic{subfigure}}
\makeatletter
\renewcommand\p@subfigure{}
\makeatother
\usepackage{hyperref}
\begin{document}
\begin{figure}[ht]
\begin{subfigure}{\linewidth}
\caption{First Part}\label{one}
\end{subfigure}
\end{figure}
\begin{figure}[ht]
\ContinuedFloat
\begin{subfigure}{\linewidth}
\caption{Second part}\label{two}
\end{subfigure}
\end{figure}
\begin{figure}[ht]
\caption{Normal Caption}\label{three}
\end{figure}
Links to \ref{one}. \ref{two} and \ref{three}.
\end{document}
答案2
对我有用的方法是这样的:
将其放在之前\begin{document}
:
\newcounter{figuregroup}
在“图形组”的开头插入:
\global\let\thefiguresave=\thefigure
\global\let\theHfiguresave=\theHfigure
\numberwithin{figure}{figuregroup}
\addtocounter{figure}{1}
\setcounter{figuregroup}{\value{figure}}
\setcounter{figure}{0}
然后有一个序列\begin{figure}...\end{figure}
。
在“图形组”末尾插入:
\global\let\thefigure=\thefiguresave
\global\let\theHfigure=\theHfiguresave
\setcounter{figure}{\value{figuregroup}}
据我所知,我遇到的部分问题来自使用hyperref
,这个问题在这里得到了解决。如果您使用的是 AMS 样式之一没有hyperref,您可能必须删除包含的行\theH...
。
答案3
把这个放在前面可以使它变得更好一些\begin{document}
:
\newenvironment{figuregroup}{%
\global\let\thefiguresave=\thefigure
\global\let\theHfiguresave=\theHfigure
\numberwithin{figure}{figuregroup}
\addtocounter{figure}{1}
\setcounter{figuregroup}{\value{figure}}
\setcounter{figure}{0}
}{%
\global\let\thefigure=\thefiguresave
\global\let\theHfigure=\theHfiguresave
\setcounter{figure}{\value{figuregroup}}
}
然后按如下方式构建图形组:
\begin{figuregroup}
\begin{figure}
...
\end{figure}
\begin{figure}
...
\end{figure}
...
\end{figuregroup}