
Ich versuche, hyperref
Links programmgesteuert zu generieren, indem ich verwende xstring
. Im folgenden Code möchte ich beispielsweise \hyperref[reference\FirstNumber{1,2}]{first line}
äquivalent zu sein \hyperref[reference1]{first line}
. Ich bin verwirrt, weil ich 1
ein Makro einfügen kann und das richtige Ergebnis erhalte. Wenn ich xstring
stattdessen mein Makro einfüge, schlägt es fehl. Ich habe das vage Gefühl, dass dies damit zu tun hat, wann die Makros erweitert werden, aber weiter komme ich nicht.
\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}
Antwort1
Der Beschriftungsname muss zu einem String erweitert werden, \FirstNumber
ist aber nicht erweiterbar. Die xstring
Makros stellen am Ende ein optionales Argument bereit, das das Ergebnis übernimmt, das dann im Beschriftungsnamen verwendet werden kann.
\FirstNumber{1,2}[\MyFirstNumber]%
\hyperref[reference\MyFirstNumber]{first line} % error occurs here