4.7.5 Ajustaments avançats amb l’Scheme

Tot i que és possible fer moltes coses amb les ordres \override i \tweak, tenim una forma fins i tot més poderosa de modificar el funcionament del LilyPond, a través d’una interfície programable cap a les operacions internes del LilyPond. Es pot incorporar codi escrit en el llenguatge de programació Scheme, directament al mecanisme de funcionament del LilyPond. Per suposat, per fer això calen almenys uns coneixements bàsics de programació de l’Scheme, i donem una instroducció al Tutorial de l’Scheme.

Com a exemple que il·lustra una de les moltes possibilitats, enlloc de donar a una propietat un valor constant, es pot establir el resultat d’un procediment de l’Scheme que s’invoca cada cop que el LilyPond accedeix a aquesta propietat. La propietat es pot establir dinàmicament a un valor determinat pel procediment en el moment que s’invoca. En aquest exemple donem als caps de les notes un color que depèn de la seva posició dins del pentagrama.

#(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]

Es poden trobar exemples addicionals que mostren la utilització d’aquestes interfícies programables a Funcions de callback.


Altres idiomes: English, česky, deutsch, español, français, italiano, 日本語, nederlands.
Quant a selecció automàtica de l'idioma.

LilyPond — Manual d’aprenentatge v2.19.28 (branca de desenvolupament).