GNU LilyPond – Manuel de notation : 6.8 Difficult tweaks
Description: GNU LilyPond – Manuel de notation: 6.8 Difficult tweaks
Keywords: GNU LilyPond – Manuel de notation: 6.8 Difficult tweaks

## 6.8 Difficult tweaks

Certains réglages sont plus délicats que d’autres.

- L’un d’entre eux est l’apparence des objets dits ‘spanner’, qui s’étendent horizontalement, tels que les liaisons. Si, en principe, un seul de ces objets est créé à la fois et peut donc être modifié de façon habituelle, lorsque ces objets doivent enjamber un changement de ligne, ils sont dupliqués au début du ou des systèmes suivants. Comme ces objets sont des clones de l’objet d’origine, ils en héritent toutes les propriétés, y compris les éventuelles commandes `\override`.

  En d’autres termes, une commande `\override` affecte toujours les deux extrémités d’un objet ‘spanner’. Pour ne modifier que la partie précédant ou suivant le changement de ligne, il faut intervenir directement dans le processus de mise en page. La fonction de rappel `after-line-breaking` contient toute l’opération Scheme effectuée lorsque les sauts de lignes ont été déterminés, et que des objets graphiques ont été divisés sur des systèmes différents.

  Dans l’exemple suivant, on définit une nouvelle opération nommée `my-callback`. Cette opération

  - détermine si l’objet a été divisé à l’occasion d’un changement de ligne
  - si oui, recherche les différents morceaux de l’objet
  - vérifie si l’objet considéré est bien la deuxième moitié d’un objet divisé
  - si oui, applique un espacement supplémentaire (`extra-offset`).

  On ajoute cette procédure à l’objet Tie (liaison de tenue), de façon à ce que le deuxième morceau d’une liaison divisée soit rehaussé.

  >     #(define (my-callback grob)
  >       (let* (
  >              ; l'objet a-t-il été divisé ?
  >              (orig (ly:grob-original grob))

  >              ; si oui, rechercher les morceaux frères (siblings)
  >              (siblings (if (ly:grob? orig)
  >                          (ly:spanner-broken-into orig) '() )))

  >        (if (and (>= (length siblings) 2)
  >                  (eq? (car (last-pair siblings)) grob))
  >          (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))

  >     \relative c'' {
  >       \override Tie #'after-line-breaking =
  >       #my-callback
  >       c1 ~ \break c2 ~ c
  >     }

  Lorsque cette astuce va être appliquée, notre nouvelle fonction de rappel `after-line-breaking` devra également appeler celle d’origine (`after-line-breaking`), si elle existe. Ainsi, pour l’utiliser dans le cas d’un crescendo (objet `Hairpin`), il faudra appeler également `ly:hairpin::after-line-breaking`.

- Pour des raisons d’ordre technique, certains objets ne peuvent être modifiés par `\override`. Parmi ceux-là, les objets `NonMusicalPaperColumn` et `PaperColumn`. La commande `\overrideProperty` sert à les modifier, de façon similaire à `\once \override`, mais avec une syntaxe différente :

  >     \overrideProperty
  >     #"Score.NonMusicalPaperColumn"  % Nom de l'objet
  >     #'line-break-system-details     % Nom de la propriété
  >     #'((next-padding . 20))         % valeur

  Notez cependant que la commande `\override` peut tout de même être appliquée à `NoteMusicalPaperColumn` et `PaperColumn` dans un bloc `\context`.

Other languages: English, español.

#### Manuel de notation