I was recently asked an interesting question about how to place a sub-caption on top of a sub-figure. By default, sub-captions are produced below sub-figures.
When using the subfigure package, the answer is reasonably easy. The package has an option to move the sub-captions on top of the figure.
\usepackage[FIGTOPCAP]{subfigure}
However, I was curious how other packages solve the problem, specifically subfig and subcaption.
Below are the solutions for all three sub-figure packages as well as the sub-tables.
Subfigure
We have already seen that subfigure
solves the problem through a package option, which has to be typed in capital letters.
\usepackage[FIGTOPCAP]{subfigure}
\documentclass[11pt]{article} \usepackage[FIGTOPCAP]{subfigure} \begin{document} \begin{figure}[ht] \centering \subfigure[Caption of subfigure 1]{ \rule{4cm}{3cm} \label{fig:subfig1} } \subfigure[Caption of subfigure 2]{ \rule{4cm}{3cm} \label{fig:subfig2} } \subfigure[Caption of subfigure 3]{ \rule{4cm}{3cm} \label{fig:subfig3} } \caption[Optional caption for list of figures]{Main caption for subfigures \subref{fig:subfig1}, \subref{fig:subfig2} and \subref{fig:subfig3}} \label{fig:subfigureExample} \end{figure} \end{document}
Subfig
Similar to subfigure, the subfig package also changes the caption position through a package option.
\usepackage[position=top]{subfig}
Alternatively, the caption position can be controlled through the captionsetup
command.
\captionsetup{position=top}
This has the advantage that it can be placed anywhere within the document and similarly reset to the default.
\captionsetup{position=bottom}
\documentclass[11pt]{article} \usepackage[position=top]{subfig} \begin{document} \begin{figure}[ht] \centering \subfloat[short for lof][Caption for sub-figure 1]{ \rule{4cm}{3cm} \label{fig:subfig1} } \subfloat[short for lof][Caption for sub-figure 2]{ \rule{4cm}{3cm} \label{fig:subfig2} } \subfloat[short for lof][Caption for sub-figure 3]{ \rule{4cm}{3cm} \label{fig:subfig3} } \caption[Optional caption for list of figures]{Main caption for subfigures \subref{fig:subfig1}, \subref{fig:subfig2} and \subref{fig:subfig3}} \label{fig:subfigureExample} \end{figure} \end{document}
Subcaption
The subcaption package handles positioning differently from subfigure
and subfig
. It defines the subfigure
environment which is simply a minipage
. Figures are then placed within the environment along with the caption and label. The caption can therefore be move on top of the figure simply by rearranging the commands.
\begin{subfigure}[b]{0.45\textwidth} % Caption before figure \subcaption[short for lof]{Caption for sub-figure} \includegraphics[width=\linewidth]{figure-file} \label{fig:subfig} \end{subfigure}
\documentclass[11pt]{article} \usepackage{subcaption} \begin{document} \begin{figure} \centering \begin{subfigure}[b]{0.45\textwidth} \subcaption[short for lof]{Caption for sub-figure 1} \rule{\linewidth}{3cm} \label{fig:subfig1} \end{subfigure}% \quad \begin{subfigure}[b]{0.45\textwidth} \subcaption[short for lof]{Caption for sub-figure 2} \rule{\linewidth}{3cm} \label{fig:subfig2} \end{subfigure} \begin{subfigure}[b]{0.45\textwidth} \subcaption[short for lof]{Caption for sub-figure 3} \rule{\linewidth}{3cm} \label{fig:subfig3} \end{subfigure} \caption[Optional caption for list of figures]{Main caption for subfigures \subref{fig:subfig1}, \subref{fig:subfig2} and \subref{fig:subfig3}} \end{figure} \end{document}
Table
Similar solutions exist for placement of sub-table captions above or below the table.
% Subfigure package \usepackage[TABTOPCAP]{subfigure} % above \usepackage[TABBOTCAP]{subfigure} % below (default) % Subfig package \usepackage{subfig} \captionsetup[subtable]{position=top} % Subcaption package \begin{subtable}[b]{0.45\textwidth} % Caption before figure \subcaption[short for lof]{Caption for sub-table} ... \label{tab:subtab} \end{subtable}
hotschke
Be aware that ‘l2tabu.pdf’ recommends using subcaption
tom
Thanks for your comment!
Just to be a bit more specific: The german version of l2tabu recommends using the subcaption package instead of subfigure or subfig. This is because the subfigure and subfig were discontinued and incompatible with e.g. hyperref or caption.
hotschke
Sorry, that I didn’t notice that the English translation wasn’t updated to the newest German version. You are right, the given reasons are discontinuation and incompatibilities e.g. with hyperref and caption.
boudiccas
I’m using your code for subcaptions but its not generating the “lof”, and the only thing that I can think of is that I’m using ‘\documentclass[listof=totoc]{scrreprt} ‘. Can you help please? Thanks, Sharon.
tom
To add subfigures to the list of figures, load the package with the option
list=true
:molly
Oh THANK GOD! the subfigure finally worked under the thesis class!!! You saved my life!! THANK YOU.