Suivant : , Précédent : Suggestions de saisie des fichiers LilyPond, Haut : Travailler sur des projets LilyPond


4.2 Économiser du temps grâce à des identificateurs et fonctions

Jusqu'à maintenant, vous avez vu ce type de code :

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

[image of music]

Vous comprendrez combien cela peut être utile pour écrire de la musique minimaliste :

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

[image of music]

Cependant, vous pouvez aussi utiliser ces identificateurs — aussi connus sous le nom de variables, macros, ou commandes (définies par l'utilisateur) — pour des retouches :

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

[image of music]

Ces identificateurs sont évidemment utiles pour économiser de la frappe. Mais ils peuvent l'être même si vous ne les utilisez qu'une seule fois : ils réduisent la complexité. Regardons l'exemple précédent sans aucun identificateur. C'est beaucoup plus laborieux à lire, et particulièrement la dernière ligne.

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-. |
  }
}

Jusqu'ici nous avons vu des substitutions statiques : quand LilyPond rencontre \padText, il le remplace par le contenu que nous lui avons défini — c'est-à-dire le contenu à droite de padText=).

LilyPond gère également des substitutions non-statiques — vous pouvez les voir comme des fonctions.

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

[image of music]

Utiliser les identificateurs est aussi un bon moyen pour vous épargner du travail si la syntaxe de LilyPond change un jour — voir Mettre à jour des anciens fichiers. Si vous avez une seule définition, par exemple \dolce, pour tous vos fichiers (voir Feuilles de style), et que la syntaxe change, alors vous n'aurez qu'à mettre à jour votre seule définition \dolce, au lieu de devoir modifier chaque fichier .ly.


Suivant : , Précédent : Suggestions de saisie des fichiers LilyPond, Haut : Travailler sur des projets LilyPond

This page is for LilyPond-2.10.33 (stable-branch).

Report errors to http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs.

Other languages: English.