当我使用多重定义的标签时将引用更改为问号

当我使用多重定义的标签时将引用更改为问号

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在读取辅助文件时创建的。

请注意,类似hyperrefcleveref替换的包\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}

相关内容