Texmaker가 존재하는 까닭은, 그 저자가 다른 LaTeX 편집기에서 손을 뗐기 때문입니다. 파스칼 브라셰는 KDE 데스크톱용 LaTeX 환경인 Kile을 세운 사람이고, 2003년에 그 유지 보수를 다른 개발자에게 넘겼습니다. 그리고 같은 해 5월 29일, Texmaker의 첫 판이 공개됩니다. 이번에는 특정 데스크톱에 매이지 않고 Qt만으로 작성된 크로스 플랫폼 통합 환경이었습니다. 이 페이지에서는 여러 파일로 나뉜 원고를 하나로 묶는 마스터 문서 구조, F1 뒤에 놓인 퀵 빌드 사슬, 타자를 치는 동안 자라나는 구조 보기, 그리고 Texmaker 자신의 갈래인 TeXstudio와의 차이를 차례로 살펴봅니다.
Texmaker를 만든 사람은 Kile도 세웠습니다
이 내력은 Kile 쪽 기록에 남아 있습니다. Kile의 AUTHORS 파일 맨 앞에 오는 이름이 Pascal Brachet이고, kile(1) 매뉴얼 페이지도 “Kile was written by Pascal Brachet and Jeroen Wijnhout”이라고 적고 있습니다. 베인하우트는 2003년 10월 인터뷰에서, Kile에 기능을 더하고 싶어 브라셰에게 연락했더니 “그는 Kile 개발을 그만두고 싶어 했다. 생각보다 큰 것을 떠안았고, 프로젝트가 내 손에 들어왔다”고 밝혔습니다. 브라셰가 놓은 것은 KDE에 단단히 붙은 편집기였고, 대신 쓴 것이 KDE 라이브러리 없이 Qt만으로 돌아가는 Texmaker입니다. 같은 발상을 데스크톱 환경에서 떼어 낸 셈입니다.
그 결과 Texmaker는 통합 환경 한 벌을 창 하나에 담은 편집기가 되었습니다. 왼쪽에 구조 보기, 가운데에 원본, 아래에 로그와 메시지, 오른쪽에 PDF 미리 보기입니다. 라이선스는 GPL v2이고 바탕은 Qt이며, Windows·macOS·Linux용 빌드가 같은 저자에게서 배포됩니다. 안에는 유니코드와 여러 인코딩, \part·\chapter·\section과 \begin{...}…\end{...} 블록을 접는 코드 접기, 약 370개의 수식 기호 팔레트, 연속 스크롤을 지원하는 내장 PDF 뷰어, 맞춤법 검사, 자동 완성, 사각형 블록 선택, 폴더를 가로지르는 검색, 정규 표현식, Asymptote 지원, 그리고 직접 정의하는 스니펫이 들어 있습니다. 곧 TeXworks가 일부러 덜어 낸 것의 거의 전부입니다.
Texmaker와 TeXstudio의 차이 — TeXstudio는 Texmaker의 갈래입니다
둘이 닮은 까닭은 한쪽이 다른 쪽의 소스에서 갈라져 나왔기 때문입니다. 2008년 Texmaker의 코드에서 갈라진 프로젝트는 2009년 2월에 TexMakerX라는 이름으로 첫 판을 내놓았습니다. 이름이 헷갈린다는 문제가 커지면서 2011년 6월에 TeXstudio로 이름을 바꾸었습니다. 화면 배치도 설정을 바라보는 방식도 지금까지 형제처럼 닮아 있는 이유가 여기에 있습니다. 갈라진 뒤에 더해진 것은 주로 편집 쪽 장치 — 문법 검사, 미러 커서, 더 강한 접기와 자동 완성 — 이고, Texmaker는 원본답게 설정이 적고 곧은 성격을 유지합니다. 한쪽을 익히면 다른 쪽도 곧바로 쓸 수 있으니, 실무에서는 가벼운 Texmaker로 시작해 부족해지면 TeXstudio로 옮기는 편이 현실적입니다.
마스터 문서 — 여러 파일로 나뉜 원고를 하나로 묶기
원고를 장별 파일로 나눴다면, 가장 먼저 “Options” 메뉴에서 마스터 문서를 지정합니다. 이것이 Texmaker에서 다중 파일 작업의 축입니다. 마스터 모드에 들어가면 어느 파일을 열어 두었든 빌드의 시작점은 언제나 마스터가 되어, chapter3.tex를 편집하다 F1을 눌러도 컴파일되는 것은 main.tex입니다. 모드에서 빠져나오는 것도 같은 “Options” 메뉴이며, 드나드는 자리가 한곳에 모여 있어 지금 어느 상태인지 놓치기 어렵습니다.
마스터 모드가 켜지면 명령 인수에 쓰는 기호의 뜻이 달라집니다. Texmaker 설정란에서 가장 자주 쓰는 %는 “확장자를 뺀 파일 이름”이지만, 마스터 모드에서는 마스터 문서의 이름으로 펼쳐집니다. 그래서 따로 #가 마련되어 있습니다. 마스터 모드에서도 지금 열려 있는 파일을 가리키기 때문입니다. 이 둘의 차이를 모르면 장별로 무언가를 돌리고 싶을 때 반드시 걸려 넘어집니다. 같은 칸에서 현재 줄 번호를 넘기는 @와 현재 디렉터리를 넘기는 !도 쓸 수 있습니다.
| 기호 | 펼쳐지는 값 |
|---|---|
% | 확장자를 뺀 파일 이름. 마스터 모드에서는 마스터 문서의 이름 |
# | 지금 열려 있는 파일의 확장자를 뺀 이름(마스터 모드에서도 그대로) |
@ | 커서가 있는 줄 번호. 정방향 검색을 외부 뷰어로 넘길 때 씁니다 |
! | 현재 디렉터리 |
%% ## @@ !! | 기호 자체를 한 글자 쓰고 싶을 때의 표기. 두 번 겹치면 하나로 돌아옵니다 |
퀵 빌드 — F1이 무엇을 돌릴지 정하기
Texmaker의 빌드는 “Options” → “Configure Texmaker”(macOS에서는 Preferences)에 있는 두 구역이 결정합니다. Commands는 “각 명령의 실체” — pdflatex이나 dvipdfmx를 실제로 어떤 인수로 실행하는지 — 를 가지고, Quick Build는 “그것들을 어떤 순서로 돌릴지”를 가집니다. 분담이 또렷하기에, 일본어 엔진으로 바꾸는 것처럼 “순서는 그대로 두고 내용만 갈아 끼우는” 변경은 한곳에서 끝납니다. 사슬을 실행하는 것은 도구 모음 버튼, 또는 F1 키입니다.
Quick Build 구역에는 자주 쓰는 조합이 라디오 버튼으로 늘어서 있고, 그중 하나를 고릅니다. 직접 짜고 싶다면 맨 아래 User 칸에 명령을 |로 이어 적습니다.
- PdfLaTeX + View Pdf — pdfLaTeX으로 곧장 PDF를 만들어 보여 줍니다. 출고 기본값이며, 서양 문자 위주라면 이것으로 충분합니다.
- LaTeX + dvips + View Ps — DVI를 거쳐 dvips로 PostScript를 만들어 보여 줍니다.
- LaTeX + dvipdfm + View Pdf — DVI를 거쳐 dvipdfm(x)으로 PDF를 만듭니다. 일본어의 정석 경로입니다.
- User — 위쪽 칸에 원하는 명령을
|로 이어 붙여 자기만의 흐름을 짭니다.
Commands 구역의 PdfLaTeX 칸은 기본값으로 대략 다음과 같습니다. -interaction=nonstopmode는 오류가 나도 대화형 프롬프트에서 멈추지 않게 하는 지정이고, -synctex=1은 뒤에서 다룰 SyncTeX가 쓸 정보를 내보내게 하는 지정입니다. 어느 경로를 고르든 이 둘은 남겨 둘 값어치가 있습니다.
pdflatex -synctex=1 -interaction=nonstopmode %.tex참고문헌과 색인, 재실행 횟수까지 알아서 처리해 주기를 바란다면, Quick Build의 User 칸에 latexmk 한 줄만 적는 방법이 있습니다. latexmk가 의존 관계를 풀어 필요한 횟수만큼 처리하므로 여기서 명령을 늘어놓을 일이 없어집니다. latexmk 자체의 세부 설정은 다른 페이지의 주제입니다.
latexmk -pdf -synctex=1 -interaction=nonstopmode %.tex일본어 빌드 설정(upLaTeX과 LuaLaTeX)
일본어의 오랜 정석은 upLaTeX + dvipdfmx이고, Texmaker에서는 딱 두 곳만 고치면 됩니다. Commands 구역에서 LaTeX 칸을 uplatex으로, Dvipdfm 칸을 dvipdfmx로 바꾼 뒤, Quick Build에서 “LaTeX + dvipdfm + View Pdf”를 고릅니다. 그러면 F1을 눌렀을 때 upLaTeX → dvipdfmx 순으로 처리되고 PDF가 열립니다. -kanji=utf8은 입력 인코딩을 UTF-8로 못 박고, -no-guess-input-enc는 인코딩 자동 추정을 끕니다. 여기서 -synctex=1을 빠뜨리면 다 되는데 역방향 검색만 안 되는, 알아채기 어려운 증상이 생깁니다.
uplatex -no-guess-input-enc -kanji=utf8 -synctex=1 -interaction=nonstopmode %.texdvipdfmx %.dvi다른 길은 LuaLaTeX입니다. 일본어 문서를 새로 시작한다면 손이 덜 가고, DVI를 거치지 않고 한 번에 PDF까지 갑니다. Commands의 LuaLaTeX 칸이 제대로 되어 있는지 확인한 뒤 Quick Build의 User 칸에 lualatex -synctex=1 -interaction=nonstopmode %.tex라고 적으면 됩니다(일본어 조판 자체는 luatexja 패키지나 ltjsarticle 클래스가 맡습니다). 설정을 한곳에 모으고 싶다면 upLaTeX이나 LuaLaTeX의 흐름을 .latexmkrc에 적고, Texmaker는 latexmk를 부르기만 하게 두는 방법도 있습니다.
구조 보기와 자동 완성, 그리고 마법사
왼쪽 끝의 구조 보기(Structure view)는 타자를 치는 대로 갱신되는 문서의 지도입니다. \section 같은 제목, \label의 라벨, \input·\include로 들여온 파일이 계층으로 늘어서고, 항목을 누르면 그 자리로 뜁니다. 마스터 문서를 지정한 프로젝트에서는 장 파일의 내용까지 같은 나무에 합류하므로, 긴 원고에서도 전체 그림을 놓치지 않고 이동할 수 있습니다. 이 “전체를 보는 면”이 TeXworks에 없는 것이고, Texmaker를 통합 환경답게 만드는 핵심 가운데 하나입니다.
자동 완성은 타건을 줄여 줍니다. \ 뒤에 글자를 치면 후보 명령이 목록으로 뜨고, 글자를 더할수록 좁혀지며, 인수를 받는 명령에서는 자리 표시자가 나타나 { } 안을 차례로 채울 수 있습니다. 통하는 것은 명령 이름만이 아닙니다. \ref{...}나 \pageref{...}를 쓰면 문서 안의 라벨이 후보로 늘어서고, \cite{...}에서는 문헌 데이터베이스의 키가 나옵니다. 이름이 어렴풋해 손이 멈추는 장면이 사라집니다. 여기에 마법사가 더해집니다. Quick Start는 \documentclass와 용지 크기, 인코딩을 한 번에 정해 주고, Tabular·Tabbing·그리고 array, matrix, pmatrix 중에서 고르게 하는 Array가 아무도 통째로 외우지 못하는 뼈대를 대신 써 줍니다.
F1이 통하지 않을 때 살펴볼 순서
Quick Build의 배열을 고쳐 쓰기 전에 질문을 둘로 나눕니다. 로그는 뭐라고 하는가, 애초에 외부 명령이 실행되기는 했는가. 이 둘은 원인도 대처도 전혀 다른데, 화면에서는 둘 다 “F1을 눌렀는데 PDF가 안 나온다”로 보입니다. 특히 Could not start the command은 LaTeX의 오류가 아니라 Texmaker가 실행 파일을 찾지 못했다는 뜻이므로, 로그를 몇 번 읽어도 적혀 있지 않습니다. 긴 논문이든 짧은 보고서든 순서는 같습니다.
- 먼저 Messages / Log file 패널에서 첫 오류를 찾습니다. 줄 번호를 누를 수 있다면 곧장 문제가 된 원본 자리로 뜁니다.
Could not start the command이라면 터미널에서pdflatex --version이나uplatex --version을 쳐 보고 PATH 쪽을 고칩니다. Texmaker의 설정과는 무관합니다.- PDF만 갱신되지 않는다면 내장 뷰어가 옛 파일을 붙잡고 있지 않은지, 고른 Quick Build에 View Pdf가 들어 있는지를 봅니다.
- 일본어에서만 무너진다면 LaTeX 칸과 Dvipdfm 칸이 upLaTeX + dvipdfmx 짝으로 맞춰져 있는지 확인합니다.
SyncTeX가 듣게 하는 두 조건
필요한 것은 두 가지뿐입니다. 컴파일 명령에 -synctex=1이 들어 있을 것, 그리고 PDF를 내장 뷰어로 열 것. 첫째는 동기화 파일(.synctex.gz)을 내보내게 하는 지정으로, 위의 명령 예처럼 적어 두면 충분합니다. 둘째는 Commands 구역의 Pdf Viewer에서 built-in viewer를 고르는 것이고, 본체 창에 붙이고 싶다면 Embed도 켭니다. 외부 뷰어로 열면 양방향 점프가 어느 쪽으로도 듣지 않습니다.
조작은 단순합니다. 매뉴얼의 서술대로, 컴파일 명령에 -synctex=1이 있으면 내장 뷰어가 현재 줄에 대응하는 PDF 위치로 스스로 이동합니다. 이것이 정방향 검색이고, 누를 버튼은 없습니다. 반대로 역방향 검색은 내장 뷰어의 단어 위에서 오른쪽 클릭해 컨텍스트 메뉴에서 고르면 편집기가 해당 줄로 뜁니다. 동기화 자체의 원리는 별도 페이지에서 다룹니다.