
我正在嘗試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