使用变量构建新标签

使用变量构建新标签

首先,我对此事缺乏了解,深表歉意。我正在尝试以下代码,但并没有真正理解其中的每一点。

无论如何,有人能帮我找出以下代码的错误吗?

\def\pm #1#2{\@bsphack
\newcommand{\currentValue}{\ref{#1}}
  \protected@write\@auxout{}%
  {\string\newlabel{test\currentValue}{{#2}{\thepage}}}%
\@esphack}

我的意图是什么?定义一个\pm接受两个参数的命令。第一个参数需要用作引用本身,以便获取另一个变量:\currentValue。然后,将此变量(\currentValue)附加到其他文本(“测试”)以创建新标签。

事情看起来不错,但由于某种原因,在创建最终标签时,\hbox {}会在标签末尾附加一个test\currentValue

知道问题是什么吗?或者,如果不采用这种方式,我该如何实现我的目标?

答案1

如果没有\newcommand{\currentValue}{\ref{#1}}:您将获得相同的结果,您的代码相当于

\def\pm #1#2{\@bsphack
  \protected@write\@auxout{}%
  {\string\newlabel{test\ref{#1}}{{#2}{\thepage}}}%
\@esphack}

因为 的展开\currentValue正好是\ref{#1}(实际参数为\pm代替#1)。

问题是:\protected@write无法获得价值因为\ref{#1}这需要执行绝不在写操作中执行。

你可能会有更好的运气

\usepackage{refcount}
\def\pm #1#2{\@bsphack
  \protected@write\@auxout{}%
  {\string\newlabel{test\getrefnumber{#1}}{{#2}{\thepage}}}%
\@esphack}

但不清楚你想在这里实现什么,因为你需要知道的值\ref{foo}才能引用生成的标签

\pm{foo}{bar}

(假设您有一个地方)。因此,如果给出“1”,则\label{foo}生成标签可以是,但是当更改时,生成的test1\ref{foo}\ref{foo}标签会改变。

笔记 \pm是 LaTeX 内核的一个命令,重新定义它需要您自担风险。

相关内容