[ << Retouche de partition ] | [Racine][Table des matières][Index][ ? ] | [ Modèles >> ] | ||
[ < Autres sources de documentation ] | [ Plus haut: Autres retouches ] | [ Modèles > ] |
4.7.5 Retouches avancées avec Scheme
Nous avons vu à quel point le résultat obtenu avec LilyPond peut
être largement personnalisé à l’aide de commandes comme
\override
et \tweak
. Et pourtant l’utilisation de
Scheme ouvre des possibilités encore plus grandes.
Le code écrit dans le langage de programmation Scheme peut être
intégré directement dans le processus interne de LilyPond. Bien sûr,
il faut pour cela connaître un minimum de programmation en langage
Scheme. Pour des explications complètes là-dessus, consultez le
Tutoriel Scheme.
En guise d’illustration – et ce n’est qu’une possibilité parmi tant d’autres – nous allons attribuer à une propriété non pas une valeur préétablie mais une procédure Scheme qui sera lancée à chaque utilisation de la propriété par LilyPond. De cette façon, nous obtenons un réglage dynamique de la propriété par le simple fait d’invoquer la procédure. Dans cet exemple, nous colorons les têtes de notes en fonction de leur position sur la portée.
#(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 | }
Vous trouverez dans Fonctions de rappel d’autres exemples d’utilisation de ces interfaces programmables.
[ << Retouche de partition ] | [Racine][Table des matières][Index][ ? ] | [ Modèles >> ] | ||
[ < Autres sources de documentation ] | [ Plus haut: Autres retouches ] | [ Modèles > ] |
Autres langues : English, català, česky, deutsch, español, italiano, 日本語, nederlands.
About automatic language selection.