Ajustement du positionnement vertical d’unel liaison

Il est possible, à l’aide d’un \override Slur.positions, de définir le positionnement vertical des extrémités d’une liaison à des valeurs absolues (ou, plutôt, forcer l’algoritme de LilyPond à considérer ces valeurs comme étant préférables). Dans de nombreux cas, ceci demande de procéder à tâtons pour obtenir une valeur acceptable, d’autant que la commande \offset est inéfficace pour les liaisons et affiche un avertissement.

Le code ci-dessous parmet d’ajuster le positionnement du début et de la fin d’une liaison en spécifiant des modifications relatives comme le ferait un \offset.

Syntaxe : \offsetPositions #'(dy1 . dy2)

offsetPositions =
#(define-music-function (offsets) (number-pair?)
  #{
     \once \override Slur.control-points =
       #(lambda (grob)
          (match-let ((((_ . y1) _ _ (_ . y2))
                       (ly:slur::calc-control-points grob))
                      ((off1 . off2) offsets))
            (set! (ly:grob-property grob 'positions)
                  (cons (+ y1 off1) (+ y2 off2)))
            (ly:slur::calc-control-points grob)))
  #})

\relative c'' {
  c4(^"default" c, d2)
  \offsetPositions #'(0 . 1)
  c'4(^"(0 . 1)" c, d2)
  \offsetPositions #'(0 . 2)
  c'4(^"(0 . 2)" c, d2)
  \bar "||"
  g4(^"default" a d'2)
  \offsetPositions #'(1 . 0)
  g,,4(^"(1 . 0)" a d'2)
  \offsetPositions #'(2 . 0)
  g,,4(^"(2 . 0)" a d'2)
}

[image of music]


LilyPond snippets v2.25.21 (branche de développement).