bei mir funktioniert die Version von Harm auch. Nur im Kompilierungsbericht sind Fehler, die, wie Harm auch selbst eingeräumt hat, er nicht zu beheben weiß.
Das ist nicht ganz richtig.
Ich schrieb von Warnungen und
nicht von Fehlern!
Soweit ich weiß werden bei der Berechnung eines mittels connectArpeggios = ##t veranlaßten, durchgehenden Arpeggios, das obere Ende des oberen, einzelnen Arpeggios sowie das untere Ende des unteren, einzelnen Arpeggios zu Grunde gelegt.
Wenn ich aber (um das durchgehende Arpeggio zu verkürzen) das obere Ende unter das untere Ende eines einzelnen Arpeggios lege, so ist die interval-length per definitionem 0. In diesem Fall gibt es natürlich keine Klammer und eine Warnung wird ausgegeben. Ebenso falls die Klammer einen Minimalwert (10.5 pt) unterschreitet.
Das trifft tatsächlich aber nur für die einzelnen, nicht verbundenen Arpeggios zu. Das verbundene ist schon auf Grund des Abstands der beiden Systeme viel zu groß als daß es da meiner Meinung nach Probleme geben könnte.
Ich hätte also auch schreiben können: Ignorier die Warnungen.
Ich bin allerdings auch ein Fan von Kompilierungen ohne jegliche Fehler und Warnungen.
Es gibt die Möglichkeit in manchen Fällen Warnungen abzustellen, tatsächlich gibt es auch die Option keinerlei Warnungen ausgeben zu lassen (ist allerdings eine gaaanz schlechte Idee).
Die Funktion ly:expect-warning gibt eine Warnung aus, falls keine erwartete Warnung auftaucht. Ist also auch nicht das was man haben möchte.
Stattdessen habe ich den Code so geändert, daß zumindest die Klammer minimaler Größe für die einzelnen Arpeggios benutzt wird.
Das hat soweit ich sehe keinerlei Auswirkung auf das verbundene Arpeggio und damit den sichtbaren output, stellt aber die unnötigen Warnungen ab.
Darüberhinaus habe ich "I" fett und kleiner gemacht.
\version "2.16.0"
brace =
#(define-music-function (parser location adjust-size roman-number)(number? string?)
#{
\once \set GrandStaff.connectArpeggios = ##t
\once \override Arpeggio #'Y-extent =
#(ly:make-unpure-pure-container
ly:grob::stencil-height
(lambda (grob start end) (ly:grob::stencil-height grob)))
\once \override GrandStaff.Arpeggio #'stencil =
#(lambda (grob)
(let* ((default-stil (ly:arpeggio::print grob))
(positions (ly:grob-property grob 'positions))
(center-pos (interval-center positions))
(layout (ly:grob-layout grob))
(pt (ly:output-def-lookup layout 'pt))
(y-ext (ly:stencil-extent default-stil Y))
(size (max (+ 2 pt) (interval-length (interval-widen y-ext adjust-size))))
(new-stil
(grob-interpret-markup grob
(markup
(#:left-brace (/ size pt)))))
(roman-num
(grob-interpret-markup grob
(markup
#:fontsize -3
#:vcenter
#:bold
roman-number)))
(new-stil-x-length
(interval-length
(ly:stencil-extent new-stil X))))
(ly:stencil-add
(ly:stencil-translate
new-stil
(cons new-stil-x-length center-pos))
(ly:stencil-translate
roman-num
(cons (* -2 new-stil-x-length) center-pos)))))
#})
\score {
\new GrandStaff
<<
\new Staff = "upper1"
\new Voice \relative c'' {
\brace #-2 #"I"
<des f bes des>2\arpeggio
}
\new Staff = "upper2"
\new Voice \relative c' {
<d! g! b!>2\arpeggio
}
>>
\layout { }
}-Harm