C'est un peu approximatif comme solution (l'espacement horizontal ne marche pas pour toutes les armures), mais voilà :
\version "2.14.0"
#(define (colorator grob)
(define (helper stencil colors alts cpos is-cancel padding-pairs gna fm inter padding lastpos lgname)
(if (null? alts)
stencil
(let* ((pos
(key-signature-interface::alteration-position (caar alts) (cdar alts) cpos))
(gname (assoc-get (if is-cancel 0 (cdar alts)) gna))
(handle (assoc-get (cons gname lgname) padding-pairs #f)))
(helper (ly:stencil-combine-at-edge
stencil
X
LEFT
(stencil-with-color
(ly:stencil-translate-axis (ly:font-get-glyph fm gname) (* inter pos) Y)
(car colors))
(cond
(handle
(cdr handle))
((and (equal? gname "accidentals.natural") (< lastpos (+ pos 2)) (> lastpos (- pos 6)))
(+ padding 0.3))
(else padding)))
(cdr colors) (cdr alts) cpos is-cancel padding-pairs gna fm inter padding pos gname))))
(let* ((cpos (ly:grob-property grob
'c0-position))
(is-cancel (grob::has-interface grob 'key-cancellation-interface))
(padding-pairs (ly:grob-property grob 'padding-pairs))
(gna (ly:grob-property grob 'glyph-name-alist))
(alts (ly:grob-property grob 'alteration-alist))
(colors (map (lambda (x) black) alts))
(colors (cons red (cdr colors)))
(fm (ly:grob-default-font grob))
(inter (* 0.5 (ly:staff-symbol-staff-space grob)))
(padding (ly:grob-property grob 'padding 0)))
(helper empty-stencil colors alts cpos is-cancel padding-pairs gna fm inter padding -1000
"")))
\relative c' {
\override Staff . KeySignature #'stencil = #colorator
\key f \major fis1 \key des \major des1
}
Il suffit de changer la liste "colors" pour que ça convienne aux couleurs que tu veux utiliser. Si tu as besoin d'un coup de main avec Scheme, dis moi (nous) et je peux te donner quelques conseils.
Cordialement,
~Mike