2010/12/13 Jan-Peter Voigt
<address@hidden>
Hello list,
I wrote a script to align dynamics centered on the corresponding note:
--snip--
\version "2.12.3"
% calculate x-alignment based on attribute text + dynamic text
#(define-markup-command (center-dyn 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
(* (-
(/ (+ atr-x (/ dyn-x 2)) (+ atr-x dyn-x) )
0.5) 2)
)
)
(interpret-markup layout props (markup #:halign x-align #:concat (#:normal-text #:italic text #:dynamic dyn)))
))
% define some dynamics
pocof = #(make-dynamic-script (markup #:center-dyn "poco" "f"))
menof = #(make-dynamic-script (markup #:center-dyn "meno" "f"))
subp = #(make-dynamic-script (markup #:center-dyn "subito" "p"))
% activate X-offset, so that halign works
dynx = #(define-music-function (parser location musik)(ly:music?)
#{
\override DynamicText #'X-offset = #0 $musik \revert DynamicText #'X-offset
#})
%%%%% example %%%%%
<<
\new Staff <<
\relative c'' {
d \dynx c\pocof d e | d\ff d cis eis ~ | \dynx eis1\subp | r4 \dynx b\menof c\f
}
>>
>>
--snip--
This script first calculates the widthes of the "attribute"-text (wa) and the dynamic text (wd), so that I can calculate the right \halign value:
halign = ((wa + (wd / 2)) / (wa + wd) - 0.5) * 2
Then I use a markup with \halign. This works quite well as long DynamicText #'X-offset is set! If that is set all other dynamics are aligned badly.
So I wrote a little function, that sets and unsets (reverts) that value to let the halign work.
My question is:
Is it possible to set that value inside the make-dynamic-script or align it some other way, so that I can simply use my defined \pocof (etc.) without switching X-offset on and off?
Regards,
Jan-Peter
I can not answer your question, but it is probably better placed on lilypond-devel (cc-ing).
Marek