Anterior: Usar código de Scheme en lugar de \tweak, Arriba: Interfaces para programadores
Hay un cierto número de tipos de ajustes difíciles.
\override
s.
En otras palabras, un \override
siempre afecta a todas las
piezas de un objeto de extensión fragmentado. Para cambiar sólo una
parte de un extensor en el salto de línea, es necesario inmiscuirse en
el proceso de formateado. El callback
after-line-breaking
contiene el procedimiento Scheme que se
llama después de que se han determinado los saltos de línea, y los
objetos de presentación han sido divididos sobre los distintos
sistemas.
En el ejemplo siguiente, definimos un procedimiento
my-callback
. Este procedimiento
extra-offset
.
Este procedimiento se instala en Tie (ligadura de unión), de forma que la última parte de la ligadura dividida se traslada hacia arriba.
#(define (my-callback grob) (let* ( ; have we been split? (orig (ly:grob-original grob)) ; if yes, get the split pieces (our siblings) (siblings (if (ly:grob? orig) (ly:spanner-broken-into orig) '() ))) (if (and (>= (length siblings) 2) (eq? (car (last-pair siblings)) grob)) (ly:grob-set-property! grob 'extra-offset '(-2 . 5))))) \relative c'' { \override Tie #'after-line-breaking = #my-callback c1 ~ \break c2 ~ c }
Al aplicar este truco, la nueva función de callback
after-line-breaking
también debe llamar a la antigua
after-line-breaking
, si existe. Por ejemplo, si se usa con
Hairpin
, se debe llamar también a
ly:hairpin::after-line-breaking
.
\override
por
razones técnicas. Son ejemplos NonMusicalPaperColumn
y
PaperColumn
. Se pueden cambiar con la función
\overrideProperty
que funciona de forma similar a \once
\override
, pero usa una sintaxis distinta.
\overrideProperty #"Score.NonMusicalPaperColumn" % Nombre del grob #'line-break-system-details % Nombre de la propiedad #'((next-padding . 20)) % Valor
Observe, sin embargo, que \override
, aplicado a
NoteMusicalPaperColumn
y a PaperColumn
, aún funciona
como se espera dentro de los bloques \context
.