“XeTeX을 만든 사람이 그다음에는 기능이 거의 없는 편집기를 만들었다.” TeXworks는 여기에서 출발합니다. TeX에 유니코드와 운영체제의 글꼴을 들여온 조너선 큐는 다음으로 다른 문제를 붙잡았습니다. LaTeX을 막 시작한 사람이 길을 잃는 지점이 너무 많다는 것이었습니다. 그가 TUG 발표에 붙인 제목은 “TeXworks: lowering the barrier to entry”, 곧 입문의 문턱을 낮춘다는 뜻이었습니다. 그래서 TeXworks에는 프로젝트 관리도, 빌드 스크립트도, 옆에 늘어선 파일 목록도 없습니다. 창은 하나, 버튼도 하나, 고를 것은 엔진뿐입니다. 이 페이지에서는 어느 배포판이 실제로 TeXworks를 함께 넣어 주는지(답은 운영체제마다 다르고, 잘못 적은 설명이 아주 많습니다), 유일한 설정 화면인 조판 도구를 어떻게 고쳐 쓰는지, 그리고 % !TeX root 한 줄이 프로젝트 관리를 어떻게 대신하는지를 살펴봅니다.
TeXworks를 만든 사람은 XeTeX의 저자입니다
TeXworks를 만든 사람은 XeTeX의 저자인 조너선 큐입니다. 본보기로 삼은 것은 맥에서 오랫동안 기본 선택이었던 리처드 코크의 TeXShop이었습니다. 큐는 창 하나에 원본과 PDF를 나란히 두는 TeXShop의 무뚝뚝한 짜임새가 초보자에게 잘 듣는다고 보았고, 그 감각을 Windows와 Linux로 옮긴 것이 TeXworks입니다. 당시 Windows용 통합 환경은 LaTeX을 처음 만나는 사람에게 버튼이 너무 많았습니다. 큐의 답은 기능을 더하는 것이 아니라 결정할 거리를 줄이는 것이었습니다.
그 “적음”은 아주 구체적입니다. TeXworks를 열면 편집 화면, 도구 모음의 엔진 드롭다운과 그 옆의 초록색 삼각형 버튼, 그리고 PDF를 비추는 또 하나의 화면이 전부입니다. 파일 트리도, 장 목록도, 빌드 설정 파일도 없습니다. 화면은 Qt로 작성되어 Windows·macOS·Linux에서 같은 모습이고, 라이선스는 GPL v2, 기본 인코딩은 UTF-8입니다. 손에 쥐여 주는 도구도 최소한이어서 명령 자동 완성, 입력 보조, 맞춤법 검사 정도입니다. 그것으로 모자라면 선택 사항인 Lua와 Python 스크립트 플러그인을 켜서 자기만의 처리를 더할 수 있습니다(빌드 시 옵션이며 Lua는 기본 켜짐, Python은 기본 꺼짐입니다). 판 번호도 눈여겨볼 만합니다. 첫 공개로부터 십수 년이 지난 지금도 여전히 0.6 계열이고, 해마다 2월 무렵에 작은 갱신이 나옵니다. 기능을 쌓아 1.0으로 간다는 길은 애초에 고르지 않은 것입니다.
TeXworks는 어느 배포판에 들어 있나
Windows라면 이미 들어 있을 가능성이 높습니다. MiKTeX 설치 프로그램과 TeX Live의 Windows 설치 프로그램이 모두 TeXworks를 함께 깔아 주기 때문입니다. 반대로 macOS와 Linux에서는 배포판에 딸려 오지 않습니다. TeX Live가 담는 것이 Windows용 실행 파일뿐이라는 것은 짐작이 아니라, TeX Live 자신의 패키지 장부 texlive.tlpdb에 그렇게 적혀 있습니다. texworks 패키지 설명은 “TeX Live includes executables and support files only for Windows.”이고, 이를 묶는 collection-texworks의 표제도 “TL includes only the Windows binary”입니다.
# from texlive.tlpdb, the package database TeX Live installs from
name texworks
category TLCore
shortdesc friendly cross-platform front end
longdesc TeX Live includes executables and support files only for Windows.
postaction shortcut type=menu name="TeXworks editor" \
cmd=TEXDIR/bin/windows/texworks.exe혼란은 바로 여기에서 시작됩니다. TeX Live에는 texmf-dist/doc/texworks/README라는 짧은 안내문도 함께 들어 있는데, 거기에는 TeX Live가 Windows 바이너리를, MacTeX가 macOS 바이너리를 담는다고 적혀 있습니다. 그러나 이 README는 2009년에 쓰였고, 설치 프로그램이 실제로 따르는 것은 장부 쪽입니다. 오늘날 MacTeX가 마련해 주는 그래픽 편집기는 TeXShop이지 TeXworks가 아닙니다. Linux에서는 TeX Live 본체와 완전히 분리되어, 배포판 자체의 texworks 패키지로 제공됩니다. 요컨대 “TeXworks는 TeX Live에 들어 있다”는 문장은 Windows에서만 참입니다.
| 입수 경로 | 대상 OS | 들어오는 것 |
|---|---|---|
MiKTeX | Windows | 기본 편집기로 함께 설치됩니다 |
TeX Live | Windows | texworks.exe와 시작 메뉴 항목, .tex 파일 연결까지 만들어집니다 |
MacTeX | macOS | 기본 편집기는 TeXShop입니다. TeXworks는 따로 설치합니다 |
apt / dnf / pacman | Linux | TeX Live와 별개인 texworks 패키지로 설치합니다 |
조판 드롭다운과 Processing tools
TeXworks가 빌드에 대해 아는 것은 모두 도구 모음 왼쪽의 드롭다운 하나에 모여 있습니다. 쓸 엔진(pdfLaTeX, XeLaTeX, LuaLaTeX, ConTeXt 등)을 고르고 옆의 초록색 삼각형 버튼이나 Ctrl/Cmd-T를 누르면, 지금 열려 있는 문서가 컴파일되고 PDF 미리 보기가 열립니다. BibTeX나 MakeIndex 같은 보조 도구도 처음부터 등록되어 있어서, 평범한 문서라면 설정을 한 번도 열지 않고 PDF까지 갈 수 있습니다.
이 목록은 직접 고쳐 쓸 수 있습니다. Edit → Preferences → Typesetting 탭을 열면 아래쪽 절반이 Processing tools 목록이고, +로 추가, -로 삭제, Edit...로 수정합니다. 도구 하나가 가지는 것은 네 가지뿐입니다. 드롭다운에 표시되는 Name, 실행할 Program, Arguments, 그리고 View PDF after running 확인란입니다. 여기서 가장 잦은 사고는 Arguments 쪽인데, 인수는 한 줄에 하나씩 적습니다. 셸 명령줄이 아니므로 -interaction=nonstopmode %.tex처럼 한 줄에 몰아 적으면 그 전체가 하나의 인수로 넘어가고, 엔진은 아주 기묘한 이름의 파일을 찾으러 갑니다.
Arguments에는 TeXworks의 변수를 쓸 수 있습니다. 처리 대상을 가리키는 $fullname이 널리 알려져 있지만 실제로는 다섯 개가 있고, 확장자만 또는 디렉터리만 뽑아낼 수 있다는 점이 DVI를 거치는 경로나 보조 도구 호출을 짜는 데 힘이 됩니다. 변수는 도구를 실행하기 직전에 펼쳐집니다.
| 변수 | 펼쳐지는 값 |
|---|---|
$fullname | 처리 대상 파일 이름, 확장자 포함(예: main.tex) |
$basename | 확장자를 뺀 파일 이름(예: main) |
$suffix | 확장자만(예: tex) |
$directory | 문서가 있는 디렉터리의 절대 경로 |
$synctexoption | 해당 도구가 SyncTeX를 지원하면 -synctex=1, 아니면 빈 문자열 |
latexmk를 도구 하나로 등록하기
TeXworks에 없는 것은 “몇 번 돌릴지”를 정하는 머리입니다. 상호 참조가 ?? 그대로 남는다, \tableofcontents가 늘 한 판 뒤처진다 — 이런 증상은 결국 컴파일 횟수의 문제인데, TeXworks는 스스로 세지 않습니다. 그래서 정석은 그 판단을 통째로 latexmk에 맡기고, TeXworks 쪽에는 그것을 부르는 도구 하나만 두는 것입니다. Program에 latexmk를 넣고, Arguments를 아래처럼 한 줄에 하나씩 적은 뒤 View PDF after running을 체크합니다.
-e
$pdflatex=q/pdflatex $synctexoption %O %S/
-pdf
$fullname일본어에서는 upLaTeX으로 조판하고 dvipdfmx로 PDF를 만드는 경로가 오랫동안 정석이었습니다. TeX Live에 딸린 TeXworks에는 일본어용 도구가 처음부터 들어 있지만, 직접 만든다면 두 단계를 하나로 묶어 주는 ptex2pdf가 가장 짧습니다. Program을 ptex2pdf로 하고 Arguments를 아래처럼 적습니다(-l은 LaTeX 형식, -u는 upLaTeX, -ot는 TeX로 넘길 추가 옵션의 지정입니다). latexmk 자체의 세부 설정은 다른 페이지의 주제이므로, 여기서는 부르는 방법만 다룹니다.
-l
-u
-ot
-kanji=utf8 -no-guess-input-enc $synctexoption
$fullname평소에 쓰는 것은 Typesetting 탭 위쪽의 기본 조판 엔진으로 지정해 둡니다. 그러면 새로 여는 문서는 그 도구로 처리됩니다. 특정 문서만 다른 엔진을 써야 할 때는 다음 절의 매직 코멘트가 이 기본값을 덮어씁니다.
% !TeX root — 프로젝트 관리를 대신하는 한 줄
문서를 장별 파일로 쪼개고 부모 파일에서 \input이나 \include로 불러들이는 순간, TeXworks에 “프로젝트”라는 그릇이 없다는 점이 문제가 됩니다. chapter1.tex를 열어 둔 채 조판하면 그 파일에는 \documentclass도 \begin{document}도 없으니 당연히 실패합니다. 다른 편집기라면 프로젝트를 만들고 마스터 문서를 등록할 자리이지만, TeXworks의 답은 파일 맨 위에 한 줄을 적는 것이었습니다.
% !TeX root = main.tex
\chapter{Introduction}
The body of the chapter goes here.TeX이 보기에는 % 뒤의 평범한 주석일 뿐이지만, TeXworks는 파일 앞머리의 몇 줄을 읽어 동작을 바꿉니다. 이 한 줄이 있으면 하위 파일을 편집하다 조판해도 TeXworks는 대신 상위(루트) 파일을 컴파일합니다. 경로는 하위 파일 기준의 상대 경로로 적습니다. 묘한 점은 이 정보가 설정이 아니라 파일 자신에 실려 있다는 것입니다. 프로젝트 파일은 환경이 바뀌면 깨지지만, 주석 한 줄은 저장소에 함께 들어가 공저자의 환경에서도 그대로 작동합니다. 본래 TeXShop에서 온 표기법이고, TeXworks 밖의 편집기들도 같은 줄을 읽습니다.
매직 코멘트는 더 있습니다. % !TeX program = ...은 그 문서를 처리할 엔진을 못 박습니다. 여기에 적는 것은 실행 파일 이름이 아니라 Preferences에 등록한 도구의 Name이라는 점에 유의하세요. pdflatex이 아니라 목록에 보이는 그대로의 표시 이름입니다. 옛 표기인 % !TeX TS-program = ...도 같은 뜻으로 통합니다. % !TeX encoding = ...은 파일의 문자 인코딩을 선언하지만, TeXworks의 기본값이 UTF-8이라 UTF-8로 쓴다면 대개 필요 없습니다. 일본어 문서 맨 앞에 % !TeX program을 두면 드롭다운 바꾸기를 잊어도 올바른 엔진이 돌아갑니다.
% !TeX program = upLaTeX (ptex2pdf)
% !TeX encoding = UTF-8
\documentclass{ujarticle}
\begin{document}
\input{chapter1}
\end{document}TeXworks와 TeXstudio의 차이, 갈아탈 때
차이는 기능의 많고 적음이 아니라 설계 목표에 있습니다. TeXworks는 헤맬 자리를 줄이는 쪽으로 최적화된 편집기이고, TeXstudio나 Texmaker, Kile은 반대로 필요할 법한 것을 모두 손닿는 곳에 꺼내 두는 쪽으로 최적화되어 있습니다. 그래서 “TeXworks는 기능이 적다”는 말은 평가가 아니라 설계에 대한 설명이며, 비교의 축은 “지금 내 시간을 무엇이 잡아먹고 있는가”에 두는 편이 옳습니다. 아래 중 둘 이상이 해당한다면 갈아탈 때를 생각할 무렵입니다.
- 파일 수가 늘어,
% !TeX root줄을 빠뜨린 하위 파일에서 매번 걸려 넘어집니다. - 문헌 데이터베이스를 다루게 되어, 다른 창에서
\cite키를 찾는 시간이 길어졌습니다. - 빌드가 pdfLaTeX 한 번으로 끝나지 않게 되었고, Processing tools 목록이 항목으로 가득 찼습니다.
- 같은 원고를 pdfLaTeX과 LuaLaTeX처럼 둘 이상의 엔진으로 내야 하게 되었습니다.
로그와 중간 파일 읽는 법
화면에 군더더기가 없기에, TeXworks는 로그 읽는 습관을 들이기에 알맞습니다. 조판 뒤의 출력 패널은 PDF가 나왔는지만 알려 주지 않습니다. 해결되지 않은 참조, 찾지 못한 패키지, 읽어 들이지 못한 그림이 그대로 드러납니다. ! Missing $ inserted나 ! Undefined control sequence 같은 줄이 첫 오류이고, 그 아래 따라오는 줄 번호가 진짜 실마리입니다. TeXworks는 대신 멈춰 주기보다 읽게 만드는 설계이므로, 이 패널을 건너뛰면 얻을 것의 절반을 버리는 셈입니다.
- 참조가
??그대로면 같은 도구로 한 번 더 조판해.aux를 갱신합니다(latexmk도구라면 알아서 해 줍니다). - 목차나 참고문헌을 크게 뒤바꾼 뒤에만
.aux와.toc를 지우고 다시 만듭니다. 평소에는 남겨 두는 편이 빠릅니다. - 그림이 나오지 않으면 로그에 찍힌 파일 이름과 실제 경로를 견주어 봅니다. 파일 이름에 공백이나 ASCII 밖의 문자는 피합니다.
- Processing tools가 너무 늘어나면 빌드에 관한 지식을
.latexmkrc로 옮기고, TeXworks 쪽은 latexmk 도구 하나로 되돌립니다.
SyncTeX 설정(정방향 검색과 역방향 검색)
TeXworks에는 Qt와 Poppler로 만든 PDF 미리 보기가 내장되어 있어, 외부 뷰어를 띄우지 않고 같은 창에서 편집과 확인을 오갈 수 있습니다. 원본의 한 지점에서 PDF의 대응 위치로 뛰는 정방향 검색은 원본에서 Ctrl/Cmd-클릭, PDF에서 해당 줄로 돌아오는 역방향 검색은 미리 보기에서 Ctrl/Cmd-클릭입니다. 설정은 필요 없습니다. 기본 도구의 Arguments에 $synctexoption이 처음부터 들어 있고, 그것이 곧 점프가 기대는 대응표 .synctex.gz를 엔진이 쓰게 만들기 때문입니다. 직접 만든 도구에서 동기화가 되지 않으면 먼저 이 변수를 빠뜨리지 않았는지 확인하세요. SyncTeX의 원리 자체는 별도 페이지에서 다룹니다.