如何引用包含多个子图的完整图表(跨越多页)

如何引用包含多个子图的完整图表(跨越多页)

我想引用一个完整的图(比如图 1),其中包含几个子图(比如 a、b、c、d、e、f、g、h)并延伸到下一页。这是我使用的代码。

\begin{figure}[!htb]    
\captionsetup{labelformat=empty}    
\makebox[\textwidth][c]  
{  
\subfloat{\includegraphics[width=0.5\textwidth]{a.png}} \quad
\subfloat{\includegraphics[width=0.5\textwidth]{b.png}}     
}\\ [2ex]  
\makebox[\textwidth][c]  
{  
\subfloat{\includegraphics[width=0.5\textwidth]{c.png}} \quad
\subfloat{\includegraphics[width=0.5\textwidth]{d.png}}  
}\\ [2ex]    
\makebox[\textwidth][c]    
{
\subfloat{\includegraphics[width=0.5\textwidth]{e.png}} \quad
\subfloat{\includegraphics[width=0.5\textwidth]{f.png}}   
}  
\caption{}  
\end{figure}  
% The Figure continues on the next page  
\begin{figure}  
\ContinuedFloat  
\makebox[\textwidth][c]  
{  
\subfloat{\includegraphics[width=0.5\textwidth]{g.png}} \quad
\subfloat{\includegraphics[width=0.5\textwidth]{h.png}}  
}       
\caption{this is figure 1 a-h.}  
\label{fig:fig1}  
\end{figure}  

当我尝试在文档中引用整个图时,它总是被引用为图 1h。我希望在必要时手动将整个图引用为图 1,并将其各个子图引用为图 1a、图 1b、图 1c....图 1h。

在此先谢谢您的宝贵建议!

答案1

subfig我通常不使用并且更喜欢subcaption,但是因为我不知道\ContinuedFloat那里是如何完成的,这里有一个解决方案subfig

您总是可以在命令\label{fig:...}后传递一个\includegraphics{...}。引用将起作用,但读者必须知道您所说的“图 1h”是什么意思。因此您需要标题。下一个[]只是\subfig打开“(a)”、“(b)”...您可能还想填写括号以获得真正的标题。

我稍微整理了一下你的代码。它仍然保留了所有功能。

% arara: pdflatex
% arara: pdflatex

\documentclass{article}
\usepackage[%
    ,demo
    ]{graphicx}    
\usepackage{subfig}

\begin{document}
\begin{figure}[!htb] 
\centering   
\subfloat[][opt. caption]{\includegraphics[width=0.49\linewidth]{a}\label{fig:Figurea}} \hfill
\subfloat[][]{\includegraphics[width=0.49\linewidth]{b}\label{fig:Figureb}} \\
\subfloat[][]{\includegraphics[width=0.49\linewidth]{c}\label{fig:Figurec}} \hfill
\subfloat[][]{\includegraphics[width=0.49\linewidth]{d}\label{fig:Figured}}  \\ 
\subfloat[][]{\includegraphics[width=0.49\linewidth]{e}\label{fig:Figuree}} \hfill
\subfloat[][]{\includegraphics[width=0.49\linewidth]{f}\label{fig:Figuref}}    
\phantomcaption % for caption version 3.2 or higher. Not needed if not used with subfig.  
\end{figure}  
 The Figure continues on the next page  
\begin{figure}  
\centering
\ContinuedFloat  
\subfloat[][opt. caption]{\includegraphics[width=0.49\linewidth]{g}\label{fig:Figureg}} \hfill
\subfloat[][]{\includegraphics[width=0.49\linewidth]{h}\label{fig:Figureh}}    
\caption{These are figures 1 a-h}  
\label{fig:fig1}  
\end{figure}  
This is figure \ref{fig:fig1} and its subfigure \ref{fig:Figuref} or \ref{fig:Figureh}.
\end{document}

编辑

由于hyperref\ContinuedFload不能一起使用,下面是一个显示 -package 用法的示例subcaption。我刚刚发现, 也\ContinuedFload可以在这里使用。

% arara: pdflatex
% arara: pdflatex

\documentclass{article}
\usepackage[%
    ,demo
    ]{graphicx}
\usepackage[%
    ,hypcap=true
    ]{caption, subcaption}
\usepackage{hyperref}

\begin{document}
\begin{figure}[!htb]
\phantomcaption % for caption version 3.2 or higher. Not needed if not uses with subfig.
\label{fig:fig1}  
\centering   
\begin{subfigure}[b]{.49\linewidth}{\centering \includegraphics[width=\linewidth]{a}\caption{opt. caption}\label{fig:Figurea}}\end{subfigure} \hfill
\begin{subfigure}[b]{.49\linewidth}{\centering \includegraphics[width=\linewidth]{b}\caption{}\label{fig:Figureb}}\end{subfigure} \\
\begin{subfigure}[b]{.49\linewidth}{\centering \includegraphics[width=\linewidth]{c}\caption{}\label{fig:Figurec}}\end{subfigure} \hfill
\begin{subfigure}[b]{.49\linewidth}{\centering \includegraphics[width=\linewidth]{d}\caption{}\label{fig:Figured}}\end{subfigure}  \\ 
\begin{subfigure}[b]{.49\linewidth}{\centering \includegraphics[width=\linewidth]{e}\caption{}\label{fig:Figuree}}\end{subfigure} \hfill
\begin{subfigure}[b]{.49\linewidth}{\centering \includegraphics[width=\linewidth]{f}\caption{}\label{fig:Figuref}}\end{subfigure}     
\end{figure}  
% the Figure continues on the next page  
\begin{figure}  
\centering
\ContinuedFloat  
\begin{subfigure}[b]{.49\linewidth}{\centering \includegraphics[width=\linewidth]{g}\caption{opt. caption}\label{fig:Figureg}}\end{subfigure} \hfill
\begin{subfigure}[b]{.49\linewidth}{\centering \includegraphics[width=\linewidth]{h}\caption{}\label{fig:Figureh}}\end{subfigure}    
\caption{These are figures 1 a-h}    
\end{figure}
This is figure \ref{fig:fig1} and its subfigure \ref{fig:Figuref} or \ref{fig:Figureh}.
\end{document}

编辑

对此还有一点要说。在第一页不加标题并不是一个好习惯。读者希望在看到图表的同一位置获得信息,而不是稍后。因此,你应该考虑给每幅图添加一个标题:

\caption[These are figures 1 a-h]{These are figures 1 a-h (\emph{continued on next page})} 
\label{fig:fig1}    
\end{figure} 

...

\caption[]{These are figures 1 a-h}    
\end{figure}

答案2

@ LaRiFaRi 我使用一开始发布的原始代码解决了这个问题。不过解决方案非常简单。这是我使用的代码,也许遇到类似困难的人可能会受益:

\documentclass[a4paper,12pt]{article}
\usepackage{subfig}
\begin{document}

\begin{figure}[!htb]    
\captionsetup{labelformat=empty}    
\makebox[\textwidth][c]  
{  
\subfloat{\includegraphics[width=0.5\textwidth]{a.png}} \quad
\subfloat{\includegraphics[width=0.5\textwidth]{b.png}}     
}\\ [2ex]  
\makebox[\textwidth][c]  
{  
\subfloat{\includegraphics[width=0.5\textwidth]{c.png}} \quad
\subfloat{\includegraphics[width=0.5\textwidth]{d.png}}  
}\\ [2ex]    
\makebox[\textwidth][c]    
{
\subfloat{\includegraphics[width=0.5\textwidth]{e.png}} \quad
\subfloat{\includegraphics[width=0.5\textwidth]{f.png}}   
}  
\caption{}
\label{fig:fig1}  
\end{figure}  
% The Figure continues on the next page  
\begin{figure}  
\ContinuedFloat  
\makebox[\textwidth][c]  
{  
\subfloat{\includegraphics[width=0.5\textwidth]{g.png}} \quad
\subfloat{\includegraphics[width=0.5\textwidth]{h.png}}  
}       
\caption{this is figure 1 a-h.}  
\end{figure} 

\end{document}

请注意,我已将 \label 移至 \ContinuedFloat 之前。这无需执行任何其他操作即可解决问题。现在我可以将整个图称为图 1,将其子图称为图 1a 等。感谢 LaRiFaRi 的建议,最终让我找到了解决方案...

相关内容