Siguiente: , Anterior: Proyectos grandes, Arriba: Sugerencias para escribir archivos de LilyPond


5.1.4 Ahorrar tecleo mediante variables y funciones

Llegado a este punto, usted ha visto cosas de este tipo:

     
     notasTrompa = \relative c'' { c4 b dis c }
     \score {
       {
         \notasTrompa
       }
     }

[image of music]

Incluso se dará cuenta de que esto puede ser útil en música minimalista:

     
     fragA = \relative c'' { a4 a8. b16 }
     fragB = \relative c'' { a8. gis16 ees4 }
     violin = \new Staff { \fragA \fragA \fragB \fragA }
     \score {
       {
         \violin
       }
     }

[image of music]

Sin embargo también puede usar estos identificadores (que también se conocen como variables, macros o instrucciones definidas por el usuario) para hacer trucos:

     
     dolce = \markup{ \italic \bold dolce }
     textoRelleno = { \once \override TextScript #'padding = #5.0 }
     f_luego_p=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p }
     violin = \relative c'' {
       \repeat volta 2 {
         c4._\dolce b8 a8 g a b |
         \textoRelleno
         c4.^"hi there!" d8 e' f g d |
         c,4.\f_luego_p b8 c4 c-. |
       }
     }
     \score {
       {
         \violin
       }
     \layout{ragged-right=##t}
     }

[image of music]

Obviamente estos identificadores son útiles para ahorrar tecleo. Pero son dignos de tener en cuenta incluso si se van a utilizar una sola vez: reducen la complejidad. Examinemos el ejemplo anterior reescrito sin ningún identificador. Encontrará que es mucho más difícil de leer, sobre todo la última línea.

violin = \relative c'' {
  \repeat volta 2 {
    c4._\markup{ \italic \bold dolce } b8 a8 g a b |
    \once \override TextScript #'padding = #5.0
    c4.^"hi there!" d8 e' f g d |
    c,4.\markup{ \dynamic f \italic \small { 2nd }
      \hspace #0.1 \dynamic p } b8 c4 c-. |
  }
}

Hasta ahora hemos contemplado la sustitución estática: cuando LilyPond se encuentra con \padText, lo sustituye con aquello que hemos definido que sea (es decir, todo lo que está a la derecha de padtext=).

LilyPond también puede manejar sustituciones no estáticas (piense en ellas como en funciones).

     
     textoRelleno =
     #(define-music-function (parser location padding) (number?)
       #{
         \once \override TextScript #'padding = #$padding
       #})
     
     \relative c''' {
       c4^"piu mosso" b a b
       \textoRelleno #1.8
       c4^"piu mosso" d e f
       \textoRelleno #2.6
       c4^"piu mosso" fis a g
     }

[image of music]

La utilización de identificadores también es una buena forma de reducir el trabajo si la sintaxis de entrada de LilyPond cambia (véase Actualizar archivos antiguos). Si tiene una sola definición (como p.ej. \dolce) para todos sus archivos (ver Hojas de estilo), y después la sintaxis se modifica, sólo tendrá que actualizar su definición \dolce única, en lugar de tener que hacer cambios en cada uno de los archivos .ly.

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.