私は 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
ラベルがすでに表示されているかどうかのチェックなど、さまざまな処理が行われます。
解決策は非常に簡単です:一度もないラベルが重複しています。重複している場合は、作成者に修正を依頼する必要があります。最後のラベルを使用することは、作成者の意図ではない可能性があります。