[ << Trucar la salida ] | [Arriba][Índice general][Índice] | [ Plantillas >> ] |
[ < Otras fuentes de información ] | [ Subir : Trucajes adicionales ] | [ Plantillas > ] |
5.7.5 Trucos avanzados con Scheme
Aunque es posible hacer muchas cosas con las instrucciones
\override
y \tweak
, tenemos una forma incluso más
poderosa de modificar el funcionamiento de LilyPond, a través de
un interface programable hacia las operaciones internas de
LilyPond. Se puede incorporar código escrito en el lenguaje de
programación Scheme, directamente en el mecanismo de
funcionamiento de LilyPond. Por supuesto, para hacer esto se
necesitan al menos unos conocimientos básicos de programación en
Scheme, y damos una introducción en el
Scheme
Tutorial de Scheme.
Como ejemplo que ilustra una de las muchas posibilidades, en lugar de dar a una propiedad un valor constante, se puede establecer al resultado de un procedimiento de Scheme que se invoca cada vez que LilyPond accede a esta propiedad. La propiedad se puede establecer dinámicamente a un valor determinado por el procedimiento en el momento en que se invoca. En este ejemplo damos a las cabezas de las notas un color que depende de su posición dentro 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 | }
Se pueden encontrar ejemplos adicionales que muestran la utilización de estos interfaces programables, en Funciones de callback.
[ << Trucar la salida ] | [Arriba][Índice general][Índice] | [ Plantillas >> ] |
[ < Otras fuentes de información ] | [ Subir : Trucajes adicionales ] | [ Plantillas > ] |