正如您在提供的文件中看到的,我试图编写一个允许我引用多个图形的命令,我想使用它而不是使用 \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}
不过,我不确定可选参数的用途是什么。