[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Introduction à la personnalisation de Lil yPond
From: |
Nicolas Sceaux |
Subject: |
Re: Introduction à la personnalisation de Lil yPond |
Date: |
Wed, 31 Mar 2010 21:37:02 +0200 |
Le 31 mars 2010 à 16:06, Loïc CHAHINE a écrit :
> J'ai récupéré dans un fichier la commande "tempoMark" définie comme suit :
> tempoMark = #(define-music-function (parser location markp) (string?)
> #{
> \once \override Score.RehearsalMark #'self-alignment-X = #left
> \once \override Score.RehearsalMark #'extra-spacing-width = #'(+inf.0 .
> -inf.0)
> \mark \markup { \italic $markp }
> #})
Avec `define-music-function', on définit une fonction qui construit de la
musique,
ce qu'on appelle plus précisément : une expression musicale.
`define-music-function' est une construction en langage Scheme, en effet on voit
qu'elle est introduite par # : le dièse indique qu'on passe du langage LilyPond
au langage Scheme. Alors, à l'intérieur de la construction
`define-music-function',
il faut construire une expression musicale en Scheme. Sans entrer dans les
détails,
il y a quelques années c'était très compliqué. On était obligé de passer par
les
primitives de fabrication des expression musicales, telles que `make-music', et
c'était très verbeux. À présent, c'est beaucoup plus simple : on peut utiliser
la syntaxe LilyPond à l'intérieur de la syntaxe Scheme, en utilisant #{ ... #}.
Tout ce qui se trouve entre #{ et #} sera traité comme une expression en langage
LilyPond habituel. Mieux : on peut faire référence à des variables scheme, tels
que les paramètres de `define-music-function' par exemple, dans l'expression
LilyPond à l'intérieur des #{ #}, en les précédant du caractère `$'.
Donc, l'expression suivante :
#{ \mark \markup { \italic $markp } #}
où `markp' est l'argument de la commande, est interprétée comme si on écrivait
en
langage LilyPond :
\mark \markup { \italic \markp }
et c'est cette expression musicale qui est placée là où la function musicale
est appelée.
Voir <http://lilypond.org/doc/v2.13/Documentation/extending/music-functions>
Une note au passage : cette commande \tempoMark est obsolète, depuis que la
commande \tempo accepte un markup en argument.
Nicolas