
Estou tentando usar o subcaption
pacote (não subfig
) para gerar os rótulos das subfiguras ao lado da figura.
Encontrei muitas perguntas semelhantes, mas todas as respostas (comoEste) usar subfig
e floatrow
. Tentei usar floatrow
with subcaption
(veja MWI abaixo), mas não consegui gerar o mesmo comportamento. o que estou perdendo?
O subcaption
manual afirma explicitamente que
[f]ou um uso mais avançado do recurso de sublegenda do
caption
pacote, dê uma olhada nofloatrow
pacote
mas o floatrow
manual apenas dá um exemplo de legenda ao lado da figura usando subfig
(p.75).
Portanto, qualquer ajuda é muito apreciada.
MWE:
\documentclass{scrartcl}
\usepackage{graphicx}
\usepackage[font=footnotesize,figurewithin=none]{caption}
\usepackage{subcaption}
\captionsetup{subrefformat=parens} % will result in references (typeset with \ref) like 1a but sub-references (typeset with\subref) like (a)
\usepackage{floatrow}
\floatsetup[subfigure]{style=plain,subcapbesideposition=top}
%\usepackage{subfig} % not compatible with subcaption
\begin{document}
\begin{figure}
\centering
\begin{subfigure}[t]{0.7\textwidth}
\centering
\includegraphics[width=0.7\textwidth]{example-image-a}
\caption{}
\label{subfig:a}
\end{subfigure}
\\
\begin{subfigure}[t]{0.49\textwidth}
\centering
\includegraphics[width=\textwidth]{example-image-b}
\caption{}
\label{subfig:b}
\end{subfigure}
\hfill
\begin{subfigure}[t]{0.49\textwidth}
\centering
\includegraphics[width=\textwidth]{example-image-c}
\caption{}
\label{subfig:c}
\end{subfigure}
\caption{Caption for all subfigs: \subref{subfig:a},\subref{subfig:b}, \subref{subfig:c}}
\label{fig}
\end{figure}
\end{document}
Saída do MWE:
Responder1
Em vez de descobrir como fazer floatrow
o trabalho, era mais fácil fingir.
Ressalta-se que a [t]
opção subfigure
refere-se à primeira linha de base, e não ao topo absoluto, então o que ela faz é alinhar a parte inferior das imagens ao invés das legendas. Para alinhar os topos você precisa usar \raisebox
. Na verdade, não há razão para colocar as imagens em subfiguras (apenas as legendas).
O \raisebox
objetivo da legenda era produzir automaticamente um espaço entre as linhas.
\documentclass{scrartcl}
\usepackage{graphicx}
\usepackage[font=footnotesize,figurewithin=none]{caption}
\usepackage{subcaption}
\captionsetup{subrefformat=parens} % will result in references (typeset with \ref) like 1a but sub-references (typeset with\subref) like (a)
%\usepackage{subfig} % not compatible with subcaption
\newcommand{\sidecaption}[1]% #1 = label name
{\raisebox{\abovecaptionskip}{\begin{subfigure}[t]{1.6em}
\caption[singlelinecheck=off]{}% do not center
\label{#1}
\end{subfigure}}\ignorespaces}
\begin{document}
\begin{figure}
\centering
\sidecaption{subfig:a}
\raisebox{-\height}{\includegraphics[width=0.45\textwidth]{example-image-a}}
\sidecaption{subfig:b}
\raisebox{-\height}{\includegraphics[width=0.45\textwidth]{example-image-b}}%
\hfill
\sidecaption{subfig:c}
\raisebox{-\height}{\includegraphics[width=0.45\textwidth]{example-image-c}}
\caption{Caption for all subfigs: \subref{subfig:a},\subref{subfig:b}, \subref{subfig:c}}
\label{fig}
\end{figure}
\end{document}
Deve-se observar que esta é apenas uma das muitas maneiras possíveis de formatar uma legenda lateral. O seguinte não usa o pacote subcaption. OTOH, ele também não escreve uma entrada \listoffigures
.
\newcounter{subfigure}[figure]% not needed with subcaption
\renewcommand{\thesubfigure}{\alph{subfigure}}
\newcommand{\sidecaption}[1]% #1 = label name
{\rule{0pt}{\abovecaptionskip}% create gap between rows
\refstepcounter{subfigure}%
\raisebox{-\height}{(\thesubfigure)~}% align
\label{#1}\ignorespaces}