2017-08-30 22:24 GMT+02:00 Thomas Morley <thomasmorle...@gmail.com>: > 2017-08-30 12:01 GMT+02:00 Werner LEMBERG <w...@gnu.org>: >> >> Folks, >> >> >> is it possible to make lilypond ignore multiple occurrences of \key or >> \time if they don't actually change the current key or time? >> >> Having >> >> \relative c' { >> \key d \major \time 2/2 d1 | >> d1 | >> \key d \major \time 2/2 d1 | >> d1 | >> } >> >> I get the attached output. However, I think it would be better that >> the redundant \time and \key signatures get ignored by default – >> similar to notes, where `des4 des4' doesn't produce a second flat sign >> for the second note... >> >> Note that this is not a constructed example; I get such lilypond code >> while converting Cubase XML output with musicxml2ly. Not sure whether >> this is a bug in Cubase, or an allowed feature of MusicXML and thus a >> bug in musicxml2ly... >> >> >> Werner > > Hi Werner, > > after David Nalesnik's suppressRedundantTimeSig-engraver, c/p unchanged, > http://www.mail-archive.com/lilypond-user@gnu.org/msg72628.html > I coded a suppressRedundantKeySig-engraver. > > David coded it for 2.14.2, thus the old syntax. Too lazy to update it > to use make-engraver ... > Needs further testing ofcourse. > > \version "2.19.64" > > suppressRedundantTimeSig = > #(lambda (ctx) > (let ((time-sig '())) > > `((acknowledgers > (time-signature-interface > . ,(lambda (engraver grob source-engraver) > (set! time-sig (cons grob time-sig))))) > > (finalize > . ,(lambda (trans) > (reduce > (lambda (elem prev) > (if (equal? (ly:grob-property elem 'fraction) > (ly:grob-property prev 'fraction)) > (begin > (ly:grob-suicide! elem) > prev) > elem)) > '() > (reverse time-sig)) > (set! time-sig '())))))) > > suppressRedundantKeySig = > #(lambda (ctx) > (let ((key-sig '())) > `((acknowledgers > (key-signature-interface > . ,(lambda (engraver grob source-engraver) > (let* ((cause (ly:grob-property grob 'cause))) > (if (ly:stream-event? cause)
%% instead of the line above use the following condition %% to prevent _needed_ KeyCancellation from being deleted (if (and (ly:stream-event? cause) (eq? (grob::name grob) 'KeySignature)) > (set! key-sig > (cons > (list > grob > (cons (ly:prob-property cause 'tonic) > (ly:prob-property cause 'pitch-alist))) > key-sig))))))) > (finalize > . ,(lambda (trans) > (reduce > (lambda (elem prev) > (if (equal? (cdr elem) (cdr prev)) > (begin > (ly:grob-suicide! (car elem)) > prev) > elem)) > '() > (reverse key-sig)) > (set! key-sig '())))))) > > music = { > \time 3/4 > R2. > \time 4/4 > R1 > \time 4/4 > R1 > \time 3/4 > R2. > } > > \score { > \new Staff \music > > \layout { > \context { > \Score > \consists #suppressRedundantTimeSig > } > } > } > > \score { > \relative c' { > \key d \major > \time 2/2 d1 | > d1 | > \key d \major \time 2/2 d1 | > d1 | > \key d \minor \time 2/2 d1 | > \key d \minor \time 3/4 d2. | > } > \layout { > \context { > \Score > \consists #suppressRedundantTimeSig > \consists #suppressRedundantKeySig > } > } > } > > > HTH, > Harm _______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user