GNU LilyPond – Extension des fonctionnalités: 2.6.2 Application d'une fonction à tous les objets de mise en forme

### 2.6.2 Application d’une fonction à tous les objets de mise en forme

La manière la plus souple d’affiner un objet consiste à utiliser la commande `\applyOutput`. Celle-ci va insérer un événement ( ApplyOutputEvent) dans le contexte spécifié. Elle répond aussi bien à la syntaxe

>     \applyOutput Contexte procédure

que

>     \applyOutput Contexte.Grob procédure

où `procédure` est une fonction Scheme à trois arguments.

Lors de l’interprétation de cette commande, la fonction `procédure` est appelée pout tout objet de rendu (nommé Grob si celui-ci est spécifié) appartenant au contexte `Contexte` à cet instant précis, avec les arguments suivants :

- l’objet de rendu en lui-même,
- le contexte au sein duquel cet objet est créé,
- le contexte dans lequel `\applyOutput` est effectué.

De plus, ce qui est à l’origine de l’objet de rendu – l’expression musicale ou l’objet qui l’a générée – se retrouve en tant que propriété d’objet `cause`. Il s’agit, pour une tête de note, d’un événement NoteHead, et d’un objet Stem pour une hampe.

Voici une fonction utilisable avec la commande `\applyOutput` : elle « blanchit » la tête des notes se trouvant sur la ligne médiane ou bien directement à son contact.

>     #(define (blanker grob grob-origin context)
>        (if (< (abs (ly:grob-property grob 'staff-position)) 2)
>            (set! (ly:grob-property grob 'transparent) #t)))

>     \relative {
>       a'4 e8 <<\applyOutput Voice.NoteHead #blanker a c d>> b2
>     }

La procédure sera interprétée au niveau `Score` (partition) ou `Staff` (portée) dès lors que vous utiliserez l’une des syntaxes

>     \applyOutput Score…
>     \applyOutput Staff…

#### LilyPond — Extension des fonctionnalités v2.24.4 (branche stable).