覆盖图片标题中的 cleveref 以反映 \protect\subref

覆盖图片标题中的 cleveref 以反映 \protect\subref

我在整个文档中使用 cleveref 进行交叉引用。只有在某些情况下,我才需要部分引用((a)而不是图 1a)。通常我在主图标题中遇到这种情况,用于引用 sibfigure(如 MWE 中所示)。

换句话说,我想使用“cleveref 多个引用参数”选项,这样我就可以获得 (a) 到 (d),而不是 1(a) 到 1(d)。

我实施了解决方案 结合 cleveref 和 subref ,但它们不适用于 \cref{ref1,ref2,ref3} 格式

平均能量损失

\documentclass{article}

\usepackage{graphicx}
\usepackage{subfig}
\usepackage{caption}
\usepackage{cleveref} 

\begin{document}
\begin{figure} []   
\centering
\subfloat[][first figure]{\includegraphics[width= 0.485\textwidth]{example-image-a} \label{CHP:fig:EC:1}}
\subfloat[][first figure]{\includegraphics[width= 0.485\textwidth]{example-image-b}\label{CHP:fig:EC:2}}

\subfloat[][first figure]{\includegraphics[width= 0.485\textwidth]{example-image-c}\label{CHP:fig:EC:3}}
\subfloat[][first figure]{\includegraphics[width= 0.485\textwidth]{example-image-a} \label{CHP:fig:EC:4}}

\caption{Need to override \cref{CHP:fig:EC:1,CHP:fig:EC:2,CHP:fig:EC:3,CHP:fig:EC:4} 
 to look like \protect\subref{CHP:fig:EC:1} to \protect\subref{CHP:fig:EC:4} 
 just for the main figure captions}
\label{CHP4:fig:EC}
\end{figure} 
\end{document}

答案1

既然你正在使用该caption软件包,那么你可能也应该使用该subcaption软件包,不是包裹subfig

我认为一个简单的解决方案包括(a)发布指令

\makeatletter
\renewcommand\p@subfigure{}
\makeatother

紧接着\begin{figure}(b) 使用\labelcref而不是\cref来生成交叉引用调用。顺便说一句,不需要指令\protect\labelcref

在此处输入图片描述

\documentclass{article}
\usepackage{graphicx,subcaption}
\usepackage{cleveref} 
\crefname{subfigure}{subfig.}{subfigs.}

\begin{document}
\begin{figure} 
\makeatletter
\renewcommand\p@subfigure{}
\makeatother
\begin{subfigure}{0.485\textwidth}
\includegraphics[width=\textwidth]{example-image-a} 
\caption{first figure}  \label{CHP:fig:EC:1}
\end{subfigure}\hfill
\begin{subfigure}{0.485\textwidth}
\includegraphics[width=\textwidth]{example-image-b}
\caption{second figure} \label{CHP:fig:EC:2}
\end{subfigure}

\medskip
\begin{subfigure}{0.485\textwidth}
\includegraphics[width=\textwidth]{example-image-c}
\caption{third figure}  \label{CHP:fig:EC:3}
\end{subfigure}\hfill
\begin{subfigure}{0.485\textwidth}
\includegraphics[width=\textwidth]{example-image-a} 
\caption{fourth figure} \label{CHP:fig:EC:4}
\end{subfigure}

\caption{Cross-references to \labelcref{CHP:fig:EC:1,CHP:fig:EC:2,CHP:fig:EC:3,CHP:fig:EC:4}}
\label{CHP4:fig:EC}
\end{figure}

\noindent
As illustrated by \cref{CHP:fig:EC:1,CHP:fig:EC:2,CHP:fig:EC:3,CHP:fig:EC:4} of \cref{CHP4:fig:EC}, \dots
\end{document}

附录:如果您需要将交叉引用的子图标记为(a)(b)等,而不是a、等,请在序言中(加载后)b发出以下指令:subcaption

\captionsetup[subfigure]{labelformat=simple}
\renewcommand{\thesubfigure}{(\alph{subfigure})}

相关内容