\version "2.19.15" #(define (calc-beam-right segments) (fold (lambda (elem prev) (if (> (cddr (cadr elem)) prev) (cddr (cadr elem)) prev)) 0 segments)) #(define (myBeamLength extra) (lambda (grob) (let* ((segments (ly:beam::calc-beam-segments grob)) (beam-right-edge (calc-beam-right segments))) (let loop ((segs segments) (result '())) (if (null? segs) result (let* ((vertical (caar segs)) (horizontal (cadar segs)) (right-coord (cddr horizontal))) (if (= right-coord beam-right-edge) (set-cdr! horizontal (cons (cadr horizontal) (+ extra right-coord)))) (loop (cdr segs) (append result (list (list vertical horizontal)))))))))) lengthenBeam = #(define-music-function (parser location extra-X) (number?) #{ \override Beam.beam-segments = #(myBeamLength extra-X) #}) \relative c' { \lengthenBeam 3.5 c8[ d e f g a b c] \once \offset bar-extent #'(0 . 3) Staff.BarLine \stemDown \lengthenBeam 3 c,16[ c c c c c c c c c c c c c c c] \once \offset bar-extent #'(-5 . 0) Staff.BarLine \override Staff.BarLine.bar-extent = #'(-7 . 2) \stemNeutral \lengthenBeam 1.5 c8[ c16 c c32 c c c c16. c32 c8 c c8.. c32] \lengthenBeam 2.5 c8[ d16 e f32 g a b c16. d32 e8 f g8.. a32] \once \offset bar-extent #'(-2 . 0) Staff.BarLine }