Установка ссылки hyperref с помощью xstring

Установка ссылки hyperref с помощью xstring

Я пытаюсь программно сгенерировать 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

Связанный контент