Hello Jean, hello Rip. instead of imposing this empty stencil I’d extent the original command such that it allows for such things. The appended file does implement a way to call (box-grob-stencil-with-thickness thickness padding) and a way to use the original function but to be able to specify thickness and padding using details.box-thickness and details.box-padding.
Cheers, Valentin Am Sonntag, 15. Mai 2022, 11:09:29 CEST schrieb Jean Abou Samra: > Le 15/05/2022 à 10:40, Rip _Mus a écrit : > > Good morning, > > I found this interesting snippet: > > https://lsr.di.unimi.it/LSR/Snippet?id=257 > > > > that draws a box around systems. > > According to you, is it possible to specify box line thickness ? > > > > Thank you! > > > > Rip_mus > > It looks like box-grob-stencil does not support this. make-stencil-boxer, on > the other hand, does. It expects a callback yielding a stencil, though, so > you need to define a little function returning a stencil empty of inking > with the grob's extent. > > \version "2.22.2" > > #(define (empty-stencil-from-grob-extents grob) > (ly:make-stencil > '() > (ly:grob-extent grob grob X) > (ly:grob-extent grob grob Y))) > > \layout { > \context { > \Score > \override System.stencil = > % adjust thickness and padding > #(make-stencil-boxer 0.2 0.3 empty-stencil-from-grob-extents) > } > } > > { > \slurDown c4 ( g4 c''4) > } > > > Best, > Jean
\version "2.22.2"
#(define*-public ((box-grob-stencil-with-thickness #:optional (thick 0.1) (pad 0)) grob)
(let* ((xext (ly:grob-extent grob grob 0))
(yext (ly:grob-extent grob grob 1))
(xext (interval-widen xext pad))
(yext (interval-widen yext pad)))
(ly:stencil-add
(make-filled-box-stencil (interval-widen xext thick) (cons (- (car yext) thick) (car yext)))
(make-filled-box-stencil (interval-widen xext thick) (cons (cdr yext) (+ (cdr yext) thick)))
(make-filled-box-stencil (cons (cdr xext) (+ (cdr xext) thick)) yext)
(make-filled-box-stencil (cons (- (car xext) thick) (car xext)) yext))))
\score {
\layout {
\context {
\Score
\override System.stencil =
#(box-grob-stencil-with-thickness 0.4 0.5)
}
}
{
\slurDown c4 ( g4 c''4)
}
}
\markup\vspace #1
#(define-public (box-grob-stencil grob)
(let* ((det (ly:grob-property grob 'details))
(thick (assoc-get 'box-thickness det 0.1))
(pad (assoc-get 'box-padding det 0)))
((box-grob-stencil-with-thickness thick pad) grob)))
\score {
\layout {
\context {
\Score
\override System.stencil = #box-grob-stencil
\override System.details.box-thickness = #1
\override System.details.box-padding = #1
}
}
{
\slurDown c4 ( g4 c''4)
}
}
signature.asc
Description: This is a digitally signed message part.
