KTUGFaq

KTUG FAQ

로그인:
비밀번호:
가입
His heart was yours from the first moment that you met.
FrontPage › 오류처리

목차

1 컴파일시 에러 검출
2 Real ERRORS
2.1 에러인 것과 에러가 아닌 것
2.2 자주 만나는 에러와 처리방법
3 Warnings
3.1 Overfull, Underfull warning
3.2 Font shape unavailable warning
4 debugging과 tracing
4.1 PlainTeX의 tracing
4.2 e-TeX의 tracingall
4.3 LaTeX의 trace 패키지

에러는 크게 세 가지 층위에서 발생한다.

  1. TeX 에러
  2. LaTeX 에러
  3. package 또는 macro 에러
<!> "오류 메시지"는 log 파일의 끝 부분에도 있습니다.

1 컴파일시 에러 검출

TeX 에러 메시지는 다음과 같은 모양을 하고 있다.
errordisplay.jpg

그림1: e 그리고 Enter 키를 치면 6행으로 찾아 간다. \secttion을 \section으로 고치면 된다.

또는 LaTeX 에러 메시지를 보여주는 에러도 있다.
latex_error.jpg


그림2: e 그리고 Enter 키를 치면 e.sty 파일을 찾을 수 없다는 메시지가 나타난다. aaa.sty가 꼭 필요하면 LaTeX이 찾을 수 있는 조치를 하여야 한다.

latexerrordisp.jpg

그림3: e 그리고 Enter 키를 치면 11행으로 찾아 간다. 그림 파일 aaa.eps의 경로를 찾아 주거나 다른 필요한 조치를 하면 된다.

  • -file-line-error 옵션을 실행시에 지시하면 파일명:에러발생행번호: 형식의 에러 메시지를 볼 수 있고 nonstopmode로 동작한다.
  • 위와 같이 사용자 입력을 기다리는 상태에서 다음과 같은 일을 할 수 있다.
    • h : 간단한 도움말을 보여준다.
    • e : 현재의 컴파일을 중단하고 에러 발생 위치에서 편집기를 열어준다.
    • r : 모든 에러를 무시하고 nonstopmode로 파일 끝까지 컴파일을 시도한다.
    • q : 모든 에러를 무시하고 batchmode로 파일 끝까지 컴파일을 시도한다.
    • s : 모든 에러를 무시하고 scrollmode로 파일 끝까지 컴파일을 시도한다.
    • x : 컴파일을 중단한다.
    • I<stuff> : 현재의 에러 발생 위치에 있는 단어(매크로)를 stuff으로 바꾸어서 컴파일한다.
    • <Enter> : 현재 발생한 에러를 무시하고 계속 컴파일한다.
    • 1..9 : 지정된 숫자만큼 그 뒤의 control sequence를 무시하고 컴파일을 시도한다.
    • e가 제대로 작동하려면 에디터와의 연동이 미리 설정되어 있어야 한다. See 오류처리/에디터설정
    • I<stuff>은 파일에 저장되지 않는다.
    • 1..9의 숫자에서 무시되는 control sequence는 TeX이 처리하는 순서를 가리키는 것이지 입력파일의 명령어를 의미하는 것이 아니다. plainTeX에서는 유용하나 다른 control sequence를 대단히 많이 호출하는 LaTeX에서는 오류를 처리하는 데 적절하지 못하다.

    2 Real ERRORS

    2.1 에러인 것과 에러가 아닌 것

    1. 가끔 이전의 latex 실행에서 남아 있던 부수파일(*.aux, *.toc 등)에서 에러가 발생하는 것처럼 보일 때가 있으나 다시 latex을 실행하면 없어진다면 이것은 에러가 아니다.
    2. 오타에 기인한 에러는 엄밀히 말해서 에러가 아니다. 이런 에러는 즉시 발견하고 수정할 수 있다.
    3. Warning은 에러가 아니다. 다만 경고일 뿐이다. 이것은 경우에 따라 무시해도 좋을 때도 있다. 경고에 대해서는 별도로 다룬다.

    2.2 자주 만나는 에러와 처리방법

    아래에서 LaTeX 사용자가 만날 수 있는 TeX 또는 LaTeX 에러를 간략히 정리해둔다.
    \?/ [http]TeX Frequently Asked Questions의 항목 "The joy of TeX errors"에도 진단과 처방이 있습니다.-Yhchoe

  • "*" (아무 메시지도 없이 별표 프롬프트만 나오는 경우)
    TeX 명령행 상태이다. LaTeX 문서 처리중에 이 프롬프트를 만났다면 TeX에게 "최종 처리" 명령을 전달하지 못한 것이다. 이 프롬프트에서 빠져나오려면 \end{document}를 직접 써넣는데, 대부분의 경우 결과가 의도한 바와 다를 것이다. 단순히 \end{document}를 빠뜨린 것이라면 문서 마지막에 이 명령을 써넣으면 되고 그렇지 않고 매크로 처리 과정에서 오류가 생긴 것이면 문서에 사용된 코드를 재검토해야 한다. cf. http://www.tex.ac.uk/cgi-bin/texfaq2html?label=typend

  • No room for new \dimen 또는 No room for new \skip 에러
    TeX 에러 중에서 가장 처리하기 어려운 오류이다. 이것은 TeX 시스템 자체의 한계와 관련된 것이다. 이 오류가 발생하는 경우는 너무 많은 \dimen, \skip을 사용했을 경우인데 일반적으로 복잡한 스타일을 불필요하게 로드하였을 때도 발생할 수 있다. 예를 들면 memoir와 musixltx를 동시에 쓰는 경우와 같은 것이다. 이 오류의 근본적인 해결은 TeX 시스템을 재설계하는 것이라 생각한다. e-TeX은 이 오류가 좀 덜 발생할 수 있도록 내부적인 개선을 이루어두었다 한다. 그러므로 앞으로는 이 오류를 만날 가능성이 줄어들 것이 틀림없고 실제로 이 오류가 발생했다 해도 로드한 패키지들을 검토하여 불필요한 것을 제외하면 해결할 수 있는 것이 많다.

  • Undefined control sequence 에러
    정의되지 않은 명령 또는 환경이 쓰였다는 것이다. 대부분 오타에서 기인한 것이기 쉽다. 또는 \usepackage{graphicx} 없이 \includegraphics 명령을 쓰는 경우와 같이 해당하는 control sequence가 정의된 패키지를 로드하지 않아서 발생할 수도 있다.
    => 오타를 수정하거나 명령을 정의한다. 또는 필요한 패키지를 로드한다.

  • TeX capacity exceeded 에러
    이따금 보게 되는 에러인데 이런 문제가 생길 가능성은 다음과 같다.
    1. 실제로 현재 설정된 TeX capacity 설정값이 주어진 문서 파일을 처리하기에 부족한 경우. 즉 복잡한 스타일들을 여러 개 얹었거나 지나치게 많은 매크로를 정의해서 사용하거나 한 경우이다.
      => tex capacity 관련 설정값을 수정하여 TeX 시스템 기본 설정을 바꾸어야 한다. 방법은 TeX 시스템 기본 설정 파일을 수정하거나 새로 포맷을 만들거나, 주변의 TeX 도사에게 물어보는 것이다.
    2. 매크로 정의에서 loop가 발생한 경우
      => 잘못 정의된 매크로를 올바르게 고친다.
    3. 스타일 사이의 충돌이 있는 경우
      => preamble의 style 로드를 하나씩 제거해가면서 문제가 없어지는지 여부를 확인한다.

    이 가운데 가장 많은 예는 두번째의 매크로 정의의 오류이다. 첫번째 경우는 상대적으로 많지 않으므로 혹시 이런 에러를 만난다면 반드시 preamble을 먼저 검토해보도록 하고 TeX 시스템 설정을 수정하는 것은 최후에 시도해보도록 하여야 한다.

  • Extra alignment tab has been to \cr 에러
    이 에러는 배열환경에서 발생하는 것으로 주로 표나 array에서 미리 지정된 column 수가 맞지 않을 때 발생한다. 보통 행나눔 (\\) 명령을 한 줄에서 잊은 경우가 가장 많다. 경우에 따라서 column 수가 맞다 해도 내부 매크로의 동작 때문에 이러한 에러가 발생할 수 있다. 표와 array의 코드를 검토해보아야 할 것이다.

  • Misplaced alignment tab char & 에러
    & 문자는 배열환경의 칼럼 지정자로 쓰이는 유보문자이다. 이 문자를 텍스트 위치에 놓았을 때 발생하는 에러이다. & 문자를 텍스트로 그대로 찍으려면 \& 로 하여야 한다.

  • Misplaced \noalign 에러
    Tabular환경으로 표를 만들 때 표의 배열환경은 비교적 엄격한 행나누기를 요구하는 수가 있다. 예컨대 colortbl 환경의 \rowcolor와 같은 매크로는 특정 행의 제일 첫번째 매크로가 아니면 위와 같은 에러를 낸다. 현재 행에서 \rowcolor 보다 앞서 나온 매크로를 없애거나 수정한다.

  • Illegal unit of measure (pt inserted) 에러
    dimension 변수에 할당된 값이 길이 단위가 주어지지 않았다는 의미이다.

  • Missing control sequence inserted 에러
    새 명령어를 정의하거나 기존의 명령어의 정의를 바꾸기 위하여 \newcommand 또는 \renewcommand를 쓰면서 첫째 요소로 명령어(backslash로 시작함)를 넣지 않았을 때

  • Missing \endcsname inserted
    LaTeX 에러가 아니라 TeX 에러이다. 대개 TeX 에러가 추적이 훨씬 어렵다. 가장 단순한 보기는 예를 들면 다음과 같이 불필요한 백슬래시 \를 쓴 경우에 만나볼 수 있다.
    \begin{\sffamily}
    
    한글 관련 매크로에서 이 에러가 발생하였을 때 쉽게 추적하기 어려운 경우도 많다. 이 에러를 만나면 적절한 곳(게시판)에 에러 발생 상황과 매크로 정의를 상세히 보고하여 질문해보는 수밖에는 없어 보인다.

  • Missing \endgroup inserted
    TeX 에러가 발생하는 경우는 매우 다양하다. 대표적인 경우를 하나 들자면 displaymath 환경 안에 eqnarray 환경을 다시 넣은 경우와 같이 허용되지 않는 환경 nesting이 있었을 때 발생할 수 있다.

  • Missing $ inserted.
    LaTeX 에러가 아니라 TeX 에러이다. 수식 모드에 써야 할 것(예: 하첨자 표시 _ )을 수식 모드 바같에 썼기 때문이다. See KTUGOperate:22123

  • Missing number, treated as zero 에러
    이것은 dimension 변수에 적절한 값이 할당되지 않았다는 의미이다. 일반적인 경우에는 dimension 값을 정의해줌으로써 해결된다. 그런데 한글 관련 매크로에서 한글을 숫자로 취급하여 어떤 동작을 하게 한 경우에도 만날 수 있는데 그 대부분은 매크로 정의가 잘못된 경우이다. 어떤 매크로에서 이 문제가 발생하였는지를 추적하는 것이 쉽지 않은 일일 수 있다.

  • Paragraph ended before \begin was completed
    \begin으로 시작한 문장의 닫는 괄호를 빼먹은 경우 발생할 수 있다. \begin{document

  • Runaway argument
    long으로 정의되지 않은 명령은 인자에 \par를 가질 수 없다. 예컨대 다음과 같은 경우,
    \textbf{이 명령의 인자에는 \par
    를 두면 안된다}
    
    그리고, 인자의 닫는 delimiter를 잊었을 때도 이 에러가 발생한다.
    \title{A test document
    
    이 때는 delimiter }를 넣으면 된다.

  • File not found 에러
    클래스 파일, 스타일 파일 등 스타일 관련 파일을 못 찾겠다면(위의 그림2 참조) 작업 폴더에나 루트 디렉터리에 해당 파일을 넣어야 한다. 그림 관련 파일(위의 그림3 참조)을 찾을 때는 KTUGOperate:17222 참조

  • perhaps a missing \item 에러
    나열환경 안에서 \item을 쓰는 것을 잊어버렸을 때 발생한다. 또는 thebibliography 환경 안에서 \bibitem을 쓰는 것을 잊어버렸을 때도 마찬가지.

  • You can't use macro parameter character # in horizontal mode
    이 에러는 주로 # 문자를 입력 파일에 그대로 썼을 때 발생한다. # 문자를 문서에 찍고 싶다면 반드시 \# 와 같이 하여야 한다. 왜냐하면 # 문자 자체는 TeX의 parameter를 처리하기 위한 유보문자로 쓰이기 때문이다.

  • You can't use `\spacefactor' in vertical mode
    이 에러는 몇 가지 이유에서 발생할 수 있지만 가장 흔한 것은 @(at) 문자를 매크로 이름에 썼음에도 불구하고 \makeatletter를 선언하지 않은 경우이다. 에러의 모양은 다음과 같다.
    ! You can't use `\spacefactor' in vertical mode.
    \@->\spacefactor 
                     \@m 
    
    해결책은 @-문자가 포함된 매크로 정의 영역을 \makeatletter\makeatother로 둘러싸주는 것이다. cf. http://www.tex.ac.uk/cgi-bin/texfaq2html?label=atsigns

  • \begin{enumerate} on input line xxx ended by \end{document} 또는 \begin{document} ended by \end{itemize} 에러
    \begin{enumerate} ~ \end{enumerate} 또는 \begin{itemize} ~ \end{itemize} 의 짝이 안 맞아서 일어난다.

  • can be used only preamble 에러
    Preamble에서만 사용할 수 있도록 정의된 매크로가 document 환경 안에서 사용되었다는 LaTeX 에러이다.

  • Counter too large 에러

  • Missing \begin{document} 에러
    See KTUGOperate:15101 for example.

  • Not in outer par mode

  • There's no line here to end
    개행명령(\\ 또는 \newline)이 쓰인 줄에 아무런 내용도 없는 경우에 발생한다. 만약 한 줄을 비워야 할 필요가 있다면 \bigskip이나 \medskip과 같은 skip 명령을 써야 한다. 부득이하여 빈 줄을 개행명령으로 주어야 할 필요가 있다면 무의미한 문자를 하나 넣고 그 다음에 개행하라. 예를 들면 \ \\로 족하다. See KTUGOperate:20751

  • Float(s) lost. This may be a LaTeX bug 에러
    떠다니는 개체를 적절한 곳에 위치짓지 못한 결과 유실되었음을 의미하는 LaTeX 에러 메시지. 실제로는 버그가 아닌 경우가 많고 \afterpage를 남용하였을 때 가끔 발생한다. 해결책은 float의 위치를 전후로 조금 이동시키거나 \afterpage를 사용하지 않는 것이다.

  • Too many unprocessed floats 에러
    queue에 보관될 수 있는 떠다니는 개체의 수는 16개를 넘지 못한다. 이 이상의 플로트가 처리되지 않고 queue에 들어가면 발생하는 에러. 해결책은 \clearpage 명령을 적당한 곳에서 사용하여 queue의 float를 flush해주는 것이다.

  • Extra }, or forgotten $ 에러
    현재 작업하고 있는 소스 파일에서 } 또는 $ 를 잊어버렸을 때는 해당 위치에 넣으면 된다. HLaTeX 한글을 쓸 때 장-절의 명령, 머리말-꼬리말, 목차만들기, 인덱스 만들기, 여러 가지 환경 등의 장치 속에 "{한글}"와 같이 입력되어 있으면 이런 메시지가 나타나는 수가 있는 데 "{한글 }"와 같이 한글과 } 사이를 한 칸 띄움으로써 해결될 수도 있다. Hangul-ucs에서는 이런 일이 일어나지 않는다.

  • Environment(Command)... already defined 에러
    현재 작업 파일에서 정의한 환경 또는 명령어이면 환경명, 명령어를 약간 바꾸거나 \newcommand를 \renewcommand로 바꿈으로써 쉽게 해결할 수 있다. <!> 만약 가령 amsbook 클래스를 쓰면서 \usepackage{makeidx}를 프리앰블에 넣으면 \see라는 명령어가 클래스 파일에도 정의되어 있고 makeidx.sty에도 정의되었기 때문에 나타난다. 이때는 \usepackage{makeidx}를 주석처리하거나 별도의 장치를 하여야 한다. see KTUGContrib:2845

  • This NFSS system isn't set up properly. LaTeX 에러
    폰트 관련 설정이 제대로 되지 않았을 때 생긴다.

  • \caption outside float. LaTeX 에러

  • Something's wrong--perhaps a missing \item. LaTeX 에러
    줄바꾸기(\\)가 허용되지 않은 곳(예: $...$)에 줄바꾸기를 하였을 때

  • To be continued

    3 Warnings

    3.1 Overfull, Underfull warning

    현재 설정된 행채움 허용치를 모두 사용하고도 justification에 실패했을 때 발생하는 경고이다. 이 경고가 발생하는 과정, 즉 badness(OverfullWarning 참조)와 tolerance를 이용한 TeX의 행정렬 과정에 대해서는 TeXbook을 볼 것.

    3.2 Font shape unavailable warning

    문서에서 요청된 속성을 가진 폰트를 모두 로드할 수 없었다는 경고임. 예를 들어 CMR 글꼴에 대하여 \fontseries{c}\selectfont를 요청하였으나 이 글꼴의 c-series가 정의되어 있지 않은 경우, 이 경고를 내고 실제로는 기본값(m-series)으로 대치하여 식자한다. 한글 폰트의 경우 각각의 series와 shape가 모두 정의되어 있는 글꼴은 찾기 어려우므로 한글 문서를 처리한 경우에 자주 발생하지만 불가피하다.

    4 debugging과 tracing

    4.1 PlainTeX의 tracing

    TeX의 특성 중의 하나는 프로그래밍이 가능하다는 것이다. 하지만, TeX은 보통의 프로그래밍과 약간 다른 점이 있어서 TeX 프로그래밍하는 이를 가끔 당혹케하기도 한다. 이에 TeX은 자신이 어떠한 이유와 방법을 통해서 그러한 결과를 만들어 냈는지를 프로그래밍하는 이에게 상세히 소개한다. 이때 TeX이 사용하는 방법은 \tracing... 또는 \show... 명령어를 이용하여 자신이 한 모든 일을 로그 파일로 남기거나 터미널에 뿌려주는 것이다.

    아래 리스트에서 \show 와 \showthe 명령어만이 기본적으로 그 결과를 터미널에 뿌려주고, 다른 \show... 나 \tracing... 명령어는 결과를 로그 파일에 기록한다. 그런데 이들 명령어도 \tracingonline이 양의 정수 값을 가지면, 로그 파일에 기록할 뿐만 아니라 터미날에도 그 결과를 출력한다.

    • \meaning
      control sequence의 의미를 문자열로 나타낸다.
    • \show
      control sequence의 의미를 보여준다.
    • \showthe
      \the가 앞에 붙은 토큰의 결과를 보여준다.
    • \showbox
      박스의 내용을 보여준다.
    • \showlists
      모든 모드내에서(mode)에서 현재 생성되고 있는 partial 리스트들의 내용들을 보여준다.
    • \tracingcommands
      이 값이 1이면, TeX은 실행되는 프리미티브 명령어를 보여주고, 2 이상이면 조건문들의 실행 결과도 기록된다.
    • \tracingmacros
      이 값이 1이면, TeX은 현재 실행되는 매크로의 전개 과정과 그 매크로의 인수들의 실제 값들을 보여고, 2 이상이면 \output 이나 \everypar 와 같은 <토큰 파라미터>들도 그 과정을 추적한다.
    • \tracingoutput
      이 값이 양의 정수이면, dvi 파일에 담길 박스들의 dump를 로그 파일에 기록한다.
    • \showboxdepth
      The number of levels of box dump that are shown when boxes are displayed.
    • \showboxbreadth
      Number of successive elements on each level that are shown when boxes are displayed.
    • \tracingonline
      이 값이 양의 정수이면, TeX은 추적 정보를 로그 파일에 기록할 뿐만 아니라 터미널에도 그 결과를 출력한다.
    • \tracingparagraphs
      이 값이 양의 정수이면, TeX은 줄바꿈(line breaking) 알고리즘의 과정을 추적한다.
    • \tracingpages
      이 값이 양의 정수이면, TeX은 쪽나눔(page breaking) 알고리즘의 과정을 추적한다.
    • \tracinglostchars
      이 값이 양의 정수이면, TeX은 현재 폰트로 표시되지 않는 문자가 억세스될 때마다 그 진단 메시지를 보여준다. 플레인텍의 기본값은 1이다..
    • \tracingrestores
      이 값이 양의 정수이면, TeX은 하나의 그룹이 끝날때 복원되는 모든 값들을 보여준다.
    • \tracingstats
      이 값이 1이면, TeX은 작업 마지막 단계에서 다양한 내부 배열들이 어떻게 사용되었는지 보여주고, 2이면 페이지가 만들어질때 마다 메모리의 요구가 어떻게 이루어졌는지 보여준다.(if it is 2, the memory demands are given whenever a page is shipped out.)

    위 정보는 TeXbyTopic의 34장에서 발췌한 것이다. 무슨 뜻이지 정확히 하기 위해서는 그 책을 참고 한다.

    4.2 e-TeX의 tracingall

    e-TeX의 tracingall에는 다음 primitives가 추가되어 있다.
    • tracingassigns
    • tracinggroups
    • tracingifs
    • tracingnesting
    • tracingcantokens

    4.3 LaTeX의 trace 패키지

    \usepackage[logonly]{trace}
    \traceon \traceoff
    


    ^
    Valid XHTML 1.0! Valid CSS! powered by MoniWiki
    last modified 2007-08-08 04:47:23
    Processing time 0.0853 sec