是否可以访问命令参数?

是否可以访问命令参数?

我在我的文档中广泛使用超链接,我定义它们如下:

\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}

相关内容