趣味・特殊文書

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 を置いたところにその時点の盤面図が出ます。肝心なのは、パッケージが内部に盤を持っていて指し手を実際に再生していることです。だから図と棋譜がずれません。手で座標を打ち込んで図を作る方式と違い、途中に一手を挿入しても以降の図が全部追随します。

latex
\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}

3 つのパッケージの役割はきれいに分かれています。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 本体のフォント処理の改善にも深く関わっています——README の謝辞にその旨が記されています。

囲碁は 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} を書くだけなら通ります。壊れるのは実際に図を描いた瞬間です。解決策は latexdvipsps2pdf の経路を通すか、auto-pst-pdf(TeX Live 2024 に収録あり)を挟むこと。前者は実測で 1 ページの PDF が出ました。

将棋については、はっきり書いておきます。TeX Live 2024 に将棋のパッケージはありません。 kpsewhich shogi.stykpsewhich igo.stykpsewhich gochess.sty はいずれも何も返さず、/usr/local/texlive/2024 以下を shogi で検索しても該当するファイルはありませんでした。将棋の棋譜や盤面を組みたい場合は、CTAN 以外の配布物を自分で入れるか、TikZ で盤を描くことになります。「昔このパッケージを使った」という記憶に頼らず、まず kpsewhich を打つ——この分野ではそれが最短です。

クロスワードと数独 — cwpuzzle と sudoku

クロスワードは cwpuzzle、数独は sudoku です。どちらも表を書く感覚で、マス目を | で区切って並べます。cwpuzzlePuzzle 環境では、|[1]T が「番号 1 が付く T のマス」、|* が「黒マス」、行末が |.。番号付けと枠は自動で、PuzzleClues 環境と \Clue{番号}{答}{手がかり} で問題文を別に組めます。答を伏せた出題用と答え入りの解答用を同じソースから作れるのが便利なところです。注意点がひとつ、ファイル名とパッケージ名が食い違います——読み込むのは \usepackage{cwpuzzle} ですが、TeX Live 上の配布物は crossword という名前で、v1.11(2022 年 9 月 13 日)です。tlmgr で探すときは後者で引いてください。

latex
\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)は 9 行ちょうどを要求します。空きマスは | | のように空白を入れ、行末は |. で閉じます。上の 2 例はどちらも 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 で切り替えます。プレーン TeX でも LaTeX でも使えるのが古いパッケージらしいところです。

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 あたりから始めるとよいでしょう。血縁と婚姻を区別して扱えるのがこのパッケージの真面目なところで、家系図としての正しさを保ったまま組めます。

latex
\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 / chessboard3 つとも収録。v1.5.3 / v1.5 / v1.9\usepackage{xskak} の 1 行で 3 つとも入る
psgo収録されている(v0.17)PSTricks 依存。pdflatex では図の描画時に落ちる
shogi.sty存在しないkpsewhich は空。igo.sty gochess.sty も同様に無い
cwpuzzle収録。v1.11(2022 年 9 月 13 日)TeX Live 上の配布名は crossword。数独とカックロも組める
sudoku収録(v1.0)9 行ちょうどが必要。空きマスは | | と空白を入れて書く
knitting収録(v3.0、2019 年 4 月 3 日)記号一覧の knitkey はパッケージではなく PDF。texdoc knitkey で読む
genealogytree収録(v2.3.0)TikZ ベース。pdflatex でそのまま動く
cooking収録(v0.9b、1999 年 6 月 24 日)\ingredient は引数を 1 つしか取らない。cuisine xcookybooky も収録
termcal収録(v1.8)開始日と週数から授業カレンダーを組む

最後に、このページが扱わないものを一つ。楽譜です。音楽の組版は別ページの担当で、そこでは LilyPond が TeX Live に同梱されていないこと、MusiXTeX が etexmusixflxetex の 3 パスを要求することが実測されています。趣味の組版はどれも「見た目が正しいこと」が成果物のすべてなので、コンパイルが通っただけで満足せず、必ず PDF を開いて目で確かめてください——チェスの図で駒が一つずれていても、TeX は何も言ってくれません。