「複数定義されたラベル」は、最後にラベル付けされた項目を参照しますか?

「複数定義されたラベル」は、最後にラベル付けされた項目を参照しますか?

私は 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}}

の一部として、LaTeXは(前回の実行で生成された)ファイルを\begin{document}読み取り、コマンドは基本的に.aux\newlabel{eq1}{{1}{1}}

\global\@namedef{r@eq1}{{1}{1}}

その後、

\global\@namedef{r@eq1}{{2}{1}}

は、マクロ( で生成される\ref{eq1}ため、その中で数値は有効です) が定義されているかどうかを確認し、定義されている場合は、置換テキストの最初の中括弧ペアの内容を使用します ( は2 番目を使用します) ので、 は式 2 を指します。\ref{eq1}\r@eq1\csname\pageref

が処理されると\end{document}.aux現在の実行で生成されたファイルが読み込まれますが、\newlabelラベルがすでに表示されているかどうかのチェックなど、さまざまな処理が行われます。

解決策は非常に簡単です:一度もないラベルが重複しています。重複している場合は、作成者に修正を依頼する必要があります。最後のラベルを使用することは、作成者の意図ではない可能性があります。

関連情報