Hallo alle,
ich hab die Lösung

Das Geheimnis liegt in
line-thickness!!! Meine anfänglichen Versuche arbeiten mit
staff-spaces, wo doch Dicke und Kerning der Taktstriche in Vielfachen von
line-thickness angegeben werden. Der gewünschte „Vorschub“befehl muss also die aktuelle
line-thickness liefern:
#(define-markup-command (lthskip layout props amount) (number?)
;; lthskip = "line-thickness skip"
(let ((l-th (ly:output-def-lookup layout 'line-thickness)))
(ly:make-stencil "" (cons 0 (* amount l-th)) '(0 . 0) )))
Nun ermitteln wir Dicke/Dünne und Kerning aus der
IR 3.1.11 BarLine und schieben uns die Glyphen zurecht:
startRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob (markup
#:musicglyph "brackettips.up"))
-0.1 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob (markup
#:musicglyph "brackettips.down"))
-0.1 0)))
\bar "|:"
}
stopRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob (markup
#:concat (
#:lthskip 6
#:right-align
#:rotate 180 #:musicglyph "brackettips.down" )))
-0.1 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob (markup
#:concat (
#:lthskip 6
#:right-align
#:rotate 180 #:musicglyph "brackettips.up" )))
-0.1 0)))
\bar ":|"
}
combinedRepeatBracket = {
\once \override Staff.BarLine #'stencil =
#(lambda (grob)
(ly:stencil-add
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y UP
(grob-interpret-markup grob (markup
#:concat (
#:lthskip 3
#:concat (
#:right-align
#:vcenter
#:rotate 180 #:musicglyph "brackettips.down"
#:lthskip 3
#:vcenter
#:musicglyph "brackettips.up"))))
-0.1 0)
(ly:stencil-combine-at-edge
(ly:bar-line::print grob)
Y DOWN
(grob-interpret-markup grob (markup
#:concat (
#:lthskip 3
#:concat (
#:right-align
#:vcenter
#:rotate 180 #:musicglyph "brackettips.up"
#:lthskip 3
#:vcenter
#:musicglyph "brackettips.down"))))
-0.1 0)))
\bar ":|:"
}
Gleichzeitig bauen wir noch die
\bar-Befehle mit ein, um den eigentlichen Musik-Code zu entschlacken.
Zum Glücklichsein allein fehlt „nur“ noch eine Routine, die bei einem Zeilenumbruch
combinedRepeatBracket in
stopRepeatBracket am Zeilenende und
startRepeatBracket am nächsten Zeilenanfang auftrennt.
Übrigens finden sich in
scm/output-lib.scm bereits die Bezeichner
brace und
bracket. Sollten die Entwickler diese Styles etwa schon geplant, aber noch nicht realisiert haben?
Viele Ostergrüße, Robert
EDIT:
Fehlt natürlich noch die Musik:
music = {
\grace s4
\startRepeatBracket
b'1
\combinedRepeatBracket
b
\stopRepeatBracket
}
%#(set-global-staff-size 11.22) %% smallest recommended staff size
#(set-global-staff-size 20) %% default staff size
%#(set-global-staff-size 25.2) %% largest recommended staff size
\paper {
ragged-right = ##t
}
\score {
\relative c' { \music }
\layout {
indent = 0
}
}
… und der Hinweis, dass eine Änderung der
thick-thickness, z.B.
\override Staff.BarLine #'thick-thickness = #8 unser schönes Konstrukt zerstört.