在我擔任 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
執行不同的操作,其中檢查標籤是否已出現。
解決方案很簡單:絕不重複的標籤。如果有,需要請作者修復。使用最後一個可能不是作者的意圖。