¿Se refiere 'multiplicar etiquetas definidas' al último elemento etiquetado?

¿Se refiere 'multiplicar etiquetas definidas' al último elemento etiquetado?

En mi trabajo como tipógrafo LaTeX a menudo trato with multiply definedcon etiquetas de advertencia. La mayoría de ellos tratan sobre ecuaciones.

Mi pregunta es: ¿el \refcomando "siempre" se refiere al último elemento etiquetado? En mi experiencia es así, pero me gustaría saber si hay casos (p. ej. configuraciones o paquetes) en los que esto no es cierto.

Por ejemplo, si tengo:

\documentclass[11pt]{article}

\begin{document}

\section{Introduction}

Equation~(\ref{eq1})
\begin{equation}
1 +1 =3
\label{eq1}
\end{equation}
Equation~(\ref{eq1})
\begin{equation}
2 +2 =5
\label{eq1}
\end{equation}

\end{document}

ambas referencias se refieren a la última ecuación.

Nota.Siempre pedimos a los autores que verifiquen la advertencia, pero la política de mi empresa es eliminar la advertencia "antes" de enviar las pruebas. Estoy buscando una forma de "scripting" para gestionar estos casos, comentando todas las etiquetas definidas de forma múltiple excepto la última, pero necesito saber si este es un enfoque seguro.

Respuesta1

Si miras el .auxarchivo, verás

\relax 
\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{1}}
\newlabel{eq1}{{1}{1}}
\newlabel{eq1}{{2}{1}}

Como parte de \begin{document}, LaTeX lee el .auxarchivo (como se produjo en la ejecución anterior) y el comando \newlabel{eq1}{{1}{1}}esencialmente hace

\global\@namedef{r@eq1}{{1}{1}}

que luego es anulado por el posterior

\global\@namedef{r@eq1}{{2}{1}}

con el efecto de que \ref{eq1}apuntará a la ecuación 2, porque \ref{eq1}verifica que la macro \r@eq1(producida con \csname, por lo que los números son legales en ella) esté definida y, en caso de que sea así, usa el contenido del primer par de llaves de su texto de reemplazo ( \pagerefusa el segundo).

Cuando \end{document}se procesa, .auxse lee el archivo producido en la ejecución actual, pero \newlabelhace cosas diferentes, entre ellas verificar si la etiqueta ya apareció.

La solución es muy simple:nuncaetiquetas duplicadas. En caso de que los haya, debes pedirle al autor que los solucione. Es posible que utilizar el último no sea la intención del autor.

información relacionada