MusiXTeXのアレなところ

(La)TeXで楽譜が書ける(楽とは言ってない)パッケージである MusiXTeX ですが, いくつかアレなところがありまして…… 以下は Ver 1.28での挙動です.

音符の高さでの数字指定でアレ

\haなどの符尾の方向を自動で決定する音符を出力する命令で, これの高さを数字指定すると符尾の方向が正しく出力されません. 例えば

\begin{music}
  \nostartrule
  \startpiece
  \Notes
  \ha{0}\ha{2}\ha{4}\ha{6}\ha{8}%
  \en\setdoublebar
  \endpiece%
\end{music}

というコードでは, \ha{0}\ha{2}では符尾が上に出ることを期待するのですが, 残念ながらそうはならず全て下向きの符尾が出ることになります. これは\xgetn@iというマクロの定義が原因で, musixtex.texの3164行目にあたる文を\ifnum\n@viii<\maxdimen \n@i#1 \fiと書き換えて定義しなおすことで解決します1.

\Tqb*, \Qqb*での数字指定でアレ

連桁を半自動的に書けるこれらのマクロも数字指定で挙動がおかしくなります. 例えば

\begin{music}
  \nostartrule%
  \startpiece%
  \Notes
  \Dqbu{1}{3}\Dqbu{2}{4}%
  \Tqbu{1}{3}{5}\Tqbu{2}{4}{6}%
  \Qqbu{1}{3}{5}{7}\Qqbu{2}{4}{6}{8}%
  \en\setdoublebar
  \endpiece%
\end{music}

では\Tqbu, \Qqbuでおかしな挙動が確認できるでしょう. これは\C@Tqおよび\C@Qqの定義が原因で, それぞれ内部の\qb0{#1#2}(あるいは\qb0{#1#2#3})を\qb0{#1}\qb0{#2}(あるいは\qb0{#1}\qb0{#2}\qb0{#3})というようにして定義しなおすと解決します.

BibLaTeX との併用でアレ

BibLaTeX とは\addspaceマクロが競合しています. これを回避するためには

  1. BibLaTeX を読み込み,
  2. \addspaceを別名のマクロ, 例えば\biblatex@addspaceに(\letを用いて)退避させて,
  3. MusiXTeX を読み込み,
  4. \addspaceを別名のマクロ, 例えば\musixtex@addspaceに(\letを用いて)退避させて,
  5. \addspaceを退避させたAに(\letを用いて)戻す

というようなことをする必要があります(noconflict パッケージを使えれば少し書くのは楽になるけど, 本質は変わらない). またmusic環境に入るときに, 内部で\let\addspace\musixtex@addspaceのようにして, \addspaceMusiXTeX のものにしておく必要があります.

まあ控えめに言っても面倒すぎるので, music環境を別の環境(例えばMusic環境)でラッピングして, そこで\let\addspace\musixtex@addspaceというようにするよう定義するのがいいと思います.

その他

そもそも書くのがかなり面倒だというのが一番キツいところではある.


  1. ファイル自体を改変するのは褒められた方法ではないので, プリアンブルで\defするのがいいでしょう. あるいはパッチ用にスタイルファイルを作ってもいいかもしれません.