Configurando referência de hiperref com xstring

Configurando referência de hiperref com xstring

Estou tentando gerar hyperreflinks programaticamente, usando xstring. Por exemplo, no código abaixo eu gostaria \hyperref[reference\FirstNumber{1,2}]{first line}que fosse equivalente a \hyperref[reference1]{first line}. Estou confuso porque posso inserir 1uma macro e obter o resultado adequado. Quando coloco minha xstringmacro no lugar disso, ela falha. Tenho uma vaga sensação de que isso tem a ver com quando as macros são expandidas, mas não consigo ir além disso.

\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} 

Responder1

O nome do rótulo deve ser expandido para uma string, mas \FirstNumbernão é expansível. As xstringmacros fornecem um argumento opcional no final, que leva o resultado, que pode então ser usado dentro do nome do rótulo.

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

informação relacionada