
Estoy intentando generar hyperref
enlaces mediante programación, usando xstring
. Por ejemplo, en el código siguiente me gustaría \hyperref[reference\FirstNumber{1,2}]{first line}
ser equivalente a \hyperref[reference1]{first line}
. Estoy confundido porque puedo insertar 1
una macro y obtener el resultado adecuado. Cuando pongo mi xstring
macro en lugar de eso, falla. Tengo una vaga sensación de que esto tiene que ver con el momento en que se expanden las macros, pero no puedo ir más allá de eso.
\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}
Respuesta1
El nombre de la etiqueta debe expandirse a una cadena, pero \FirstNumber
no es expandible. Las xstring
macros proporcionan un argumento opcional al final, que toma el resultado, que luego puede usarse dentro del nombre de la etiqueta.
\FirstNumber{1,2}[\MyFirstNumber]%
\hyperref[reference\MyFirstNumber]{first line} % error occurs here