musixtex について
ひょんなことからtexlive2022にmusixtex
というのが含まれていることを知りました。楽譜組版用のマクロらしく、数式同様きれいな楽譜を作れる…らしいのですが、あまり広まってないのかQiitaで検索してみても記事がほとんどありませんでした。
そこで今回musixtex
の使い方を書いてみることにしました。
ソースコード
例えばこんな楽譜を作りたいとします(きらきらぼしです)。みんなが知ってて譜面のソースコードがそれほど長くなくて普通のピアノの楽譜で右手と左手の譜面が両方あるものであと自分がメロディを覚えている曲だったのでこれにしました。
ソースコードはこんな感じです。なお今回はコンパイルすることに焦点を当てているのでソースコードそのものの解説はしません。コードについてはMusiXTeXドキュメントをご覧ください。
\documentclass[dvipdfmx]{jsarticle}
\usepackage{musixtex}
\pagestyle{empty}
\begin{document}
\nobarnumbers
\nostartrule
\begin{music}
\parindent10mm
\instrumentnumber{1}
\setname1{Piano}
\setstaffs1{2}
\setclef16
\generalmeter{\meterfrac44}
\startpiece
\Notes\qa {JJNN}|\qa {ccgg}\en\bar
\Notes\qa{OO}\ha{N}|\qa{hh}\ha{g}\en\bar
\Notes\qa{MMLL}|\qa{ffee}\en\bar
\Notes\qa{KK}\ha{J}|\qa{dd}\ha{c}\en\setrightrepeat\bar
\Notes\qa{NNMM}|\qa{ggff}\en\bar
\Notes\qa{LL}\ha{K}|\qa{ee}\ha{d}\en\bar
\Notes\qa{NNMM}|\qa{ggff}\en\bar
\Notes\qa{LL}\ha{K}|\qa{ee}\ha{d}\en\bar
\Notes\qa{JJNN}|\qa {ccgg}\en\bar
\Notes\qa{OO}\ha{N}|\qa{hh}\ha{g}\en\bar
\Notes\qa{MMLL}|\qa{ffee}\en\bar
\Notes\qa{KK}\ha{J}|\qa{dd}\ha{c}\en\setrightrepeat
\endpiece
\end{music}
\end{document}
コンパイルレシピ
hoge.tex
をhoge.pdf
にするレシピは次のようなものです。
普通に platex+dvipdfmx をかけるとレイアウトが悲惨なことになります。
これを回避するためにmx2ファイル
を参照してコンパイルするのです。さらなる注意点としてmx2ファイル
は次のコンパイル前に削除しないと正しいレイアウトになりません。正確には、行数が増えたときにその内容が反映されません。
以上を踏まえたLaTeX-Workshopの設定はこんな感じです。
{
"latex-workshop.latex.recipes": [
{
"name": "pmusixlatexmk",
"tools": [
"platex",
"musixflx",
"platexmk",
]
},
{
"name": "pmusixlatex",
"tools": [
"platex",
"musixflx",
"platex",
"dvipdfmx"
]
},
],
"latex-workshop.latex.tools": [
{
"name": "platexmk",
"command": "latexmk",
"args": [
"-e",
"$latex=q/platex -synctex=1 -interaction=nonstopmode -halt-on-error/",
"-e",
"$bibtex=q/pbibtex/",
"-e",
"$biber=q/biber --bblencoding=utf8 -u -U --output_safechars/",
"-e",
"$dvipdf=q/dvipdfmx %O -o %D %S/",
"-e",
"$makeindex=q/mendex %O -o %D %S/",
"%DOC%",
"-e",
"$ENV{'TEXINPUTS'}='.//:' . $ENV{'TEXINPUTS'}"
]
},
{
"name": "platex",
"command": "platex",
"args": [
"-interaction=nonstopmode",
"-synctex=1",
"-halt-on-error",
"-file-line-error",
"%DOCFILE%.tex",
],
},
{
"name": "musixflx",
"command": "musixflx",
"args": [
"%DOCFILE%.mx1",
],
},
{
"name": "dvipdfmx",
"command": "dvipdfmx",
"args": [
"%DOCFILE%.dvi",
],
},
],
"latex-workshop.latex.autoClean.run": "onBuilt",
"latex-workshop.latex.clean.fileTypes": [
"*.aux",
"*.out",
"*.toc",
"*.fls",
"*.log",
"*.fdb_latexmk",
"*.synctex(busy)",
"*.synctex.gz(busy)",
"*.mx1",
"*.mx2",
"*.dvi",
"*.txt"
],
}
pmusixlatexmk
では目次と日本語付きの楽譜が作れるように、platex → musixflx → latexmk としています。dvipdfmx はlatexmk の中でやってくれます。一方pmusixlatex
では普通に platex → musixflx → platex → dvipdfmx としています。あと必ずmx2
ファイルを削除してくれるようにlatex-workshop.latex.clean.fileTypes
のリストに加えています。
これでコンパイルすると冒頭の楽譜を得ることができます。
参考文献