Variante de `\crefstripprefix` mantendo parênteses de abertura

Variante de `\crefstripprefix` mantendo parênteses de abertura

O \crefrangecomando do cleverefpacote transforma referências cruzadas simultâneas aos objetos 1a, 1b e 1c como um intervalo 1a–1c, e pode ser ajustado ainda mais para \crefstripprefixremover 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/ subcaptiondo 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 \crefstripprefixpara não remover os delimitadores de abertura seria uma solução mais satisfatória.

informação relacionada