Beziehen sich „mehrfach definierte Beschriftungen“ auf das zuletzt beschriftete Element?

Beziehen sich „mehrfach definierte Beschriftungen“ auf das zuletzt beschriftete Element?

Bei meiner Arbeit als LaTeX-Schriftsetzer habe ich oft mit with multiply definedWarnungen zu Beschriftungen zu tun. Die meisten davon betreffen Gleichungen.

Meine Frage ist nun, ob sich der \refBefehl „immer“ auf das zuletzt beschriftete Element bezieht? Meiner Erfahrung nach ist das so, aber ich würde gerne wissen, ob es Fälle gibt (z. B. Einstellungen oder Pakete), in denen das nicht zutrifft.

Wenn ich beispielsweise habe:

\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}

beide Referenzen beziehen sich auf die letzte Gleichung.

Notiz.Wir bitten die Autoren immer, die Warnung zu überprüfen, aber die Richtlinie meines Unternehmens sieht vor, die Warnung „vor“ dem Senden der Korrekturabzüge zu entfernen. Ich suche nach einer „Skript“-Methode, um diese Fälle zu verwalten, indem ich alle mehrfach definierten Beschriftungen außer der letzten kommentiere, aber ich muss wissen, ob dies ein sicherer Ansatz ist.

Antwort1

Wenn Sie sich die Datei ansehen .aux, sehen Sie

\relax 
\@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{1}}
\newlabel{eq1}{{1}{1}}
\newlabel{eq1}{{2}{1}}

Im Rahmen von \begin{document}liest LaTeX die .auxDatei (wie sie im vorherigen Durchlauf erstellt wurde) und der Befehl \newlabel{eq1}{{1}{1}}führt im Wesentlichen Folgendes aus:

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

die dann durch die spätere

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

mit der Folge, dass \ref{eq1}auf Gleichung 2 verweist, weil \ref{eq1}geprüft wird, ob das Makro \r@eq1(das mit erstellt wurde \csname, daher sind Zahlen darin zulässig) definiert ist und dass es ggf. den Inhalt des ersten Klammerpaars aus seinem Ersetzungstext verwendet ( \pagerefverwendet das zweite).

Bei \end{document}der Verarbeitung .auxwird die im aktuellen Lauf erstellte Datei eingelesen, es werden dabei jedoch \newlabelunterschiedliche Dinge ausgeführt, unter anderem wird geprüft, ob das Etikett bereits erschienen ist.

Die Lösung ist ganz einfach:niemalsdoppelte Beschriftungen. Falls welche vorhanden sind, müssen Sie den Autor bitten, sie zu korrigieren. Die Verwendung der letztgenannten Beschriftung entspricht möglicherweise nicht der Absicht des Autors.

verwandte Informationen