LaTeX는 입력하는 동안 결과를 표시하지 않습니다. 일반 텍스트 .tex 파일을 작성하고 컴파일하여 PDF("쓰기 후 한 번에 모든 것을 처리하는" 모델)를 얻습니다. 두 가지 경로가 있습니다. 하나는 중간 DVI 파일을 통과하고 다른 하나는 PDF를 직접 생성합니다.
왜 WYSIWYG가 아닌가?
TeX는 전체 단락을 한 번에 확인하여 줄 바꿈을 최적화합니다. 따라서 단락 끝에 문자 하나를 추가하면 첫 번째 줄이 끝나는 위치가 변경될 수 있습니다. 키를 누를 때마다 이를 다시 실행하는 것은 비용이 너무 많이 듭니다.
따라서 입력할 때 다시 그리는 WYSIWYG 워드 프로세서 대신 TeX는 일괄 처리를 사용합니다. 즉, 전체 문서를 한 번에 조판합니다. 실시간 미리보기는 포기하지만 전체적으로 최적의 조판 설정, 문서 전반의 일관된 서식, 일반 텍스트를 통한 자동화를 얻을 수 있습니다.
소스에서 출력까지: 두 가지 경로
엔진은 귀하가 작성한 .tex를 처리합니다. 출력에는 두 가지 계열이 있습니다. 현대적인 경로에서는 pdfTeX, XeTeX 및 LuaTeX PDF를 직접 생성합니다. 특히 XeTeX 및 LuaTeX는 Unicode 입력을 읽고 시스템에 이미 설치된 OpenType 글꼴을 사용할 수 있습니다.
레거시 경로에서 엔진은 먼저 DVI 파일을 내보냅니다. DVI는 *장치 독립적*을 의미합니다. 이는 특정 출력 장치에 연결되지 않은 페이지에 대한 순수한 설명입니다. 그런 다음 dvi 드라이버는 이를 dvipdfmx에서 PDF로, dvips에서 PostScript로, dvisvgm에서 SVG로 변환합니다. 화면에 렌더링하는 드라이버를 dvi 뷰어라고 합니다. 일본어 형식 pLaTeX 및 upLaTeX는 이 DVI 경로를 사용합니다.
# Direct PDF (modern engines)
lualatex document.tex # → document.pdf
# Via DVI (legacy route, e.g. Japanese upLaTeX)
uplatex document.tex # → document.dvi
dvipdfmx document.dvi # → document.pdf예외적으로 pdfLaTeX는 이전(대개 Unicode가 아닌) 입력 스타일을 유지하면서도 DVI 없이 직접 PDF를 출력합니다. "DVI 대 직접 PDF" 및 "Unicode / 시스템 글꼴 여부"를 두 개의 별도 축으로 처리하는 데 도움이 됩니다.
| 엔진 | 출력 | 입력 및 글꼴 | 이미지 형식 |
|---|---|---|---|
latex | DVI (dvi 드라이버 필요) | 대부분 ASCII | EPS, PS |
pdflatex | PDF (직접) | 제한된 Unicode | PNG, JPG, PDF (EPS 자동 변환) |
xelatex | PDF (직접) | Unicode, 시스템 OpenType (fontspec) | PNG, JPG, PDF, EPS |
lualatex | PDF (직접) | Unicode, 시스템 글꼴, Lua | PNG, JPG, PDF, EPS |
도우미 파일과 "두 번 컴파일" 규칙
컴파일하면 PDF 외에도 .aux(레이블 및 참조 데이터), .toc(목차) 및 .log(레코드)와 같은 도우미 파일이 생성됩니다. 상호 참조 및 목차에는 두 번의 패스가 필요합니다: 첫 번째 패스에서는 .aux에 숫자와 위치(“3장이 어느 페이지에 있습니까?”)를 쓰고, 두 번째 패스에서는 이를 다시 읽어 \ref와 내용 목록을 채웁니다.
따라서 출력에 ??가 표시되거나 *Rerun to get cross-references right*와 같은 경고가 표시되면 수정 사항은 간단히 다시 컴파일하는 것입니다. 참고문헌(BibTeX/biber) 및 색인(makeindex)은 더 많은 패스를 추가합니다.
빌드가 중지될 때 확인할 위치
빌드가 중지되면 PDF가 아닌 .log의 첫 번째 오류를 읽으세요. TeX는 첫 번째 문제 이후 계속하려고 시도하므로 뒤따르는 12개의 오류는 종종 결과에 불과합니다. ! Undefined control sequence는 일반적으로 철자가 틀린 명령 또는 누락된 패키지를 의미합니다. File ... not found는 이미지, 클래스 또는 패키지 조회를 가리킵니다. LaTeX Warning: Label(s) may have changed는 또 다른 실행이 필요함을 의미합니다. 메시지가 나타나는 파이프라인 단계를 기준으로 진단합니다.
- 상호 참조만 잘못된 경우
.aux또는.toc파일을 삭제하기 전에 먼저latexmk를 다시 실행하세요. - 이미지가 누락된 경우 경로가 직접 PDF 또는 DVI인지 확인하고 이에 따라 이미지 형식을 선택하세요.
- 오래된 도우미 파일이 원인일 가능성이 있는 경우에만
.aux,.toc,.out및 친구들을 삭제하세요.
패스 계산 중지 — latexmk 및 편집자
손으로 패스를 계산하는 것은 지루합니다. latexmk는 .aux와 같은 파일을 감시하고 필요한 만큼 정확하게 엔진을 다시 실행하며, 필요할 때 BibTeX/biber 및 makeindex를 호출하고 출력이 안정되면 중지합니다. 기본적으로 루핑을 결정하기 전에 최대 5번($max_repeat = 5)까지 반복됩니다. 그 한도는 거의 모든 실제 문서에 충분합니다.
latexmk -lualatex document.tex # LuaLaTeX, as many passes as needed
latexmk -pdf document.tex # pdfLaTeX
latexmk -c # clean .aux/.log and friendsVS Code(LaTeX Workshop), TeXShop 및 Overleaf와 같은 편집기 및 서비스는 일반적으로 내부적으로 latexmk를 호출하므로 "컴파일"만 누르면 됩니다. 그리고 SyncTeX가 활성화되면 클릭하여 소스의 줄과 PDF의 일치 지점 사이를 이동할 수 있습니다.