数式は LaTeX の独壇場ですが、楽譜(五線譜) はどうでしょうか。実は道は三つあります。TeX の中で組む MusiXTeX、別プログラムの高品質エンジン LilyPond を lilypond-book で取り込む方法、そして手軽な ABC 記法 を abc パッケージで埋め込む方法です。それぞれの仕組みと、どれを選ぶかを見ていきます。
MusiXTeX — TeX の中で組む
MusiXTeX は、TeX のマクロだけで楽譜を組む音楽組版システムです。古い MusicTeX の後継にあたり、五線・音符・連桁(れんこう)・スラーなどをすべて TeX の枠組みの中で描きます。外部の描画プログラムに頼らず、ツールチェインを TeX に一本化したい ときに向いています。
特徴的なのが処理の流れです。音符の間隔を最適化するため、MusiXTeX は 3 パス で動きます。まず TeX(実際には e-TeX)が一度処理して .mx1 を書き出し、付属の Lua スクリプト **musixflx** がそれを読んで各拍の間隔を計算し .mx2 を生成、最後にもう一度 TeX が処理して最終出力を得ます。この 3 回の実行をまとめて面倒みてくれるのが **musixtex** というラッパースクリプトで、必要に応じて前処理(後述の pmx/M-Tx など)まで呼び出します。
musixtex score.tex # runs e-TeX → musixflx → e-TeX, then makes the PDF生の MusiXTeX マクロは難解だと広く認められており、直接書くことはまれです。そこで上位の フロントエンド を使います。**pmx** は、ずっと簡潔な入力言語を MusiXTeX マクロへ変換するプリプロセッサ。歌詞付きの声楽には、pmx の前段としてさらに **M-Tx** を使い、M-Tx → pmx → MusiXTeX と段階的に変換します。下は最小の MusiXTeX の骨格です(実際には pmx 入力から書く方が現実的です)。
\input musixtex
\begin{music}
\instrumentnumber{1}
\setclef{1}{\treble}
\startextract
\Notes \qa{cdef} \en
\Notes \ha{g} \en
\endextract
\end{music}
\endLilyPond と lilypond-book — 別エンジンを取り込む
LilyPond は、独自の言語を持つ専用の楽譜エンジンです。TeX とは別のプログラムで、楽譜の品質は最高水準として広く知られています。MusiXTeX とは入力の書き方がまったく異なり、平易な記法でほぼ同等以上の仕上がりが得られます。これを LaTeX 文書と組み合わせる定番が **lilypond-book** です。
考え方はこうです。拡張子 **.lytex のファイルに、LaTeX 本文と LilyPond の断片** を混在させて書きます。短い断片は \lilypond{…}、長い断片は lilypond 環境、外部ファイルは \lilypondfile{…} で埋め込めます。これを lilypond-book にかけると、各断片を LilyPond でレンダリングして画像(または PDF)を作り、それらを \includegraphics に置き換えた **通常の .tex ファイル** を書き出します。あとはそれをいつもどおりコンパイルすれば、楽譜が文書に溶け込みます。
% --- score.lytex ---
\documentclass{article}
\begin{document}
Here is a short phrase:
\begin{lilypond}[quote,fragment,staffsize=26]
c'4 d' e' f' g'2 g'
\end{lilypond}
\end{document}ビルドは 2 段階です。まず lilypond-book で .lytex を処理し(--pdf を付けると断片を PDF として埋め込めます)、生成された .tex を pdflatex などでコンパイルします。楽譜の行幅は、プリアンブルから本文幅を読み取って自動的に合わせてくれます。
lilypond-book --pdf score.lytex # renders snippets, writes score.tex
pdflatex score.tex # compile the generated documentさらに現代的なのが **lyluatex** パッケージです。LuaLaTeX 専用で、lilypond-book の前処理を挟まずに、コンパイルの最中に LilyPond を直接呼び出して 楽譜を生成・取り込みます。lily 環境や \lilypond 命令で楽譜を書き、lualatex を **--shell-escape** 付きで起動するだけ。lilypond-book の上位互換(ドロップイン置き換え)と位置づけられています。
abc パッケージ — 手軽な ABC 記法
abc パッケージ は、ABC 記法 という非常にコンパクトなテキスト音楽フォーマットを LaTeX に埋め込みます。ABC は人間が読み書きしやすいことを重視した記法で、アイルランド・イングランド・スコットランドなど西欧の 民謡やリードシート(単旋律)** の記録に広く使われています。
仕組みは lilypond-book に似て外部変換に頼ります。abc 環境に書いた譜面を、パッケージが \write18(シェル実行)経由で **abcm2ps に渡して楽譜画像に変換し、文書へ取り込みます。シェル実行を使うため、コンパイルは -shell-escape を付けて行う必要があります。なお、ASCII の ABC を MusicTeX/MusiXTeX 用に変換する古典的ツール abc2mtex** もあり、こちらは前処理系として使えます。
\documentclass{article}
\usepackage{abc}
\begin{document}
\begin{abc}
X:1
T:Simple Tune
M:4/4
L:1/8
K:C
CDEF|GABc|
\end{abc}
\end{document}pdflatex -shell-escape tune.tex # abc calls abcm2ps via \write18どれを選ぶか
おおまかな指針です。ツールチェインを TeX に閉じたい・凝った浄書を TeX 内で完結させたい なら MusiXTeX(実用上は pmx/M-Tx 経由)。品質最優先で本格的な楽譜 を組むなら LilyPond を lilypond-book(または LuaLaTeX なら lyluatex)で取り込む。民謡や短い単旋律を手早く 載せたいなら abc パッケージ、という住み分けになります。
| 方式 | 仕組み | 向くもの |
|---|---|---|
MusiXTeX | TeX マクロで組版(3 パス+ pmx/M-Tx) | TeX 内で完結。凝った浄書 |
LilyPond (lilypond-book) | 外部エンジンでレンダリング→画像/PDF を取り込み | 最高品質の本格的な楽譜 |
lyluatex | LuaLaTeX が LilyPond を実行時に直接呼ぶ | LuaLaTeX で手軽に LilyPond |
abc | ABC 記法を abcm2ps で変換して埋め込み | 民謡・単旋律のリードシート |
いずれも CTAN にあり、TeX Live など主要ディストリビューションに同梱されています。lilypond-book と LilyPond 本体は別途インストールが要る場合があります。外部プログラムを呼ぶ abc と lyluatex は、シェル実行を許す **-shell-escape** が前提である点に注意してください。