LaTeX 환경: vim + make + monex.py

03 Feb 2011

오래전에 LaTeXing in Mac (with TextMate) 라는 글에서 TextMateSkim을 이용한 LaTeX 논문작성 환경을 소개했습니다. 그런데 저는 정작 이 환경을 이제는 이용하지 않고 있습니다. 제가 요새 이용하는 환경을 소개합니다.

TextMate의 한계

TextMate는 훌륭한 편집기지만, 맥에서만 사용 가능하고, 자유 소프트웨어가 아니며, 개발이 수년간 정체되어 있습니다. 2006년에 안정 버전 1.5가 출시되었고 2009년에 2.0이 곧 출시된다는 예고가 등장했지만, 버전 2.0은 아직도 소식이 없습니다.

Vim

TextMate가 가져온 편리한 기능들은 그 사이 다른 편집기에 반영되었습니다. Vim 진영에서는 macvim이 활발히 개발되고, pathogen, NERDTree, snipMate 등 훌륭한 플러그인들이 등장하여 TextMate와 비슷한 환경을 구축하는 게 가능해졌습니다. 자연스럽게, 많은 개발자들이 Vim으로 이주하기 시작했습니다. 최근 vim을 다룬 블로그 글이 늘어나는 것도 이런 흐름을 반영하는 게 아닌가 싶습니다. 저도 원래 Vim과 TextMate를 함께 써 왔지만, 작년 Steve Losh의 Coming home to vim, Vincent Driessen의 How I boosted my Vim 같은 글을 보다가 결국 Vim으로 이주를 결행했고, 현재 아주 만족하고 있습니다. Vim을 본격적으로 써 보고 싶으신 분은 제가 Vim을 사용하기 시작하면서 정리한 자료를 참고하시면 아마 도움이 되실 겁니다.

Make

컴퓨터 과학자들과 논문을 함께 쓰면서 여러 가지를 배웠는데, 그 중 하나가 GNU Make의 유용성입니다. 그림을 그리는 gnuplot 스크립트나 TeX 컴파일 명령들을 Makefile로 조직해 놓으면 매번 그림을 다시 그리고 논문을 컴파일하는 번거로움 없이 make 한번으로 최신 버전의 결과물을 얻을 수 있습니다. 사실 make가 그런 일에 쓰라고 만들어놓은 물건인데 전 논문 작성할 때 쓰면 된다는 생각은 못하고 있었죠.

TextMate 환경은 latexmk.pl을 사용합니다. LaTeX에 최적화된 Make 유틸리티라고 보시면 되는데, 무척 편리하긴 하지만 저는 그냥 간단한 Makefile을 만들어 사용하는 게 편하더군요. 논문을 작성할 때 TeX 컴파일만 하는 게 아니라 gnuplot으로 그림도 그리고 PDF 결과물들을 합치기도 하는데 latexmk만 쓰는 건 한계가 있습니다. 아주 기본적인 Makefile은 대략 다음과 같습니다. make를 실행하면 편지 (cover letter), 논문 본문, 기타 자료 (supporting material) 이렇게 세 개의 PDF 결과물을 만들고 이걸 하나로 합쳐주게 됩니다.

https://gist.github.com/yy/808914

monex.py

Vim과 make의 조합에만 익숙해져도 꽤 편한 작업이 가능합니다. 하지만 매번 make를 실행하는 건 여전히 귀찮죠. 어떻게 하면 자동화를 할 수 있을까 고민하다가 예전에 봤던 autotest 가 생각나 monex.py라는 짤막한 스크립트를 하나 만들었습니다. 이 스크립트가 하는 일은 무척 단순합니다. 주어진 파일들을 감시하다가 파일이 변경되면 주어진 명령어를 실행하는 거죠.

결과물을 Preview에 띄워놓고, 다음과 같이 실행해 놓으면,

$ python monex.py -c "make all" *.tex *.bib *.plt 

파일을 저장할 때마다 알아서 그림을 그리고 컴파일해서 결과물을 갱신 해 줍니다. 이걸 만들어 놓으니 논문 쓸 때뿐만 아니라 여기저기 쓸모가 있더군요. 이 글을 보시는 분들에게도 유용할까 싶어 여기에 붙입니다. (혹시 더 좋은 방법을 알고 계시면 알려주세요. :)

https://gist.github.com/yy/729404