Относятся ли «множественно определенные метки» к последнему помеченному элементу?

Относятся ли «множественно определенные метки» к последнему помеченному элементу?

В своей работе наборщиком LaTeX я часто сталкиваюсь с with multiply definedпредупреждениями на этикетках. Большинство из них посвящены уравнениям.

Мой вопрос: \refкоманда "всегда" относится к последнему помеченному элементу? По моему опыту, это так, но я хотел бы знать, есть ли случаи (например, настройки или пакеты), в которых это не так.

Например, если у меня есть:

\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}

обе ссылки относятся к последнему уравнению.

Примечание.Мы всегда просим автора(ов) проверять предупреждение, но политика моей компании заключается в удалении предупреждения «до» отправки доказательств. Я ищу «скриптовый» способ управления этими случаями, комментируя все многократно определенные метки, кроме последней, но мне нужно знать, является ли это безопасным подходом.

решение1

Если вы посмотрите на .auxфайл, то увидите

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

В рамках \begin{document}LaTeX считывает .auxфайл (созданный в предыдущем запуске), и команда \newlabel{eq1}{{1}{1}}по сути делает

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

который затем переопределяется более поздним

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

с эффектом, который \ref{eq1}будет указывать на уравнение 2, поскольку \ref{eq1}проверяет, определен ли макрос \r@eq1(создан с помощью \csname, поэтому числа в нем допустимы), и, в случае, если он использует содержимое в первой паре фигурных скобок из своего заменяющего текста ( \pagerefиспользует вторую).

При \end{document}обработке .auxсчитывается файл, созданный в текущем запуске, но при этом \newlabelвыполняются другие действия, в том числе проверка того, появилась ли уже метка.

Решение очень простое:никогдаДублирующиеся метки. Если они есть, вам нужно попросить автора исправить их. Использование последней может не входить в намерения автора.

Связанный контент