Subject: colorer l'armure

From: Schermann Colette <[email-masked]>
Date: Tue, 4 Oct 2011 13:40:17 +0100 (BST)

Bonjour à tous!

Est-ce que quelqu'un pourrait me dire comment faire pour avoir les dieses à l'armure chacun d'une couleur différente?

Je peux les avoir tous de la même couleur avec:

\override Staff.KeySignature #'color = # (x11-color 'red)
\key d \major

Mais je ne sais pas comment les mettre en couleur chacun séparément

Peut-être en utilisant:

\set Staff.keySignature = #`((3 . ,SHARP) (0 . ,SHARP))

mais comment définir la couleur de chaque diese?

Merci d'avance

Colette

---

From: "[email-masked]" <[email-masked]>
Date: Tue, 4 Oct 2011 15:35:04 +0200

> mais comment définir la couleur de chaque diese?

Bonjour Colette,

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