使用 xstring 设置 hyperref 引用

使用 xstring 设置 hyperref 引用

我正在尝试hyperref使用 以编程方式生成链接xstring。例如,在下面的代码中,我希望\hyperref[reference\FirstNumber{1,2}]{first line}它等同于\hyperref[reference1]{first line}。我很困惑,因为我可以放入1一个宏,并获得正确的结果。当我用我的xstring宏代替它时,它失败了。我隐约感觉到这与宏的展开有关,但我无法走得更远。

\documentclass{book}
\usepackage{hyperref,xstring}
\begin{document}
\def\FirstNumber#1{\IfSubStr{#1}{,}{\StrBefore{#1}{,}}{#1}}

The first number is \FirstNumber{1}.\label{reference1}

The first number is \FirstNumber{2,3}.\label{reference2}

\def\NumberOne{1}

\hyperref[reference\NumberOne]{first line}

\hyperref[reference\FirstNumber{1,2}]{first line} % error occurs here
\end{document} 

答案1

标签名称必须扩展为字符串,但\FirstNumber不可扩展。xstring宏在末尾提供了一个可选参数,该参数获取结果,然后可以在标签名称内使用该结果。

\FirstNumber{1,2}[\MyFirstNumber]%
\hyperref[reference\MyFirstNumber]{first line} % error occurs here

相关内容