\version "2.19.23" #(define (key-signature::special-print alt-color-list) (lambda (grob) (let* ((inter (/ (ly:staff-symbol-staff-space grob) 2.0)) (mol empty-stencil) (c0s (ly:grob-property grob 'c0-position)) (is-cancellation? (grob::has-interface grob 'key-cancellation-interface)) (padding-pairs (ly:grob-property grob 'padding-pairs)) (fm (ly:grob-default-font grob)) (alist (ly:grob-property grob 'glyph-name-alist))) (let loop ((s (ly:grob-property grob 'alteration-alist)) (stil mol) (last-glyph-name #f)) (if (pair? s) (let* ((alt (if is-cancellation? 0 (cdar s))) (glyph-name (ly:assoc-get alt alist)) (acc (ly:font-get-glyph fm glyph-name)) (pos-list (key-signature-interface::alteration-positions (car s) c0s grob)) (p (car pos-list)) (color (assoc-get p alt-color-list)) (acc (if (color? color) (stencil-with-color acc color) acc)) (padding (ly:grob-property grob 'padding 0.0)) (handle (assoc (cons glyph-name last-glyph-name) padding-pairs)) (padding (cond ((pair? handle) (cdr handle)) ((and (string=? glyph-name "accidentals.natural") ; ... ) (+ padding 0.3)) (else padding)))) (loop (cdr s) (ly:stencil-combine-at-edge stil X LEFT (ly:stencil-translate-axis acc (* p inter) Y) padding) glyph-name)) (ly:stencil-aligned-to stil X LEFT)))))) { \override Staff.KeySignature.stencil = #(key-signature::special-print `((4 . ,green) (-3 . ,red) (1 . ,blue))) \override Staff.KeyCancellation.stencil = #(key-signature::special-print `((-3 . ,magenta) (1 . ,cyan))) \key ces \major ces'1 \key a \major a'1 \key g \major g'1 }