LaTeX 对多次定义的标签的默认行为是覆盖现有标签。这使得我在校对时很难发现错误。有没有办法强制 LaTeX 将这些引用存储为问号而不是覆盖它们?
\documentclass{article}
\usepackage{amsmath}
\begin{document}
\begin{align}
1 \label{eq} \\
2 \label{eq}
\end{align}
\eqref{eq}
\end{document}
答案1
标签保存为全局宏。例如,\label{eq}
保存为\r@eq
。这些宏是\newlabel
在读取辅助文件时创建的。
请注意,类似hyperref
和cleveref
替换的包\newlabel
更加复杂。
就我个人而言,我会选择\textcolor{red}{XXX}
,但你要求??
。
\documentclass{article}
\usepackage{amsmath}
\makeatletter
\def\@newl@bel#1#2#3{{%
\@ifundefined{#1@#2}%
{\global\@namedef{#1@#2}{#3}}%
{\gdef \@multiplelabels {%
\@latex@warning@no@line{There were multiply-defined labels}}%
\@latex@warning@no@line{Label ‘#2’ multiply defined}%
\global\@namedef{#1@#2}{{??}{\@secondoftwo#3}}}}}
\makeatother
\begin{document}
\begin{align}
1 \label{eq} \\
2 \label{eq}
\end{align}
\eqref{eq}
\noindent page \pageref{eq}
\end{document}