
Estou tentando gerar hyperref
links 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 1
uma macro e obter o resultado adequado. Quando coloco minha xstring
macro 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 \FirstNumber
não é expansível. As xstring
macros 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