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 encara més poderosa de modificar el funcionament del LilyPond, mitjançant una interfície programable cap a les operacions internes del LilyPond. Es pot incorporar codi escrit en el llenguatge de programació Scheme, directament en el mecanisme de funcionament del LilyPond. Per descomptat, per fer això calen almenys uns coneixements bàsics de programació de l’Scheme, i proveïm una introducció al Tutorial de l’Scheme.

Com exemple que il·lustra una de les moltes possibilitats, en lloc de donar a una propietat un valor constant, es pot establir al resultat d’una 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 al 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)
   "Pinta el cap de la nota d'acord amb la seva posició a la partitura."
   (let ((mod-position (modulo (ly:grob-property grob 'staff-position)
                               7)))
     (case mod-position
       ;;   Retorna els colors de l'arc de Sant Martí
       ((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 {
  % Disposa per obtenir el color del procediment color-notehead
  \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.


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