Deutschsprachiges LilyPond-Forum

Allgemeine Fragen und Probleme => Fragen und Probleme aller Art => Thema gestartet von: Manuela am Montag, 26. Dezember 2022, 17:44

Titel: Musikausdruck mit HorizontalBracket versehen **gelöst**
Beitrag von: Manuela am Montag, 26. Dezember 2022, 17:44
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.
Titel: Antw:Musikausdruck mit HorizontalBracket versehen
Beitrag von: rgree am Mittwoch, 28. Dezember 2022, 11:02
An so was wäre ich auch stark interessiert ...  :)

Reinhard
Titel: Antw:Musikausdruck mit HorizontalBracket versehen
Beitrag von: harm6 am Mittwoch, 28. Dezember 2022, 12:55
Bei mir geht (ab 2.20.0):

mybrack =
#(define-music-function (m) (ly:music?)
   #{
     {
       <>\startGroup
       $m
       \stopGroup
     }
   #})

Gruß,
  Harm
Titel: Antw:Musikausdruck mit HorizontalBracket versehen
Beitrag von: Manuela am Mittwoch, 28. Dezember 2022, 13:07
Danke Harm, das klappt!  :)
Titel: Antw:Musikausdruck mit HorizontalBracket versehen **gelöst**
Beitrag von: Manuela am Samstag, 31. Dezember 2022, 08:40
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
     }
   #})
Titel: Antw:Musikausdruck mit HorizontalBracket versehen **gelöst**
Beitrag von: harm6 am Donnerstag, 5. Januar 2023, 16:45
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
Titel: Antw:Musikausdruck mit HorizontalBracket versehen **gelöst**
Beitrag von: Manuela am Samstag, 7. Januar 2023, 10:37
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.