LaTeX은 논문만을 위한 것이 아닙니다. 체스 기보를 PGN 그대로 적으면 판면이 자동으로 따라오고, 크로스워드도 스도쿠도 뜨개 도안도 가계도도 전용 패키지가 CTAN에 있습니다. 다만 이 분야에는 함정이 있어서, 인터넷에서 권하는 패키지가 TeX Live에 들어 있지 않은 경우가 드물지 않습니다. 실제로 바둑의 psgo는 동봉되어 있어도 pdflatex에서는 동작하지 않았고, 장기 패키지는 kpsewhich shogi.sty가 아무것도 반환하지 않았습니다. 이 페이지에서는 취미를 위한 조판 패키지를 하나하나 kpsewhich로 존재를 확인하고 실제로 컴파일한 뒤 소개합니다. 동작하지 않는 것은 그렇다고 적습니다.
체스 기보를 PGN으로 쓰기 — skak / xskak / chessboard
체스는 LaTeX에서 가장 잘 정비된 취미 분야입니다. \usepackage{xskak}을 불러오고 \newchessgame으로 한 판을 시작한 뒤 \mainline{1. e4 e5 2. Nf3 Nc6 3. Bb5 a6}처럼 PGN 그대로 기보를 쓰면 수순이 조판되고, \chessboard를 둔 자리에 그 시점의 판면도가 나옵니다. 핵심은 이 패키지가 내부에 판을 가지고 수를 실제로 재생한다는 점입니다. 그래서 그림과 기보가 어긋나지 않습니다. 손으로 좌표를 찍어 그림을 만드는 방식과 달리, 중간에 한 수를 끼워 넣어도 이후의 그림이 전부 따라옵니다.
\documentclass{article}
\usepackage{xskak} % loads skak and chessboard
\begin{document}
\newchessgame
\mainline{1. e4 e5 2. Nf3 Nc6 3. Bb5 a6}
\chessboard
% the shortest possible loss, in four plies
\newchessgame
\mainline{1. f3 e5 2. g4 Qh4#}
\chessboard[showmover=false]
\end{document}세 패키지의 역할은 깔끔하게 나뉩니다. skak이 토대로, 기보 해석과 내부 판, 그리고 말의 글자꼴을 지닌 폰트를 제공합니다. xskak은 그 위에 얹히는 확장으로, 변화 수순과 여러 국면을 다룰 수 있게 하고 동시에 chessboard를 불러옵니다. 그림을 세밀하게 제어하는 것은 chessboard의 몫으로, \chessboard[showmover=false]처럼 키로 수순 표시를 끄거나, 판의 일부만 잘라 내거나, 칸에 색과 표시를 넣을 수 있습니다. 즉 \usepackage{xskak} 한 줄로 세 층이 모두 갖춰지므로, 망설여지면 이 줄을 쓰면 됩니다.
내력도 재미있습니다. skak은 덴마크어로 “체스”입니다. README에도 그렇게 적혀 있습니다. 작성자는 Torben Hoffmann이고, TeX Live 2024 동봉판은 v1.5.3(2018년 1월 8일)입니다. TeX Live 자체의 카탈로그 기재에 따르면 이 패키지는 Piet Tutelaers의 작업 위에 세워졌고, 그 새로움은 좌표 표기 대신 PGN을 입력에 쓴 데 있습니다. g1f3이 더 읽기 쉬운 Nf3이 되었다고 설명합니다. xskak(v1.5, 2019년 6월 23일)과 chessboard(v1.9, 2020년 11월 1일)는 둘 다 Ulrike Fischer의 작품이며, skak 자체의 감사 글에도 그가 폰트 처리를 개선한 공이 적혀 있습니다.
바둑은 psgo, 장기는 없음 — pdflatex에서 동작하지 않는 이유
바둑 그림을 그리는 패키지로는 psgo(v0.17)가 TeX Live 2024에 들어 있습니다. 다만 이름이 말해 주듯 PSTricks로 그리므로 pdflatex에서는 쓸 수 없습니다. 실제로 \begin{psgoboard}를 통과시키자 ! Undefined control sequence.가 났고, 그 전개처는 \c@lor@to@ps ->\PSTricks _Not_Configured_For_This_Format이었습니다. PSTricks가 “이 형식용으로 설정되어 있지 않다”고 스스로 밝히는 상태입니다. 재미있게도 \usepackage{psgo}만 쓰면 통과합니다. 망가지는 것은 실제로 판을 그리는 순간입니다. 해결책은 latex → dvips → ps2pdf 경로를 지나거나 auto-pst-pdf(TeX Live 2024에 수록됨)를 끼우는 것입니다. 앞의 방법은 실측에서 한 쪽짜리 PDF를 냈습니다.
장기에 관해서는 분명히 적어 둡니다. TeX Live 2024에 장기 패키지는 없습니다. kpsewhich shogi.sty, kpsewhich igo.sty, kpsewhich gochess.sty는 모두 아무것도 반환하지 않았고, /usr/local/texlive/2024 아래를 shogi로 검색해도 해당하는 파일이 없었습니다. 장기 기보나 판면을 조판하려면 CTAN 밖의 배포물을 직접 설치하거나 TikZ로 판을 그려야 합니다. “예전에 이 패키지를 썼다”는 기억에 기대지 말고 먼저 kpsewhich를 쳐 보는 것이 이 분야에서는 가장 빠릅니다.
크로스워드와 스도쿠 — cwpuzzle과 sudoku
크로스워드는 cwpuzzle, 스도쿠는 sudoku입니다. 둘 다 표를 쓰는 감각으로, 칸을 |로 나누어 늘어놓습니다. cwpuzzle의 Puzzle 환경에서 |[1]T는 “번호 1이 붙은 T 칸”, |*는 검은 칸, 줄 끝은 |.입니다. 번호 매김과 테두리는 자동이고, PuzzleClues 환경과 \Clue{번호}{답}{단서}로 문제 글을 따로 조판할 수 있어, 같은 원본에서 빈 문제지와 답이 들어간 해답지를 모두 만들 수 있습니다. 한 가지 주의할 점은 파일 이름과 배포 이름이 다르다는 것입니다. 불러올 때는 \usepackage{cwpuzzle}이지만 TeX Live에서의 배포물 이름은 crossword이고 버전은 v1.11(2022년 9월 13일)입니다. tlmgr로 찾을 때는 뒤의 이름으로 조회하십시오.
\usepackage{cwpuzzle} % distributed on TeX Live under the name "crossword"
\usepackage{sudoku}
% ...
\begin{Puzzle}{5}{5}%
|[1]T|[2]E|[3]X |* |* |.
|E |* |E |* |* |.
|[4]X|* |X |* |* |.
|* |* |* |* |* |.
|* |* |* |* |* |.
\end{Puzzle}
\begin{PuzzleClues}{\textbf{Across}}
\Clue{1}{TEX}{A typesetting system}
\end{PuzzleClues}
\begin{sudoku}
|2| | |6| |7| | |1|.
| |8| | | | | |5| |.
| | |6| |3| |4| | |.
| | |9| | | |8| | |.
|5| | |1| |4| | |2|.
| | |3| | | |7| | |.
| | |4| |6| |1| | |.
| |7| | | | | |3| |.
|9| | |2| |8| | |4|.
\end{sudoku}sudoku(v1.0)는 정확히 아홉 줄을 요구합니다. 빈 칸은 | |처럼 공백을 넣고, 줄 끝은 |.로 닫습니다. 위 두 예제는 모두 TeX Live 2024에서 오류 없이 통과해, cwpuzzle은 테두리와 번호를, sudoku는 3×3 굵은 선이 들어간 판을 냈습니다. 덧붙이면 cwpuzzle은 이름과 달리 스도쿠와 카쿠로도 조판할 수 있습니다. 퍼즐 책 한 권을 짤 생각이라면 이쪽으로 몰아 두는 것도 방법입니다.
뜨개 도안 조판 — knitting 패키지와 기호표의 위치
knitting(v3.0, 2019년 4월 3일, Ariel Barton 작)은 케이블 뜨기와 레이스 뜨기 도안을 조판하기 위한 기호 폰트와 명령을 제공합니다. 사용법이 독특해서 \textknit{kpkp}처럼 기호를 영문자로 칩니다. k가 겉뜨기, p가 안뜨기 하는 식으로, 자판의 한 글자가 코 기호 하나에 대응합니다. 모눈이 들어간 도안은 \chart[right]{...}로 짭니다. 여기에 함정이 있는데, chart는 환경이 아니라 명령이며 본문은 중괄호에 넣습니다. \begin{chart}라고 써도 오류가 나지 않고 종료 코드도 0이지만, 같은 내용으로 두 형태를 견주어 보니 명령형은 코 기호와 단 번호를 냈고 환경형은 kpkpkp라는 영문자를 그대로 인쇄했습니다. 모눈의 유무는 \knitgrid과 \knitnogrid으로 전환합니다. 오래된 패키지답게 Plain TeX에서도 LaTeX에서도 쓸 수 있습니다.
\usepackage{knitting}
% ...
\textknit{kpkpkp} % symbols are typed as ordinary letters
\knitgrid % draw the grid; \knitnogrid for a chart without one
% \chart is a COMMAND taking a braced body -- not a "chart" environment.
\chart[right]{
kpkpkp
pkpkpk
}어느 글자가 어느 코가 되는지의 목록은 knitkey에 있지만, 이것은 불러오는 패키지가 아닙니다. kpsewhich knitkey.sty는 아무것도 반환하지 않습니다. 실체는 문서이며 texmf-dist/doc/fonts/knitting/knitkey.pdf에 놓여 있습니다. 손쉽게 열려면 texdoc knitkey가 빠릅니다. 같은 디렉터리에는 knitexamples.pdf도 있습니다. 아울러 TeX Live에는 knittingpattern이라는 별도 패키지도 들어 있는데, 이쪽은 도안이 아니라 글로 된 뜨개 설명을 조판하기 위한 것입니다.
가계도・레시피・일정표 — genealogytree / cooking / termcal
가계도에는 genealogytree(v2.3.0)를 씁니다. TikZ 위에 세워져 있어 pdflatex에서 그대로 동작합니다. \begin{genealogypicture} 안에 parent{ g{자녀} p{아버지} p{어머니} }처럼 가족 관계를 그대로 중첩해 쓰면 배치는 자동으로 정해집니다. template=으로 겉모습의 형을 고를 수 있으니 처음에는 signpost 언저리부터 시작하면 좋습니다. 이 패키지가 진지한 이유는 혈연과 혼인을 구별해 다룬다는 점으로, 그림이 아니라 계보로서 올바른 상태를 유지합니다.
\usepackage[all]{genealogytree}
\usepackage{cooking}
% ...
\begin{genealogypicture}[template=signpost]
parent{
g{Child}
p{Father}
p{Mother}
}
\end{genealogypicture}
\pagestyle{recipe}
\begin{recipe}{Pancakes (serves 4)}
\ingredient{200\,g flour} sift into a bowl.
\ingredient{2 eggs}
\ingredient{300\,ml milk} whisk in until smooth.
\end{recipe}레시피에는 cooking(v0.9b, 1999년 6월 24일, Axel Reichert 작)이 있습니다. 설계가 오래된 만큼 딱 부러지는데, \ingredient{...}는 인수를 하나만 받습니다. 분량과 재료 이름을 한 인수에 함께 쓰고, 바로 뒤에 조리 순서 문장을 이어 씁니다. 조판하면 재료가 왼쪽 단에 오른쪽 맞춤으로 늘어서고 조리법이 그 오른쪽으로 흐르는, 요리책에서 흔히 보는 그 체재가 됩니다. TeX Live에는 같은 목적의 패키지가 둘 더 있어 cuisine(v0.7)과 xcookybooky(v1.5)가 있으며, 뒤의 것은 사진과 조리 시간까지 들어가는 현대적인 구성입니다. 일정표라면 termcal(v1.8)이 시작일과 주 수를 넘기면 수업 달력을 짜 줍니다.
권하기 전에 kpsewhich — 무엇이 들어 있고 무엇이 없는가
이 분야에서는 옛 글에 나오는 패키지가 지금도 손안에 있으리라는 보장이 없습니다. 확인에 드는 수고는 1초입니다. kpsewhich 그패키지.sty를 치면 있으면 경로가 돌아오고 없으면 아무것도 돌아오지 않습니다. 파일 이름을 모를 때는 tlmgr info 이름이 설명과 함께 알려 줍니다. 아래 표는 이 페이지를 쓰면서 실제로 두드린 결과입니다. 같은 일을 \usepackage를 쓰기 전에 직접 해 볼 수 있습니다.
| 패키지 | TeX Live 2024에서의 상태 | 주의점 |
|---|---|---|
skak / xskak / chessboard | 셋 다 수록. v1.5.3 / v1.5 / v1.9 | \usepackage{xskak} 한 줄로 셋 다 들어옵니다 |
psgo | 수록되어 있음(v0.17) | PSTricks 의존. pdflatex에서는 판을 그리는 순간 죽습니다 |
shogi.sty | 존재하지 않음 | kpsewhich가 비어 있음. igo.sty gochess.sty도 마찬가지로 없음 |
cwpuzzle | 수록. v1.11(2022년 9월 13일) | TeX Live에서의 배포명은 crossword. 스도쿠와 카쿠로도 조판 가능 |
sudoku | 수록(v1.0) | 정확히 아홉 줄이 필요. 빈 칸은 | |처럼 공백을 넣어 씁니다 |
knitting | 수록(v3.0, 2019년 4월 3일) | 기호표 knitkey는 패키지가 아니라 PDF. texdoc knitkey로 읽습니다 |
genealogytree | 수록(v2.3.0) | TikZ 기반. pdflatex에서 그대로 동작 |
cooking | 수록(v0.9b, 1999년 6월 24일) | \ingredient는 인수를 하나만 받습니다. cuisine xcookybooky도 수록 |
termcal | 수록(v1.8) | 시작일과 주 수로 수업 달력을 짭니다 |
마지막으로 이 페이지가 다루지 않는 것 하나. 악보입니다. 음악 조판은 다른 페이지의 담당이며, 그곳에서 LilyPond가 TeX Live에 동봉되어 있지 않다는 것과 MusiXTeX이 etex → musixflx → etex의 3패스를 요구한다는 것이 실측되어 있습니다. 취미 조판은 어느 것이나 “보기에 맞는가”가 결과물의 전부이므로, 컴파일이 통과했다고 만족하지 말고 반드시 PDF를 열어 눈으로 확인하십시오. 체스 도형에서 말 하나가 어긋난 칸에 있어도 TeX은 한마디도 해 주지 않습니다.