xstring でハイパー参照を設定する

xstring でハイパー参照を設定する

hyperref私は を使用して、プログラム的にリンクを生成しようとしていますxstring。たとえば、以下のコードでは、\hyperref[reference\FirstNumber{1,2}]{first line}を と同等にしたいと考えています。マクロを挿入すると適切な結果が得られるので、\hyperref[reference1]{first line}混乱しています。その代わりにマクロを挿入すると、失敗します。これはマクロが展開されるタイミングに関係しているという漠然とした感覚がありますが、それ以上進むことができません。1xstring

\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

関連情報