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. }![]()
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. }![]()
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 }![]()
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.
![[image of music]](../8d/lily-1e864d03.png)
![[image of music]](../55/lily-b1560f3f.png)
![[image of music]](../96/lily-37293b27.png)