Am Fr., 27. Nov. 2020 um 17:21 Uhr schrieb 98123981293 1293812397123 <kylequar...@gmail.com>: > > Dear list, > > On list thread Apr 6 2020, Harm provided a Scheme workaround for half-dashed > tuplet brackets in non-standard time signatures in version 2.20. However, in > using his solution in 2.21.6, if a /tempo marking is included in any staff, I > observe that, for the first staff in the score, the custom stencil will > always engrave as a fully dashed instead of half-dashed tuplet (and no matter > where the /tempo statement occurs, all tuplets in that first staff are > affected). Half-dashed tuplet stencils engrave as expected in all other > staves regardless of any /tempo statements. Can anyone give any insight as to > why? Compare output of the following three examples below. > > (Or is there an easier way to do this now altogether in ver 2.21.6? Harm > hinted at such features possibly becoming available in future releases.) > > Thank you, > Kyle > > \version "2.21.6" > > %%%SCHEME FUNCTIONS:%%% > > #(define (translated-dashed-line->draw-line bool lst) > ;; lst is supposed to be a list retrieved from a stencil-expression, p.e. > ;; (translate-stencil > ;; (17.1123059321317 . 0.0) > ;; (dashed-line > ;; 0.16 <- thick > ;; 0.409629549559636 <- on > ;; 0.614444324339455 <- off > ;; -7.57814666685327 <- x-destination > ;; 0.0 <- y-destination > ;; 0.0 <- phase > ;; )) > ;; This procedure will transform it into: > ;; (drawline > ;; thick > ;; x-start > ;; y-start > ;; x-end > ;; y-end) > > (if (and bool > (>= (length lst) 3) > (not (eq? (car lst) 'draw-line))) > (let* ((translate (list-ref lst 1)) > (dashed-line (last lst)) > (thick (list-ref dashed-line 1)) > (x-dest (list-ref dashed-line 4)) > (y-dest (list-ref dashed-line 5))) > (list > 'draw-line > thick > (car translate) > (cdr translate) > (+ x-dest (car translate)) > (+ y-dest (cdr translate)))) > lst)) > > #(define (half-solid-tuplet-bracket bool-pair) > (lambda (grob) > (if (and ;; continue if the TupletBracket is dashed > (eq? (ly:grob-property grob 'style) 'dashed-line) > ;; continue if left or right part should become solid > (or (car bool-pair) (cdr bool-pair)) > ;; don't continue, if TupletBracket is omitted > (not (ly:stencil-empty? (ly:grob-property grob 'stencil))) > ;; don't continue, if the whole TupletBracket should be dashed > (not (and (car bool-pair) (cdr bool-pair)))) > ;; make left or right part solid > (let* ((stil (ly:grob-property grob 'stencil)) > (x-ext (ly:stencil-extent stil X)) > (y-ext (ly:stencil-extent stil Y)) > (stil-expr (ly:stencil-expr stil)) > (translate (list-ref stil-expr 1)) > (combined-stil (last stil-expr)) > (new-stencil-expr > (list > 'translate-stencil > translate > (cons 'combine-stencil > (map > (lambda (i) > (translated-dashed-line->draw-line > (if (odd? i) > (cdr bool-pair) > (car bool-pair)) > (list-ref combined-stil i))) > (iota 4 1 1)))))) > (ly:grob-set-property! grob 'stencil > (ly:make-stencil > new-stencil-expr > x-ext > y-ext)))))) > > halfSolidTupletBracket = > #(define-music-function (pair)(pair?) > #{ > \override TupletBracket.after-line-breaking = > #(half-solid-tuplet-bracket pair) > #}) > > %%%FAILS:%%% > > \score { > << > \new Staff > { > \override TupletBracket.bracket-visibility = ##t > \once \halfSolidTupletBracket #'(#t . #f) > \once \override TupletBracket.style = #'dashed-line > \once \override TupletBracket.edge-height = #'(0.7 . 0) > \tempo 4 = 60 > \time 2/5 > \times 4/5 { c'16 c'8. c'16 c'16 c'8 } | > } > > \new Staff > { > \override TupletBracket.bracket-visibility = ##t > \once \halfSolidTupletBracket #'(#t . #f) > \once \override TupletBracket.style = #'dashed-line > \once \override TupletBracket.edge-height = #'(0.7 . 0) > \tempo 4 = 60 > \time 2/5 > \times 4/5 { c'16 c'8. c'16 c'16 c'8 } | > } > >> > } > > %%% ALSO FAILS:%%% > > \score { > << > \new Staff > { > \override TupletBracket.bracket-visibility = ##t > \once \halfSolidTupletBracket #'(#t . #f) > \once \override TupletBracket.style = #'dashed-line > \once \override TupletBracket.edge-height = #'(0.7 . 0) > \time 2/5 > \times 4/5 { c'16 c'8. c'16 c'16 c'8 } | > } > > \new Staff > { > \override TupletBracket.bracket-visibility = ##t > \once \halfSolidTupletBracket #'(#t . #f) > \once \override TupletBracket.style = #'dashed-line > \once \override TupletBracket.edge-height = #'(0.7 . 0) > \tempo 4 = 60 > \time 2/5 > \times 4/5 { c'16 c'8. c'16 c'16 c'8 } | > } > >> > } > > %%%FUNCTIONAL:%%% > > \score { > << > \new Staff > { > \override TupletBracket.bracket-visibility = ##t > \once \halfSolidTupletBracket #'(#t . #f) > \once \override TupletBracket.style = #'dashed-line > \once \override TupletBracket.edge-height = #'(0.7 . 0) > \time 2/5 > \times 4/5 { c'16 c'8. c'16 c'16 c'8 } | > } > > \new Staff > { > \override TupletBracket.bracket-visibility = ##t > \once \halfSolidTupletBracket #'(#t . #f) > \once \override TupletBracket.style = #'dashed-line > \once \override TupletBracket.edge-height = #'(0.7 . 0) > \time 2/5 > \times 4/5 { c'16 c'8. c'16 c'16 c'8 } | > } > >> > }
Hi, I just filed a bug report http://lilypond.1069038.n5.nabble.com/Wrongly-read-property-with-MetronomeMark-td237659.html For the time being you could use #(define (half-solid-tuplet-bracket bool-pair) (lambda (grob) (let ((style (ly:grob-property grob 'style)) (stil (ly:tuplet-bracket::print grob))) (if (and ;; continue if the TupletBracket is dashed (eq? style 'dashed-line) ;; continue if left or right part should become solid (or (car bool-pair) (cdr bool-pair)) ;; don't continue, if TupletBracket is omitted (not (ly:stencil-empty? stil)) ;; don't continue, if the whole TupletBracket should be dashed (not (and (car bool-pair) (cdr bool-pair)))) ;; make left or right part solid (let* ((x-ext (ly:stencil-extent stil X)) (y-ext (ly:stencil-extent stil Y)) (stil-expr (ly:stencil-expr stil)) (translate (list-ref stil-expr 1)) (combined-stil (last stil-expr)) (new-stencil-expr (list 'translate-stencil translate (cons 'combine-stencil (map (lambda (i) (translated-dashed-line->draw-line (if (odd? i) (cdr bool-pair) (car bool-pair)) (list-ref combined-stil i))) (iota 4 1 1)))))) (ly:make-stencil new-stencil-expr x-ext y-ext)) stil)))) halfSolidTupletBracket = #(define-music-function (pair)(pair?) #{ \override TupletBracket.stencil = #(half-solid-tuplet-bracket pair) #}) HTH, Harm