如何以特定方式引用子浮点数

如何以特定方式引用子浮点数

我有下图:

\begin{figure}[tb]
    \centering
    \subfloat[FS -- a]{%
        \includegraphics[width=0.5\textwidth]{Images/Chapter4/RQ2/updated/a.pdf}%
        \label{fig:fse}%
    }
    \subfloat[FS -- b]{%
        \includegraphics[width=0.5\textwidth]{Images/Chapter4/RQ2/updated/b.pdf}%
        \label{fig:fsp}%
    }\par
    \subfloat[FS -- c]{%
        \includegraphics[width=0.5\textwidth]{Images/Chapter4/RQ2/updated/c.pdf}%
        \label{fig:fsg}%
    }\par
    \subfloat[CL -- d]{%
        \includegraphics[width=0.5\textwidth]{Images/Chapter4/RQ2/updated/d.pdf}%
        \label{fig:cle}%
    }
    \subfloat[CL -- e]{%
        \includegraphics[width=0.5\textwidth]{Images/Chapter4/RQ2/updated/e.pdf}%
        \label{fig:clp}%
    }\par
    \subfloat[CL -- f]{%
        \includegraphics[width=0.5\textwidth]{Images/Chapter4/RQ2/updated/f.pdf}%
        \label{fig:clg}%
    }
    \label{fig:rub}
\end{figure}

我想将前三个子浮点数引用为4.5(a-c)。为此,我使用了,~\ref{fig:fse},\ref{fig:fsp},\ref{fig:fsg}但这给了我 4.5a,4.5b,4.5c

你知道该如何修复它吗?

答案1

这是使用包的尝试cleveref

  • 定义了一个新的宏\crefretainprefix,模拟\crefstripprefix
  • 设置\crefrangelabelformat{subfigure}{...}基于我之前的回答
  • 我也认为\subfloat这是由subcaption包定义的。

在以下示例中,输入

\Cref{fig:rub} contain \cref{fig:fse,fig:fsp,fig:fsg} and \cref{fig:cle,fig:clp,fig:clg}.

给出

图 1 包含图 1(ac) 和图 1(df)。

\documentclass{article}
\usepackage{graphicx}
\usepackage{subcaption}

\usepackage{cleveref}

\makeatletter
\newcommand\crefretainprefix[2]{%
  \begingroup%
    \edef\@toksa{#1}%
    \edef\@toksb{#2}%
    \let\cref@acc\@empty%
    \@crefretainprefix%
    \cref@result%
  \endgroup}%

\def\@crefretainprefix{%
  \let\@iterate\relax%
  \def\accum@flag{0}%
  \let\@tempc\@tempb%
  \cref@poptok{\@toksa}{\@tempa}%
  \cref@poptok{\@toksb}{\@tempb}%
  \ifx\@tempa\@tempb\relax%
    \def\@iterate{\@crefretainprefix}%
    \ifx\cref@acc\@empty\relax%
      \let\cref@acc\@tempb%
    \else%
      \ifcat\@tempb\@tempc\relax%
        \ifcat\@tempb a\relax%
          \def\accum@flag{1}%
        \else%
          \expandafter\chardef\expandafter\@tempa%
            \expandafter=\expandafter`\@tempb\relax%
          \ifnum\@tempa>`/\relax%
            \expandafter\ifnum\@tempb<`:\relax%
              \def\accum@flag{1}%
            \fi%
          \fi%
        \fi%
      \fi%
      \def\@tempa{1}%
      \edef\cref@acc{\cref@acc\@tempb}%
    \fi%
  \else%
    \ifcat\@tempb\@tempc\relax\else%
      \edef\cref@acc{\cref@acc}%
    \fi%
    \edef\cref@result{\cref@acc}%
  \fi%
  \@iterate}%
\makeatother

\captionsetup[sub]{subrefformat=parens}
\crefrangelabelformat{subfigure}
  {\crefretainprefix{#1}{#2}(#3\crefstripprefix{#2}{#1}#4--#5\crefstripprefix{#1}{#2}#6)}

\begin{document}
\Cref{fig:rub} contain \cref{fig:fse,fig:fsp,fig:fsg} and \cref{fig:cle,fig:clp,fig:clg}.

\begin{figure}[tb]
    \centering
    \subfloat[FS -- a]{%
        \includegraphics[width=0.3\textwidth]{example-image-a}%
        \label{fig:fse}%
    }
    \subfloat[FS -- b]{%
        \includegraphics[width=0.3\textwidth]{example-image-b}%
        \label{fig:fsp}%
    }
    \subfloat[FS -- c]{%
        \includegraphics[width=0.3\textwidth]{example-image-c}%
        \label{fig:fsg}%
    }\par
    \subfloat[CL -- d]{%
        \includegraphics[width=0.3\textwidth]{example-image-a}%
        \label{fig:cle}%
    }
    \subfloat[CL -- e]{%
        \includegraphics[width=0.3\textwidth]{example-image-b}%
        \label{fig:clp}%
    }
    \subfloat[CL -- f]{%
        \includegraphics[width=0.3\textwidth]{example-image-c}%
        \label{fig:clg}%
    }
    \caption{text}\label{fig:rub}
\end{figure}

\end{document}

在此处输入图片描述

相关内容