Introduction
나는 공개적인 장소에서 절대로 무언가를 싫어한다거나, 누군가를 혐오하는 것을 절대로 하지 않는데, 딱 내가 한 가지 싫어하는 것이 있다. 그건 바로 Overleaf 사용이다.
이전 글에서 LaTeX을 ‘코드’처럼 다뤄야 한다고 강조했는데, Overleaf은 그 철학과 정면으로 충돌하는 도구이다. 내 주변에 논문을 함께 쓰는 이들에게도 Overleaf 쓰지 말라고 늘 권유하는데, 대부분 처음에는 “에이, 그래도 편한데요?”라고 반응한다. 하지만 한번 로컬 환경으로 넘어온 사람이 다시 Overleaf으로 돌아가는 경우는 아직까지 본 적이 없다.
이 글에서는 내가 왜 Overleaf 사용을 반대하는지, 구체적인 이유를 정리하고자 한다.
Overleaf이 LaTeX 사용의 발전을 막는 이유
1. 느린 Compile 속도
가장 직접적이고 체감이 큰 문제이다.
나도 멋 모를 때는 Overleaf을 썼다. 그런데 22년도 겨울에 Cyrill Stachniss 교수님네에서 논문을 쓰게 되면서 강제로 로컬에서 작업을 하게 되었는데 (Cyrill 교수님은 보안상의 이유로 Overleaf을 쓰지 말라고 하셨음), 그때 로컬로 작업을 하면서 큰 깨달음을 얻고, 나는 엄청난 Overleaf 혐오자가 되었다.
13페이지 RSS’23 논문을 쓸 때, 딱 12월 말에 시작해서 거의 1달 만에 논문 작성을 마쳤었다. 원래 논문 작성 속도 대비 진척률이 굉장히 빨라졌다는 것을 깨닫고 이유를 생각해보니, 로컬에서 작업해서 LaTeX compile 시간을 아꼈기에 가능했다는 것을 깨달았다. 이후 두 컬럼 26페이지짜리 저널을 리비전할 때도 로컬에서 작업했는데, 한 번 build할 때 수십 초가 드는 Overleaf에서 벗어나니 너어어어ㅓㅓ무 편했다…ㄹㅇ 신세계.
저널 논문을 필연적으로 써야 하는 한국 연구 문화에서, 20페이지 이상의 논문을 Overleaf으로 compile하면 한 번에 30초~1분이 걸린다. 하루에 compile을 100번 한다고 치면, compile 대기 시간만 1시간이다. 로컬에서는 같은 작업이 수 초면 끝난다. 이 차이가 한 달 동안 누적되면 체감이 어마어마하다.
2. File Navigation System의 부재
LaTeX 프로젝트의 구조를 생각해보자. 논문을 잘 관리하려면 파일을 적절히 분할해야 한다:
main.tex
shortcuts.tex (or macros.tex)
sections/
abstract.tex
introduction.tex
related_works.tex
method.tex
experiments.tex
conclusion.tex
figures/
refs.bib
이런 구조에서 shortcuts.tex에 정의된 \methodname 매크로를 확인하러 가고, 다시 experiments.tex로 돌아오고, refs.bib에서 citation key를 찾고… 이런 파일 간 점프가 수시로 필요하다.
IDE에서는 Ctrl+Click으로 파일 간 점프가 되고, Ctrl+Shift+F로 전체 프로젝트 검색이 된다.
Overleaf에는 이런 file navigation이 사실상 없다.
왼쪽에 파일 트리가 있긴 하지만, 클릭해서 열고 스크롤해서 찾고… C++ 개발을 메모장에서 하는 것과 다를 바가 없다.
그 결과 사람들이 어떻게 하냐면? 파일을 나누지 않고 main.tex 하나에 다 때려넣는다.
그러면 또 1,000줄짜리 단일 파일을 스크롤하면서 작업하게 되고… 악순환이 반복된다.
3. IDE 기능의 부재
나는 heavy vim 유저이다. LaTeX을 작성할 때도 vim 단축키로 문장을 빠르게 수정하고, 마킹하고, 변수를 clipboard에 저장해두고 붙여넣기를 하고 싶다. 근데 Overleaf에서는 vim 모드가 있긴 하지만, 본격적인 vim 기능과는 거리가 멀다.
그 외에도 IDE에서 당연하게 제공되는 기능들이 Overleaf에는 없다:
| 기능 | IDE (VSCode, Pycharm 등) | Overleaf |
|---|---|---|
| 매크로 자동완성 | \method 치면 자동 제안 |
기본적인 수준만 |
| 전체 검색/치환 | Ctrl+Shift+H로 프로젝트 전체 |
파일 단위만 |
| Rename refactoring | 매크로 이름 변경 시 전체 반영 | 수동으로 하나하나 |
| Multi-cursor | 여러 줄 동시 편집 | 제한적 |
| Vim keybinding | 완전한 vim 지원 | 기본 모드만 |
| Git integration | 내장 Git GUI | 유료만 제한적 |
코드를 짤 때 IDE 없이 메모장에서 짜는 사람이 어디 있는가? LaTeX도 코드인데, 왜 LaTeX만 허접한 에디터에서 작업해야 하는가?
4. Microsoft Word처럼 쓰게 만드는 환경
이게 내가 Overleaf을 가장 싫어하는 핵심 이유이다.
앞서 file navigation이 없다고 했는데, 그 결과 Overleaf 유저들은 자연스럽게 Microsoft Word에서 글 쓰듯이 문단 단위로 주저리주저리 써버리게 된다.
한 줄에 한 문장씩 쓰지 않고, 한 문단을 통째로 이어서 쓴다.
\newcommand를 정의하는 shortcuts.tex 파일로 왔다 갔다 하기 번거로우니까, 그냥 하드코딩으로 $\mathbf{R}$을 매번 직접 친다.
\Cref 대신 Fig.~\ref{}를 수동으로 친다.
즉, Overleaf은 LaTeX의 강점을 전부 갉아먹는 환경이다. LaTeX을 쓰는 이유는 자동화와 일관성인데, Overleaf에서 작업하면 결국 Word와 다를 바 없는 수동 작업을 하게 된다. 이 시리즈 3편과 4편에서 다룰 기법들이 Overleaf 환경에서는 실천하기 어려운 이유가 바로 이것이다.
5. Git Version Control의 부재
가슴에 손을 얹고 질문해보자: 공저자들과 반드시 동시에 논문을 작성해야 하는가?
Overleaf의 가장 큰 장점은 real-time으로 공동 작업이 가능하다는 것이다. 하지만 과연 compile의 느린 속도 «< real-time 수정 가능인가? 차라리 v1을 빠르게 완성한 후 offline으로 업무 분담을 잘 하고 Git push/pull로 주고받는 게 훨씬 효율적이다.
Git을 쓰면 다음과 같은 것들이 가능해진다:
- Branch: 리비전 버전, 저널 확장판 등을 branch로 관리
- Diff: 어디가 바뀌었는지 한눈에 파악
- Latexdiff: 교수님이 코멘트 주신 부분을 반영해서 어디가 수정되었는지 효과적으로 보여드릴 수 있음
- Claude Code: 로컬에서 작업하면 Claude Code를 활용한 논문 proofreading이 가능하다. Overleaf에서는 이런 도구를 활용할 수 없다.
Overleaf 무료 버전에서는 Git 연동이 안 되고, 유료 버전에서도 제한적이다. 결국 Overleaf에 종속되면 이 모든 워크플로우를 포기해야 한다.
그러면 뭘 쓰면 되나?
로컬에서 LaTeX을 작성할 수 있는 도구는 여러 가지가 있다:
| 도구 | 장점 | 단점 |
|---|---|---|
| VSCode + LaTeX Workshop | 가장 범용적, 확장 풍부 | 초기 설정 필요 |
| Pycharm/CLion + TeXiFy | IntelliJ 유저라면 최고 | IntelliJ 안 쓰면 진입장벽 |
| Vim + vimtex | 최강의 편집 속도 | Vim 학습 곡선 |
개인적으로 나는 Pycharm의 TeXiFy로 시작했고, 지금은 vim + vimtex로 완전히 정착했다. 자세한 설정 방법은 이전에 작성한 TeXiFy 글을 참고하면 된다.
중요한 건 도구가 아니라, LaTeX을 코드처럼 다루는 마인드셋이다.
어떤 에디터를 쓰든, file navigation이 되고, Git이 되고, IDE 기능을 활용할 수 있는 환경이면 된다.
Overleaf만 아니면 된다. 제발
다음 글에서는 LaTeX을 코드처럼 다루는 첫 번째 습관, ‘한 줄에 한 문장씩’에 대해 다루겠다.
LaTex을 통한 심화 논문 작성법 시리즈입니다.