GNU LilyPond – Manuel d'initiation: 4.5.2 Correction des collisions d'objets

### 4.5.2 Correction des collisions d’objets

Voyons maintenant comment les propriétés décrites dans la section précédente peuvent nous aider à résoudre les collisions.

### la propriété padding

En jouant sur la propriété `padding` (littéralement « rembourrage »), on augmente (ou on diminue) la distance entre des symboles qui sont imprimés au-dessus ou en dessous des notes.

>     c2\fermata
>     \override Script #'padding = #3
>     b2\fermata

>     % This will not work, see below:
>     \override MetronomeMark #'padding = #3
>     \tempo 4=120
>     c1 |
>     % This works:
>     \override Score.MetronomeMark #'padding = #3
>     \tempo 4=80
>     d1 |

Vous remarquerez dans le second exemple à quel point il est important de préciser le nom du contexte qui contient l’objet. Puisque l’objet `MetronomeMark` appartient au contexte `Score`, le fait de modifier la propriété dans le contexte `Voice` passera inaperçu. Pour plus de détails, voir Modification de propriétés.

Si on augmente la propriété `padding` d’un objet alors que celui-ci fait partie d’un ensemble d’objets positionnés en fonction de leur `outside-staff-priority`, cet objet sera déplacé, ainsi que tous les autres objets du groupe.

### right-padding

La propriété `right-padding` joue sur l’espacement entre une altération et la note sur laquelle elle porte. On ne l’utilise pas souvent, mais l’espacement par défaut peut se révéler inadéquat avec certaines altérations ou certains glyphes utilisés en musique microtonale. Le stencil de l’altération devra alors être construit sous la forme d’un `markup` qui contiendra le ou les symboles requis, comme ceci :

>     sesquisharp = \markup { \sesquisharp }
>     \relative c'' {
>       c4
>       % This prints a sesquisharp but the spacing is too small
>       \once \override Accidental
>         #'stencil = #ly:text-interface::print
>       \once \override Accidental #'text = #sesquisharp
>       cis4 c
>       % This improves the spacing
>       \once \override Score.AccidentalPlacement #'right-padding = #0.6
>       \once \override Accidental
>         #'stencil = #ly:text-interface::print
>       \once \override Accidental #'text = #sesquisharp
>       cis4 |
>     }

Cette méthode utilise, pour le stencil des altérations, une retouche qui ne sera pas reprise par la suite. Le type de stencil est obligatoirement une procédure, qui consiste ici à imprimer le contenu de la propriété `text` de `Accidental`, déclaré comme étant un signe sesqui-dièse. Celui-ci est ensuite repoussé devant la tête de note par la retouche de `right-padding`.

### la propriété staff-padding

`staff-padding` sert à aligner des objets tels que des nuances sur une ligne fictive à une hauteur donnée par rapport à la portée plutôt qu’à une hauteur qui varie en fonction de la position de la note sur laquelle porte l’objet. Ce n’est pas une propriété de `DynamicText` mais de `DynamicLineSpanner`, car la ligne fictive est destinée à s’appliquer autant à toutes les nuances, notamment celles qui sont créées comme des bandeaux en longueur (en anglais Spanners). Tel est donc le moyen d’aligner les indications de nuance, comme dans cet exemple repris de la section précédente :

>     \dynamicUp
>     % Extend width by 1 unit
>     \override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
>     % Align dynamics to a base line 2 units above staff
>     \override DynamicLineSpanner #'staff-padding = #2
>     a4\f b\mf c\mp b\p

### la propriété self-alignment-X

L’exemple suivant montre comment résoudre une collision entre une indication de corde et une hampe, en alignant le coin droit sur le point de référence de la note parente :

>     \voiceOne
>     <a\2>
>     \once \override StringNumber #'self-alignment-X = #RIGHT
>     <a\2>

### la propriété staff-position

Dans une voix, un silence valant une mesure entière peut chevaucher les notes d’une autre voix. Vu que ces silences sont centrés entre les deux barres de mesure, il serait très compliqué de programmer LilyPond pour repérer ces risques de collision dans la mesure où, normalement, toutes les collisions entre notes ou entre notes et silences se produisent sur des notes et silences simultanés. Voici un exemple de collision de ce type :

>     << { c4 c c c } \\ { R1 } >>

Ici, la meilleure solution consiste à déplacer le symbole de pause vers le bas – puisque cette pause appartient à la voix deux. Par défaut, dans la `\voiceTwo` (c’est-à-dire dans la seconde voix d’une construction `<<{…} \\ {…}>>`), la propriété `staff-position` est réglée sur `-4` pour les `MultiMeasureRest` ; nous avons donc besoin de la déplacer, disons, de quatre demi-intervalles vers le bas, ce qui donne `-8`.

>     <<
>       { c4 c c c }
>       \\
>       \override MultiMeasureRest #'staff-position = #-8
>       { R1 }
>     >>

C’est mieux que d’utiliser, par exemple, `extra-offset`, car la ligne supplémentaire au-dessus du silence est insérée automatiquement.

### la propriété extra-offset

La propriété `extra-offset` offre la possibilité de contrôler entièrement le placement d’un objet, aussi bien horizontalement que verticalement.

Dans l’exemple suivant, la seconde indication de doigté est déplacée légèrement vers la gauche et de 1,8 intervalle de lignes vers le bas :

>     \stemUp
>     f4-5
>     \once \override Fingering #'extra-offset = #'(-0.3 . -1.8)
>     f4-5

### la propriété positions

La propriété `positions` permet de contrôler manuellement la position et l’inclinaison des nolets, coulés, liaisons de phrasé et barres de ligature. Voici un exemple avec une horrible liaison de phrasé – horrible pour avoir tenté de contourner la liaison de l’acciaccature.

>     r4 \acciaccatura e8\( d8 c~ c d c d\)

Nous pourrions tout simplement déplacer la liaison de phrasé au-dessus des notes, et ce serait la meilleure solution :

>     r4
>     \phrasingSlurUp
>     \acciaccatura e8\( d8 c~ c d c d\)

Mais si, pour une quelconque raison, cette solution n’était pas envisageable, l’autre solution consiste à déplacer légèrement vers le bas l’extrémité gauche de la liaison de phrasé, grâce à la propriété `positions`. Cela corrige en même temps la forme plutôt disgracieuse de la liaison.

>     r4
>     \once \override PhrasingSlur #'positions = #'(-4 . -3)
>     \acciaccatura e8\( d8 c~ c d c d\)

Voici un autre exemple, tiré du début de la partie de main gauche du Prélude de Chopin, Op. 28, No 2. Comme nous pouvons le constater, les barres de ligature chevauchent les notes les plus hautes :

>     {
>       \clef "bass"
>       << { b,8 ais, b, g, } \\ { e,8 g e, g } >>
>       << { b,8 ais, b, g, } \\ { e,8 g e, g } >>
>     }

On peut y remédier en déplaçant manuellement vers le haut les deux extrémités des ligatures de croches, non plus à 2 intervalles au-dessus de la ligne médiane mais, disons, à 3 :

>     {
>       \clef "bass"
>       <<
>         \override Beam #'positions = #'(3 . 3)
>         { b,8 ais, b, g, }
>       \\
>         { e,8 g e, g }
>       >>
>       << { b,8 ais, b, g, } \\ { e,8 g e, g } >>
>     }

Vous remarquerez que la retouche continue de s’appliquer au second bloc de croches de la première voix mais qu’il ne s’applique à aucune barre de la deuxième voix.

### la propriété force-hshift

Maintenant, nous sommes prêts à appliquer les dernières corrections à l’exemple de Chopin présenté à la fin de J’entends des Voix, que nous avions laissé dans cet état :

>     \new Staff \relative c'' {
>       \key aes \major
>       <<
>         { c2 aes4. bes8 }
>         \\
>         { aes2 f4 fes }
>         \\
>         {
>           \voiceFour
>           <ees c>2 des
>         }
>       >> |
>       <c ees aes c>1 |
>     }

Les deux plus basses notes du premier accord (c’est-à-dire celles de la troisième voix) ne devraient pas être décalées de l’empilement des deux plus hautes notes. Pour y remédier, nous réglons le `force-hshift` – qui est une propriété de `NoteColumn` – de ces notes sur zéro. Ensuite, la note la plus basse du second accord serait mieux à droite des notes plus hautes. Pour cela, nous réglons le `force-hshift` de cette note sur 0,5 – c’est-à-dire la moitié de la largeur d’une tête de note vers la droite de la colonne des notes plus hautes.

Et voici le résultat final :

>     \new Staff \relative c'' {
>       \key aes \major
>       <<
>         { c2 aes4. bes8 }
>         \\
>         { aes2 f4 fes }
>         \\
>         {
>           \voiceFour
>           \once \override NoteColumn #'force-hshift = #0
>           <ees c>2
>           \once \override NoteColumn #'force-hshift = #0.5
>           des2
>         }
>       >> |
>       <c ees aes c>1 |
>     }

Autres langues : English, česky, deutsch, español, italiano, 日本語, nederlands.

#### LilyPond — Manuel d’initiation