綺麗な楽譜を作成する方法を説明します. このページには,TeX を用いて実装された MusiXTeX と,かつて TeX を直接用いていた LilyPond の解説があります.
TeXで楽譜を書くための拡張マクロパッケージです。ASCII表記での綴りはMusiXTeXです(Xは大文字が正しい)。
歴史的には、MusicTeXをベースにして、音符の横幅の割付方法を改良した(TeX内部で計算できる内容には限度があるので、処理を外部実行ファイル musixflx に任せて細かい処理を行えるようにした)のがMusiXTeXです。(MusicTeX + MusicFlex = MusiXTeX)
ライセンスは(ver.T.104以降)GNU GPL v.2 or laterです。
公式ドキュメント(英語)は Werner Icking Music Archive の MusiXTeX and Related Software(PDF ファイルへの直接リンク) にあります。
日本語のドキュメントは、かなり古いバージョンT.98相当ですが、MusiXTeX (MusicTeX) による楽譜ライブラリ (M.A.B.) の MusiXTeXの日本語版マニュアル が存在しています。記述文法等、基本的な内容解説の多くは現在でも有用です。
公式最新バージョンは 1.37 (2023-10-07) です。(Werner Icking Music Archive の MusiXTeX and Related Software)
主著者である故 Daniel Taupin 氏自身が最後にまとめたバージョンはT.112です。その後、バグ修正やwell-known拡張パッケージの同梱(T.113・T.114)、e-TeX拡張への対応(T.115→1.15)、フォント取扱の現代化その他(1.16)等の活動が、TeX-music Maliling List のコミュニティによって続けられています。
2021年5月末から6月初頭にかけて、MusiXTeX の Type 1 フォントのグリフに埋め込まれている情報の誤りが dvipdfmx に影響を与えて PDF 変換結果がおかしくなる場合がある事象について報告があり、原因が Type 1 フォント側にあったことが判明したため修正版フォントが掲載されました。MusiXTeX and Related Software を参照してください。
TeX Live には最初から MusiXTeX がインストールされています.
MusiXTeXは楽譜を作成するのに3パスの処理を必要とします。また,LaTeX文章中に楽譜の例を引用する場合を除いて,LaTeXではなくplain TeXを使います。 例えばfoo.texがあるとすれば
のように実行します。
和文フォントを適切に追加定義して (e-)(u)pTeX を用いることで、日本語文字の記述もできます。定義がない場合、和文フォントがdviドライバのデフォルト(通常10pt明朝体)で置換され欧文フォントに比べて小さくなったり、抜け落ちたりしてしまいます。必要な定義の入手はリンク欄を参照ください。
お仕着せの Lua スクリプト musixtex.lua は米欧文版の TeX (etex, latex, pdfetex, pdflatex)しかサポートしませんので、日本語を含む楽譜には使えません。上記の通り手動で (e-)(u)p(La)TeX を用いることになります。
dvips (dvipsk) で dvi を PS や PDF に変換するにあたり、手動で dvips を起動する場合には、通常の一般文書(学術論文や書籍など)の組版と異なり、次のようにオプション -e0 を指定してください。
dvips [通常必要な各種オプション] -e0 hoge.dvi
dvips には individual characters to ‘drift’ from their correctly rounded positions by a few pixels という機能がデフォルトで内在しています(詳細は https://www.tug.org/texinfohtml/dvips.html を参照)。楽譜の組版にはこれが弊害となります。具体的には、音符の頭の位置、縦線類の位置・長さ、フォントパッチワーク実装による連桁・スラー(MusicTeX 時代に由来する実装で現在もデフォルトはこれ)などが、本来 MusiXTeX の意図する位置から自動移動されてしまい、おかしな出力が得られてしまいます*1。
オプション -e に引数 0 を指定することで、この自動位置調整ピクセル許容数をゼロにする(=機能を無効化する)必要があります。お仕着せ Lua スクリプト musixtex.lua (米欧文専用)には 2015-02-13 以降この対策が入っています。
dvipdfmx および dviout にはこの問題はありませんので通常通りの操作で大丈夫です。pdfTeX およびその各種派生物も通常通りの操作で問題ない模様です。
PMX は MusiXTeX のプリプロセッサです。 Werner Icking Music Archive の MusiXTeX and Related Software /software/pmx が現在の一次配布元です。 これは MML に似た文法で記述するので,MusiXTeX そのままの文法で記述するよりはるかに効率良く楽譜を作成できます。MIDI も生成できます(ただし同一パートの複数のタイが処理できない等の制限有り,専らデバッグ用の機能)。 ver.2.6以降の系列は、24パートまでの組版に対応するかわりにMusiXTeX T.115以降とe-TeX拡張を含むTeXが必須となっています。
M-Tx は PMX のさらなるプリプロセッサで,歌詞の取り扱いを容易にします。 バージョン0.63から、一次配布元が GitHub に変わりました*2。 なお、M-Txの24パート拡張版は残念ながら存在せず、PMX ver.2.6以降との組み合わせでも12パートまでの対応となります。
Windowsの場合、PMX、M-Txとも、TeX Live に含まれています。
PMX、M-Tx とも ANSI 実装のプログラムです。歌詞などにおける和文文字の取り扱いは、M-Tx は原則として問題ありませんが、PMX はいわゆる Shift JIS backslash (0x5c) 問題があります(インラインで記述された TeX 命令をそのまま透過させる inline literal TeX string 機能において、入力ストリームのパースを byte 単位で行っているため)。 入力を Shift JIS encode のままでいくならば、M-Tx 段階での歌詞記述で「ソ」は「{ソ}」、「ソ{}」などと記述する必要があります。現在では UTF-8 で記述し (e-)upTeX を使うのが回避方法のひとつとなりますが、PMX には入力ファイルの1行が 127 bytes 以下でなければならない制約があるため、あまり長い和文文字列を記載することはできません。
PMX 使用時に、何か独自定義のマクロなどを追加したい場合(和文フォント定義などもこれに該当)は、PMX が出力するファイル(仮に foobar.tex とする)と同じディレクトリに foobar.mod というファイルを別途作成し、その中に独自定義マクロや \input を記述しておけば、foobar.tex をタイプセットするときに foobar.mod が \input されて自動反映されます。 ただし、この foobar.mod というファイル名は foobar.pmx を処理するときに PMX が foobar.tex 内にハードコードしてしまうため、例えば PMX が出した foobar.tex を手作業編集して foobarbaz.tex として保存した場合には当該の \input の行を \input \jobname.mod のように手動で書き換えたうえで foobarbaz.mod を作成するほうが混乱しなくてよいです。
では、結城さんのページにあるサンプルをコンパイルしてみましょう。私はきらきら星のソースをmozart.mtxと名づけてテストしました。(日本語の歌詞も扱えるのですね!)
del mozart.mx2 prepmx mozart pmxab mozart euptex mozart musixflx mozart ptex2pdf -e -u mozart
最初のmozart.mx2の削除については、初めてコンパイルしたのであれば行う必要がありません。ただし、修正後の再コンパイル時には絶対に行ってください。
TeXとは関係ありませんが、MIDIも作ってみましょう。先ほど作ったM-Txソースの一行目(プリアンブル部であればどこでも良い)に、次のように書いておきます。
PMX: I
Iの後ろにオプションをつけることで、音色などを変更することが出来ます。(詳細はマニュアルをご覧ください。)楽譜作成の流れと同様にprepmxコマンドで処理します。
prepmx mozart pmxab mozart
を実行することで、mozart.midが生成されます。
LilyPond はオープンソースでクロスプラットフォームの楽譜作成ソフトウェアです。 当初はバックエンドにTeXを用いて楽譜の組版をしていましたが、2005年頃からPDF/PostScript直接出力となり、楽譜を作成するだけであればTeXと直接関係のない*3システムとなっています。 LaTeXやTexinfoのソース内に楽譜のソースを埋め込んでおき、TeXを利用して楽譜を含んだドキュメントを作成することのできる、lilypond-bookというスクリプトが付属しています。
GPLv3
http://git.savannah.gnu.org/gitweb/?p=lilypond.git
WYSIWYGあるいはWYSIWYMeanタイプの楽譜エディタ。TeXとは無関係のものも含みます。 LilyPond – みんなの楽譜作成: より簡単な編集手段 も参照。