On Nov 18, 2012, at 7:26 AM, Thomas Morley <thomasmorle...@googlemail.com> wrote:
> 2012/11/18 Paul Morris <p...@paulwmorris.com>: > [...] >> I do have some small changes I made to my local copy that I'd like to add. >> They are for the accidental signs in the text -- better spacing and putting >> them into a LilyPond variable for less repetition. I won't be able to get >> to this until Wednesday at the earliest. > > No problem. I'll wait. Hi Harm, I incorporated your 2.14 "downgrades" into my most current version, and uploaded it to the LSR: http://lsr.dsi.unimi.it/LSR/Item?u=1&id=856 I kept the commented-out 2.16 version in the snippet, for easy future migration. But I am fine with removing it if that's preferred for the LSR. The most current code for use in 2.16 is pasted below. Thanks again, -Paul % Begin snippet \version "2.16.0" % tonic-semi: semitone of the tonic note, 0-11, 0=C, 2=D, etc % psn: vertical staff position of the last accidental sign in key signature % accsign: the accidental sign type, 1/2=sharp, -1/2=flat % (These 3 things let us identify the key and if it is major or minor.) % txt-size: size of key name text % padd: padding between key signature and key name % C Major, F Major, A Minor, and D Minor all get extra padding % so the name is above the staff % This snippet does not work with modal keys (dorian, lydian, etc.) % Key cancellations usually get no name above them, % unless they have the same tonic note, like G major to G minor. #(define Custom_key_signature_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)) (acclist (ly:grob-property grob 'alteration-alist)) (accsign (if (null? acclist) 0 (cdr (list-ref acclist 0)))) (psn (if (null? acclist) 0 (car (list-ref acclist 0)))) (key-name (markup #:null)) (txt-size .7) (padd .5) (sharptxt (markup #:translate (cons -0.3 0.8) #:magnify .9 #:sharp)) (flattxt (markup #:translate (cons -0.2 0.4) #:magnify .9 #:flat)) ) (cond ((= accsign 0) (cond ((= tonic-semi 0) (set! key-name (markup "C Major" )) (set! padd 3.2)) ((= tonic-semi 9) (set! key-name (markup "A Minor" )) (set! padd 3.2)) (else (set! key-name (markup #:null))) )) ((= accsign 1/2) (cond ((= psn 3) (cond ((= tonic-semi 7) (set! key-name (markup "G Major" ))) ((= tonic-semi 4) (set! key-name (markup "E Minor" ))) (else (set! key-name (markup #:null))) )) ((= psn 0) (cond ((= tonic-semi 2) (set! key-name (markup "D Major" ))) ((= tonic-semi 11) (set! key-name (markup "B Minor" ))) (else (set! key-name (markup #:null))) )) ((= psn 4) (cond ((= tonic-semi 9) (set! key-name (markup "A Major" ))) ((= tonic-semi 6) (set! key-name (markup "F" sharptxt "Minor" ))) (else (set! key-name (markup #:null))) )) ((= psn 1) (cond ((= tonic-semi 4) (set! key-name (markup "E Major" ))) ((= tonic-semi 1) (set! key-name (markup "C" sharptxt "Minor" ))) (else (set! key-name (markup #:null))) )) ((= psn 5) (cond ((= tonic-semi 11) (set! key-name (markup "B Major" ))) ((= tonic-semi 8) (set! key-name (markup "G" sharptxt "Minor" ))) (else (set! key-name (markup #:null))) )) ((= psn 2) (cond ((= tonic-semi 6) (set! key-name (markup "F" sharptxt "Major" ))) ((= tonic-semi 3) (set! key-name (markup "D" sharptxt "Minor" ))) (else (set! key-name (markup #:null))) )) ((= psn 6) (cond ((= tonic-semi 1) (set! key-name (markup "C" sharptxt "Major" ))) ((= tonic-semi 10) (set! key-name (markup "A" sharptxt "Minor" ))) (else (set! key-name (markup #:null))) )) ) ) ((= accsign -1/2) (cond ((= psn 6) (cond ((= tonic-semi 5) (set! key-name (markup "F Major" )) (set! padd 1.4)) ((= tonic-semi 2) (set! key-name (markup "D Minor" )) (set! padd 1.7)) (else (set! key-name (markup #:null))) )) ((= psn 2) (cond ((= tonic-semi 10) (set! key-name (markup "B" flattxt "Major" ))) ((= tonic-semi 7) (set! key-name (markup "G Minor" ))) (else (set! key-name (markup #:null))) )) ((= psn 5) (cond ((= tonic-semi 3) (set! key-name (markup "E" flattxt "Major" ))) ((= tonic-semi 0) (set! key-name (markup "C Minor" ))) (else (set! key-name (markup #:null))) )) ((= psn 1) (cond ((= tonic-semi 8) (set! key-name (markup "A" flattxt "Major" ))) ((= tonic-semi 5) (set! key-name (markup "F Minor" ))) (else (set! key-name (markup #:null))) )) ((= psn 4) (cond ((= tonic-semi 1) (set! key-name (markup "D" flattxt "Major" ))) ((= tonic-semi 10) (set! key-name (markup "B" flattxt "Minor" ))) (else (set! key-name (markup #:null))) )) ((= psn 0) (cond ((= tonic-semi 6) (set! key-name (markup "G" flattxt "Major" ))) ((= tonic-semi 3) (set! key-name (markup "E" flattxt "Minor" ))) (else (set! key-name (markup #:null))) )) ((= psn 3) (cond ((= tonic-semi 11) (set! key-name (markup "C" flattxt "Major" ))) ((= tonic-semi 8) (set! key-name (markup "A" flattxt "Minor" ))) (else (set! key-name (markup #:null))) )) ) ) ) (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) txt-size txt-size) padd )) ))))) \layout { \context { \Staff \consists \Custom_key_signature_engraver } } \new Staff \relative c { \clef bass \key c \major c1 \key a \minor a1 \key g \major g1 \key e \minor e'1 \key d \major d1 \key b \minor b1 \key a \major a1 \key fis \minor fis'1 \key e \major e1 \key cis \minor cis1 \key b \major b1 \key gis \minor gis1 \key fis \major fis'1 \key dis \minor dis1 \key cis \major cis1 \key ais \minor ais1 \key f \major f'1 \key d \minor d1 \key bes \major bes1 \key g \minor g'1 \key ees \major ees1 \key c \minor c1 \key aes \major aes1 \key f \minor f'1 \key des \major des1 \key bes \minor bes1 \key ges \major ges'1 \key ees \minor ees1 \key ces \major ces1 \key aes \minor aes1 } _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user