% % Thanks to Alexander Kobel for http://lsr.dsi.unimi.it/LSR/Item?id=651 % % i want breve MMRs appear as whole ones always: #(define mmr-breve-as-whole #t) % i've never seen MMRs on the middle line, % so, put them on fourth if 'staff-position=0 : #(define mmr-escape-from-zero #t) % this will return markup for MMRNubmer's 'text property: #(define (normalize-mmrs-callback grob) (let* ((mmr (ly:grob-parent grob Y)) (evt (ly:grob-property grob 'cause)) (mus (ly:event-property evt 'music-cause)) (len (ly:music-duration-length mus)) (pos (ly:grob-property mmr 'staff-position)) (restglyph (if (and (equal? len (ly:make-moment 2 1)) (eq? #f mmr-breve-as-whole)) (if (> (abs pos) 4) ;; stub. need to draw a ledger line?.. *DONT_KNOW* "rests.M1" "rests.M1") (if (> (abs pos) 4) ;; this one already has ledger line: "rests.0o" "rests.0")))) ;; "adjust" 'staff-position if needed: (if (and (eq? #t mmr-escape-from-zero) (eq? 0 pos) (or (not (equal? len (ly:make-moment 2 1))) (eq? #t mmr-breve-as-whole))) (ly:grob-set-property! mmr 'staff-position 2)) ;; and return markup: (markup #:line (#:musicglyph restglyph)))) rests = \relative c'' { % \oneVoice \time 3/4 R2. | \time 4/4 R1 | \time 4/2 R1*2 | \time 5/2 \once \override MultiMeasureRest #'staff-position = #6 R1*5/2 | % \voiceTwo \time 6/2 R1*3 | \once \override MultiMeasureRest #'staff-position = #-6 R1*3 | } normalizeMMRs = { % these overrides would go into \layout for \Score context, % if you need these changes globally: \override MultiMeasureRest #'transparent = ##t % place MultiMeasureRestNumber to MultiMeasureRest's position: \override MultiMeasureRestNumber #'Y-offset = #0 \override MultiMeasureRestNumber #'text = #normalize-mmrs-callback } revertMMRs = { \revert MultiMeasureRest #'transparent \revert MultiMeasureRestNumber #'Y-offset \revert MultiMeasureRestNumber #'text } \score { \new Staff { \new Voice { \rests \break \normalizeMMRs \rests \break \revertMMRs \rests } } } %{ \layout { \context { \Score % to make this by default: \override MultiMeasureRest #'transparent = ##t \override MultiMeasureRestNumber #'Y-offset = #0 \override MultiMeasureRestNumber #'text = #normalize-mmrs-callback } } %} \paper { indent = 0 }