5.7.5 Scheme を用いた高度な調整

\override\tweak コマンドを用いることで多くのことが可能になりますが、LilyPond のアクションを変更するもっと強力な手段が LilyPond 内部処理へのプログラム可能なインタフェイスを通じて利用可能です。Scheme プログラミング言語で書かれたコードは LilyPond の内部処理に直接組み込むことができます。もちろん、それを行うには Scheme プログラミングについての基礎知識が必要であり、その手引きが Scheme tutorial で提供されています。

多くの実現可能なことの 1 つの例としては、プロパティに定数をセットする代わりに Scheme プロシージャをセットすることができます。このプロパティが LilyPond によってアクセスされたときに、このプロシージャが呼び出されます。このプロシージャが呼び出されたときに、このプロシージャによって決定された値を動的にそのプロパティにセットすることができます。以下の例では、符頭にその音符の譜上での位置に従って色を付けています:

#(define (color-notehead grob)
   "Color the notehead according to its position on the staff."
   (let ((mod-position (modulo (ly:grob-property grob 'staff-position)
                               7)))
     (case mod-position
       ;;   Return rainbow colors
       ((1) (x11-color 'red    ))  ; for C
       ((2) (x11-color 'orange ))  ; for D
       ((3) (x11-color 'yellow ))  ; for E
       ((4) (x11-color 'green  ))  ; for F
       ((5) (x11-color 'blue   ))  ; for G
       ((6) (x11-color 'purple ))  ; for A
       ((0) (x11-color 'violet ))  ; for B
       )))

\relative {
  % Arrange to obtain color from color-notehead procedure
  \override NoteHead.color = #color-notehead
  a2 b | c2 d | e2 f | g2 a |
}

[image of music]

Callback functions に、これらのプログラム可能なインタフェイスの使い方を示している例がもっとあります。


LilyPond — 学習マニュアル v2.23.82 (開発版).