Le mercredi 19 avril 2023 à 09:44 -0400, William Rehwinkel via LilyPond user discussion a écrit :
> Dear list, > > I use the following stencil (which is derived the bracketify-stencil > procedure from lilypond) to draw editorial brackets around rests. > > The output looks very nice and more preferable for my use than using > \parenthesize (mainly because it changes in size for quarter note > rests). However, I would like to ask if it is possible to modify the > \override command to have the brackets account for the dots after the > rest? Perhaps a higher level stencil that draws the Rest and dots? Makes me think I should revive my work on adding a `\bracket` command to LilyPond... Anyway, try: ``` \version "2.25.3" #(define (bracketify-rest thick protrusion vpadding hpadding) (grob-transformer 'stencil (lambda (grob stil) (let* ((dot (ly:grob-object grob 'dot #f)) (ext-grobs (ly:grob-list->grob-array (if dot (list dot grob) (list grob)))) (ref (ly:grob-common-refpoint-of-array grob ext-grobs X)) (x-ext (coord-translate (ly:relative-group-extent ext-grobs ref X) (- (ly:grob-relative-coordinate grob ref X)))) (ext (interval-widen (ly:stencil-extent stil Y) hpadding)) (lb (ly:stencil-aligned-to (ly:bracket Y ext thick protrusion) X RIGHT)) (rb (ly:stencil-aligned-to (ly:bracket Y ext thick (- protrusion)) X LEFT))) (ly:stencil-add stil (ly:stencil-translate-axis rb (interval-end x-ext) X) (ly:stencil-translate-axis lb (interval-start x-ext) X)))))) \relative a { \override Rest.stencil = #(bracketify-rest 0.15 0.5 0.2 0.6) r1 r2. r4 a1\rest } ``` You can find the documentation for the functions used in the Internals Reference. I've also cleaned it up a bit to use `grob-transformer` (cf. [here](https://extending-lilypond.gitlab.io/en/extending/backend.html#using-grob-transformer)). > Unfortunately I had trouble finding the source code which handles > \parenthesize in the lilypond repository, which probably could have > helped me. It's spread a bit all around. The `\parenthesize` function itself is in `ly/music-functions-init.ly`. The engraver for parentheses lives in `lily/parenthesis-engraver.cc`. The `Parentheses` grob is defined, like all grobs, in `scm/define-grobs.scm`, and the callbacks it uses are in `scm/output-lib.scm`. HTH, Jean
signature.asc
Description: This is a digitally signed message part