>> Is there an easy way to have a slur enclosed by parentheses or >> brackets? Some urtext editions use parenthesized slurs to indicate >> editorial additions. > > \parenthesize does not currently handle spanners, so you would need to > do some manual work. > > Consider: [...]
Here is a slightly improved version with rotated parentheses. There's certainly room for more improvements... Werner ------------------------------------------------------------------------------- \version "2.20.0" parenthesizeSlur = -\tweak stencil #(lambda (grob) (let* ((cp (ly:grob-property grob 'control-points)) (lp (grob-interpret-markup grob (markup #:fontsize -7 "("))) (rp (grob-interpret-markup grob (markup #:fontsize -7 ")"))) (cp1 (first cp)) (cp2 (second cp)) (cpn-1 (list-ref cp (- (length cp) 2))) (cpn (last cp)) (langle (/ (atan (- (cdr cp2) (cdr cp1)) (- (car cp2) (car cp1))) PI-OVER-180)) (rangle (/ (atan (- (cdr cpn) (cdr cpn-1)) (- (car cpn) (car cpn-1))) PI-OVER-180))) (set! lp (ly:stencil-aligned-to lp Y CENTER)) (set! lp (ly:stencil-aligned-to lp X 0.5)) (set! lp (ly:stencil-translate lp (first cp))) (set! rp (ly:stencil-aligned-to rp Y CENTER)) (set! rp (ly:stencil-aligned-to rp X -0.5)) (set! rp (ly:stencil-translate rp cpn)) (list-set! cp 0 (cons (cdr (ly:stencil-extent lp X)) (cdr cp1))) (set! lp (ly:stencil-rotate lp langle 0 0)) (list-set! cp (1- (length cp)) (cons (car (ly:stencil-extent rp X)) (cdr cpn))) (set! rp (ly:stencil-rotate rp rangle 0 0)) (ly:grob-set-property! grob 'control-points cp) (apply ly:stencil-add (list lp rp (ly:slur::print grob))))) \etc { g'4\parenthesizeSlur ( \parenthesizeSlur \( b' c''2 ) | g'2\parenthesizeSlur ( f'4 e' ) \) }