\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
以使其不剥离开头的分隔符会是一个更令人满意的解决方案。