「多重定義標籤」是否指最後一個標記的項目?

「多重定義標籤」是否指最後一個標記的項目?

在我擔任 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執行不同的操作,其中檢查標籤是否已出現。

解決方案很簡單:絕不重複的標籤。如果有,需要請作者修復。使用最後一個可能不是作者的意圖。

相關內容