Separar las cancelaciones de tonalidad de los cambios de armadura

De forma predeterminada, las alteraciones accidentales que se usan para las cancelaciones en las armaduras se colocan adyacentes a las que se usan para los cambios de tonalidad. Este comportamiento se puede cambiar sobreescribiendo la propiedad break-align-orders del objeto gráfico BreakAlignment.

El valor de break-align-orders es un vector de longitud 3, con listas entrecomilladas cuyos elementos con objetos que se pueden dividir en un salto. Cada lista describe el orden predeterminado de material preliminar al final, en medio y al comienzo de una línea, respectivamente. Solo nos interesa cambiar el comportamiento en el medio de la línea.

Si busca la definición de break-align-orders en la Referencia de funcionamiento interno de LilyPond, verá el orden siguiente en el segundo elemento:

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

Queremos modificar eso, trasladando key-cancellation a antes de staff-bar. Para que esto ocurra, usamos la función grob-transformer, que nos da acceso al vector oricinal como segundo argumento de la función lambda, llamada aquí orig (no necesitamos el primer argumento, grob). Devolvemos un nuevo vector, sin ningún cambio en los elementos primero y último. Para el elemento central, en primer lugar eliminamos key-cancellation de la lista, y después lo añadimos de nuevo antes de staff-bar.

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

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

{ <>^\markup "cancellation first"
  \breakAlignInsert key-cancellation before staff-bar
  \music }
[image of music]

LilyPond snippets v2.25.35 (development-branch).