我想引用一个完整的图(比如图 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 的建议,最终让我找到了解决方案...