Here is an improved version. It works the same as the last, but with much more streamlined and concise code. -Paul
\version "2.16.0" #(define Custom_key_sig_engraver (make-engraver (acknowledgers ((key-signature-interface engraver grob source-engraver) (let* ( (context (ly:translator-context engraver)) (tonic-pitch (ly:context-property context 'tonic)) (tonic-semi (modulo (ly:pitch-semitones tonic-pitch) 12)) ;; semitone of tonic note, 0-11 (acclist (ly:grob-property grob 'alteration-alist)) (accsign (if (null? acclist) 0 (cdr (list-ref acclist 0)))) ;; accidental sign type, 1/2=sharp, -1/2=flat (psn (if (null? acclist) 0 (car (list-ref acclist 0)))) ;; vertical position of last accidental sign (key-name #{ \markup {} #}) ) (cond ((= accsign 0) (if (= tonic-semi 0) (set! key-name #{ \markup \raise #3.4 {C Major} #}) (set! key-name #{ \markup \raise #3.4 {A Minor} #}) )) ((= accsign 1/2) ;; SHARP KEYS (cond ((= psn 3) (if (= tonic-semi 7) (set! key-name #{ \markup {G Major} #}) (set! key-name #{ \markup {E Minor} #}) )) ((= psn 0) (if (= tonic-semi 2) (set! key-name #{ \markup {D Major} #}) (set! key-name #{ \markup {B Minor} #}) )) ((= psn 4) (if (= tonic-semi 9) (set! key-name #{ \markup {A Major} #}) (set! key-name #{ \markup {F\raise #.6 {\sharp} Minor} #}) )) ((= psn 1) (if (= tonic-semi 4) (set! key-name #{ \markup {E Major} #}) (set! key-name #{ \markup {C\raise #.6 {\sharp} Minor} #}) )) ((= psn 5) (if (= tonic-semi 11) (set! key-name #{ \markup {B Major} #}) (set! key-name #{ \markup {G\raise #.6 {\sharp} Minor} #}) )) ((= psn 2) (if (= tonic-semi 6) (set! key-name #{ \markup {F\raise #.6 {\sharp} Major} #}) (set! key-name #{ \markup {D\raise #.6 {\sharp} Minor} #}) )) ((= psn 6) (if (= tonic-semi 1) (set! key-name #{ \markup {C\raise #.6 {\sharp} Major} #}) (set! key-name #{ \markup {A\raise #.6 {\sharp} Minor} #}) )) ) ) ((= accsign -1/2) ;; FLAT KEYS (cond ((= psn 6) (if (= tonic-semi 5) (set! key-name #{ \markup {F Major} #}) (set! key-name #{ \markup {D Minor} #}) )) ((= psn 2) (if (= tonic-semi 10) (set! key-name #{ \markup {B\raise #.4 {\flat} Major} #}) (set! key-name #{ \markup {G Minor} #}) )) ((= psn 5) (if (= tonic-semi 3) (set! key-name #{ \markup {E\raise #.4 {\flat} Major} #}) (set! key-name #{ \markup {C Minor} #}) )) ((= psn 1) (if (= tonic-semi 8) (set! key-name #{ \markup {A\raise #.4 {\flat} Major} #}) (set! key-name #{ \markup {F Minor} #}) )) ((= psn 4) (if (= tonic-semi 1) (set! key-name #{ \markup {D\raise #.4 {\flat} Major} #}) (set! key-name #{ \markup {B\raise #.4 {\flat} Minor} #}) )) ((= psn 0) (if (= tonic-semi 6) (set! key-name #{ \markup {G\raise #.4 {\flat} Major} #}) (set! key-name #{ \markup {E\raise #.4 {\flat} Minor} #}) )) ((= psn 3) (if (= tonic-semi 11) (set! key-name #{ \markup {C\raise #.4 {\flat} Major} #}) (set! key-name #{ \markup {A\raise #.4 {\flat} Minor} #}) )) ) ) ) (ly:grob-set-property! grob 'stencil (ly:stencil-combine-at-edge (ly:key-signature-interface::print grob) 1 1 (ly:stencil-scale (grob-interpret-markup grob key-name) .7 .7) ;; RESIZE TEXT .5 )) ;; PADDING ))))) \layout { \context { \Staff \consists \Custom_key_sig_engraver } } \new Staff { \key c \major c'1 \key a \minor a'1 \key g \major g'1 \key e \minor e'1 \key d \major d'1 \key b \minor b'1 \key a \major a'1 \key fis \minor fis'1 \key e \major e'1 \key cis \minor cis'1 \key b \major b'1 \key gis \minor gis'1 \key fis \major fis'1 \key dis \minor dis'1 \key cis \major cis'1 \key ais \minor ais'1 \key f \major f'1 \key d \minor d'1 \key bes \major bes'1 \key g \minor g'1 \key ees \major ees'1 \key c \minor c'1 \key aes \major aes'1 \key f \minor f'1 \key des \major des'1 \key bes \minor bes'1 \key ges \major ges'1 \key ees \minor ees'1 \key ces \major ces'1 \key aes \minor aes'1 } _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user