깨끗하지 않은 .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 파일 삭제를 제어할 수 있는 기능이 있나요?
  • .aux 파일의 출력 버퍼를 수동으로 플러시하는 데 사용할 수 있는 TeX/LaTeX 명령이 있습니까? 작업 중인 섹션 바로 앞에 이 명령을 사용할 수 있습니다. 그렇게 하면 더 이상 손상된 .aux 파일을 자주 처리하지 않아도 될 것입니다.
  • 오류 발생 후 출력 버퍼가 플러시되도록 pdflatex 프로그램에 대한 옵션이 있습니까? 대부분의 경우 오류는 .aux 파일에 영향을 미치지 않으므로 쓰기를 완료하지 않을 이유가 없습니다. 그런 경우에는 삭제해야 합니다.

StackExchange에는 몇 가지 관련 질문이 있습니다.

답변1

의 도움으로aux 파일은 언제 읽고 쓰나요?그리고 Barbara Beeton의 친절한 도움으로 무엇이 잘못되었는지, 어떻게 예방할 수 있는지 판단할 수 있었습니다.

이게 문제 야:

일반적으로 나는 콘솔에서 TeX 엔진을 사용하지 않고 단순히 오류를 수정하고 다시 시작합니다.

콘솔에서 수행했어야 했던 작업은 다음과 같습니다.

  • 무엇을 할 수 있는지 알아보려면 ?+를 입력하세요 .Return
  • ReturnTex가 끝날 때까지 반복적으로 누르기만 하면 됩니다 .
  • 실행을 즉시 완료하려면 X+를 입력하세요 .Return
  • E+를 입력 Return하면 커서가 오류가 발생한 지점으로 이동합니다.

일어나는 일은 TeX가 두 단계로 \write 명령을 .aux 파일에 버퍼링한다는 것입니다. 첫 번째 단계에서는 페이지 번호를 올바르게 가져오기 위해 페이지가 배송될 때까지 기다립니다. 두 번째 단계에서는 write()(잠재적으로 느린) 시스템 호출 수를 줄이기 위해 시스템 호출을 발행하기에 적합하다고 판단될 때까지 기다립니다 . 이 두 번째 버퍼는 파일에 쓰는 청크가 자체 포함된 합법적인 TeX인 경우 TeX 실행이 끝나기 전에 파일을 완료하므로 겉으로 보기에는 상관하지 않는 것 같습니다.

그러나 TeXShop 환경에서는 오류 후에 TeX가 완료되지 않은 상태로 멈추게 하는 유혹이 있습니다. 따라서 두 번째 출력 퍼퍼는 플러시되지 않으며 .aux 파일은 미완성 및 불법 상태로 남아 있을 수 있습니다.

이에 대한 내 개인적인 결론은 다음과 같다.항상 TeX를 끝내도록 하세요.


TeX가 오류로 인해 중지된 후 실행을 완료할 기회가 있을 것이라는 가정은 창 환경 이전에는 매우 합리적이었습니다. 창 모드에서는 프로세스를 백그라운드에 두는 것이 쉽고 일반적이었습니다.

이러한 사용자 행동을 촉진하기 위해 소프트웨어 측면에서 수행할 수 있는 작업은 다음과 같습니다.

  • write()오류가 발생한 경우 시스템 호출을 실행하거나 TeX에 적합한 청크로만 분할하도록 Tex의 두 번째 버퍼 동작을 변경합니다 .
  • 프로세스 중단 후 .aux 파일을 정리하거나 프로세스를 항상 올바르게 완료할 수 있도록 기본 입력을 제공하도록 환경(TexShop)을 조정합니다.

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 학술 자료 또는 턱받이 패키지 지원과 형식이 다를 수 있는 일부 포괄적인 파일에서 사용할 수 있는 참고 자료에 주의하세요. 내가 참조를 수정하여 해결한 것처럼 올바른 참조를 하면 문제가 해결될 수도 있습니다.

관련 정보