O \crefrange
comando do cleveref
pacote transforma referências cruzadas simultâneas aos objetos 1a, 1b e 1c como um intervalo 1a–1c, e pode ser ajustado ainda mais para \crefstripprefix
remover o prefixo comum (aqui, 1, produzindo 1a–c).
Eu uso referências de subfloats no formato 1(a), 1(b), 1(c) e usando o recurso acima produz1(a)–c); observe o parêntese de abertura antes do c ter sido removido porque é comum com o primeiro rótulo.
Existe uma solução alternativa para obter1(a)–(c)? Acho que o melhor seria uma modificação de \crefstripprefix
, para não remover os delimitadores de abertura; meu conhecimento de TeX é muito pobre para escrevê-lo sozinho. Como discussão paralela, alguém veria uma desvantagem em tornar esse comportamento padrão?
\documentclass{article}
\usepackage[demo]{graphicx}
\usepackage{floatrow}
\usepackage{subcaption}
% define subfigure label
\captionsetup[subfloat]{labelformat=simple}
\renewcommand\thesubfigure{(\alph{subfigure})}
\usepackage{cleveref}
\crefrangelabelformat{figure}{#3#1#4--#5\crefstripprefix{#1}{#2}#6}
\begin{document}
\begin{figure}
\ffigbox[\textwidth]{
\begin{subfloatrow}[3]
\ffigbox[\FBwidth]{\includegraphics[height=2cm,width=2cm]{}}{\caption{subcap}\label{sfig:a}}
\ffigbox[\FBwidth]{\includegraphics[height=2cm,width=2cm]{}}{\caption{subcap}\label{sfig:b}}
\ffigbox[\FBwidth]{\includegraphics[height=2cm,width=2cm]{}}{\caption{subcap}\label{sfig:c}}
\end{subfloatrow}
}{\caption{cap}\label{fig:1}}
\end{figure}
%
\begin{figure}[h]
\includegraphics[height=2cm,width=2cm]{}
\caption{cap}\label{fig:2}
\end{figure}
%
\begin{figure}[h]
\includegraphics[height=2cm,width=2cm]{}
\caption{cap}\label{fig:3}
\end{figure}
\crefrange{fig:1}{fig:3}
\crefrange{sfig:a}{sfig:c}
\end{document}
Responder1
Depois de brincar, parece que, pelo menos com o mecanismo floatrow
/ subcaption
do meu MWE, os rótulos para subfiguras são na verdade do tiposubfigura. Isto sugere tratar de forma diferente o formato do rótulo parafiguraesubfigura. Porém, basta adicionar
\crefrangelabelformat{subfigure}{%
#3#1#4--#5(\crefstripprefix{#1}{#2}#6
} % note the additional opening parenthesis after #5
não é suficiente: os rótulos dos meussubfigurareferências ainda se comportam como os rótulos dofigurareferências. Por alguma razão, adicionando também
\crefname{subfigure}{figure}{figures}
finalmente faz com que as subfiguras tenham um formato de rótulo próprio (isso de alguma forma “oficializa” osubfiguratipo de referência? não faço ideia do que acontece).
Embora isso atinja o que eu procurava, ainda parece que corrigir \crefstripprefix
para não remover os delimitadores de abertura seria uma solução mais satisfatória.