30.4.2 Espaciado entre elementos no musicales adyacentes

Dentro de una columna no musical, los elementos se van disponiendo en un orden específico. Por ejemplo, con el conjunto de elementos de la imagen que aparece a continuación, el orden predeterminado sitúa primero el signo de respiración, después la clave, luego la barra de compás, la armadura de cancelación, la armadura normal, y por último la indicación de compás (esto se controla por parte de la propiedad BreakAlignment.break-align-orders).

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

La distancia entre dos elementos adyacentes de la misma columna no musical viene controlada por el valor de la propiedad space-alist (lista de asociación de espaciado) de la que está más a la izquierda de las dos. space-alist tiene la forma de una lista asociativa que asigna símbolos de break-align a pares (spacing-style . value). El símbolo break-align de un elemento divisible viene dado por el valor de su propiedad break-align-symbol; las opciones estándar están relacionadas en break-alignment-interface. Los estilos de espaciado se relacionan en break-aligned-interface. Entre las opciones que están disponibles, solo extra-space y minimum-space son relevantes para el trucaje del espacio entre elementos no musicales. La diferencia es que extra-space mide el espacio de relleno a partir de la derecha del primer objetohasta la izquierda del segundo objeto, mientras que minimum-space cuenta a partir de la izquierda del primer objeto. De esta forma, una manera de desplazar la línea divisoria, alejándola de la clave, sería:

\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]

Los ajustes de space-alist, que no se limitan a los dos estilos de espaciado que se han descrito anteriormente, son posibles también para sobreescribir el espaciado entre diferentes columnas. Sin embargo, este tipo de espaciado es flexible, y no depende meramente de los tipos de objeto implicados, sino también de sus formas. Los métodos específicos para ello se documentan en el apartado siguiente.

Fragmentos de código seleccionados

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 (véase el objeto gráfico BreakAlignment), 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.

#(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]

Véase también

Referencia de la notación: Uso del break-alignable-interface.

Manual de extensión de LilyPond: Association lists (alists).

Referencia de funcionamiento interno: Break_align_engraver, BreakAlignGroup, BreakAlignment, break-alignable-interface, break-aligned-interface, break-alignment-interface.


Referencia de la notación de GNU LilyPond v2.25.30 (development-branch).