Thank you again Stefano. This helps again and you will see how good it will fit in the library I'm coding. However, I can't make it work for a TextScript (either before the notevent or before the markup token). I tried also map-some-music(), but it doesn't fix it.
\version "2.19.83" token = #(let* ((ctr 0) (ctr! (lambda () (set! ctr (1+ ctr)) ctr))) (define-music-function (mus) (ly:music?) (let* ((id (format #f "foobar_~a" (ctr!))) (type (ly:music-property mus 'name)) (mexp (case type ((BeamEvent NoteEvent TextScriptEvent ) #{ \tweak TextScript.after-line-breaking #(lambda (grob) (let* ((outprop (ly:grob-property grob 'direction)) (prop (ly:grob-property grob 'direction)) (outprop (append outprop `((beam-thickness . ,prop))))) (display (format #f "\n****\n~a\n****\n" prop)) (ly:grob-set-property! grob 'output-attributes outprop))) \tweak TextScript.output-attributes.id #id #mus #} ) (else #{ \tweak output-attributes.id #id #mus #} )))) mexp))) \relative { c'4 d8-\token [ e ] \token f^\markup {'iii'} g c,4 } On Sun, Dec 22, 2019 at 4:21 PM Stefano Troncaro <stefanotronc...@gmail.com> wrote: > Hi Paolo, > > The main problem here is that \tweak can only modify the object that is > next to it, so you can tweak a NoteHead to modify an automatic beam, but to > modify a beam that is created manually because of a [ in the input you need > to place the tweak before the [. See: > > %%%%%%%%%%%%%%%%% > \version "2.19.83" > > \relative { > c'8[ \tweak Beam.color #red d] %doesn't work > \tweak Beam.color #red e f %works > \tweak Beam.color #red g[ a] %doesn't work > b -\tweak Beam.color #red [ c ] %works > } > %%%%%%%%%%%%%%%%% > > That said, I modified the function you sent so that it also considerds > NoteEvents and modifies the automatically created beams with the desired > properties: > > %%%%%%%%%%%%%%%%% > \version "2.19.83" > > token = #(let* ((ctr 0) > (ctr! (lambda () > (set! ctr (1+ ctr)) > ctr))) > (define-music-function (mus) (ly:music?) > (let* ((id (format #f "foobar_~a" (ctr!))) > (type (ly:music-property mus 'name)) > (mexp (case type > ((BeamEvent NoteEvent) > #{ \tweak Beam.after-line-breaking #(lambda (grob) > (let* ((outprop (ly:grob-property grob > 'output-attributes)) > (beam-thickness (ly:grob-property grob > 'beam-thickness)) > (outprop (append outprop > `((beam-thickness . ,beam-thickness))))) > ;(display (format #f "\n****\n~a\n****\n" > beam-thickness)) > (ly:grob-set-property! grob > 'output-attributes outprop))) > \tweak Beam.output-attributes.id #id #mus #} ) > (else #{ \tweak output-attributes.id #id #mus #} )))) > mexp))) > > \relative { c'4 d8-\token [ e ] \token f g c,4 } > %%%%%%%%%%%%%%%%% > > The code could be cleaner I think, I'll try to improve it if I get some > free time. Meanwhile I hope this helps > > El dom., 22 dic. 2019 a las 7:58, Paolo Prete (<paolopr...@gmail.com>) > escribió: > >> Hello all. >> >> the following function (thanks to Stefano!) inserts the beam-thickness >> property of a Beam in the list of output-attributes of the corresponding >> SVG item. It does its job if I place the function soon before a beam symbol >> "[". But it doesn't work (no errors, but the output-attributes property is >> not set) if place it before a notename. How can I fix that? Should I >> map-some-music() and iterate until I find the BeamEvent? I tried that too, >> but without success. >> Thanks. >> >> token = #(let* ((ctr 0) >> (ctr! (lambda () >> (set! ctr (1+ ctr)) >> ctr))) >> (define-music-function (mus) (ly:music?) >> (let* ((id (format #f "foobar_~a" (ctr!))) >> (mexp #{ \tweak output-attributes.id #id #mus #} ) >> (type (ly:music-property mus 'name)) >> (mexp (case type >> ('BeamEvent >> #{ \tweak Beam.after-line-breaking #(lambda (grob) >> (let* ((outprop (ly:grob-property grob >> 'output-attributes)) >> (beam-thickness (ly:grob-property grob >> 'beam-thickness)) >> (outprop (append outprop >> `((beam-thickness . ,beam-thickness))))) >> (begin >> (ly:grob-set-property! grob >> 'output-attributes outprop) >> (display "\n****\n") >> (display beam-thickness) >> (display "\n****\n")))) >> #mexp #} ) >> (else mexp)))) >> mexp))) >> >> \relative { c'4 d8-\token [ e ] \token f[ g ] c,4 } >> >