`\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以使其不去除開頭分隔符號將是一個更令人滿意的解決方案。

相關內容