我希望我的方程式能用普通的计数器标记,但也能添加附加文本,但以后引用时会使用自己的自定义文本。例如
We have
(a+b)^2 = a^2 + 2ab + b^2 (18, a, b)
From (18, 2x, -y) we get (2x-y)^2=4x^2-4xy+y^2.
(假设我们已经得出第 18 个标记方程)
由类似的东西产生
\documentclass{article}
\usepackage{amsmath}
% Insert definition of \labelWithArgument and \eqrefWithArgument here
\begin{document}
We have
\begin{equation}
\labelWithArgument{some_eq}{$,a,b$}
(a+b)^2 = a^2 + 2ab + b^2
\end{equation}
From \eqrefWithArgument{some_eq}{$,2x,-y$} we get $(2x-y)^2=4x^2-4xy+y^2$.
\end{document}
这个想法是将 a、b 作为“变量”添加到方程中,并将 2x、-y 作为“参数”以供以后引用。我如何定义\标签带参数和\eqref带参数?
答案1
我认为最好的解决方案是使用\newtagform
使用数学工具为方程编号定义新的“标签形式”。对于任何给定的方程,标签和引用“参数”都是静态文本,不需要由宏处理(只需由 TeX 处理)。因此,新的标签形式可以定义为:
\newtagform{argumenttag}{(}{, \tagargument)}
其中宏\tagargument
是标签“参数”。要使用它,我们定义
\newcommand\labelWithArgument[2]{%
\usetagform{argumenttag}% use the new tag form
\def\tagargument{#2}\label{#1}% set label and `\tagargument
}
当然,您还需要一个\eqrefWithArgument
命令,但这很容易(见下文)。完成所有这些后,您的输出如下:
...完整代码如下:
\documentclass{article}
\usepackage{amsmath}
\usepackage{refcount}
\usepackage{mathtools}
\newtagform{argumenttag}{(}{, \tagargument)}% define new form for tags
\newcommand\labelWithArgument[2]{%
\usetagform{argumenttag}% use the new tag form
\def\tagargument{#2}\label{#1}% set tag arguments and label
}
\newcommand\eqrefWithArgument[2]{%
\def\myref{\getrefnumber{#1}}% extract the reference number
(\myref, \mbox{#2})% print the reference number with argument
}
\begin{document}
We have
\begin{equation}\labelWithArgument{some_eq}{$a,b$}
(a+b)^2 = a^2 + 2ab + b^2
\end{equation}
From \eqrefWithArgument{some_eq}{$2x,-y$} we get $(2x-y)^2=4x^2-4xy+y^2$.
\end{document}
我已经使用了引用计数包提取引用并将其放入所需的格式。这不是绝对必要的,但它的优点是代码无需更改即可与 hyperref 和相关函数配合使用。