Am Fr., 2. Dez. 2022 um 11:46 Uhr schrieb Jean Abou Samra <j...@abou-samra.fr>: > > Le 02/12/2022 à 05:16, Abraham Lee a écrit : > > Code works perfectly, Jean, though what it's doing is a bit of a > > mystery. You've been very kind to provide a solution and I don't want > > to take more of your time on the subject, but is there some > > documentation somewhere that explains that commands you've used so I > > can figure out what's going on for myself? Or if the explanation is > > simple, I'd greatly appreciate it so I can stop using > > before/after-line-breaking since I used to use it a lot (as Thomas has > > hinted at). > > > Try reading this, and feel free to ask again if this doesn't clarify it > for you: > > https://extending-lilypond.readthedocs.io/en/latest/backend.html#properties-and-callbacks > > Best, > Jean > Hi Jean,
we have a very short section about grob-transformer in the Extending Manual. Probably too concise. Your text is more clear. Many thanks again for the entire text! I know you like pattern matching, though imho it makes things not always easier for users. Even for me - I don't understand that (x x)-line: \override Arpeggio.positions = #(grob-transformer 'positions (lambda (grob original) (match original ((a . b) (cons (- a 5.0) (+ b 5.0))) (x x)))) ;; <== I'd likely code it like: \override Arpeggio.positions = #(grob-transformer 'positions (lambda (grob original) (cons (- (car original) 5.0) (+ (cdr original) 5.0)))) Best, Harm