Espacement entre éléments adjacents non musicaux

Au sein d’un empilement non musical, les éléments sont disposés dans un ordre spécifique. Par exemple, si l’on considère le jeu d’éléments de l’image ci-dessous, l’ordonnancement par défaut placera d’abord le signe de respiration, puis la clef, la barre de mesure, les altérations d’annulation et l’armure, et enfin la métrique – ceci est contrôlé par la propriété BreakAlignment.break-align-orders.

\relative {
  \key g \minor
  g'1
  \breathe
  \clef alto
  \time 6/8
  \key a \major
  aes4.
}

[image of music]

La distance entre deux éléments successifs d’un même empilement non musical est contrôlée par la valeur de la propriété space-alist de celui de gauche. space-alist prend la forme d’une liste associative mettant en correspondance les éléments non musicaux autorisant la survenue d’un saut avec des paires (style-d-espacementvaleur). Le type d’élément non musical est caractérisé par sa propiété break-align-symbol. Les possibilités standard sont listées dans break-alignment-interface, et les styles d’espacement dans break-aligned-interface. Parmi les options disponibles, seules extra-space et minimum-space sont pertinentes en matière de retouche de l’espacement entre des éléments non musicaux. Elles se distinguent par le fait que extra-space mesure l’espacement en partant de la droite du premier objet, alors que minimum-space compte dès la gauche du premier objet. L’un des moyens d’éloigner la barre de mesure de la clef est donc le suivant :

\relative {
  \key g \minor
  g'1
  \override Staff.Clef.space-alist.staff-bar = #'(extra-space . 4)
  \breathe
  \clef alto
  \time 6/8
  \key a \major
  aes4.
}

[image of music]

Les réglages de space-alist, qui ne se limitent pas aux styles d’espacement que nous venons de voir, permettent aussi d’apporter des dérogations à l’espacement entre différents empilements. Cette sorte d’espacement est néanmoins flexible et ne dépend pas uniquement des types d’objet concernés mais aussi de leur galbe. Des méthodes spécifiques à ce cas de figure sont abordées dans la section suivante.

Morceaux choisis

Séparation entre altérations annulées et nouvelle armure

Les altérations supprimées lors d’un changement de tonalité sont par défaut accolées à la nouvelle armure. Ce comportement peut s’adapter grâce à la propriété break-align-orders de l’objet BreakAlignment.

La valeur de break-align-orders est constituée d’un vecteur à trois composantes listant l’ordre des éléments à l’occasion d’une rupture. Chaque composante liste l’ordre par défaut des éléments selon qu’ils intervennent en fin, en cours, et au début d’une ligne. Seule la deuxième liste nous intéresse ici,

Si l’on se réfère à la référence des propriétés internes à propos de l’objet break-align-orders, l’ordre du deuxième élément est :

...
staff-bar
key-cancellation
key-signature
...

C’est ce que nous voulons modifier, en déplaçant key-cancellation avant staff-bar. Nous nous appuyons sur la fonction grob-transformer qui nous donne accès au vecteur original en tant que second argument de la fonction labmda, ici appelé orig (nous n’avons pas besoin du premier argument grob). Nous retournons un nouveau vecteur dont les premier et dernier éléments restent inchangés. Pour l’élément du milieu, nous supprimons key-cancellation de la liste puis le réinsérons avant staff-bar.

#(define (insert-before where what lst)
   (cond
    ((null? lst)           ; If the list is empty,
     (list what))          ; return a single-element list.
    ((eq? where (car lst)) ; If we find symbol `where`,
     (cons what lst))      ; insert `what` before curr. position.
    (else                  ; Otherwise keep building the list by
     (cons (car lst)       ; adding the current element and
                           ; recursing with the next element.
           (insert-before where what (cdr lst))))))

cancellationFirst =
\override Score.BreakAlignment.break-align-orders =
#(grob-transformer
  'break-align-orders
  (lambda (grob orig)
    (let* ((middle (vector-ref orig 1))
           (middle (delq 'key-cancellation middle))
           (middle (insert-before
                    'staff-bar 'key-cancellation middle)))
      (vector
       ;; end of line
       (vector-ref orig 0)
       ;; middle of line
       middle
       ;; beginning of line
       (vector-ref orig 2)))))

music = { \key es \major d'1 \bar "||"
          \key a \major d'1 }

{ <>^\markup "default"
  \music }

{ <>^\markup "cancellation first"
  \cancellationFirst
  \music }

\paper { tagline = ##f }

[image of music]

Voir aussi

Manuel de notation : Utilisation de break-aligned-interface.

Manuel d’extension : Listes associatives (alists).

Référence des propriétés internes : Break_align_engraver, BreakAlignGroup, BreakAlignment, break-alignable-interface, break-aligned-interface, break-alignment-interface.


GNU LilyPond – Manuel de notation v2.25.22 (development-branch).