Вариант `\crefstripprefix` с сохранением открывающей скобки

Вариант `\crefstripprefix` с сохранением открывающей скобки

Команда \crefrangeиз cleverefпакета преобразует одновременные перекрестные ссылки на объекты 1a, 1b и 1c в диапазон 1a–1c и может быть дополнительно настроена с \crefstripprefixцелью удаления общего префикса (в данном случае 1, что дает 1a–c).

Я использую ссылки на подэлементы в формате 1(a), 1(b), 1(c), и использование вышеуказанной функции дает1(а)–в); обратите внимание, что открывающая скобка перед буквой c была удалена, поскольку она совпадает с первой меткой.

Есть ли обходной путь, чтобы получить1(а)–(в)? Я думаю, лучшим вариантом будет модификация \crefstripprefix, так чтобы он не удалял открывающие разделители; мои знания TeX слишком слабы, чтобы написать это самому. В качестве побочного обсуждения, видит ли кто-нибудь недостаток в том, чтобы сделать это поведением по умолчанию?

\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}

решение1

После некоторых экспериментов выяснилось, что, по крайней мере с механизмом floatrow/ subcaptionмоего MWE, метки для подрисунков на самом деле имеют типподрисунок. Это предполагает, что формат этикетки следует рассматривать по-разному дляфигураиподрисунок. Однако, просто добавив

\crefrangelabelformat{subfigure}{%
    #3#1#4--#5(\crefstripprefix{#1}{#2}#6
} % note the additional opening parenthesis after #5

недостаточно: метки моегоподрисунокссылки по-прежнему ведут себя как меткифигурассылки. По какой-то причине, добавив также

\crefname{subfigure}{figure}{figures}

наконец-то делает так, чтобы у подрисунков был собственный формат меток (это как-то «официализирует»подрисунокссылочный тип? понятия не имею, что происходит).

Хотя это и позволяет достичь того, чего я искал, все равно кажется, что исправление \crefstripprefix, при котором не удаляются открывающие разделители, было бы более удовлетворительным решением.

Связанный контент