Musikausdruck mit HorizontalBracket versehen **gelöst**

Begonnen von Manuela, Montag, 26. Dezember 2022, 17:44

« vorheriges - nächstes »

Manuela

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.
Danke für eure Hilfe
viele Grüße
-- Manuela

rgree

An so was wäre ich auch stark interessiert ...  :)

Reinhard

harm6

Bei mir geht (ab 2.20.0):

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

Gruß,
  Harm

Manuela

Danke für eure Hilfe
viele Grüße
-- Manuela

Manuela

Hier nochmals die komplette Funktion mit zusätzlichen Parametern (siehe dieser Thread)

%% 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
     }
   #})
Danke für eure Hilfe
viele Grüße
-- Manuela

harm6

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

Manuela

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.
Danke für eure Hilfe
viele Grüße
-- Manuela