不乾淨的 .aux 檔案會導致「掃描使用 \@newl@bel 時檔案結束」錯誤。為什麼沒有被清除?

不乾淨的 .aux 檔案會導致「掃描使用 \@newl@bel 時檔案結束」錯誤。為什麼沒有被清除?

我正在使用 TeXShop(MacTex2013 發行版)開發 TeX Live 2013

預期的行為是,如果編譯期間發生錯誤,.aux 檔案將被清除。因此,後續編譯必須進行兩次,以獲得正確的引用。

在下面的“最小”範例中,這種情況不會發生。 .aux 檔案保持一半寫入狀態,導致「掃描使用 \@newl@bel 時檔案結束」錯誤。

即使是最小的更改也會導致 .aux 檔案被正確清除。例如:

  • 標題或說明文字的變更。甚至將 Ü 改為 \"U。
  • 在任何地方省略 \label{...} 。
  • 在任何地方省略 \cite{...} (提供 .bib 資源沒有效果)。
  • 不使用 biblatex 或 hyperref。
  • 更改分頁符號。

這是獨立的文件。

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

若要重現該錯誤,請執行下列操作:

  1. 觀察文件末尾的單一 $ 導致錯誤
  2. 編譯(.aux 仍處於不乾淨的狀態)
  3. 糾正錯誤
  4. 再編譯(.aux寫一半導致錯誤)
  5. 刪除 .aux 檔案即可恢復

我知道會發生什麼以及如何恢復。我的問題是:

為什麼會出現這種情況?

或更好

有辦法預防嗎?


在我目前的文件中,對於我在最後一節中編寫時犯的每個錯誤,我都必須手動刪除 .aux 檔案才能恢復。由於我在寫作時經常進行編譯,因此這是一種煩惱,我想阻止它。

據我了解,.aux 檔案的輸出是緩衝的。如果出現錯誤,編譯將停止並且目前緩衝區保持未寫入狀態。此時 .aux 檔案包含已寫入的緩衝區塊,這可能會在任何地方中斷,從而留下不完整的定義。

通常我不會在控制台上使用 TeX 引擎,而只是更正錯誤並重新啟動。

我不明白是什麼觸發了 .aux 檔案的刪除,正如範例所示,該檔案不能可靠地工作。可能是 biblatex 或 hyperref 套件所致。您能否解釋一下?

也有興趣:

  • 有什麼東西可以控制錯誤後 .aux 檔案的刪除嗎?
  • 是否有 TeX/LaTeX 指令可以用來手動刷新 .aux 檔案的輸出緩衝區?我可以在我正在處理的部分之前使用此命令。這樣,我可能就不必再經常處理損壞的 .aux 檔案了。
  • pdflatex 程式是否有選項,以便在發生錯誤後刷新輸出緩衝區。在大多數情況下,錯誤不會影響 .aux 文件,因此沒有理由不完成寫入。在這種情況下,我必須刪除它。

StackExchange 上有幾個相關問題:

答案1

在...的幫助下aux檔什麼時候讀寫?在芭芭拉·比頓 (Barbara Beetons) 的幫助下,我能夠確定出了什麼問題以及如何預防它。

這就是問題:

通常我不會在控制台上使用 TeX 引擎,而只是更正錯誤並重新啟動。

這就是我應該在控制台上執行的操作:

  • 輸入?+Return以了解可以做什麼。
  • 只需Return重複敲擊直到 Tex 完成。
  • 輸入X+Return立即結束運行。
  • 輸入E+Return使遊標跳到發生錯誤的位置。

發生的情況是,TeX 分兩個階段將 \write 指令緩衝到 .aux 檔案中。第一階段,它會等到頁面發出後才能獲得正確的頁碼。第二階段,它等到它認為合適時才發出write()系統調用,以減少(可能很慢)系統調用的數量。第二個緩衝區似乎並不關心它寫入檔案的區塊是否是獨立的合法 TeX,因為無論如何它都會在 TeX 運行完成之前完成檔案。

然而,在 TeXShop 環境中,很容易讓 TeX 在出現錯誤後掛起未完成的狀態。因此,第二個輸出緩衝器不會被刷新,並且 .aux 檔案可能未完成並處於非法狀態。

我個人由此得出的結論是:始終讓 TeX 完成。


TeX 在因錯誤而停止後有機會完成運行的假設在視窗環境之前是非常合理的,在視窗環境中,讓進程掛在後台變得很容易和正常。

為了促進這種使用者行為,可以在軟體方面做的事情:

  • 更改 Tex 的第二個緩衝區行為,以便write()在出現錯誤時發出系統呼叫或僅分解為 TeX 合法的區塊。
  • 調整環境 (TexShop) 以在進程中止後清理 .aux 檔案或提供預設輸入以始終正確完成進程。

使用者可以做的事情,除了總是讓 TeX 完成之外:

  • 使用\include{...}。這樣,之前各部分的 .aux 檔案將在錯誤發生時關閉並完成。很可能您目前部分的 .aux 檔案還不夠大,並且沒有編寫 TeX 非法部分。
  • 破解一些內容,\immediate\closeout\@mainaux其中包括\openout\@mainaux內容的副本,這樣它們就不會被覆蓋。這將有效地刷新輸出緩衝區。但似乎不值得付出努力。

答案2

我剛剛遇到了同樣的問題,並且在我的 tex 檔案中找不到任何有問題的程式碼。事實證明,有問題的文字實際上是在我剛剛添加到 BibText 中的引文中,我正在使用該biblatex套件導入該引文。當我從 PubMed 匯出引文時,摘要中一定有某種奇怪的字元。我刪除了整個摘要(因為無論如何它都不會顯示在參考文獻中),刪除了臨時文件,並重建了我的 PDF,沒有出現錯誤。

答案3

我發現終止編譯並簡單地刪除損壞文件的最後一行要快得多,.aux其中截斷的緩衝區寫入會導致不完整/非法的 TeX,特別是在處理大型文檔和/或調試持久/反复.aux損壞時。這樣您就可以保留.aux檔案的有效部分,而不必等待編譯完成。

在大多數編輯器中,只需按幾次鍵即可將焦點切換到檔案.aux、跳到末尾並刪除最後一行,因此可以很快完成此操作。

如果您希望強制編譯完成,以便\write刷新所有緩衝的並且.aux不會損壞,您可以指示編譯器繼續處理錯誤,而無需使用該-interaction=nonstopmode選項暫停使用者輸入,這樣您就不必敲擊他們每個人過去。

答案4

我在寫論文時也遇到了同樣的問題。請小心您可能使用的來自Google學者的參考資料或一些可能與您的圍脖包支援格式不同的綜合文件。製作正確的參考文獻可能會解決您的問題,正如我透過更正參考文獻解​​決的那樣。

相關內容