使用 \multifigref 代替 \cref

使用 \multifigref 代替 \cref

正如您在提供的文件中看到的,我试图编写一个允许我引用多个图形的命令,我想使用它而不是使用 \cref,\figref 工作完美,但它只需要一个图形,任何帮助都将不胜感激,提前致谢

\documentclass{article}
\usepackage{etoolbox}
 \usepackage{hyperref}
\hypersetup{
colorlinks=true,
linkcolor=red,
filecolor=red,      
urlcolor=red,
citecolor=blue,
 }
 % The provided multifigref command
\newcommand*{\multifigref}[2][]{%
\def\figrefs{}%
\forcsvlist{\addfigref}{#2}%
\xdef\figrefs{\figrefs}%
\hyperref[{fig:\figrefs}]{%
    \ifnumgreater{\clistcount{#2}}{1}{%
        Figs.~\ref*{fig:\figrefs}}{%
        Fig.~\ref*{fig:\figrefs}}%
    \ifx\\#1\\%
    \else
    \,#1%
    \fi
}%
}

\newcommand{\addfigref}[1]{%
\ifx\figrefs\empty%
    \edef\figrefs{#1}%
\else
    \edef\figrefs{\figrefs,#1}%
\fi
}

 \newcommand*{\figref}[2][]{%
\hyperref[{fig:#2}]{%
    Fig.~\ref*{fig:#2}%
    \ifx\\#1\\%
    \else
    \,#1%
    \fi
}%
 }

 \begin{document}
  \begin{figure}
   \caption{Caption for Figure 1}
    \label{fig:fig1}
   \end{figure}

 \begin{figure}
  \caption{Caption for Figure 2}
  \label{fig:fig2}
  \end{figure}

   \begin{figure}
   \caption{Caption for Figure 3}
   \label{fig:fig3}
   \end{figure}

 \multifigref{fig1} vs \multifigref{fig1,fig2,fig3} \\
 \figref{fig1} vs \figref{fig1,fig2,fig3}
 \end{document}

答案1

传递fig:fig1,fig2,fig3给可选参数是\hyperref行不通的。

我建议使用单个命令\figref。将 clist 转换为一个序列,并将每个项目设置为参数\ref。然后使用该序列。

\documentclass{article}
\usepackage{etoolbox}
\usepackage{hyperref}

\hypersetup{
  colorlinks=true,
  linkcolor=red,
  filecolor=red,      
  urlcolor=red,
  citecolor=blue,
}

\ExplSyntaxOn
% The provided multifigref command
\NewDocumentCommand{\figref}{om}
 {
  Fig\int_compare:nT { \clist_count:n { #2 } > 1 } { s }.\nobreakspace
  \seq_clear:N \l_tmpa_seq
  \clist_map_inline:nn { #2 }
   {
    \seq_put_right:Nn \l_tmpa_seq { \ref{fig:##1} }
   }
  \seq_use:Nn \l_tmpa_seq { ,~ }
  \IfValueT{#1}{\,#1}
 }
\ExplSyntaxOff

\begin{document}

\begin{figure}[!htp]
\caption{Caption for Figure 1}
\label{fig:fig1}
\end{figure}

\begin{figure}[!htp]
\caption{Caption for Figure 2}
\label{fig:fig2}
\end{figure}

\begin{figure}[!htp]
\caption{Caption for Figure 3}
\label{fig:fig3}
\end{figure}

\figref{fig1} vs \figref{fig1,fig2,fig3}

\figref[.]{fig1,fig2}

\end{document}

不过,我不确定可选参数的用途是什么。

在此处输入图片描述

相关内容