定义具有名称、标签和可链接的自定义命令

定义具有名称、标签和可链接的自定义命令

我想创建一个具有以下功能的命令:

\newcommand{\mycom}[2]{...}
\newcommand{\linktomycom}[1]{...}

在文档正文中:

\mycom{firstitem}{This is the first item}

然后:

\linktomycom{firstitem}

这相当于:

\hyperref[firstitem]{This is the first item}

并链接至我写作的位置\mycom

...

我尝试过 phantomsec,但它似乎缺少命名功能。谢谢任何提示。

答案1

命令可以像这样定义:

\makeatletter
\newcommand{\mycom}[2]{\hypertarget{#1}{#2}\global\@namedef{mycom@#1}{#2}}
\newcommand{\linktomycom}[1]{%
\@ifundefined{mycom@#1}{\textbf{??}\@latex@warning{Reference `#1' on page \thepage \space undefined}}%
{\hyperlink{#1}{\@nameuse{mycom@#1}}}%
}
\makeatother

\mycom{...}{...}使用第二个参数的文本创建一个名为第一个参数的目标,并将标题保存在宏中\mycom@<first argument>

\linktomycom{...}检查是否\mycom@<first argument>已定义 - 如果未定义,则会产生两个问号和一个 LaTeX 警告,否则,会生成一个包含先前保存的文本的指定目标的链接。

(定义被括在里面,因为使用了名称中\makeatletter ... \makeatother带有 的内部 LaTeX 宏。)@

编辑:

我无法确定您是否希望该\mycom命令生成可见的标题或仅生成(不可见的)锚点 - 如果您想要后者,则必须用空文本定义目标:

\newcommand{\mycom}[2]{\hypertarget{#1}{}\@namedef{mycom@#1}{#2}}

相关内容