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