我在我的文档中广泛使用超链接,我定义它们如下:
\hyperref[label]{some text \ref*{label}}
我需要重复两次标签,这真的很烦人。是否可以用 [] 的内容参数化 {} 的内容?
我想实现这样的目标:
\hyperref[label]{some text \ref*{#1}}
我想如果你定义自己的命令的话这是可能的,但问题是是否可以在不定义任何命令的情况下做到这一点。
答案1
一般来说这是不可能的。TeX 不提供这种访问方式。而且这对可扩展宏也不起作用。包含参数的宏定义会破坏可扩展性,因为定义不可扩展。
在这种情况下,\hyperref
无论如何都无法展开,因此后一个参数不适用。带有可选参数的标签形式\hyperref[<label>]{...}
由宏在内部实现\label@hyperref
,可以通过宏重新定义以记住标签参数,例如\arglabel
:
\documentclass{article}
\usepackage{hyperref}
\makeatletter
\let\org@label@hyperref\label@hyperref
\def\label@hyperref[#1]{%
\def\arglabel{#1}%
\org@label@hyperref[{#1}]% or \org@label@hyperref[\arglabel]%
}
\makeatother
\begin{document}
\section{Hello}
\label{sec:hello}
\hyperref[sec:hello]{Section~\ref*{\arglabel}}
\end{document}