![在LaTeX中交叉引用多个子图时如何消除图号?](https://linux22.com/image/457684/%E5%9C%A8LaTeX%E4%B8%AD%E4%BA%A4%E5%8F%89%E5%BC%95%E7%94%A8%E5%A4%9A%E4%B8%AA%E5%AD%90%E5%9B%BE%E6%97%B6%E5%A6%82%E4%BD%95%E6%B6%88%E9%99%A4%E5%9B%BE%E5%8F%B7%EF%BC%9F.png)
我想交叉引用一系列子图。我在序言中使用 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
接受两个字符串作为参数,并返回删除了所有公共前缀的第二个字符串。
\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