\version "2.19.36" #(define stemlet-length-to-rest ;; Always extend stemlets over beamed rests, minimum is 0.5 (lambda (grob) (let* ((stem (ly:grob-object grob 'stem)) (beam (if stem (ly:grob-object stem 'beam) #f))) (if (and (not (null? beam)) (not (null? stem))) (let* ((sys (ly:grob-system grob)) (stems (ly:grob-array->list (ly:grob-object beam 'stems))) (stem-coord (- (ly:grob-relative-coordinate (car (member stem stems)) sys X) (ly:grob-relative-coordinate (car stems) sys X))) (beam-pos (ly:grob-property beam 'positions)) (beam-y-length (- (car beam-pos) (cdr beam-pos))) (beam-x-length (let ((x-pos (ly:grob-property beam 'X-positions))) (- (car x-pos) (cdr x-pos)))) (stem-add-for-beam-slant (if (or (inf? stem-coord) (zero? stem-coord)) 0 (* (/ beam-y-length beam-x-length) stem-coord))) (beam-dir (ly:grob-property beam 'direction)) (staff-space (ly:staff-symbol-staff-space grob)) (rest-y-ext (ly:grob-extent grob (ly:grob-parent grob Y) Y))) (ly:grob-set-property! stem 'stemlet-length (max 0.5 (+ (* beam-dir stem-add-for-beam-slant) (- (if (= beam-dir DOWN) (- (car rest-y-ext) (car beam-pos)) (- (car beam-pos) (cdr rest-y-ext))) (/ staff-space 2)))))))))) stemlets-test = \override Rest.after-line-breaking = #stemlet-length-to-rest m = { r8[ d''\rest r c''8] c''2 \bar "||" } mus = { \time 2/4 \voiceOne \m \once \override Beam.positions = #'(5 . 7) \m \once \override Beam.positions = #'(7 . 5) \m \voiceTwo \m \once \override Beam.positions = #'(-5 . -7) \m \once \override Beam.positions = #'(-7 . -5) \m } \score { \new StaffGroup << \new Staff \mus \new Staff \mus >> \layout { \stemlets-test } }