我正在尝试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