Kile

Kile를 열고 가장 먼저 알아차리는 것은 글을 치는 감촉이 텍스트 편집기 Kate와 똑같다는 점입니다. 착각이 아닙니다. Kile은 KDE 프로젝트가 가꾸는 LaTeX 통합 환경인데, 글자를 입력하는 면 자체가 Kate의 편집 부품 KatePart를 통째로 심어 만든 것이고, 핸드북도 그렇게 못 박아 두었습니다. 같은 이치로 PDF를 비추는 것도 Kile 자신이 아니라 심어 넣은 Okular입니다. 이 페이지에서는 그 KDE식 “부품을 조립하는” 방식이 Kile의 프로젝트, %source로 시작하는 치환 기호를 가진 도구와 빌드 구조, 그리고 선택한 범위만 조판해 보여 주는 QuickPreview에 어떻게 드러나는지를 살펴봅니다.

Kile의 편집 화면이 Kate와 닮은 까닭

핸드북의 한 문장이 모든 것을 설명합니다. “Kile is based on the Kate editor component, i.e. a lot of its editing capabilities stem from the Kate editor component itself.” KDE에는 KParts라는 장치가 있어, 어떤 프로그램의 부품을 다른 프로그램 안에 통째로 심을 수 있습니다. Kile은 이것을 써서 Kate의 편집 엔진을 자기 창 한복판에 앉혔습니다. 그래서 구문 강조 정의, 찾기와 바꾸기, 줄 번호, 블록 선택, Vi 입력 모드 같은 편집 동작은 Kile이 직접 쓴 것이 아니라 Kate에서 물려받은 것입니다. Kate 설정에 익숙하다면 그 습관을 그대로 가져올 수 있습니다. 뒤집어 말하면, 편집 화면의 버릇이 마음에 들지 않을 때 고쳐야 할 것은 Kile 쪽이 아니라 KatePart 쪽 설정입니다.

그 위에 Kile 자신이 얹는 것이 LaTeX을 아는 쪽의 도구들입니다. \begin{...}…\end{...} 짝을 한 번에 넣어 주는 환경 자동 완성, 기호와 태그를 눌러서 꽂아 넣는 팔레트, \documentclass와 용지 크기를 한 번의 대화로 정해 주는 QuickStart 마법사와 정형 템플릿, 그리고 왼쪽의 구조 보기(Structure View)입니다. 구조 보기는 제목과 라벨, 들여온 파일을 한 그루의 나무로 늘어놓고, Jump to Structure Element로 그 자리에 뛰게 해 줍니다. Kate에서 물려받은 “글자를 다루는 힘”과 Kile이 더한 “LaTeX을 아는 힘” — 이 두 겹 구조가 곧 Kile의 설계입니다.

이 짜임새는 2003년 무렵의 인수인계에서 비롯되었습니다. Kile을 세운 사람은 Pascal Brachet — 나중에 Texmaker를 쓰게 되는 바로 그 인물입니다. 기능을 보태고 싶다며 연락해 온 Jeroen Wijnhout에게 브라셰는 프로젝트를 통째로 넘깁니다. 베인하우트의 손에서 나온 다음 분기점이 1.6판인데, 그 변경 기록의 “major(주요 변경)” 칸에는 단 두 줄뿐입니다. “new editor (katepart)”와 “project management” 입니다. 곧 Kile의 성격을 정하는 두 기둥 — Kate에서 물려받은 편집 화면과, 여러 파일을 묶는 프로젝트 — 이 같은 한 번의 릴리스에서 함께 들어온 것입니다. 이후 유지 보수는 Michel Ludwig을 중심으로 한 팀이 이어받았습니다. 참고로 kile은 노르웨이어로 “쐐기”, “간질이다”라는 뜻이고, 영어 이름 Kyle보다는 /kiːlə/에 가깝게 읽습니다.

지금 Kile이 어떤 상태인지는 솔직하게 봐 둘 값어치가 있습니다. 개발은 이어지고 있고, KDE 프레임워크 6과 Qt 6으로의 이식도 이미 끝났습니다. 현재 개발 가지의 빌드 요건이 Qt 6, KDE 프레임워크 6, Okular 6입니다. 다른 한편으로 릴리스 간격은 매우 깁니다. 안정판으로 마지막에 나온 2.1.3은 2012년이고, 다음 세대인 3.0 계열은 아직 베타로, 베타 1이 2017년, 베타 4가 2024년 3월입니다. 요컨대 무르익어 잘 도는 도구이지 달마다 바뀌는 편집기는 아닙니다. 배포 라이선스는 GPL v2입니다. 주 무대는 Linux의 KDE 데스크톱이지만, Qt와 KDE 라이브러리가 이식되어 있어 macOS·BSD·Windows에서도 돌아갑니다(Windows판은 Microsoft Store로도 배포됩니다).

프로젝트와 마스터 문서 — 장을 늘려도 헤매지 않는 구조

여러 .tex 파일을 한 프로젝트로 묶으면, Kile은 그중 어느 것이 마스터 문서인지 기억합니다. 마스터 문서란 \documentclass를 가진 부모 파일이며, 등록해 두면 하위 파일에서 빌드를 걸어도 시작점은 언제나 마스터입니다. 기본 LaTeX 도구에는 checkForRoot=yes라는 설정이 들어 있어서, 애초에 문서의 뿌리가 아닌 파일을 조판하려 할 때 Kile이 알아챌 수 있습니다. 프로젝트의 효험은 조판에만 그치지 않습니다. \ref\cite의 자동 완성이 프로젝트 안의 모든 파일을 가로지르므로, 7장을 쓰면서 2장에서 붙인 라벨을 불러올 수 있습니다. 장별로 쪼갠 논문이나 책이 쪼갰다는 이유로 되레 불편해지는 일을 막아 주는 것이 바로 이 단위입니다.

도구와 QuickBuild — Kile의 빌드는 어떻게 조립되는가

Kile의 빌드는 “도구(Tools)”라는 한 가지 부품만으로 이루어져 있습니다. pdflatexdvipdfmx도 PDF 뷰어도 모두 같은 꼴의 도구이며, 저마다 class(종류), 실행할 command, options(인수), 그리고 입력과 출력의 확장자를 나타내는 from·to를 가집니다. 메뉴에서는 종류별로 Build → Compile / Convert / View에 나뉘어 들어가고, 실체를 고치는 곳은 Settings → Configure Kile... → Tools+Build입니다. 이 균질함이 Kile의 강점입니다. 새로운 변환을 더하고 싶을 때도 “도구를 하나 더 만든다”로 끝나기 때문입니다.

출고 상태의 PDFLaTeX 도구는 명령이 pdflatex, 옵션이 -interaction=nonstopmode %source입니다. -synctex=1은 기본값에 들어 있지 않으므로, 정방향·역방향 검색을 쓸 생각이라면 직접 더해야 합니다. “설정했는데 동기화가 안 된다”의 원인은 대개 여기입니다. 같은 도구에는 checkForRoot=yes(뿌리가 아닌 파일을 조판하려는 건 아닌지 확인), jumpToFirstError=yes(첫 오류 자리로 이동), autoRun=yes(BibTeX·makeindex·Asymptote 같은 보조 처리가 필요한지 스스로 판단해 실행)가 붙어 있습니다. 이 autoRun 덕분에 단순한 문서라면 재실행을 신경 쓸 일이 없습니다.

terminal
-interaction=nonstopmode -synctex=1 %source

옵션 칸에 적는 %로 시작하는 기호는 Kile의 치환 기호로, 도구를 실행하기 직전에 실제 값으로 바뀝니다. 가장 자주 쓰는 것은 처리 대상 자체를 가리키는 %source와, 확장자를 떨어뜨린 %S 둘이지만, 변환 도구나 외부 뷰어를 부를 때는 출력 쪽을 가리키는 기호도 필요합니다.

치환 기호펼쳐지는 값
%source처리 대상 파일 이름, 확장자 포함
%S같은 파일의 확장자를 뺀 기본 이름. %S.dvi처럼 바꿔 쓸 때 사용합니다
%dir_base입력 파일이 있는 디렉터리의 절대 경로
%target출력 파일 이름. 보기 도구(View)가 여는 대상
%dir_target출력 파일이 있는 디렉터리의 절대 경로
%absolute_target출력 PDF에 “지금 몇 번째 줄인지”를 덧붙인 정방향 검색용 지정. Okular에 넘깁니다
%options실행할 때 추가로 넘기는 옵션

그 위에 얹히는 것이 QuickBuild입니다. 이것은 독립된 프로그램이 아니라 도구를 차례로 부르는 “나열(Sequence)”이며, 내용은 sequence=PDFLaTeX,ViewPDF처럼 도구 이름을 늘어놓은 한 줄일 뿐입니다. 출고 시 선택되어 있는 것은 PDFLaTeX+ViewPDF, 곧 “pdfLaTeX으로 조판해 그대로 표시한다”입니다. 마련되어 있는 나열은 아래와 같고, ForwardPDF로 끝나는 쪽은 컴파일할 때마다 뷰어가 커서 위치의 쪽을 열어 줍니다. 물론 직접 순서를 바꾸거나 새 나열을 더해도 됩니다.

  • PDFLaTeX+ViewPDF — pdfLaTeX으로 곧장 PDF를 만들어 표시합니다. 출고 기본값입니다.
  • LaTeX+DVItoPDF+ViewPDF — DVI를 거쳐 dvipdfmx로 변환합니다. 일본어의 정석 경로입니다.
  • LaTeX+DVItoPS+ViewPSLaTeX+DVItoPS+PStoPDF+ViewPDF — 중간에 PostScript를 끼우는 경로입니다.
  • LuaLaTeX+ViewPDF — LuaLaTeX으로 곧장 PDF를 만들어 표시합니다.
  • PDFLaTeX+ForwardPDFLuaLaTeX+ForwardPDF — 같은 흐름이되, 단순 표시 대신 정방향 검색을 곁들여 엽니다.

일본어용 도구 설정(upLaTeX과 dvipdfmx)

일본어에서 오래 정석이던 upLaTeX + dvipdfmx는, Kile에서는 도구 둘을 고쳐 하나의 나열로 묶는 형태가 됩니다. 먼저 LaTeX 계열 도구에서 명령을 uplatex로, 옵션을 아래처럼 합니다. 여기에 -synctex=1을 넣어 두는 것을 잊지 마세요.

terminal
-synctex=1 -interaction=nonstopmode %source

다음은 DVI를 PDF로 바꾸는 DVItoPDF 도구입니다. 출고 상태에서 이미 명령은 dvipdfmx, 옵션은 %S.dvi이며, from=dvito=pdf라는 선언이 “DVI를 받아 PDF를 내놓는 단계”임을 Kile에 알려 줍니다. %S.dvi라고 적는 까닭은, 원본이 chapter1.tex라 해도 넘겨야 할 상대는 chapter1.dvi이기 때문입니다. 확장자를 떼고 갈아 끼우는 일이 바로 %S의 몫입니다. 이제 이 둘을 LaTeX+DVItoPDF+ViewPDF 나열에 올리면 일본어 문서도 한 번에 빌드됩니다. 참고문헌과 색인 도구도 일본어를 아는 upbibtexupmendex을 가리키도록 바꿔 두면 빈틈이 없습니다.

terminal
%S.dvi

재실행 횟수와 의존 관계를 더 확실히 챙겨 주기를 바란다면, latexmk를 부르는 도구를 하나 더해 QuickBuild를 그것만으로 채우는 것이 정석입니다. 새 도구를 만들어 명령에 latexmk, 옵션에 아래를 넣습니다. 한 가지 주의가 있습니다. latexmk에도 %S라는 기호가 있지만, 뜻은 Kile의 것과 다릅니다. 도구 설정 칸에 적는 % 기호는 Kile이 펼치고, .latexmkrc 안에 적는 % 기호는 latexmk가 펼칩니다. 둘을 서로 다른 언어라고 여기고 섞지 마세요. latexmk 자체의 설정은 다른 페이지의 주제입니다.

terminal
-pdf -synctex=1 -interaction=nonstopmode %source

Okular와의 연동 — 정방향·역방향 검색 설정

편집 화면에 KatePart를 심은 것과 같은 이치로, PDF를 비추는 것도 KDE 표준 문서 뷰어 Okular의 부품입니다. 표시 계열 도구의 출고 기본값은 모두 Document Viewer, 곧 Kile의 창 안에 함께 사는 Okular이며, 별도 창의 okular 명령을 부르는 설정도 고를 수 있습니다. 원본과 PDF가 한 창에 나란히 놓이는 것은 이 심기 덕분이고, 오가는 느낌이 매끄러운 까닭도 여기에 있습니다.

정방향 검색과 단순 표시는 서로 다른 도구입니다. 이 둘을 뒤바꾸면 설정을 그대로 베껴도 동작하지 않습니다. 표시만 하는 ViewPDF는 Okular에 %target(또는 --unique %target)을 건넬 뿐이지만, 정방향 검색용 ForwardPDF--unique %absolute_target을 건넵니다. 이 %absolute_target에 “출력 PDF에서 어느 줄에 대응하는 위치인지”까지 실려 있기에, Okular가 커서가 놓인 문단을 펼칠 수 있는 것입니다. 흔한 엇갈림은 ViewPDF 칸에 %target을 둔 채 정방향 검색이 안 된다고 고민하는 경우인데, 고칠 곳은 ForwardPDF 쪽 설정과, QuickBuild 나열의 끝을 ForwardPDF로 두는 것입니다.

역방향 검색은 Kile이 아니라 Okular 쪽에서 설정합니다. Okular 설정에서 편집기를 Kile로 하고 실행 명령을 kile --line %l로 해 두면, PDF에서 Shift를 누른 채 클릭한 자리에서 Kile의 해당 줄로 돌아올 수 있습니다. 정방향 검색은 Kile → Okular, 역방향 검색은 Okular → Kile 방향이므로, 방향이 설정의 위치를 정한다고 외워 두면 헤매지 않습니다. 동기화 구조 자체가 무엇을 담는지 — .synctex.gz 안에 무엇이 들어 있는지 — 는 별도 페이지에서 다룹니다.

QuickPreview — 고른 부분만 조판해 보기

QuickPreview는 긴 문서에서 수식 하나만 고쳤는데 전체를 다시 조판하는 낭비를 덜어 줍니다. 고른 범위만 작은 임시 문서에 싸서 처리한 뒤 그 결과를 보여 줍니다. 범위를 잡는 방식은 네 가지로, 선택 범위 자체, 커서가 놓인 환경 하나(\begin{...}…\end{...}의 내용), \input으로 들여온 부분 문서 하나, 그리고 커서가 놓인 수식 한 덩이를 고를 수 있습니다. 결과는 별도 창이 아니라 화면 아래쪽 바에 띄울 수도 있어서, 표나 긴 수식의 겉모습을 다듬는 동안 빌드 한 번치 기다림이 통째로 사라집니다. 뒤에서는 전용 미리 보기 도구(class=LaTeXpreview)가 돌기 때문에 실제 빌드 설정을 건드리지 않는다는 점도 마음이 놓입니다.

Kile을 쓰기 시작한 날 정해 둘 것

가장 먼저 정할 것은 버튼의 뜻이 아니라 “QuickBuild에 무엇을 얹을 것인가”입니다. 서양 문자 위주라면 기본값 PDFLaTeX+ViewPDF 그대로, 일본어 upLaTeX 문서라면 LaTeX+DVItoPDF+ViewPDF, 참고문헌과 색인까지 확실히 넣고 싶다면 latexmk 도구 하나만. 이것을 먼저 해 두면, 나중에 장 파일을 프로젝트에 더해도 “하위 파일에서 시작해 언제나 마스터 문서를 조판한다”는 흐름이 무너지지 않습니다. 핸드북은 원본을 컴파일하는 단축키로 Alt+2를 들고, QuickBuild를 돌리면 Okular 뷰어가 저절로 뜰 것이라고도 적고 있습니다.

설정이 자리 잡으면 짧은 main.tex를 프로젝트로 등록하고, 하위 파일에서 빌드해도 마스터가 조판되는지 한 번 확인해 보세요. 오류가 나면 View logfile.log를 열고 Next error로 다음 오류까지 넘어갑니다. 첫 오류 자리로는 jumpToFirstError=yes 덕분에 저절로 뜁니다. 거기서 Okular의 정방향 검색이 도는 데까지 한 줄기로 확인할 수 있다면, 남은 일은 장을 늘려 가는 것뿐입니다.