2.6 複数のバージョンに対応するコードを書く

いくつかの場面で、特にライブラリのコードを書く場合、破壊的な構文変更を含んだ複数の LilyPond バージョンをサポートすることは望ましいでしょう。これは、バージョンによって変更が必要な部分を、現在実行されている LilyPond のバージョンで分岐する条件文で囲むことで実現できます。Scheme 関数 ly:version? は比較演算子 op と、比較の対象となるバージョンを 3 つまでの整数のリストで表現した ver を引数に取ります。 整数の数が足りない場合は無視されます。例えば、'(2 20)全ての 2.20 の系列のバージョンと等しくなります。このような表記が可能です:

#(cond
  ((ly:version? > '(2 20))
   (ly:message "This is code to run for LilyPond after 2.20"))
  ((ly:version? = '(2 19 57))
   (ly:message "This will only be executed with LilyPond 2.19.57"))
  (else (ly:message "This will be executed in any other version")))

通常、これは (訳注: バージョンによって) 別の構文が使えるようにするためにライブラリ関数に組み込まれますが、以下の例のように、比較を直接音楽の中に用いることもできます:

{
  c' d' e' f'
  #(if (ly:version? = '(2 21))
       #{ \override NoteHead.color = #red #}
       #{ \override NoteHead.color = #blue #})
  g' a' b' c''
}

注意: この関数は LilyPond 2.19.57 で導入されました。そのため、それより古いバージョンと比較することはできません。

GNU LilyPond – アプリケーション使用方法 v2.25.22 (development-branch).