8

I have a figure that basically consists of smaller figures. I don't want to split the big image apart to put it together with latex for convenience. Instead, I want to reference each subpart of the large image with cleverref. I am going to put a node in each picture with tikz naming each subimage (a),(b), ... How can I reference this subimage using cleverref so that the reference looks like this: Figure 1.1a The whole reference should be hyperlinked to the image.

Image with four subimages in a 2x2 array

I am already using the following important packages:

\usepackage{caption}
\usepackage{subcaption}
\captionsetup[subfigure]{subrefformat=simple,labelformat=simple}
\renewcommand\thesubfigure{\alph{subfigure}}

and my cleverref options are:

%reference packages
\usepackage[colorlinks=false]{hyperref}
\usepackage[nameinlink]{cleveref}
\crefdefaultlabelformat{#2#1#3}
%options for equations
\creflabelformat{equation}{#2#1#3}
\crefformat{equation}{#2Eq.~#1#3}
\Crefformat{equation}{#2Equation~#1#3}
\crefmultiformat{equation}{#2Eqs.~#1#3}%
{ and~#2#1#3}{, #2#1#3}{ and~#2#1#3}
%options for enumerations
\creflabelformat{enumi}{#2(#1)#3}
\crefformat{enumi}{#2(#1)#3}
\Crefformat{enumi}{#2(#1)#3}
%options for figures
\creflabelformat{figure}{#2#1#3}
\crefformat{figure}{#2Fig.~#1#3}
\Crefformat{figure}{#2Figure~#1#3}
\crefmultiformat{figure}{#2Fiqs.~#1#3}%
{ and~#2#1#3}{, #2#1#3}{ and~#2#1#3}
2
  • Not much of an answer, so I'll add it as comment: You could add \phantomsubcaptions and appropriate \labels you can refer to later anywhere inside the figure's code.
    – Huugo
    Jul 17, 2015 at 15:27
  • This does not seem to work. If I add \phantomsubcaptions the figure number also goes up, leading to wrong figure numbers in the following figures. Also, only adding additional \label{fig: 1_a}s does not work, as a reference to them via \cref{fig: 1_a} reads "section 1.1" and not "fig 1a".
    – Alex
    Jul 17, 2015 at 16:44

1 Answer 1

10

I'd go with clipping the image and include it four times (this will have no impact on the final PDF size, because the resource will be loaded just once). With \clipbox* of the trimclip package you don't even need to know the image size.

\documentclass{article}

\usepackage{subcaption,graphicx,trimclip,hyperref,cleveref}

\begin{document}

\begin{figure}
\centering

\subcaptionbox{Top left\label{tl}}{%
  \clipbox*{0 {.5\height} {.5\width} {1\height}}{%
    \includegraphics[width=8cm]{duck}%
  }%
}\qquad
\subcaptionbox{Top right\label{tr}}{%
  \clipbox*{{.5\width} {.5\height} {1\width} {1\height}}{%
    \includegraphics[width=8cm]{duck}%
  }%
}

\medskip

\subcaptionbox{Bottom left\label{bl}}{%
  \clipbox*{0 0 {.5\width} {.5\height}}{%
    \includegraphics[width=8cm]{duck}%
  }%
}\qquad
\subcaptionbox{Bottom right\label{br}}{%
  \clipbox*{{.5\width} 0 {1\width} {.5\height}}{%
    \includegraphics[width=8cm]{duck}%
  }%
}

\caption{A split duck}

\end{figure}

\end{document}

enter image description here

A fuller example showing that the references are as expected.

\documentclass{article}

\usepackage{subcaption,graphicx,trimclip}
\usepackage[colorlinks]{hyperref}
\usepackage[nameinlink]{cleveref}

\captionsetup[subfigure]{subrefformat=simple,labelformat=simple}
\renewcommand\thesubfigure{\alph{subfigure}}

\crefdefaultlabelformat{#2#1#3}
%options for equations
\creflabelformat{equation}{#2#1#3}
\crefformat{equation}{#2Eq.~#1#3}
\Crefformat{equation}{#2Equation~#1#3}
\crefmultiformat{equation}{#2Eqs.~#1#3}%
{ and~#2#1#3}{, #2#1#3}{ and~#2#1#3}
%options for enumerations
\creflabelformat{enumi}{#2(#1)#3}
\crefformat{enumi}{#2(#1)#3}
\Crefformat{enumi}{#2(#1)#3}
%options for figures
\creflabelformat{figure}{#2#1#3}
\crefformat{figure}{#2Fig.~#1#3}
\Crefformat{figure}{#2Figure~#1#3}
\crefmultiformat{figure}{#2Fiqs.~#1#3}%
{ and~#2#1#3}{, #2#1#3}{ and~#2#1#3}

\begin{document}

A reference to \cref{global}, then to
\cref{tl}, \cref{tr}, \cref{bl} and \cref{br}.

\begin{figure}[htp]
\centering

\subcaptionbox{\label{tl}}{%
  \clipbox*{0 {.5\height} {.5\width} {1\height}}{%
    \includegraphics[width=8cm]{duck}%
  }%
}\qquad
\subcaptionbox{\label{tr}}{%
  \clipbox*{{.5\width} {.5\height} {1\width} {1\height}}{%
    \includegraphics[width=8cm]{duck}%
  }%
}

\medskip

\subcaptionbox{\label{bl}}{%
  \clipbox*{0 0 {.5\width} {.5\height}}{%
    \includegraphics[width=8cm]{duck}%
  }%
}\qquad
\subcaptionbox{\label{br}}{%
  \clipbox*{{.5\width} 0 {1\width} {.5\height}}{%
    \includegraphics[width=8cm]{duck}%
  }%
}

\caption{A split duck}\label{global}

\end{figure}


\end{document}

enter image description here

The following code will create links also without clipping the figure; add

\newcommand{\labelphantom}[1]{%
  \parbox{0pt}{\phantomsubcaption\label{#1}}%
}

in your preamble and then type

A reference to \cref{global2}, then to
\cref{tl2}, \cref{tr2}, \cref{bl2} and \cref{br2}.

\begin{figure}[htp]
\centering

\labelphantom{tl2}%
\labelphantom{tr2}%
\labelphantom{bl2}%
\labelphantom{br2}%
\includegraphics[width=8cm]{duck}%

\caption{A split duck}\label{global2}

\end{figure}

enter image description here

9
  • Of course, this is an option if I explicitly want subcaptions under each image. But I actually don't want it, so it is a bit of an overkill to use trimclip and later on use phantomcaptions to avoid subcaptions. Is it possible to use more than one label/phantomcaption for an image?
    – Alex
    Jul 17, 2015 at 16:04
  • If you want to see (a), (b) and so on, where's the problem?
    – egreg
    Jul 17, 2015 at 16:10
  • The problem is that the number of figures don't match anymore. When I add some phantomcaptions, the next image has a wrong figure number. LateX skips 4 numbers then.
    – Alex
    Jul 17, 2015 at 16:12
  • 1
    I need to do that for about 15 images and they are not always so well seperatable into 4 equally sized pieces. So I don't really want to trim each of them. I just want to be able to reference the same image 4 tiimes with different results. So \cref{fig: fig_1a} should give: Fig. 1a and \cref{fig: fig_1b should give: Fig. 1b.
    – Alex
    Jul 17, 2015 at 16:34
  • 1
    the \labelphantom is acutally doing what I want!!! Thx a lot. Nice and easy!
    – Alex
    Jul 17, 2015 at 16:59

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.