myfunction = #(define-music-function (parser location event-chord numx) (ly:music? number?) #{ \once \override TextScript #'outside-staff-priority = ##f \once \override TextScript #'X-offset = $numx \once \override TextScript #'Y-offset = #(lambda (grob) (let* ((paper-col (ly:grob-parent grob X)) (elts (ly:grob-object paper-col 'elements)) (rhythmic-head grob)) (for-each (lambda (idx) (let ((elt (ly:grob-array-ref elts idx))) (if (grob::has-interface elt 'rhythmic-grob-interface) (set! rhythmic-head elt)))) (reverse (iota (ly:grob-array-length elts)))) (- (/ (ly:grob-staff-position rhythmic-head) 2) ; well, don't know why ; we have to divide by 2? (interval-center (ly:grob-robust-relative-extent grob grob Y))))) $event-chord #}) \score{ \relative c'{ \myfunction c1-\markup{\sans "<-"} #3 \myfunction g'1-\markup{\sans "<-"} #3 \myfunction c1-\markup{\sans "<-"} #3 } }