Unsaubere .aux-Datei verursacht den Fehler „Datei wurde beim Scannen der Verwendung von \@newl@bel beendet“. Warum wird sie nicht gelöscht?

Unsaubere .aux-Datei verursacht den Fehler „Datei wurde beim Scannen der Verwendung von \@newl@bel beendet“. Warum wird sie nicht gelöscht?

Ich arbeite an TeX Live 2013 mit TeXShop (MacTex2013-Distribution)

Das erwartete Verhalten ist, dass im Falle eines Fehlers während der Kompilierung die .aux-Datei gelöscht wird. Die nachfolgende Kompilierung muss daher zweimal durchgeführt werden, um die Referenzen richtig zu erhalten.

Im folgenden „minimalen“ Beispiel passiert das nicht. Die .aux-Datei bleibt zur Hälfte geschrieben, was zu einem Fehler „Datei wurde beim Scannen der Verwendung von \@newl@bel beendet“ führt.

Schon minimale Änderungen führen dazu, dass die .aux-Datei korrekt gelöscht wird. Zum Beispiel:

  • Textänderung in Überschriften oder Bildunterschriften. Auch eine Änderung von Ü zu „U“ ist möglich.
  • Das Weglassen eines \label{...} an einer beliebigen Stelle.
  • Das Weglassen von \cite{...} an einer beliebigen Stelle (das Angeben einer .bib-Ressource hat keine Auswirkung).
  • Verwende weder Biblatex noch Hyperref.
  • Ändern der Seitenumbrüche.

Hier ist die in sich geschlossene Datei.

\documentclass{article}


\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{csquotes}
%\usepackage[T1]{fontenc}


\usepackage{biblatex}

\usepackage{hyperref}


% ================================================

\begin{document}

\clearpage

\section{Geomaxrie der ganzzahligen linearen Optimierung}

\label{Sec.Einfuhrung}

. [figure]

\begin{figure}
\caption{Caption}
\label{Fig.Beispiel-ILP}
\end{figure}

\section{Gitterbasisreduktion und Voronoi Algorithmus}
\label{Sec.Voronoi}

.

.

.

.

.

.

.

.

.

.

cite\cite{Voronoi}

.

.

.

label\label{Thm.Voronoi}

.

.


label\label{Alg.VoronoiFilter}

.

.

label\label{Alg.VoronoiFilter.Bedingung}

.

.

.

.

.

.

.

.

.

label\label{Alg.CVPP}

.

.

.

.

.

.

.

label\label{Alg.VoronoiRelevant}

.

.

.

.

.

.

.

label\label{Alg.Voronoi}

.

\clearpage
\section{Ellipsoid-Überdeckungen und M-Ellipsoide}
\label{Sec.Ellipsoid-Methode.M-Ellipsoide}

. [figure]

\begin{figure}
.
\caption{Löwner-John-Ellipsoid mit Anwendung in der Ellipsoid Methode}
\label{Fig.MinEllipsoid}
\end{figure}

.

.

label\label{Thm.InertEllipsoid}

label\label{Thm.MEllipsoid}

.

.

. [figure]

\begin{figure}
\caption{Label}
\label{Fig.M-Ellipsoidoo}
\end{figure}

label\label{Alg.ConvexBodyEnumerationInformal}

.

.

\clearpage
\section{Berechnungsmodell}
\label{Sec.Berechnungsmodell}

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

.

cite\cite{M-Ellipsoid}

.

.

.

.

.

.

.

.

.

.

.

.

.

.


label\label{Def.SEP}

.

.

.

.

\section{M-Ellipsoid Algorithmen}

.

label\label{Theorem}

Cause error here: $

A simple error at this point results in the .aux file not being cleaned. Even marginal changes in the document above make the effect disappear


\end{document}

Um den Fehler zu reproduzieren, gehen Sie wie folgt vor:

  1. Beachten Sie das einzelne $ am Ende des Dokuments, das einen Fehler verursacht
  2. Kompilieren (.aux bleibt in einem unsauberen Zustand)
  3. Korrigieren Sie den Fehler
  4. Erneut kompilieren (halb geschriebene .aux verursacht Fehler)
  5. Löschen Sie die .aux-Datei zur Wiederherstellung

Ich weiß, was passiert und wie ich mich davon erhole. Meine Frage ist:

Warum passiert das?

oder besser

Gibt es eine Möglichkeit, dies zu verhindern?


In meinem aktuellen Dokument muss ich für jeden Fehler, den ich beim Schreiben im letzten Abschnitt mache, die .aux-Dateien manuell löschen, um sie wiederherzustellen. Da ich beim Schreiben ziemlich oft kompiliere, ist dies ärgerlich und ich möchte es verhindern.

So wie ich das verstehe, wird die Ausgabe in eine .aux-Datei gepuffert. Im Fehlerfall wird die Kompilierung abgebrochen und der aktuelle Puffer bleibt unbeschrieben. An diesem Punkt enthält die .aux-Datei die bereits geschriebenen Pufferblöcke, die überall unterbrochen werden können und unvollständige Definitionen hinterlassen.

Normalerweise arbeite ich dann nicht mit der TeX-Engine auf der Konsole, sondern korrigiere einfach meinen Fehler und starte neu.

Ich verstehe nicht, was das Löschen der .aux-Datei auslöst, das, wie das Beispiel zeigt, nicht zuverlässig funktioniert. Möglicherweise liegt es am biblatex- oder hyperref-Paket. Könnten Sie das näher erläutern?

Auch interessant:

  • Gibt es eine Möglichkeit, das Löschen der .aux-Datei nach einem Fehler zu steuern?
  • Gibt es TeX/LaTeX-Befehle, mit denen ich den Ausgabepuffer für die .aux-Datei manuell leeren kann? Ich könnte diesen Befehl direkt vor dem Abschnitt verwenden, an dem ich gerade arbeite. Auf diese Weise muss ich mich wahrscheinlich nicht mehr so ​​oft mit einer beschädigten .aux-Datei herumschlagen.
  • Gibt es eine Option für das pdflatex-Programm, damit die Ausgabepuffer nach einem Fehler geleert werden? In den meisten Fällen wirkt sich der Fehler nicht auf die .aux-Datei aus, es gibt also keinen Grund, sie nicht fertig zu schreiben. In den Fällen, in denen dies der Fall ist, müsste ich sie dann löschen.

Hier auf StackExchange gibt es mehrere verwandte Fragen:

Antwort1

Mit der Hilfe vonWann wird die AUX-Datei gelesen und geschrieben?und Barbara Beetons freundlicher Unterstützung konnte ich feststellen, was schief läuft und wie man es verhindern kann.

Das ist das Problem:

Normalerweise arbeite ich dann nicht mit der TeX-Engine auf der Konsole, sondern korrigiere einfach meinen Fehler und starte neu.

Folgendes hätte ich auf der Konsole tun sollen:

  • Geben Sie ?+ ein Return, um eine Vorstellung davon zu bekommen, was getan werden kann.
  • Schlagen Sie einfach Returnwiederholt, bis Tex fertig ist.
  • Geben Sie X+ ein Return, um den Lauf sofort zu beenden.
  • Geben Sie E+ ein Return, um den Cursor an die Stelle springen zu lassen, an der der Fehler aufgetreten ist.

Was passiert, ist, dass TeX die \write-Befehle in zwei Stufen in die .aux-Datei puffert. In der ersten Stufe wartet es, bis eine Seite ausgeliefert wird, um die Seitenzahlen richtig zu bekommen. In der zweiten Stufe wartet es, bis es einen write()Systemaufruf ausgibt, um die Anzahl der (möglicherweise langsamen) Systemaufrufe zu reduzieren. Diesem zweiten Puffer scheint es egal zu sein, ob die in die Datei geschriebenen Blöcke in sich abgeschlossenes, legales TeX sind, da er die Datei ohnehin fertigstellt, bevor der TeX-Lauf beendet ist.

In der Umgebung von TeXShop ist es jedoch verlockend, TeX nach einem Fehler unvollendet zu lassen. Dadurch wird der zweite Ausgabepuffer nicht geleert und die .aux-Datei bleibt möglicherweise unvollendet und in einem ungültigen Zustand.

Mein persönliches Fazit daraus:Lassen Sie TeX immer beenden.


Die Annahme, dass TeX nach einem Stopp aufgrund eines Fehlers die Möglichkeit hat, seinen Lauf zu beenden, war vor den Fensterumgebungen sehr vernünftig, da es einfach und normal war, Prozesse im Hintergrund laufen zu lassen.

Dinge, die auf der Softwareseite getan werden könnten, um dieses Benutzerverhalten zu erleichtern:

  • Ändern Sie das Verhalten des zweiten Puffers von Tex, um write()im Fehlerfall einen Systemaufruf auszugeben oder nur in TeX-zulässige Blöcke aufzuteilen.
  • Passen Sie die Umgebung (TexShop) an, um entweder die .aux-Datei nach einem Prozessabbruch zu bereinigen oder eine Standardeingabe bereitzustellen, um den Prozess immer korrekt abzuschließen.

Dinge, die der Benutzer tun kann, außer TeX immer beenden zu lassen:

  • Verwenden Sie \include{...}. Auf diese Weise sind die .aux-Dateien der vorherigen Abschnitte geschlossen und fertig, wenn der Fehler auftritt. Wahrscheinlich ist die .aux-Datei Ihres aktuellen Abschnitts noch nicht groß genug und es wurden keine TeX-illegalen Teile geschrieben.
  • Hacken Sie etwas, das \immediate\closeout\@mainauxgefolgt von einem \openout\@mainauxund einer Kopie des Inhalts beinhaltet, damit dieser nicht überschrieben wird. Dadurch wird der Ausgabepuffer effektiv geleert. Scheint den Aufwand jedoch nicht wert zu sein.

Antwort2

Ich hatte gerade dasselbe Problem und konnte in meiner Tex-Datei keinen fehlerhaften Code finden. Es stellte sich heraus, dass der fehlerhafte Text tatsächlich in einem Zitat enthalten war, das ich gerade zu BibText hinzugefügt hatte, das ich mithilfe des biblatexPakets importierte. Es muss ein seltsames Zeichen in der Zusammenfassung enthalten gewesen sein, das beim Exportieren des Zitats aus PubMed enthalten war. Ich entfernte die gesamte Zusammenfassung (da sie ohnehin nicht in den Referenzen angezeigt werden würde), löschte die temporären Dateien und erstellte mein PDF ohne Fehler neu.

Antwort3

Ich finde es viel schneller, die Kompilierung abzubrechen und einfach die letzte Zeile der beschädigten .auxDatei zu löschen, wenn der verkürzte Pufferschreibvorgang zu unvollständigem/illegalem TeX führt, insbesondere beim Arbeiten mit großen Dokumenten und/oder beim Debuggen dauerhafter/wiederkehrender .auxBeschädigungen. Auf diese Weise können Sie den gültigen Teil der .auxDatei beibehalten und müssen nicht warten, bis die Kompilierung abgeschlossen ist.

In den meisten Editoren sind nur wenige Tastenanschläge erforderlich, um den Fokus auf die .auxDatei zu ändern, zum Ende zu springen und die letzte Zeile zu löschen. Dies geht also recht schnell.

Wenn Sie die Kompilierung lieber beenden möchten, damit alle gepufferten \write's gelöscht werden und das .auxnicht beschädigt ist, können Sie den Compiler mit der Option anweisen, die Fehler ohne Pause für Benutzereingaben zu durchlaufen. -interaction=nonstopmodeAuf diese Weise müssen Sie nicht bei jedem einzelnen Fehler eine Taste drücken.

Antwort4

Das gleiche Problem hatte ich bei der Arbeit an meiner Abschlussarbeit. Seien Sie vorsichtig mit den Referenzen, die Sie möglicherweise von Google Scholar oder einigen umfassenden Dateien verwenden, die wahrscheinlich ein anderes Format haben als das, das Ihr Bib-Paket unterstützt. Korrekte Referenzen könnten Ihr Problem lösen, so wie ich es durch Korrigieren der Referenzen gelöst habe.

verwandte Informationen