В своей работе наборщиком 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
выполняются другие действия, в том числе проверка того, появилась ли уже метка.
Решение очень простое:никогдаДублирующиеся метки. Если они есть, вам нужно попросить автора исправить их. Использование последней может не входить в намерения автора.