Also to avoid the 360° misscount : %circled-pattern #(define-markup-command (circled-pattern layout props radius angle num arg) (number? number? number? string?) (let* ((rep (if (eq? angle 360)(abs num)(- (abs num) 1))) (the-form (if (eq? num 0) (markup "") (if (eq? (abs num) 1) (markup arg) (markup (#:combine (#:null) (fold (lambda (i prev) (markup (#:combine (#:rotate (* i (/ angle rep)) (#:concat (#:null #:hspace radius arg))) prev))) (markup (#:null)) (iota (1+ rep))))))))) (interpret-markup layout props the-form)))
testOne = \markup "." testTwo = \markup \with-color #red "!" \markup\circled-pattern #5 #180 #15 \testOne \markup\circled-pattern #5 #-180 #15 \testOne \markup\circled-pattern #5 #360 #4 \testOne %\markup\circled-pattern #5 #360 #0 \testTwo Cheers, Pierre 2018-07-07 15:54 GMT+02:00 Pierre Perol-Schneider < pierre.schneider.pa...@gmail.com>: > Well, not sure actually, since it's problematic with 0, 1 , -1. > So how about : > > %circled-pattern > #(define-markup-command > (circled-pattern layout props radius angle num arg) > (number? number? number? string?) > (let* ((rep (- (abs num) 1)) > (the-form > (if (eq? num 0) (markup "") > (if (eq? (abs num) 1) (markup arg) > (markup > (#:combine > (#:null) > (fold > (lambda (i prev) > (markup > (#:combine > (#:rotate > (* i (/ angle rep)) > (#:concat (#:null #:hspace radius arg))) > prev))) > (markup (#:null)) > (iota (1+ rep))))))))) > (interpret-markup layout props the-form))) > > testOne = \markup "." > testTwo = \markup { \rotate #45 "!" } > > \markup\circled-pattern #5 #180 #15 \testOne > \markup\circled-pattern #5 #-180 #15 \testOne > \markup\circled-pattern #5 #180 #2 \testOne > \markup\circled-pattern #5 #180 #1 \testOne > \markup\circled-pattern #5 #180 #0 \testOne > > %\markup\circled-pattern #5 #360 #5 \testTwo > > Plus : any idea why 'testTwo does not work ? > > Cheers, > Pierre > > 2018-07-07 15:35 GMT+02:00 Orm Finnendahl <orm.finnendahl@selma.hfmdk- > frankfurt.de>: > >> Hi List, >> >> for conciseness the example should be reduced even more (if someone >> wants to post it to LSR I'd recommend this version). >> >> %circled-pattern >> #(define-markup-command >> (circled-pattern layout props radius angle num arg) >> (number? number? number? string?) >> (interpret-markup layout props >> (fold >> (lambda (i prev) >> (markup >> (#:combine >> (#:rotate >> (* i (/ angle num)) >> (#:concat (#:null #:hspace radius arg))) >> prev))) >> (markup (#:null)) >> (iota (1+ num)))))) >> >> % Test (markup a 180° circled pattern with radius 5 and 17 dots) : >> \markup\circled-pattern #5 #180 #16 #"." >> >> % an upside down pattern can be achieved with a negative angle: >> >> \markup\circled-pattern #5 #-180 #16 #"." >> > >
_______________________________________________ lilypond-user mailing list lilypond-user@gnu.org https://lists.gnu.org/mailman/listinfo/lilypond-user