jplain.bst が見つからないときの対処法

しょうもない記事。メモ。備忘録。

症状

untara.tex

\bibliographystyle{jplain}

みたいな記述を書いて保存した後 latexmk でビルドして出来上がった untara.blg

I couldn't open style file jplain.bst

などと出てきている。どうでもいいけど自我が表れているエラーログってなかなか見ない。

原因

.latexmkrcbibtex の設定を書き換えるとなおる。

-$bibtex='bibtex %O %B';
+$bibtex='pbibtex %O %B';

ちなみにビルド成果物がキャッシュとして効いてるっぽい感じなので、全て一掃してから実行するのが良いと思われる(しないとなおらなかった)。

なお、私は TeX Live を丸々突っ込んでいるので、適当にパスを調べて

$ find /usr/local/texlive -regex ".*\.bst"

を実行すると全ての .bst ファイルがざーっと出力される。これをまあ目 grep かなんかで見てやると、unsrt.bst とかは

/usr/local/texlive/2023/texmf-dist/bibtex/bst/base/unsrt.bst

にある一方で、jplain.bst

/usr/local/texlive/2023/texmf-dist/pbibtex/bst/jplain.bst

にあるらしいので、まあ bibtex にとっては pbibtex ディレクトリの存在など知らんがなという感じなのだろう。なお pbibtex を使っていても unsrt.bst は使えるので、pbibtex を使うのが無難かと思われる(知らんけど)。おわり。

簡易な水平スペーシングの実装 前編

この記事は 楽譜組版 Advent Calendar 2023 の13日目の記事です。

概要

自動的な楽譜組版を実現する中で主要となるテーマには様々なものがあります。最低限の情報を含む楽曲ファイル(例えば MIDI ファイルなど)が入力として与えられた際に、例えば

  • 音符や休符の水平方向のレイアウト
  • 連桁(複数の音符の符尾を太い線で結合したもの)の傾き
  • 臨時記号のレイアウト
  • スラーの形状、レイアウト

などを自動的に決定するにはどのように実装すればよいかについては、一定の興味の対象となるでしょう。

今回は、これらの中から水平スペーシングについて取り上げます。この記事で水平音符スペーシングについて軽く述べ、次回の記事で実際に静的サイト上で表示できる簡易的な自動水平音符スペーシングの実装手法を紹介しようと思います。

水平音符スペーシング

同じ組段の同じ声部において、臨時記号などを含まない純粋な音符を水平方向にレイアウトすることを考えます。この際、最低限守られるべきルールは次の2つです。

  • 等しい音価をもつ音符が占めるスペースは、互いに等しい。
  • 長い音価をもつ音符が占めるスペースは、短い音価をもつ音符の占めるスペースより長い。

1つ目のルールは分かりやすいですが、2つ目のルールは曖昧です。一体どのくらいスペースが長いのでしょう?ここで何となく、スペースの長さは音価に比例しているのでは?と思われるかもしれませんが、それは次のような譜例を考えると正しくなさそうです。

同じ組段内の音価で大きな差が見られる譜例

もしスペースの長さと音価が比例していれば、2分音符は16分音符の8倍の音価を持つのでスペースも8倍になっているはずですが、明らかにそうはなっていません。この譜例に限らず、大抵の楽譜においてもこのようになっているはずです。

実際には、このようなレイアウトは対数を用いたスペーシングに概ね従っています。具体的に高校数学レベルで記述を行うとすると、音価 a\,(> 0) の音符が占めるスペースの長さ s_a と音価 b\,(> 0) の音符が占めるスペースの長さ s_b の比は、スペーシング比率 r\;(1\leq r\leq 2) を用いて次のように表されます*1

\dfrac{\,s_a\,}{\,s_b\,} = r^{\log_2\frac{a}{b}} {\left(= \dfrac{\,r^{\log_2a}\,}{\,r^{\log_2b}\,}\right)}

特に r = 1 のときは s_a = s_b、すなわち音価の違いに関わらずすべての音符のスペースが等しくなります。r = 2 のときは \dfrac{\,s_a\,}{\,s_b\,} = \dfrac{\,a\,}{\,b\,} となって、先程述べたような比例関係になります。このスペーシング比率 r12 の真ん中辺りによしなに設定することで、適切に水平音符スペーシングを決定することができます。

実際に MuseScore という楽譜組版ソフトウェアでは大体同じような処理が実装されていそうなことが、コードを見ると何となくわかります。

ユーザーは、次のウィンドウに示すように、この比率を自由に設定することができます*2。デフォルトでは r = 1.5 に設定されているようです。

Format > Style > Measure > Spacing ratio

これら2つのルールさえあれば、純粋な音符だけの水平スペーシングのアルゴリズムはすぐに実装できそうです。でも例えば、多声部だったり、音符に臨時記号がついていたりした場合であればどうでしょうか?次回はこの辺りに切り込みつつ実装を書いていこうと思います。

なお、水平音符スペーシングの考え方については HashibosoP さんによる2021年のブログシリーズ「水平スペーシングの考え方の全て」が詳しいですので是非読んでみてください。

最後に

いかがでしたか?次回(未定)はもう少し濃厚な感じの実装記事を書く予定です。短い記事ですみません!

*1:ここで音価は、全音符の音価は 1 で、2^{n}\,(n=1,\,2,\,\dots) 分音符の音価は \dfrac{\,1\,}{\,2^{n}\,} で、付点 2^{n} 分音符の音価は \dfrac{\,1\,}{\,2^{n}\,}+\dfrac{\,1\,}{\,2^{n+1}\,} で、…といったふうに記述されるものとします。

*2:古いバージョンだと 1.6 でハードコードされていたような気がします。気のせいかも。

楽譜の組版規則

この記事は 楽譜組版 Advent Calendar 2023 の1日目の記事です。

このアドカレについて

こんにちは、楽譜組版 Advent Calendar 2023 を勝手に主催している zyoshoka と申します。このアドカレの目的は楽譜(主に五線譜)の組版に関係する知見を共有することです。その知見とは、具体的には

  • 楽譜作成ソフトウェアの使い方
  • 楽譜を書く上でのルール

などをはじめとする「楽譜を書くことそのもの」についてのノウハウです。楽譜組版などと仰々しい名を冠していますが、ガチガチの組版ネタでなくても大歓迎というわけです。これを読んでくださっている方もよかったら記事を書いてください!

今回は、数ある楽譜の種類のうち特に五線譜について、楽譜を書く上で守られるべき組版規則というのは一体どのようなものであるか、ということについて書いていきたいと思います。

楽譜の組版規則

組版は、何らかのルールに基づいて文字や図を配置する作業のことを指します。組版はその長い歴史の中で一定の規則を生み出しており、例えば日本語文書の組版であれば、禁則処理をはじめとする行組版規則に従って文字が配置されることが一般的です。そのような諸規則は、コンピュータを用いて組版を行うようになった現代では JIS X 4051 のように規定として明文化されています。

五線譜の組版においても同様に、ある一定の規則に従って五線や音部記号、音符などの記号が配置されます。この規則も長い時間をかけて生み出されたものですが、この規則とは一体何でしょうか?それは皆さんが小学生の頃に音楽の授業で習ったであろう楽典だけを指しているわけではありません。

記譜法と楽譜浄書

記譜法

例を見てみましょう。次の楽譜は約100年前にウィーンの Universal Edition から出版された、ポーランドの作曲家カロル・シマノフスキの《メトープ》というピアノ作品の楽譜です*1。この楽譜の版下(原稿)は金属板を手作業で彫ることによって作成されています*2

カロル・シマノフスキ《メトープ》の初版(1922年)

この楽譜では、他の一般的な五線譜と同様に様々な規則が守られています。例えば

  • 段の開始部分に波括弧が配置され、三段組の大譜表であることを示している
  • 五線の開始部分に音部記号が配置され、五線上の音高を決定している
  • 曲の開始部分に(音部記号の後ろに)拍子記号が配置され、一小節あたりに含まれる音価を決定している
  • 臨時記号は対象となる音符の左側に配置される
  • アーティキュレーションは対象となる音符の上または下に配置される
  • 曲を構成する音符は左から右へ順番に書かれる
  • 音符の旗の数で音価を示す
  • 重音のトレモロは連桁と区別するために符幹との間に空白を開ける

といったルールが存在することは見ればわかると思います。ここに挙げた規則はすべて、実際の曲の演奏と楽譜を対応付けるためのルールであり、これを記譜法(music notation)といいます。もし臨時記号が音符の上や下に配置されていて、スタッカートが音符の左に書かれていたりすれば、楽譜から実際の曲を再現することが難しくなってしまうでしょう。

さて、この記譜法は楽譜の組版規則を構成するのに十分なのでしょうか?そうではないということは、この《メトープ》を試しに楽譜作成ソフトウェアである MuseScore に対して無調整で入力してみることによってわかるでしょう。

MuseScore 4.1.1 で作成した《メトープ》の楽譜

この楽譜でも、先程挙げたルールはすべて守られています。段の開始部分に波括弧が配置されていて、音部記号や、拍子記号、音符に対するアーティキュレーションも、正しく配置されています。すなわち、この楽譜を奏者が読んで《メトープ》という曲の再現をすることが可能です。

しかし、先程の Universal Edition のそれに比べると何かが足りません。楽譜の見た目が著しく劣っていることはわかるでしょうか。記譜法は、美しい楽譜組版を実現するために十分な規則を提供しないのです。

楽譜浄書

MuseScore 4.1.1 は残念ながら自動的に最適な楽譜組版を行ってくれるソフトウェアではないため、デフォルトの入力では先程のような見た目になってしまいます。ただ、手作業によってある程度調節を加えることは可能であり、次の楽譜のように見た目を改善することが可能です*3

MuseScore 4.1.1 で作成し、調節を行った《メトープ》の楽譜

見た目がガラッと変わりましたね!でもこの作業によって、楽譜によって再現される曲そのものは全く変わっていないことに注意してください。私は、このように見た目だけを改善する作業のことを楽譜浄書(music engraving)と呼んでいます。さて、この楽譜浄書において守られている規則とは一体何でしょうか?それは例えば

  • もし音符を詰めることが可能であればなるべく詰める*4
  • 斜め方向のスラーはある程度膨らませる
  • 拍頭を分かりやすくするために連桁を切る*5
  • 異なる記号同士が衝突しないように配置する*6
  • 音符の音価に基づいて重み付けされた水平方向のスペーシングを行う*7

といったルールが挙げられるでしょう。ただ、この楽譜浄書について明文化された規定は存在せず、基本的に各浄書家の裁量であったり、楽譜組版ソフトウェアの浄書処理の実装に強く依存する形で行われるのが一般的です。

楽譜の組版規則は、これら記譜法と楽譜浄書の規則によって構成されているのです。

コンピュータによる自動楽譜組版の限界

かつては専門的知識を有した浄書家の手作業によってのみ行われていた楽譜組版だったのが、現代ではコンピュータさえ持っていれば、専用のソフトウェアを用いて楽譜を組版できるようになっています。しかしこれらのソフトウェアが提供する楽譜組版というのは、先程の譜例で見たように、完全なものではありません。それは例え有償のソフトウェアであったとしても同じことがいえます。

例えば、老舗楽譜出版社の一つであるドイツの Schott Music の最近の楽譜は Sibelius という有償の楽譜作成ソフトを使って書かれていますが、その水平スペーシングの品質は酷いものです。次の楽譜は2016年に Schott から出版されたカプースチンの『8つの演奏会用練習曲』です。

カプースチン『8つの演奏会用練習曲』の Schott 版(2016年)より引用、一部加工
カプースチン『8つの演奏会用練習曲』の Schott 版(2016年)より引用、一部加工

この譜例に私が書き加えた数は、間に臨時記号が含まれていない隣接した8分音符間の幅を整数比にしたものです。一般に、同じ長さの音符の横方向の余白の幅は、間に臨時記号などが含まれない限り、同じ組段の中で等しくなっているべきです。すなわちこの整数比はすべて同じ数になっているはずなのですが、実際にはそうなっていません。Sibelius のアルゴリズムの欠陥からか、赤色で示した部分は浄書的に何の合理的な理由もなく音符間隔が広がってしまっています。

これは単に、ソフトウェア・ベンダーの楽譜浄書に対する意識がさほど高くないことによって引き起こされていることが殆どですが、それは本を正せば、楽譜浄書について一貫した規則が存在していないことや、例え存在したとしてもそれを実装することが難しいなどといった要因があるのだろうと私は考えています。LilyPond のように厳密な楽譜浄書を実現できるソフトウェアは存在しますが、学習コストが高いことなどからあまり一般に普及していません。

「コンピュータで楽譜が書けるようになった」というのは簡単そうに聞こえるものの、そのソフトウェアで100年前の水準の楽譜を書くには数多の調整を施す必要があり、そして場合によってはその品質を達成することもできないのです。

まとめ

楽譜の組版規則は記譜法と楽譜浄書の規則によって構成されています。記譜法は楽譜を実際の曲の演奏と対応づけるルールですが、記譜法だけでは組版の規則を満たしません。そこで組版の規則を満たすために必要になる残りの作業は楽譜浄書に該当します。また、楽譜組版ソフトウェアは、記譜法をしっかりサポートしている一方で楽譜浄書の機能については不十分なところも多く、その結果として組版の品質が低い出版譜が世に多く出回っているのが現状です。

*1:この楽譜はポーランドのデジタル図書館 Polona においてパブリックドメインで提供されています:https://polona.pl/preview/980270d1-b85b-487f-9891-cec6569c7acb

*2:この彫版作業について興味があるという方には、G. Henle Verlag による紹介動画 を視聴することをおすすめします。

*3:なおこの調整済み楽譜についても、水平スペーシングの乱れやトレモロが短すぎることなどを指摘することができ、実際にはまだ完全とはいえません。しかしこれらについては、調節を怠っている私だけではなく、十分なスペーシング処理やカスタマイズ可能性を提供してくれないソフトウェア側も悪いと思います(文句があるなら 開発に貢献 しよう!と言われればそれはそう)。

*4:先程の譜例だと楽譜は2段だったのが1段になりました。

*5:拍という概念が実際の演奏で重要視されることに鑑みれば、このルールは記譜法の範疇に含めることもできるでしょう。

*6:MuseScore 4 は基本的にデフォルトで衝突回避を行うようになっていますがそのアルゴリズムは完全ではなく、楽譜全体が広がりすぎてしまう(先程の譜例であれば、楽譜が2段になったり、譜表と譜表の間が広がりすぎるなど)という副作用を抱えています。

*7:音符の右側のスペースは、その音の長さが短いほど狭く、長いほど広くなります。このルールについては今度詳しく扱う予定です。