Anterior: Evitar los trucos con un proceso ralentizado, Arriba: Trucajes adicionales


4.6.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 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 c' {
       % Truco para obtener color a partir del procedimiento color-notehead
       \override NoteHead #'color = #color-notehead
       c2 c' | 
       b4 g8 a b4 c | 
       c,2 a' | 
       g1 |
     }
     \addlyrics {
       Some -- where o -- ver the Rain -- bow way up high,
     }

[image of music]

Se pueden encontrar ejemplos adicionales que muestran la utilización de estos interfaces programables, en Trucos con Scheme.

Esta página corresponde a LilyPond-2.11.58 (rama de desarrollo).

Informe de los fallos a través de la lista en español lilypond-es, o en inglés a través de http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs.

Se agradecen las sugerencias para la documentación.

Otros idiomas: English, français, deutsch.