[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Citation d’une autre voix et transposition ] | [ Up : Pitches ] | [ Transposition et réduction du nombre d’altérations accidentelles > ] |
Séparation entre altérations annulées et nouvelle armure
Les altérations supprimées lors d’un changement de tonalité sont par
défaut accolées à la nouvelle armure. Ce comportement peut s’adapter
grâce à la propriété break-align-orders
de l’objet
BreakAlignment
.
La valeur de break-align-orders
est constituée d’un vecteur à
trois composantes listant l’ordre des éléments à l’occasion d’une
rupture. Chaque composante liste l’ordre par défaut des éléments selon
qu’ils intervennent en fin, en cours, et au début d’une ligne. Seule la
deuxième liste nous intéresse ici,
Si l’on se réfère à la référence des propriétés internes à propos de
l’objet break-align-orders
, l’ordre du deuxième élément est :
... staff-bar key-cancellation key-signature ...
C’est ce que nous voulons modifier, en déplaçant key-cancellation
avant staff-bar
. Nous nous appuyons sur la fonction
grob-transformer
qui nous donne accès au vecteur original en tant
que second argument de la fonction labmda, ici appelé orig (nous
n’avons pas besoin du premier argument grob). Nous retournons un
nouveau vecteur dont les premier et dernier éléments restent inchangés.
Pour l’élément du milieu, nous supprimons key-cancellation
de la
liste puis le réinsérons avant 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 }
[ << Pitches ] | [Top][Contents] | [ Rhythms >> ] |
[ < Citation d’une autre voix et transposition ] | [ Up : Pitches ] | [ Transposition et réduction du nombre d’altérations accidentelles > ] |