\version "2.19.53" %This method aligns correctly but requires writing different tweaks for each dynamic type dynSingleText = #(define-event-function (dyn text) (string? markup?) #{ \tweak X-offset #-0.09 #(make-dynamic-script (markup #:dynamic dyn #:normal-text #:italic (string-append " " text))) #} ) pdolce = \dynSingleText "p" "dolce" pdolcee = \dynSingleText "p" "dolceeeeeeeeeeeeeeeeeeeee" \score { << \new Staff { \relative c' { c\p d e f } } \new Staff { \relative c' { c\pdolce d e f } } \new Staff { \relative c' { c\pdolcee d e f } } \new Staff \with { \magnifyStaff #5/7 } { \relative c' { c\pdolce d e f } } >> } %This method calculates the center of the dynamic, but the results are off #(define-markup-command (center-dyn-text layout props dyn atr-text) (string? markup?) (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 (+ atr-x dyn-x)) 1))) (interpret-markup layout props (markup #:halign x-align #:concat (#:dynamic dyn #:normal-text #:italic text))))) #(define (make-dynamic-atr-script dyn atr) (let* ((dynamic (make-dynamic-script (markup #:center-dyn-text dyn atr)))) #{ \tweak X-offset 0 $dynamic #})) pdolce = #(make-dynamic-atr-script "p" "dolce") pdolcee = #(make-dynamic-atr-script "p" "dolceeeeeeeeeeeeeeeeeeeee") \score { << \new Staff { \relative c' { c\p d e f } } \new Staff { \relative c' { c\pdolce d e f } } \new Staff { \relative c' { c\pdolcee d e f } } \new Staff \with { \magnifyStaff #5/7 } { \relative c' { c\pdolce d e f } } >> }