| [ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] | 
| [ < Barras rítmicas ] | [ Up: Tweaks and overrides ] | [ Establecer el comportamiento de los reguladores en las barras de compás > ] | 
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 }
| [ << Tweaks and overrides ] | [Top][Contents] | [ Paper and layout >> ] | 
| [ < Barras rítmicas ] | [ Up: Tweaks and overrides ] | [ Establecer el comportamiento de los reguladores en las barras de compás > ] |