Ajustar las posiciones de las ligaduras verticalmente

Usando \override Slur.positions es posible fijar la posición vertical de los puntos de inicio y de fin de una ligadura de expresión a valores absolutos (o mejor dicho, forzar al algoritmo de ligaduras de LilyPond para que tenga en cuenta estos valores según se desee). En muchos casos, esto implica bastante ensayo y error hasta que se encuentran unos valores aceptables. Porblablemente habrá probado la instrucción \offset solo para comprobar que no funciona con las ligaduras de expresión, sino que emite una advertencia en su lugar.

El código de este fragmento nos permite trucar las posiciones de comienzo y final especificando cambios relativos, de manera parecida a \offset.

La sintaxis es: \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.30 (development-branch).