在我作为 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
执行不同的操作,其中包括检查标签是否已经出现。
解决方案非常简单:绝不重复的标签。如果有,您需要要求作者修复它们。使用最后一个标签可能不是作者的本意。