The problem is that this arpeggio is not taken into account for spacing: The
next note will be too close. I'm not yet sure what would be The Right Way to
change this, as neither X-extent nor extra-spacing-width of the arpeggio seem
to have an effect for spacing to the right. You can tweak (for instance)
NoteHead's extra-spacing-width, but that is far from elegant.
Hmmm… That seems like a bug, or at least a good candidate for a feature
request. There are a whole bunch of other ways to clothe that particular cat,
but tweaking the width/spacing sure seems like The Right Way™.
Jean Abou Samra knew how to fix that behaviour of arpeggios, so here's a
(I hope) working solution:
\version "2.22"
Arpeggio_axis_group_engraver =
% Due to Jean Abou Samra
% cf. https://gitlab.com/lilypond/lilypond/-/issues/6193#note_700760004
#(lambda (context)
(let ((arpeggio #f)
(note-column #f))
(make-engraver
(acknowledgers
((arpeggio-interface engraver grob source-engraver)
(set! arpeggio grob))
((note-column-interface engraver grob source-engraver)
(set! note-column grob)))
((process-acknowledged engraver)
(if (and arpeggio note-column)
(begin
(ly:axis-group-interface::add-element note-column arpeggio)
(set! arpeggio #f)
(set! note-column #f))))
((stop-translation-timestep engraver)
(set! arpeggio #f)
(set! note-column #f)))))
\layout {
\context {
\Voice
\consists #Arpeggio_axis_group_engraver
}
}
arpeggioUpDown = {
\override Arpeggio.stencil =
#(lambda (grob)
(let ((one #f) (two #f) (combined-stencil #f))
(ly:grob-set-property! grob 'arpeggio-direction UP)
(set! one (ly:arpeggio::print grob))
(ly:grob-set-property! grob 'arpeggio-direction DOWN)
(set! two (ly:arpeggio::print grob))
(set! combined-stencil
(ly:stencil-add
one
(ly:stencil-translate-axis two 1.25 X)))
(ly:grob-set-property!
grob 'X-extent
(ly:stencil-extent combined-stencil X))
combined-stencil))
\override Arpeggio.direction = #RIGHT
}
{
\once \arpeggioUpDown
<c' e' g' c''>\arpeggio
c'
}
Lukas