如何在自定义命令中使用普通标签来定义超目标?

如何在自定义命令中使用普通标签来定义超目标?

我想要创建一个命令,该命令定义一个\hypertarget,其中目标标签(的第一个参数\hypertarget)由所包含的\label和一个目标标题(的第二个参数\hypertarget)由其内容组成。

\documentclass{article}

\usepackage{hyperref}
\newcommand\mytargetcommand[1]{?}

\begin{document}
\mytargetcommand{My content\label{tag}}
\ref{tag}
\end{document}

因此这将输出My content两次,其中第二次引用第一次。

答案1

也许有更好的方法来分割My content\label{tag}东西,使其\hypertarget不会阻塞\label:使用\def\splitcmd#1\label#2和类似的命令,用未限定的参数(实际上,\label这里是参数分隔符)来分割。

这使用了一个虚拟计数器并引用文本,\nameref而不是使用。

\documentclass{article}

\usepackage{hyperref}
\makeatletter
% Two helper commands --> get the text before \label
\def\splitcmd#1\label#2{%
  #1%
}
% Get the label tag
\def\splitcmdother#1\label#2{%
  #2%
}


\newcounter{localtagcntr}


  \newcommand\mytargetcommand[1]{%
    \edef\local@tag{\splitcmdother#1}%
    \edef\my@text{\splitcmd#1}%
    \refstepcounter{localtagcntr}%
    \def\@currentlabelname{\my@text}% Change the label content name
    \label{\local@tag}% Set the label
    \hypertarget{\local@tag}{\my@text}% 
  }

\makeatother
\begin{document}
Foostuff
\clearpage
\mytargetcommand{My content\label{tag}}
\ref{tag}

\clearpage
\hyperlink{tag}{Stuff}

\nameref{tag}
\end{document}

相关内容