HorizontalBracket erzeugt man, indem man \startGroup und \stopGroup an die erste bzw. letzte Note anhängt.
Ich hätte gerne eine Funktion, die einen ganzen Musikausdruck automatisch mit einer Klammer versieht. Wie geht das?
Es soll etwa so aussehen
\version "2.23.6"
\language "deutsch"
\layout {
\context {
\Voice
\consists Horizontal_bracket_engraver
\override HorizontalBracket.direction = #UP
\override HorizontalBracketText.text = \markup \italic "xx"
}
}
mybrack =
#(define-music-function (m) (ly:music?)
#{
{
$m %% hier sollte eine scheme-funktion, die an die erste Note \startGroup
%% und an die letzte Note \stopGroup anhängt, stehen
}
#})
%% HorizontalBracket herkömmlich
\relative
{
c'4 d e\startGroup f
g a h c
c c\stopGroup c c
}
mus = \relative
{
e' f4 g a h c c c
}
%% HorizontalBracket mit scheme-funktion
\relative
{
c'4 d
\mybrack \mus
c' c
}
Beide Ausgaben sollen das gleiche Ergebnis liefern.
An so was wäre ich auch stark interessiert ... :)
Reinhard
Bei mir geht (ab 2.20.0):
mybrack =
#(define-music-function (m) (ly:music?)
#{
{
<>\startGroup
$m
\stopGroup
}
#})
Gruß,
Harm
Danke Harm, das klappt! :)
Hier nochmals die komplette Funktion mit zusätzlichen Parametern (siehe dieser Thread (https://lilypondforum.de/index.php/topic,1150.0.html))
%% Zusatztext und extra-offset sind optional
%% wenn extra-offset angegeben wird, muss auch ein Zusatztext vorhanden sein, "" genügt
mybrack =
#(define-music-function (t n m) ((string? #f) (number? 3.5) ly:music?)
#{
{
\once \override HorizontalBracket.Y-extent = #'(0 . 0)
\once \override HorizontalBracketText.Y-extent = #'(0 . 0)
\once \override HorizontalBracket.extra-offset = #`(0 . ,n)
\once \override HorizontalBracketText.extra-offset = #`(0 . ,n)
\once \override HorizontalBracketText.text =
\markup \italic { "Intro" #(or t "") }
<>\startGroup
$m
\stopGroup
}
#})
Zitat von: Manuela am Mittwoch, 28. Dezember 2022, 13:07Danke Harm, das klappt! :)
Allerdings nicht mehr, wenn die musikalischen Ausdrücke komplizierter sind:
mybrack =
#(define-music-function (m) (ly:music?)
#{
{ <>\startGroup $m \stopGroup }
#})
\mybrack \repeat unfold 2 { b1 }
Zitat von: terminalwarning: Unattached NoteGroupingEvent
Die Bracket wird dann nicht gedruckt.
Gruß,
Harm
Zitat von: harm6 am Donnerstag, 5. Januar 2023, 16:45Allerdings nicht mehr, wenn die musikalischen Ausdrücke komplizierter sind:
Für meine Zwecke reicht es, ich wende die Funktion auf eine einzelne Stimme an.