Latex을 쓰기 시작한지 벌써 7년도 다 되어가는데
아직도 컴파일할때마다 latex – bibtex – latex – latex이라는 번거로운 과정을 기계적으로 해주고 있다.
이렇게 번거롭게 된 이유가 있다고 듣기는 했지만 생각해보니 딱히 궁금해해본 적이 없었다.
이 김에 Latex이 어떻게 컴파일되는지를 살펴보았다. [StackExchange]
0. 컴파일 전
필자의 조판 환경은 MiKTeX과 TexMaker이다.
필자는 항상 메인 tex문서(paper.tex)를 만들고 그 안에서 본문(manuscript.tex)과 부가문서(reference.bib)를 로드해 사용한다.
1. 첫 컴파일 (latex)
Latex 컴파일러로 첫 컴파일을 하고나면 log와 synctex, aux, out, pdf 파일이 나온다.
우선 pdf를 열어보면 reference와 citation이 모두 깨져있을 것이다.
컴파일 시 Reference를 달아주려면 인용된 그림이나 표, 참고문헌의 위치를 찾아야하는데, 인용된 개체가 인용한 곳의 앞에 있을지 뒤에 있을 지를 모르기에 매번 문서 전체를 확인해주어야 한다.
이런 비효율을 극복하기 위해 latex 컴파일러는 한 번의 스캔으로 일종의 Reference 사전을 만들어둔다.
이것이 aux 파일이다.
한편 목차(Table of contents)가 있는 경우도 마찬가지이다.
목차가 있는 경우에도 aux 파일과 같은 역할을 하는 toc 파일이 생성된다.
toc 파일에는 목차에 표기하기 위한 Section별 쪽수(\contentsline)가 저장된다.
synctex 파일은 tex 파일과 pdf 파일 간 상호작용을 위해 만들어지는 파일이다. [StackExchange]
tex 에디터에 출력된 pdf에서 각종 요소들을 클릭할 때 해당 부분에 대응하는 tex 구문을 추적할 수 있는데 이러한 기능이 synctex를 통해 이루어진다.
한편 synctex는 용량이 큰 편이다.
그래서 synctex는 gzip으로 압축되어 저장된다. [StackExchange]
out 파일은 PDF 북마크(\hyperref) 목록이 저장된 파일이다.
log 파일은 그냥 latex 컴파일 로그이다.
2. 두 번째 컴파일 (bibtex)
두 번째 컴파일은 bibtex 컴파일러로 하게 된다.
이 과정에서 Reference가 생기며 blg와 bbl 파일이 생성된다.
bbl 파일은 bibtex 로그 파일이다.
bcf 파일은 bib 파일을 바탕으로 Reference(bibitem) 목록을 만들어준다.
이 과정에서 sty 파일에 지정된 Citation Rule이 적용된다.
3. 세 번째 컴파일 (latex)
세 번째부터는 다시 latex 컴파일러를 사용한다.
이 단계서부터는 기존 파일이 계속 덮어씌워진다.
Reference가 만들어지긴 했으나 Citation은 아직도 되지 않는다.
그림이나 표에 대한 Reference 또한 생기지 않는다.
4. 네 번째 컴파일 (latex)
마지막도 latex 컴파일러로 컴파일한다.
이제야 모든 Reference와 Citation이 제대로 부여되었다.
정리
(작성중)…