\version "2.18.2" beam-stem-height = #(define-music-function (parser location start-in length-in)(number? number?) "Takes a list containing values for: - the stem-start in Y-direction - the stem-length Values can be positive or negative, depending on direction but may produce a warning if only one value is negative: 'warning: weird stem size, check for narrow beams' " #{ \override Stem.direction = #(if (positive? length-in) UP DOWN) \override Stem.stem-begin-position = #start-in \override Stem.length = #(abs length-in) \override Beam.after-line-breaking = #(lambda (grob) (let ((stems (ly:grob-array->list (ly:grob-object grob 'stems)))) (for-each (lambda (stem) (ly:stem::calc-stem-begin-position stem) (ly:grob-set-property! stem 'length (abs length-in)) (ly:grob-set-property! stem 'stem-begin-position start-in)) stems))) \override Beam.before-line-breaking = #(lambda (grob) (let* ((thickness (ly:grob-property grob 'beam-thickness)) (position (if (positive? length-in) (/ (+ start-in (- (abs length-in) thickness)) 2) (/ (- start-in (- (abs length-in) thickness)) 2)))) (ly:grob-set-property! grob 'positions (cons position position)))) #}) halve-half-stems = \override Stem.before-line-breaking = #(lambda (grob) (let ((new-length (/ (ly:grob-property grob 'length) 2))) (if (= 1 (ly:grob-property grob 'duration-log)) (if (= DOWN (ly:grob-property grob 'direction)) (and (ly:grob-set-property! grob 'stem-begin-position (- (ly:grob-property grob 'stem-begin-position) new-length)) (ly:grob-set-property! grob 'length new-length)) (ly:grob-set-property! grob 'length new-length))))) GCEA = \markup { \with-dimensions #'(0 . 0.8) #'(0 . 1.0) \postscript #"/Arial-Bold findfont 1.5 scalefont setfont -0.3 2.2 moveto (A) show -0.3 0.7 moveto (E) show -0.3 -0.8 moveto (C) show -0.3 -2.3 moveto (G) show stroke" } addStartBar = \markup { \hspace #-.8 \lower #2.2 % 1.95 \override #'(thickness . 1.5) \draw-line #'(0 . 4.4) \hspace #.2 \musicglyph #"clefs.tab" } addStartBarNoClef = \markup { \hspace #-0.8 \lower #2.2 % 1.95 \override #'(thickness . 1.5) \draw-line #'(0 . 4.4) \hspace #0.0 \draw-line #'(0 . 0) } start-bar-clef = { \override TabStaff.Clef.stencil = #(lambda (grob) (grob-interpret-markup grob addStartBar)) } clef-off = { %if you fancy tabstaves that are open on the left, switch these comments %\override TabStaff.Clef #'stencil = ##f \override TabStaff.Clef.stencil = #(lambda (grob) (grob-interpret-markup grob addStartBarNoClef)) }