TeXstudio의 변경 이력을 맨 끝까지 내려가 보면 아직 TeXstudio도 아닌 항목——Texmaker의 기록이 나타납니다. TeXstudio는 본래 Texmaker의 확장 모음으로 “TexMakerX”라는 이름으로 시작해 2.2 버전에서 이름을 바꾼 파생판이며, 지금도 부모의 이력을 그대로 안고 있습니다. 이 출신이 이 LaTeX 편집기의 성격을 잘 설명해 줍니다. 자기 실행 파일은 하나도 없으면서, 글 쓰는 사람에게 필요한 것은 전부 하나의 창 안에 들어 있다는 것——편집기, 빌드 연쇄, PDF 뷰어, 맞춤법과 문법 검사, 문서 구조 목록. LaTeX 본체만 빠져 있습니다. 이 페이지에서는 많은 사람이 막히는 빌드 설정, .cwl이 떠받치는 자동 완성, 구조 보기, 그리고 SyncTeX을 다룹니다.
LaTeX을 담고 있지 않은 LaTeX 통합 환경
TeXstudio는 Windows・macOS・Linux・BSD에서 도는 GPL v2 오픈 소스 편집기이며, 컴파일은 pdflatex이나 latexmk 같은 외부 명령을 실행하는 방식으로 이루어집니다. 그래서 설치 순서가 정해져 있습니다. 먼저 TeX 배포판(TeX Live나 MiKTeX)을, 그다음에 TeXstudio를. 거꾸로 하면 프로그램은 뜨는데 빌드만 되지 않는, 알아채기 어려운 상태에 빠집니다. 공식적으로 내세우는 특징은 “1000개가 넘는 수학 기호” 팔레트, 대화형 맞춤법 검사와 문법 검사, 코드 접기, 구조 보기, 그리고 “(거의) 낱말 단위로 동기화되는” 통합 PDF 뷰어입니다. 마지막 항목은 아래의 SyncTeX 이야기로 곧장 이어집니다.
Build 탭과 Commands 탭: txs:/// 읽는 법
설정은 모두 Options → Configure TeXstudio에 있고, 빌드와 관련된 것은 두 개의 탭입니다. Commands 탭은 “각 외부 명령이 실제로 무엇인가”——실행 파일의 경로와 인수——를 적는 자리이고, Build 탭은 그것들을 엮은 “메타 명령”을 정의하는 자리입니다. 왼쪽 아래의 Show Advanced Options를 켜지 않으면 후자의 내용은 거의 보이지 않습니다. 막히는 사람들 상당수가 바로 여기서, pdflatex의 인수를 고치고 싶은데 Build 탭을 들여다보거나 그 반대를 하고 있습니다.
날마다 만지는 것은 네 가지 조작뿐입니다. Build & View(F5)는 컴파일한 뒤 PDF를 열고, Compile(F6)은 PDF를 만드는 데까지만 합니다. View(F7)는 이미 있는 PDF를 열고, Clean은 .aux・.toc 같은 중간 파일을 쓸어 냅니다(완성된 PDF는 건드리지 않습니다).
메타 명령의 내용은 txs:///로 시작하는 이름들의 나열이며, 세로 막대 |로 잇습니다. “Build & View”는 결국 “기본 컴파일러, 그다음 기본 뷰어”라는 두 단어짜리 식입니다. Commands 탭에 등록한 명령은 모두 같은 방식으로 참조할 수 있으므로, 직접 만든 변환 도구를 사이에 끼워 넣을 수도 있습니다.
| 이름 | 내용 | 이어진 조작 |
|---|---|---|
txs:///quick | 빌드 후 미리 보기 연쇄 | Build & View(F5) |
txs:///compile | 기본 컴파일러(초기값은 pdfLaTeX) | Compile(F6) |
txs:///view | 기본 뷰어 | View(F7) |
txs:///pdflatex | Commands 탭의 pdflatex 줄 그 자체 | 기본 컴파일러로 지정할 수 있습니다 |
txs:///latex | DVI를 만드는 latex 줄 | DVI를 거치는 연쇄에서 씁니다 |
txs:///view-pdf | PDF를 여는 줄. 내장 뷰어와 외부 중에 고릅니다 | SyncTeX을 쓰려면 내장으로 |
초기 상태의 기본 컴파일러는 pdfLaTeX이지만, 이것을 latexmk로 바꾸는 것이 정석입니다. latexmk는 의존 관계를 보고 참고문헌・색인・상호 참조에 필요한 만큼만 자동으로 반복해 주므로 “몇 번 컴파일해야 하나”를 사람이 셀 필요가 없습니다. Commands 탭에 다음과 같이 씁니다. 여기서 %는 루트(마스터) 문서의 절대 경로에서 확장자를 뺀 것으로 치환됩니다——지금 편집 중인 파일이 아니라 루트입니다. 이 한 가지가 여러 파일 구성의 동작을 결정합니다.
latexmk -pdf -synctex=1 -interaction=nonstopmode -file-line-error %.tex문서마다 엔진을 바꾸고 싶다면 첫 줄의 매직 코멘트로 됩니다. TeXstudio는 % !TeX program, % !TeX root, % !TeX encoding, % !TeX spellcheck 등을 읽습니다. 아래 한 줄을 적어 두면 그 문서만 LuaLaTeX으로 컴파일되고 설정 창은 건드리지 않아도 됩니다. % !TEX 계열의 정확한 서식은 TeXShop 페이지에서 자세히 다룹니다.
% !TeX program = lualatex
% !TeX root = ../thesis.tex
% !TeX spellcheck = en_GB처음에 굳혀야 할 것은 셋뿐입니다
설정 항목이 많으므로 기본 컴파일러・Build & View 연쇄・SyncTeX 사용 여부 세 가지만 먼저 정하는 편이 현실적입니다. 이 셋이 정해지면 F5를 누를 때마다 같은 길을 지나가고, 문제가 생겼을 때 따라갈 실마리도 하나로 줄어듭니다.
- 서양 문자 위주의 문서라면 latexmk로 PDF를 바로 만들고, 물려받은 일본어 템플릿이라면 upLaTeX + dvipdfmx를 고릅니다.
- Build & View를 “매일 누르는
F5가 실제로 하는 일”로 정의합니다. 컴파일과 내장 뷰어로 여는 데까지 포함합니다. - 명령에
-synctex=1과-file-line-error를 반드시 넣습니다. 앞은 PDF에서 소스로 돌아오기 위해, 뒤는 오류를 파일 이름과 줄 번호로 읽기 위해서입니다. - 본 원고를 열기 전에 열 줄짜리
.tex로 설정을 시험하고, 로그와 PDF를 모두 보아 예상한 엔진이 돌았는지 확인합니다.
일본어 빌드를 어떻게 구성할까
널리 쓰이는 길은 둘입니다. 하나는 LuaLaTeX입니다. Build 탭에서 Build & View를 “Compile & View”로, 기본 컴파일러를 “LuaLaTeX”로 두면 F5 한 번으로 PDF까지 갑니다. 새로 시작한다면 이쪽이 무난합니다. 다른 하나는 일본어의 정석이었던 upLaTeX + dvipdfmx로, PDF 앞에 DVI를 끼우므로 Build & View를 “DVI->PDF chain”으로, 기본 컴파일러를 “LaTeX”로 둡니다.
가장 깔끔한 방식은 엔진 조합을 .latexmkrc에 적고 TeXstudio에게는 latexmk를 부르게만 하는 것입니다. .tex와 같은 폴더에 다음 파일을 두면 upLaTeX → dvipdfmx 흐름도, 참고문헌(upbibtex)도, 색인(upmendex)도, 반복 횟수도 latexmk가 돌봅니다. $latex에 -synctex=1이 들어 있으므로 SyncTeX도 살아 있습니다.
$latex = 'uplatex %O -synctex=1 -interaction=nonstopmode %S';
$bibtex = 'upbibtex %O %B';
$makeindex = 'upmendex %O -o %D %S';
$dvipdf = 'dvipdfmx %O -o %D %S';
$pdf_mode = 3;$pdf_mode = 3은 “DVI를 만들고 그것을 $dvipdf로 PDF로 바꾼다”는 모드 지정입니다. %O(추가 옵션), %S(소스 파일), %B(확장자 없는 기본 이름), %D(출력 대상)는 latexmk 쪽 자리표시자로 TeXstudio의 %와는 다른 것입니다. 이렇게 해 두면 TeXstudio에서 부르든, 명령줄에서 두드리든, 아예 다른 편집기에서 실행하든 같은 결과가 나옵니다. 설정이 한곳에 있기 때문입니다.
로그는 첫 오류부터 읽습니다
설정을 마구 바꾸기 전에 두 가지를 보십시오. 어떤 명령이 실행되었는가, 그리고 로그의 첫 오류가 무엇인가. LaTeX 오류는 연쇄하므로 첫 번째 붉은 줄이 그 뒤의 것들을 만들어 낸 경우가 대부분입니다. TeXstudio의 로그 패널은 바로 이 읽기 순서를 돕도록 만들어져 있어, 원시 로그 표시와 오류(빨강)・경고(노랑)・넘친 상자(파랑)로 분류한 표를 오갈 수 있습니다. 오류 사이 이동은 Ctrl+Shift+↑・Ctrl+Shift+↓, 경고와 상자는 Alt+Shift+↑・Alt+Shift+↓입니다.
Could not start the command가 나오면 의심할 것은 TeXstudio가 아니라 PATH와 TeX Live・MiKTeX의 설치 상태입니다. Commands 탭의 실행 파일 경로를 확인합니다.File not found는 루트 파일, 상대 경로, 그림 파일 이름 중 하나입니다. 확장자까지 적혀 있는지도 봅니다.- 패키지가 없을 때는 TeX Live면
tlmgr install, MiKTeX이면 MiKTeX Console로 설치합니다. 편집기 쪽에서는 해결되지 않습니다. - 로그의 줄 번호를 눌러 첫 오류만 고치고 다시 빌드한 뒤 이어서 읽습니다. 연쇄의 뒷부분을 먼저 읽는 것은 대개 시간 낭비입니다.
자동 완성이 \label을 아는 이유: .cwl 파일
TeXstudio는 LaTeX을 해석하는 것이 아니라 .cwl(completion word list) 파일을 읽습니다. 이 형식은 본디 또 다른 LaTeX 편집기인 Kile의 것이었고, TeXstudio는 여기에 “이 인수는 레이블이다”, “여기가 커서가 놓일 자리다” 같은 의미 정보를 더해 확장했습니다. 그래서 \ref{까지 치면 문서 안의 레이블이, \cite{까지 치면 참고문헌의 키(bibID)가 후보로 나옵니다. \usepackage로 부른 패키지에 대응하는 cwl이 있으면 그것이 쓰이고, 없으면 TeXstudio가 .sty에서 자동으로 만들어 내지만 그 경우에는 명령 이름만 얻고 인수의 뜻은 붙지 않습니다. 직접 만든 패키지는 \usepackage{./myPackage}처럼 상대 경로로 적으면 ./myPackage.cwl을 찾아갑니다.
타건을 줄이는 장치도 셋 알아 두면 좋습니다. 후보들이 공통 접두사를 가질 때 Tab을 누르면 그 공통 부분까지 한 번에 들어갑니다. 환경을 쓰기 시작하면——이를테면 \begin{itemize}를 치면——짝이 되는 \end{itemize}가 저절로 삽입됩니다. 그리고 환경 이름 위에 커서를 잠시 두면 미러 커서가 나타나 \begin과 \end의 이름을 동시에 고칠 수 있습니다(itemize를 enumerate로 한 번에 바꿉니다). 아직 닫히지 않은 환경이나 괄호를 닫고 싶으면 Alt+Return입니다. 닫는 것을 잊는 실수는 LaTeX에서 가장 흔한 사고 가운데 하나이므로 이 한 수는 외워 둘 값어치가 있습니다.
구조 보기, 그리고 입력하는 동안 도는 맞춤법・문법 검사
왼쪽의 구조 보기(Structure view)는 문서의 지도가 됩니다. 여기에는 제목(\section 계열), 레이블(\label), \input・\include로 끌어온 파일, beamer의 블록, 그리고 TODO가 실립니다. \todo{} 명령과 % TODO・%todo 주석이 모두 잡힙니다. 항목을 누르면 그 자리로 이동합니다. 긴 원고에서도 여러 파일 구성에서도 지금 어디에 있는지 놓치지 않게 해 주는 것이 이 목록입니다.
맞춤법 검사는 입력하는 도중에 돌며, 의심스러운 낱말을 오른쪽 클릭하면 후보가 나옵니다. 사전은 hunspell 형식——LibreOffice나 Firefox와 같은 구조이므로 추가 사전을 그대로 가져다 쓸 수 있습니다. 언어를 파일마다 고정하고 싶다면 첫 줄에 % !TeX spellcheck = de_DE처럼 적어 두면 그 파일을 열 때마다 자동으로 그 언어가 됩니다. 여러 언어가 섞인 논문집을 엮을 때 효과가 큽니다.
문법 검사 쪽은 TeXstudio 자신이 판단하는 것이 아닙니다. 오픈 소스 교정 엔진 LanguageTool을 로컬에 서버로 띄우고, TeXstudio가 시작할 때 거기에 접속해 다 쓴 문단을 보내고 결과를 받아 옵니다(Options → Configure TeXstudio → Language Checking에서 서버 URL과 jar 경로를 지정합니다). 이런 구성 덕분에 글이 밖으로 나가지 않으며, 아직 투고하지 않은 원고를 다룰 때 안심이 됩니다.
SyncTeX: Ctrl+클릭으로 앞으로도 뒤로도
조건은 둘뿐입니다. 첫째, 컴파일 명령에 -synctex=1을 넘길 것. SyncTeX은 편집기의 기능이 아니라 TeX 엔진의 기능이며, 이 스위치가 동기화 파일 .synctex.gz를 쓰게 합니다(위의 latexmk 줄과 .latexmkrc에는 이미 들어 있고, 빠뜨렸을 때는 TeXstudio가 명령을 고쳐 주겠다고 제안합니다). 둘째, PDF를 내장 뷰어로 열 것. 양방향 이동을 가능하게 하는 것은 이 내장 뷰어의 SyncTeX 지원입니다.
조작은 외우기 쉽습니다. 양쪽 방향 모두 Ctrl + 왼쪽 클릭입니다. 소스에서 그렇게 하면 커서 위치에 대응하는 PDF의 자리로(정방향 검색), PDF에서 그렇게 하면 대응하는 소스 줄로(역방향 검색) 갑니다. 오른쪽 클릭 메뉴의 “Go To PDF”와 “jump to source”로도 같은 일을 할 수 있습니다. 뷰어를 여는 시점에도 현재 커서 위치를 향해 정방향 검색이 자동으로 돕니다. 여기에 “scrolling follows cursor”와 “cursor follows scrolling”을 켜면 글 쓰는 내내 둘이 연동되어, 교정할 때 “이 문단은 몇 번째 줄에서 나왔나”를 찾는 일이 사라집니다.