\version "2.19.35" %%%%%%%%%% The relevant parts of my modified version of snippet 739 %%%%%%%%%% % calculate x-alignment based on attribute text + dynamic text % this has to be a markup-command to get stencil-extent based on (interpret-markup layout props ...) #(define-markup-command (center-dynatr layout props atr-text dyn)(markup? string?) "x-align on center of dynamic" (let* ( (text (string-append " " atr-text )) (atr-stencil (interpret-markup layout props (markup #:normal-text #:italic text))) (dyn-stencil (interpret-markup layout props (markup #:dynamic dyn))) (atr-x-ext (ly:stencil-extent atr-stencil X)) (dyn-x-ext (ly:stencil-extent dyn-stencil X)) (atr-x (- (cdr atr-x-ext)(car atr-x-ext))) (dyn-x (- (cdr dyn-x-ext)(car dyn-x-ext))) (x-align (* (- (/ (/ dyn-x 2) (+ atr-x dyn-x) ) 0.5) 2) ) ) (interpret-markup layout props (markup #:halign x-align #:concat (#:dynamic dyn #:normal-text #:italic text))) )) % define a 'new' attributed dynamic script #(define (make-dynamic-atr-script dyn atr) (let ((dynamic (make-dynamic-script (markup #:center-dynatr atr dyn)))) (ly:music-set-property! dynamic 'tweaks (acons 'X-offset 0 (ly:music-property dynamic 'tweaks))) dynamic)) % define some attributed dynamics mpdolce = #(make-dynamic-atr-script "mp" "dolce") %%%%%%%%%% Modified version of snippet 739 (ends) %%%%%%%%%% music = \new Voice { \relative { \clef bass \key es \major r2 r8 f8(\mpdolce e f) | % \override DynamicLineSpanner.staff-padding = #2.5 r2 r8 bes,8(\mpdolce a bes) | } } \score { \new StaffGroup \new Staff { \music } }