在LaTeX中交叉引用多个子图时如何消除图号?

在LaTeX中交叉引用多个子图时如何消除图号?

我想交叉引用一系列子图。我在序言中使用 cleveref 包,如下所示:

\usepackage[capitalize,nameinlink]{cleveref}
\captionsetup[subfigure]{subrefformat=simple,labelformat=simple}
\renewcommand\thesubfigure{(\alph{subfigure})}
\newcommand\crefrangeconjunction{--}

这是我在正文中写的示例 \cref{fig:rain,fig:snow,fig:sunny,fig:thunderstorm}。我期望的结果是

图 1(a)-(d)表明....

然而,这就是我得到的

图 1(a)-1(d)表明....

所以我的问题是,当您从同一张图中链接多个子图时,如何仅按图号显示的顺序制作第一个子图(图 1(a)),而最后一个子图仅显示子图名称(字母表,如示例中的(d))而不显示图号?非常感谢,我没有这方面的背景知识,阅读手册对我来说太复杂了,您的知识对我有很大帮助。

答案1

它需要使用来定义\crefrangemultiformat和命令。\crefrangelabelformat\crefstripprefix

\crefstripprefix接受两个字符串作为参数,并返回删除了所有公共前缀的第二个字符串。

A

\documentclass{article}
\usepackage[demo]{graphicx}
\usepackage{subcaption}

\usepackage[capitalize,nameinlink]{cleveref}

\newcommand\crefrangeconjunction{--}

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

%***************************************** added  <<<<<<<<<<<<<<<
\crefrangelabelformat{figure}{#3#1#4--(#5\crefstripprefix{#1}{#2}#6}
\crefmultiformat{figure}{Figs.~#2#1\xdef\crefstripprefixinfo{#1}#3}%
{ and~(#2{\crefstripprefix{\crefstripprefixinfo}{#1}}#3}{}{}
%****************************************

\begin{document}
    
    \begin{figure}[htbp!]
        \begin{subfigure}{0.2\textwidth}%
            \caption{Rain}  \label{fig:rain}
        \end{subfigure}
        \begin{subfigure}{0.2\textwidth}
            \caption{Snow}\label{fig:snow}
        \end{subfigure}
        \begin{subfigure}{0.2\textwidth}%
        \caption{Sunny} \label{fig:sunny}
        \end{subfigure}
        \begin{subfigure}{0.3\textwidth}
            \caption{Thunderstorm}\label{fig:thunderstorm}
        \end{subfigure}
        \caption{Forecast}\label{fig:forecast}
    \end{figure}

        
    \cref{fig:rain,fig:snow,fig:sunny,fig:thunderstorm}
    
    \cref{fig:rain,fig:snow,fig:sunny}
    
    \cref{fig:rain,fig:snow}
    
    \cref{fig:rain}
    
    \end{document

相关内容