`\crefstripprefix` 的变体保留左括号

`\crefstripprefix` 的变体保留左括号

\crefrange该包中的命令将对cleveref对象 1a、1b 和 1c 的同时交叉引用转换为范围 1a–1c,并且可以进一步调整以\crefstripprefix删除公共前缀(此处为 1,产生 1a–c)。

我使用 1(a)、1(b)、1(c) 格式的子浮点引用,并使用上述功能可得出1(a)–c);请注意,c 之前的左括号已被删除,因为它与第一个标签相同。

有没有解决方法1(a)–(c)?我猜最好的办法是修改\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

玩了一会,似乎至少在我的 MWE 的floatrow/subcaption机制中,子图的标签实际上是子图. 这表明要区别对待标签格式数字子图。然而,仅仅添加

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

还不够:我的标签子图引用仍然表现得像数字参考文献。出于某种原因,还添加了

\crefname{subfigure}{figure}{figures}

最后使子图具有自己的标签格式(这是否在某种程度上“正式化”了子图引用类型?不知道会发生什么)。

虽然这实现了我的期望,但仍然觉得修补\crefstripprefix以使其不剥离开头的分隔符会是一个更令人满意的解决方案。

相关内容