eqref:如何使用最新的标签而不是最后一个标签

eqref:如何使用最新的标签而不是最后一个标签

当我在一个文档中多次使用同一个标签时,只有最后一个定义用于引用。是否可以改变这种行为,以便每次引用某个标签时,只使用最新的标签,而无需修改其中的代码?document(我经常需要将来自不同作者的文档复制到一个文档中,因此替换/修改每个文档label/eqref会很麻烦。)

这是我的 MCVE:

\documentclass[10pt]{report} 
\usepackage[utf8]{inputenc}
\usepackage{amsmath}
\begin{document}
Test
\[ 1 = 1 \tag{1}\label{eq1} \]
First eq: \eqref{eq1} (references first one, but I want it to reference second one)
\[ 2 = 2 \tag{2}\label{eq1} \]
Second eq: \eqref{eq1} (actually references second one)
\end{document}

答案1

这半自动化了 @jPi 的评论。使用\labelid可以将唯一标识符附加到每个\label\ref\eqref调用\ref,因此无需更改)。如果您想访问不同 id 的方程式,仍然可以使用\oldref(但不能\eqref)。

\documentclass{article}
\let\oldlabel=\label
\let\oldref=\ref
\renewcommand{\label}[1]{\oldlabel{#1.\labelid}}%
\renewcommand{\ref}[1]{\oldref{#1.\labelid}}%

\newcommand{\labelid}{init}% unique identifief for each paper

\usepackage{amsmath}% must go after redefinition

\begin{document}
\renewcommand{\labelid}{alpha}
Test
\[ 1 = 1 \tag{1}\label{eq1} \]
First eq: \eqref{eq1}

\renewcommand{\labelid}{beta}
\[ 2 = 2 \tag{2}\label{eq1} \]
Second eq: \eqref{eq1}

\end{document}

相关内容