将方程编号与标签结合起来,并独立引用

将方程编号与标签结合起来,并独立引用

先前这个问题中,我们定义了一个新命令\owntag,将方程编号与用户定义的标签结合起来:

\documentclass{article}

\usepackage{amsmath}

\newcommand{\owntag}[1]{\stepcounter{equation}\tag{\theequation, #2}}

\begin{document}

\begin{align}
    F=ma \owntag[eq:newton]{Newton}
\end{align}

My equation is \eqref{eq:newton}.

\end{document}

在此处输入图片描述

如您所见,我们可以参考格式为“1,牛顿”的方程式作为参考。我想扩展此命令,以便我可以

  • 仅使用数字引用方程(即“方程 (1)”)
  • 仅使用文本引用方程式(即“eq. (Newton)”)

为了实现第一个目标,我尝试添加一个额外的计数器,将其设置为方程计数器的值,然后执行\refstepcounter并将其放在\label其后,但仍然得到“(1,牛顿)”作为参考:

\documentclass{article}

\usepackage{amsmath}
\usepackage{xifthen}

\newcounter{equationwotag}

\newcommand{\owntag}[2][]{\ifthenelse{\equal{#1}{}}{
    \stepcounter{equation}\tag{\theequation, #2}
}{
    \setcounter{equationwotag}{\value{equation}}\label{#1}\stepcounter{equation}\stepcounter{equation}\tag{\theequation, #2}
}}

\begin{document}

\begin{align}
    F=ma \owntag[eq:newton]{Newton}
\end{align}

My equation is \eqref{eq:newton}.

\end{document}

如何实现这两种引用方法?

答案1

当您添加时,\label{eq:Newton}当前的“值”将\@currentlabel作为关联标签存储在辅助文件中。因此,执行所需操作的一种方法是设置\@currentlabel相应设置,然后添加\label。还有一个额外的复杂因素,即数学包重新定义,\label以便进行一些错误检查,特别是,如果您尝试在方程式环境(如)内定义两个标签,则会出现错误align。为了解决这个问题,我们必须使用\ltx@label而不是\label,这是“正常无保护”的 latex \label

最后,我误读了您的 MWE,以为您想要一个可选参数来提供标签的简短版本。这似乎是一个很好的功能,但它需要更多的技巧,因为我们需要在标签名称中插入一个“变量”。

我已经将其设置为\owntag[<short label>]{<tag>}

  • \ref{Eq:<label>}给出带有方程编号和“自己的标签”的“完整标签”
  • \ref{eq:<label>}仅给出方程编号
  • \ref{tag:<label>}仅提供“自己的标签”

结果是你现在可以生成这个:

在此处输入图片描述

使用代码

\documentclass{article}

\usepackage{amsmath}
\makeatletter
\newcommand{\owntag}[2][\relax]{% \owntag[short label]{tag}
  \ifx#1\relax\relax\def\owntag@name{#2}\else\def\owntag@name{#1}\fi% base label
  \refstepcounter{equation}\tag{\theequation, #2}%
  \expandafter\ltx@label\expandafter{eq:\owntag@name}%
  \edef\@currentlabel{\theequation, #2}\expandafter\ltx@label\expandafter{Eq:\owntag@name}%
  \def\@currentlabel{#2}\expandafter\ltx@label\expandafter{tag:\owntag@name}%
}
\makeatother

\begin{document}

\begin{align}
    F=ma \owntag[newton]{Newton}% with optional argument
\end{align}

My equation is \eqref{Eq:newton}. The equation number by itself is
\eqref{eq:newton} and the tag is \eqref{tag:newton}.

\begin{align}
    E=mc^2\owntag{Einstein}% no optional argument
\end{align}

My equation is \eqref{Eq:Einstein}. The equation number by itself is
\eqref{eq:Einstein} and the tag is \eqref{tag:Einstein}.

\end{document}

答案2

我在使用来自 user30471 的宏时遇到了麻烦。

\begin{align}
    \frac{\partial u_i}{\partial x_i} = 0 \qquad \mathrm{or} \qquad \vec{\nabla} \cdot \vec{u} = 0 
    \owntag[example]{Mass conservation}
\end{align}

the mass conservation equation \eqref{mass}.

给出输出:

在此处输入图片描述

最终对我有用的是以下代码:

\refstepcounter{equation}\label{eq:mass}
\begin{equation}
    \frac{\partial u_i}{\partial x_i} = 0 \qquad \mathrm{or} \qquad \vec{\nabla} \cdot \vec{u} = 0 
    \tag{\theequation ,\ Mass\ Conservation}
    \label{dummy}
\end{equation}

This is the mass conservation equation \eqref{eq:mass}. This is its dummy label \eqref{dummy}.

输出

在此处输入图片描述

相关内容