Label definiert, trotzdem Warnung "Reference ... undefi

Fragen und Probleme, die nicht den obigen Kategorien zugeordnet werden können


dave

Label definiert, trotzdem Warnung "Reference ... undefi

Beitrag von dave »

Moin.

Ich sitze gerade an einem Latex-Projekt, das aus mehreren tex-Dateien besteht, da mehrere Leute gleichzeitig dran arbeiten, d.h. es gibt eine main-Datei, in der die externen Dateien per \include{} eingebunden werden.

Das Problem ist nun folgendes: anscheinend kann (pdf)Latex nicht alle Labels erkennen. Bei der externen Datei werden die ersten drei Labels erkannt, alle weiteren jedoch nicht. Wenn ich nun z.B. das Bild referiere, so erscheint - trotz existentem Label - der Fehler "Reference ... undefined". Merkwürdigerweise verschwindet der Fehler, sobald ich den Inhalt der externen Datei direkt in die main-Datei reinkopiere. Aber die Arbeit schreibt vor, dass ich die Dateien externalisieren muss.

Ich benutze Texmaker mit MikTex 2.8 auf Windows 7. Ich habe auch schon probiert, das ganze mit TexWorks zu kompilieren, aber der Fehler bleibt der gleiche.

Die zwei tex-Dateien (zu einem Test abgeändert) und die log-Datei sind in den folgenden Links gespeichert.

test_main.tex
test_02.tex
test_main.log
test_main.aux
test_02.aux

Ich bedanke mich bereits im Vorraus für jede Hilfe.

P.S.: ich finde es klasse, dass auch Gäste hier schreiben können

Mfg,
Samiel

Mechanicus
Forum-Guru
Forum-Guru
Beiträge: 322
Registriert: Mi 8. Okt 2008, 18:41
Wohnort: Hamburg

Beitrag von Mechanicus »

Hi,

die Dokumentenklasse ist ebenfalls unbekannt. Ich habe zudem dein Minimalbeispiel etwas gekürzt:

Code: Alles auswählen

\RequirePackage{filecontents}
\begin{filecontents*}{test_02.tex}
\section{Lorem ipsum}
\lipsum[1]
\begin{equation}
\label{eq:th01}
|\psi\rangle = \frac{1}{2} \cdot \left( |+\rangle_1 \cdot |-\rangle_2 + |-\rangle_1 \cdot |+\rangle_2 \right) ,
\end{equation}
\lipsum[1]
\begin{equation}
    \label{eq:th02}
    S = |E(\vec{a},\vec{b})-E(\vec{a},\vec{b'})|+|E(\vec{a'},\vec{b})+E(\vec{a'},\vec{b'})| \leq 2, 
\end{equation}

siehe \eqref{eq:th01} und \eqref{eq:th02}
\end{filecontents*}
\documentclass[11pt,a4paper,twoside,aps,prl,twocolumn,groupedaddress]{article}

\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{lipsum}
\begin{document}
\include{test_02}
\end{document}
Gruß
Marco

EDIT: in der log gibt es nur den Fehler, dass das Bild nicht existiert.
Personalführung ist die Kunst der Vorgesetzten den Untergebenen so schnell über den Tisch zu ziehen, dass er die Reibungshitze als Nestwärme empfindet.

dave

Beitrag von dave »

Wie meinst du das, dass die Dokumentklasse unbekannt ist? In der log-Datei steht, welche Dokumentklasse (revtex4-1 vom revtex4-Packet) benutzt wird, und es werden dazu keine Warnungen oder Fehler aufgezeigt. Weiters ist in der Zeile 691 der log-Datei beschrieben:
LaTeX Warning: Reference `fig:th01' on page 2 undefined on input line 35.

Und genau dieses Label findet man test_02.tex Datei, trotzdem kommt die Warnung "undefined".

Deswegen kann ich deine Antwort nicht nachvollziehen. Ich habe auch dein Minimalbeispiel ausgeführt, aber es erscheint mir nicht gerade sinnvoll, da ich ja geschrieben habe, dass die ersten drei Labels ordnungsgemäß erkannt werden.

Mfg,
dave

Mechanicus
Forum-Guru
Forum-Guru
Beiträge: 322
Registriert: Mi 8. Okt 2008, 18:41
Wohnort: Hamburg

Beitrag von Mechanicus »

dave hat geschrieben:Wie meinst du das, dass die Dokumentklasse unbekannt ist?
Ich dachte, ich hätte diese nicht. Sorry.

dave hat geschrieben: Und genau dieses Label findet man test_02.tex Datei, trotzdem kommt die Warnung "undefined".
Bei der Verwendung von include, findet es gar kein label bei mir. Nur wenn ich input verwende:

Code: Alles auswählen

\RequirePackage{filecontents}
\begin{filecontents*}{test_02.tex}
\section{Lorem ipsum}
\lipsum[1]
\begin{equation}
\label{eq:th01}
|\psi\rangle = \frac{1}{2} \cdot \left( |+\rangle_1 \cdot |-\rangle_2 + |-\rangle_1 \cdot |+\rangle_2 \right) ,
\end{equation}
\lipsum[1]
\begin{equation}
    \label{eq:th02}
    S = |E(\vec{a},\vec{b})-E(\vec{a},\vec{b'})|+|E(\vec{a'},\vec{b})+E(\vec{a'},\vec{b'})| \leq 2,
\end{equation}

siehe \ref{eq:th01} und \ref{eq:th02}
\begin{figure}[!ht]
\rule{2cm}{2cm}
\caption{foo} \label{bild}
\end{figure}

\ref{bild}
\end{filecontents*}
\documentclass[11pt,a4paper,twoside,aps,prl,twocolumn,groupedaddress]{revtex4-1}

\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{amsmath}
\usepackage{lipsum}

\begin{document}
\include{test_02}
%\input{test_02}
\end{document}
Die Dokumentation lässt sich aber auch nicht richtig aus. (zumindest habe ich nichts gesehen, was wiederum nichts zu bedeuten hat :) )

Gruß
Marco
Personalführung ist die Kunst der Vorgesetzten den Untergebenen so schnell über den Tisch zu ziehen, dass er die Reibungshitze als Nestwärme empfindet.

dave

Beitrag von dave »

Sehr seltsam ... eigentlich dürfte zwischen \include und \input kaum ein Unterschied sein, aber es ist doch einer. Bei einem Originaltext funktioniert das Labeln und Referieren problemlos mit \input. Damit ist mein eigentliches Problem gelöst.

Das Problem scheint auch wirklich bei revtex4 zu liegen. Wenn ich z.B. die article-Klasse und \include verwende, funktioniert das Labeln ebenfalls. Ich werd die Leute bei revtex mal anschreiben und sie auf diesen Thread hier verweisen.

Danke für deine Hilfe, hast mir den Tag gerettet. :D

sommerfee
Forum-Century
Forum-Century
Beiträge: 213
Registriert: Sa 12. Jul 2008, 08:02
Wohnort: Ich bin hier nicht mehr zu erreichen!

Beitrag von sommerfee »

dave hat geschrieben:Das Problem scheint auch wirklich bei revtex4 zu liegen.
Definitiv. Wenn ich dies hier übersetze:

Code: Alles auswählen

\RequirePackage{filecontents} 
\begin{filecontents*}{test_02.tex} 
\section{Lorem ipsum} 
\begin{figure}[!ht] 
\rule{2cm}{2cm} 
\caption{foo\label{bild}}
\end{figure}
\ref{bild} 
\end{filecontents*} 
\documentclass{revtex4-1} 
\begin{document} 
\include{test_02} 
%\input{test_02} 
\end{document}
sieht man folgendes im log-file:

Code: Alles auswählen

) [1{/var/lib/texmf/fonts/map/pdftex/updmap/pdftex.map}
\@writefile{toc}{\contentsline {section}{\numberline {I}Lorem ipsum}{1}{}}
\@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces foo}}{1}{
}}
\newlabel{bild}{{1}{1}{}{}{}}
] (./test.aux (./test_02.aux))
Die \@writefile und \newlabel haben aber in der Log-Ausgabe rein gar nichts zu suchen, die gehören eigentlich in die aux-Datei!

Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2645
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Die Klasse definiert \clearpage um, was dazu führt, dass bei \include die Unter-aux-Datei zur per \include geladenen Datei bereits geschlossen ist, wenn die letzte Seite dieser Datei ausgegeben wird. Daher landet dann alles, was in diese aux-Datei gehört in der Konsole und der log-Datei.

Ich würde das als Bug bezeichnen. Du solltest das an den Autor der Klasse melden.

Workaround: Am Ende der per \include geladenen Datei ein \clearpage einfügen.

dave

Beitrag von dave »

Ich habe die Autoren von revtex angeschrieben und ihnen das Minimalbeispiel von Mechanicus geschickt. Laut deren Angabe wird die Datei fehlerlos kompiliert. Ist irgendwie schwer von einem Bug zu sprechen, wenn die Entwickler ihn nicht reproduzieren können. :?

Benutzeravatar
bloodworks
Moderator
Moderator
Beiträge: 1425
Registriert: Mo 19. Jan 2009, 10:52
Wohnort: /dev/null

Beitrag von bloodworks »

Hallo ich habe gerade das Beispiel von sommerfee ausprobiert. Ich kann den Bug (oder wie auch immer) bestätigen.

MacTeX 2010 pdflatex snow leo

Code: Alles auswählen

*File List*
filecontents.sty    2009/03/17 v1.2 Create an external file from within a LaTeX
 document
revtex4-1.cls    2010/02/25/18:00:00 4.1p (http://publish.aps.org/revtex4/ for 
documentation)
  aps4-1.rtx
aps10pt4-1.rtx
textcase.sty    2004/10/07 v0.07 Text only upper/lower case changing (DPC)
     url.sty    2006/04/12  ver 3.3  Verb mode for urls, etc.
  natbib.sty    2009/11/07 8.31a (PWD, AO)
  natbib.cfg
revsymb4-1.sty    2010/02/25/18:00:00 4.1p (http://publish.aps.org/revtex4/ for
 documentation)
 test_02.tex
 ***********
Mag auch sein, dass das eine Inkompatibilität ist.
[1] Nützliche Webdokumente für Anfänger und Fortgeschrittene
[2]Minimalbeispiel | [3]FAQ
[4]Regelwerk | [5] Knigge
Wenn nicht anderst angegeben ist mein System: texlive 2012, pdflatex, x86-64, Snow Leopard utd.
Angehöriger der Liga zur Verwendung von texdoc
texdoc mathmode koma l2picfaq l2tabu lshort-en
Achtung: Aufforderungen ein Minimalbeispiel oder mehr Erklärungen zu einer Frage zu liefern sind keine persönlichen Angriffe. Sie dienen viel mehr dazu die Kommunikation zwischen Fragendem und potentiellen Helfern zu erleichtern und zu präzisieren.


Benutzeravatar
KOMA
TeX-Entwickler
TeX-Entwickler
Beiträge: 2645
Registriert: Fr 4. Jul 2008, 17:28
Kontaktdaten:

Beitrag von KOMA »

Ich habe sogar revtex4-1.cls in Version 2010/07/25/20:33:00 4.1r (http://publish.aps.org/revtex4/ for documentation) und der Fehler, dass das Material für die aux-Datei in der log-Datei landet (Grund siehe oben) tritt definitiv auf. Das ist mit dem kleinen Minimalbeispiel von sommerfee sehr schön nachzuvollziehen. Obiges ist übrigens die neuste Version, die ich unter der angegebenen Adresse, auf CTAN und in TeX Live 2010 finden konnte.

Antworten