Deutsches Lilypond Forum (Archiv)

Allgemein => Fragen zu Funktionen => Thema gestartet von: kilgore am Mittwoch, 20. April 2011, 13:09

Titel: Wiederholung "Brackets" ?
Beitrag von: kilgore am Mittwoch, 20. April 2011, 13:09
Liebe Lilys!

Ich setzte ein Stück mit viele Wiederholungsstriche.  Es werden viele Take wiederholt, zwischendurch gibts aber Strecken die nicht wiederholt werden.  So wird es dann oft verwirrend anzusehen.  Wenn ich sowas spiele dann male ich mir immer extra "Klammern" ein, damit mir klar ist wo wiederholt wird und wo nicht.
Ich habe mit hilfe der Zeichentabelle etwas als Beispiel gemacht.   Gibts bei Lilypond eine Automatische funktion dafür?  Meine Lösung ist halt nur für einzelne Stellen praktisch...bei Zeilenumbruch zB gehts nicht so gut. 

Danke!
kil

\version "2.12.3"


\relative c' {
  c1
  \bar "|:" c1 d1
  \mark \markup
  \with-dimensions #'( 0 . 0 ) #'( 0 . 0 )
  \center-align
  \column {
    \line { \fontsize #4 \lower #.75 \rotate #90 "❰" }
    \line { \fontsize #4 \lower #5.25 \rotate #-90 "❰" }
  }
  \bar ":|:"
  e1 f1
  \bar ":|"
  c4 c c c
  \bar "|:"
  c1
  \bar ":|"
}
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: RobUr am Mittwoch, 20. April 2011, 17:34
Hallo Kil,

da gabs doch schonmal ne Frage in diesem Thread (https://liarchiv.joonet.de/index.php?topic=542.0), aber keiner wollte es brauchen …

Zitat von: kilgore
Gibts bei Lilypond eine Automatische funktion dafür?
Nein, wir müssen wieder selbst ran:
\version "2.12.3"

#(set-global-staff-size 20)

startRepeatBracketMarkupUp = \markup {
\musicglyph #"brackettips.up"
}

startRepeatBracketMarkupDown = \markup {
\musicglyph #"brackettips.down"
}

stopRepeatBracketMarkupUp = \markup {
\hspace #-1.9
\rotate #180
\musicglyph #"brackettips.down"
}

stopRepeatBracketMarkupDown = \markup {
\hspace #-1.9
\rotate #180
\musicglyph #"brackettips.up"
}

combinedRepeatBracketMarkupUp = \markup {
\hspace #-2.19
\concat {
\rotate #180
\musicglyph #"brackettips.down"
\translate #'(0.29 . -1.145)
\musicglyph #"brackettips.up"
}
}

combinedRepeatBracketMarkupDown = \markup {
\hspace #-2.19
\concat {
\rotate #180
\musicglyph #"brackettips.up"
\translate #'(0.29 . 1.145)
\musicglyph #"brackettips.down"
}
}

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 startRepeatBracketMarkupUp)
   0 0)
  (ly:stencil-combine-at-edge
   (ly:bar-line::print grob)
   Y DOWN
   (grob-interpret-markup grob startRepeatBracketMarkupDown)
   0 0)))
}

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 stopRepeatBracketMarkupUp)
   0 0)
  (ly:stencil-combine-at-edge
   (ly:bar-line::print grob)
   Y DOWN
   (grob-interpret-markup grob stopRepeatBracketMarkupDown)
   0 0)))
}

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 combinedRepeatBracketMarkupUp)
   0 0)
  (ly:stencil-combine-at-edge
   (ly:bar-line::print grob)
   Y DOWN
   (grob-interpret-markup grob combinedRepeatBracketMarkupDown)
   0 0)))
}

\relative c' {
\grace s4
\startRepeatBracket \bar "|:"
c1
\combinedRepeatBracket \bar ":|:"
e
\stopRepeatBracket \bar ":|"
s4
}

Leider liegen die Nachteile schon auf der Hand: die Abstände sind auf die Standardgröße abgestimmt. Wählt man eine andere staff-size, muss man nachbessern :( Wenn es also jemand schaffte, die bracket tips für stopRepeatBracket rechtsbündig und für combinedRepeatBracket zentriert auszurichten, wäre das ganz grandios ::)

Grüße, Robert
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: trulli am Donnerstag, 21. April 2011, 09:28
Das sieht aber Klasse aus Robert!

Wie immer würde ich gerne bei den Definitionen helfen, bin aber zu dumm dafür... Der Stil der Klammern erinnert ans Real-book und ist damit nach meiner Meinung völlig in Ordnung.

Gruß
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: kilgore am Donnerstag, 21. April 2011, 10:49
Zitat
Das sieht aber Klasse aus Robert!

Aber wirklich!  genau so was wollte ich sehen!  Ich bin neugierig wie das bei Zeilenumbruch geht....ich experimentiere und berichte hier wieder!
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: kilgore am Donnerstag, 21. April 2011, 10:59
ok ich konnte nicht warten :)

Bei Zeilenumbruch werden die Klammern am Ende und am Anfang gedruckt.  Es ist trotzdem schöner als meine Variante.  Kriegt man es aber weg?  Vielleicht brauchen wir ein zusätzliches markup für Zeilenumbrüche... Leider ist mein Kenntniss mit Scheme auch schon längst nicht weit genug.... 
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: harm6 am Freitag, 22. April 2011, 02:40
@RobUr
Ich habe Deine Definitionen mal bearbeitet.
\version "2.12.3"

#(set-global-staff-size 20)

\layout {
        indent = 0
}

startRepeatBracketMarkupUp = \markup {  
\musicglyph #"brackettips.up"
}

startRepeatBracketMarkupDown = \markup {
\musicglyph #"brackettips.down"
}

stopRepeatBracketMarkupUp = \markup {
\translate #(cons 0.62  0)
\right-align {
\rotate #180
\musicglyph #"brackettips.down"
}
}
 
stopRepeatBracketMarkupDown = \markup {
\translate #(cons 0.62  0)
\right-align {
\rotate #180
\musicglyph #"brackettips.up"
}
}
combinedRepeatBracketMarkupUp = \markup {
         \translate #(cons 0.45  0)
\center-align {
       \concat\vcenter{
        \rotate #180
\musicglyph #"brackettips.down"
\hspace #'0.24
        \musicglyph #"brackettips.up"
       }
}
}
  
combinedRepeatBracketMarkupDown = \markup {
\translate #(cons 0.45  0)
\center-align {
       \concat\vcenter{
        \rotate #180
\musicglyph #"brackettips.up"
\hspace #'0.24
        \musicglyph #"brackettips.down"
       }
}
}
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 startRepeatBracketMarkupUp)
  -0.42 0)
 
 (ly:stencil-combine-at-edge
  (ly:bar-line::print grob)
  Y DOWN
  (grob-interpret-markup grob startRepeatBracketMarkupDown)
  -0.42 0)))
 
}
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 stopRepeatBracketMarkupUp)
  -0.42 0)
 (ly:stencil-combine-at-edge
  (ly:bar-line::print grob)
  Y DOWN
  (grob-interpret-markup grob stopRepeatBracketMarkupDown)
  -0.42 0)
  ))
}

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 combinedRepeatBracketMarkupUp)
  -0.42 0)
 (ly:stencil-combine-at-edge
  (ly:bar-line::print grob)
  Y DOWN
  (grob-interpret-markup grob combinedRepeatBracketMarkupDown)
  -0.42 0)))
}
%----------------------------------------- Test -----------------------------------------------
music = {
        
         \grace s4
\startRepeatBracket \bar "|:"
c1
\combinedRepeatBracket \bar ":|:"
e
\stopRepeatBracket \bar ":|"
}


\score {
        \new Staff \with { fontSize = #10 \override StaffSymbol #'staff-space = #(magstep 10) }
         {
\relative c' {
       \music
}
        }
                \header {
         piece = \markup {
                \column {
                 "Verschiedene Größen mittels fontSize = <size> \override StaffSymbol #'staff-space = #(magstep <size>)"
                 "aber immer mit: #(set-global-staff-size 20)"
                }
         }
        }
}
\score {
        \new Staff \with { fontSize = #5 \override StaffSymbol #'staff-space = #(magstep 5) }
         {
\relative c' {
       \music
}
        }
}
\score {
        \new Staff \with { fontSize = #0 \override StaffSymbol #'staff-space = #(magstep 0) }
         {
\relative c' {
       \music
}
        }
}
muSic = {
        \relative c' {
\grace s4
\startRepeatBracket \bar "|:"
c1
\combinedRepeatBracket \bar ":|:"
e
\stopRepeatBracket \bar ":|" s1*0\break
\grace s4
\startRepeatBracket \bar "|:"
c1
\combinedRepeatBracket \bar ":|:"
e
\stopRepeatBracket \bar ":|" s1*0\break
        }
}
\score {
        \new Staff {
\muSic
        }
        \header {
         piece = "Zeilenumbruch"
        }
}
\score {
        \new StaffGroup
        <<
         \new Staff
\muSic

         \new Staff
\muSic
        >>
        
        \header {
         piece = "Partitur"
        }
}
Das Ganze ist noch nicht optimal, und für stopRepeatBracket ist es besser gelungen als für combinedRepeatBracket und bei Änderungen der Staff-Size gibts immer noch Verschiebungen, aber sie sind nicht mehr so groß. Die Anzahl der "Einstellschrauben" habe ich reduziert.

@kilgore
Zitat
Bei Zeilenumbruch werden die Klammern am Ende und am Anfang gedruckt.
Hier weiß ich nicht was Du genau meinst. Ich habe den Zeilenumbruch mit s1*0\break \grace s4 geregelt und finde das Ergebnis soweit ok. Das Ergebnis für Partituren ist naja ... (-> Anhang: barLine.png)

Gruß,
  Harm

P.S. Um mir die Arbeit zu erleichtern habe ich die verschiedenen Elemente auch mal eingefärbt. Bild und Code (falls es jemanden interessiert) auch im Anhang (-> http://lsr.dsi.unimi.it/LSR/Item?id=726 (http://lsr.dsi.unimi.it/LSR/Item?id=726) ).
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: harm6 am Freitag, 22. April 2011, 02:46
Irgendwie liege ich mir der Größe meiner PNG's immer daneben. Ich hoffe ihr könnt trotzdem was damit anfangen.

Gruß,
  Harm
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: harm6 am Freitag, 22. April 2011, 23:48
Ich habe das Ganze noch mal überarbeitet:

\version "2.12.3"

\layout { indent = 0 }

% comper's Definition aus: https://liarchiv.joonet.de/index.php?topic=578.msg3212#msg3212
% hier leicht verändert:

#(define-markup-command (mmX layout props amount) (number?)
  (let ((st-sp (ly:output-def-lookup layout 'staff-space)))
    (ly:make-stencil ""  (cons  0 (- amount  st-sp )) '(0 . 0))))

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.42 0)
   (ly:stencil-combine-at-edge
     (ly:bar-line::print grob)
     Y DOWN
     (grob-interpret-markup grob (markup (#:musicglyph "brackettips.down")))
     -0.42 0)))  
}
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
        #:line
         (#:mmX 0.2
          (#:right-align
           (#:rotate 180(#:musicglyph "brackettips.down"))))))
     -0.42 0)
   (ly:stencil-combine-at-edge
     (ly:bar-line::print grob)
     Y DOWN
     (grob-interpret-markup grob (markup
        #:line
         (#:mmX 0.2
          (#:right-align
           (#:rotate 180(#:musicglyph "brackettips.up"))))))
   -0.42 0)))  
}
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
            #:line
            (#:translate (cons 0.45  0)
            (#:center-align
              (#:concat
               (#:vcenter
                (#:rotate 180 (#:musicglyph "brackettips.down"))
                (#:mmX 2
                (#:hspace 0))
                #:vcenter
                (#:musicglyph "brackettips.up")))))))
   -0.42 0)
  (ly:stencil-combine-at-edge
   (ly:bar-line::print grob)
   Y DOWN
   (grob-interpret-markup grob (markup
            #:line
            (#:translate (cons 0.45  0)
            (#:center-align
              (#:concat
               (#:vcenter
                (#:rotate 180 (#:musicglyph "brackettips.up"))
                ;#:vcenter
                (#:mmX 2
                (#:hspace 0))
                #:vcenter
                (#:musicglyph "brackettips.down")))))))
   -0.42 0)))
}

%------------------------- Test ------------------------------------------------

% #(set-global-staff-size 10)
% #(set-global-staff-size 15)
 #(set-global-staff-size 20)
% #(set-global-staff-size 25)
% #(set-global-staff-size 30)
 
music = {
        \grace s4
\StartRepeatBracket \bar "|:"
c1
\CombinedRepeatBracket \bar ":|:"
e
\StopRepeatBracket \bar ":|" s1*0
}


\relative c' { \music }

\score {
        \new Staff %\with { fontSize = #5 \override StaffSymbol #'staff-space = #(magstep 5) }
        {
\relative c' {
        \music
}
        }
        \header {
        piece = \markup {
                \column { \null\null\null\null\null\null\null
                "Die Größenänderung mit der Konstruktion"
                "\with { fontSize = #5 \override StaffSymbol #'staff-space = #(magstep 5)}"
                "funktioniert nicht ohne an den Werten zu drehen!!"
                "Im layout-Block geht's auch nicht besonders!"
                }
        }
        }
        \layout{
%        #(layout-set-staff-size 25)
        }

}
Wenn man lilypond --png -dresolution=1000 <file.ly> eingibt sieht man allerdings, daß die Größenveränderungen noch immer nicht völlig sauber erfolgen. Aber im Bereich von #(set-global-staff-size 10) bis hin zu #(set-global-staff-size 30) finde ich es hinreichend.
Andere Methoden die staff-size zu verändern funktionieren aber nicht ohne nachbessern oder nur schlecht. Vielleicht weiß ja jemand wie man die comper-Definition aus https://liarchiv.joonet.de/index.php?topic=578.msg3212#msg3212 (https://liarchiv.joonet.de/index.php?topic=578.msg3212#msg3212), die ich modifiziert habe, noch besser anpassen kann.

Gruß,
  Harm
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: RobUr am Montag, 25. April 2011, 13:44
Hallo alle,

ich hab die Lösung ;D

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 (http://lilypond.org/doc/v2.12/Documentation/user/lilypond-internals/BarLine#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.
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: harm6 am Montag, 25. April 2011, 19:02
Hallo Robert,

die line-thickness ist wirklich der Punkt, auf den ich nicht kam. Da hätte ich mal genauer lesen sollen !! Das Ganze ist jetzt auch mit \new Staff \with { fontSize = #-5 \override StaffSymbol #'staff-space = #(magstep -5) } sowie mit \layout { #(layout-set-staff-size 35) } zugänglich. Zumindest nach meinen bisherigen Tests.
Mir ist allerdings aufgefallen, daß die Werte noch nicht ganz optimal sind (siehe Bild, erstellt mit #(set-global-staff-size 25.2) ).
Deshalb habe ich noch ein wenig an den Einstellungen rumgeschraubt.
Für den Zeilenumbruch ist mir außer obigem Work-around noch nichts eingefallen.

#(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) )))

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.15 0)
   (ly:stencil-combine-at-edge
     (ly:bar-line::print grob)
     Y DOWN
     (grob-interpret-markup grob (markup
       #:musicglyph "brackettips.down"))
     -0.15 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.1
    #:right-align
    #:rotate 180 #:musicglyph "brackettips.down" )))
     -0.15 0)
   (ly:stencil-combine-at-edge
     (ly:bar-line::print grob)
     Y DOWN
     (grob-interpret-markup grob (markup
       #:concat (
         #:lthskip 6.1
         #:right-align
         #:rotate 180 #:musicglyph "brackettips.up" )))
     -0.15 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.05
         #:concat (
           #:right-align
           #:vcenter
           #:rotate 180 #:musicglyph "brackettips.down"
           #:lthskip 2.87
           #:vcenter
           #:musicglyph "brackettips.up"))))
     -0.15 0)
   (ly:stencil-combine-at-edge
     (ly:bar-line::print grob)
     Y DOWN
     (grob-interpret-markup grob (markup
       #:concat (
         #:lthskip 3.05
         #:concat (
           #:right-align
           #:vcenter
           #:rotate 180 #:musicglyph "brackettips.up"
           #:lthskip 2.87
           #:vcenter
           #:musicglyph "brackettips.down"))))
     -0.15 0)))
\bar ":|:"
}

Dann noch schöne Restostern,
  Harm

EDIT
Nach erneuter Prüfung: RobUr's obige Werte sind doch viel besser !!
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: RobUr am Dienstag, 26. April 2011, 15:06
Hallo Harm,

an den Werten würde ich nichts verändern, sie entsprechen genau den Standardabständen. Ich beziehe mich dabei immer auf die Vektordaten und keine gerasterten PNGs/JPGs. Die Bildschirmdarstellung vieler PDF-Viewer ist nicht immer ganz sauber, aber im Makrobereich (6400% Vergrößerung :) ) sieht man deutlich, dass die Werte korrekt sind.

Viele Grüße, Robert
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: harm6 am Dienstag, 26. April 2011, 15:11
Hallo,

zum Zeilenumbruch:


Gruß,
  Harm
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: harm6 am Dienstag, 26. April 2011, 15:31
Hallo Robert,

meine Prüfmethode war:


Ich wäre Dir sehr dankbar, wenn Du mir detailiert schilderst, wie Du sowas prüfst.
Die Standardabständen sind ja nachlesbar, aber ich glaub' ja nicht alles was so geschrieben steht. ;)

Gruß,
  Harm
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: RobUr am Dienstag, 26. April 2011, 15:41
Hallo Harm,

meine Prüfmethode:

Du kannst gern den Clip aus meinem letzten Beitrag solang vergrößern, bis dein PDF-Viewer nicht mehr kann ;)

Grüße, Robert
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: RobUr am Dienstag, 26. April 2011, 16:09
Zitat von: harm6
zum Zeilenumbruch:
  • ich habe hier (http://lists.gnu.org/archive/html/lilypond-user/2008-12/msg00307.html) eine Zeilenumbruch-Definition für BarLines gefunden, die tatsächlich funktioniert und auch manipulierbar ist. (Es gibt noch andere aber ich habe sie nicht ans laufen bekommen, sind vielleicht zu alt oder ich zu blöd.)
    Man müßte jetzt \bar "startRepeatBracket" etc. analog zu der bar-line.cc-Datei (http://git.savannah.gnu.org/gitweb/?p=lilypond.git;a=blob;f=lily/bar-line.cc) definieren und in die Zeilenumbruch-Definition in geeigneter Form einfügen. Ich weiß aber nicht wie das geht bzw. ob es überhaupt möglich ist.
  • Ein anderer Weg funktioniert möglicherweise analog zu NR 6.8 (http://lilypond.org/doc/v2.12/Documentation/user/lilypond/Difficult-tweaks#Difficult-tweaks). Aber da scheine ich auch zu blöd für zu sein.

Diese Baustellen hatte ich auch schon gefunden. Es gibt aber wesentliche Probleme:

Wenn diese Variante von Wiederholungsstrichen also unbedingt benötigt wird, müssen wir uns vorerst mit manuellen Umbrüchen und BarLines behelfen.

Grüße, Robert
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: kilgore am Dienstag, 26. April 2011, 17:15
Hey ihr beiden!

Also ich bin begeistert davon was ihr gebaut habt!  Sieht richtig klasse aus.    Meine einzige Änderung für meine Zwecke, war die Brackets ein bisschen zu vergrössern ( #:fontsize 3  ).   Die kleineren sehen tatsächlich ganz gut aus, aber ich hatte immer den Wünsch die nochmal mit dem Stift grösser zu machen.  Klar ist klar :)

Zu den Zeilenumbrüchen, mach ich den Trick mit \grace s16 ....  mir ist sonst nichts besseres eingefallen.   
Gruß
kil
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: harm6 am Dienstag, 26. April 2011, 20:45
Hallo zusammen,

das mit dem Zeilenumbruch ließ mir keine Ruhe und so habe ich eine kleine Funktion ersonnen, die das etwas besser zu handeln weiß:
combinedBreak =
#(define-music-function (parser location ) ()
#{
    \stopRepeatBracket
    \break
    \grace s4
    \startRepeatBracket
#})
%------------------------ Test -------------------------------------------------
\relative c' {
        \grace s4
\startRepeatBracket
b'1
\combinedRepeatBracket
b
\stopRepeatBracket
c
\startRepeatBracket
        d
        \combinedBreak
        e
        \stopRepeatBracket
}

@Robert:
Ich bin Deiner Prüfmethode mal gefolgt (und habe den Adobe Reader extra runtergeladen):
Du hast völlig recht!!

Gruß,
  Harm
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: kilgore am Dienstag, 26. April 2011, 23:12
und mit:

combinedBreak =
#(define-music-function (parser location ) ()
#{
    \stopRepeatBracket
    \break
    \grace s4
    \startRepeatBracket
    \once \override Staff.BarLine #'extra-offset = #'( -2.3 . 0 )
#})
%------------------------ Test -------------------------------------------------
\relative c' {
        \grace s4
\startRepeatBracket
b'1
\combinedRepeatBracket
b
\stopRepeatBracket
c
\startRepeatBracket
        d
        \combinedBreak
        e
        \stopRepeatBracket
}

...so ein bisschen weniger auffällig, oder?

Gruß
kil
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: harm6 am Dienstag, 26. April 2011, 23:25
Hallo kil,

würd ich nicht machen!
Probier mal mit \key cis\major

Gruß,
  Harm
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: kilgore am Mittwoch, 27. April 2011, 16:41
ja stimmt, aber da ich meistens sachen ohne tonart schreibe ist es für mich egal.    Noch doofer ist, dass der Strich dann viel zu weit links steht von dem ersten Ton in dem Takt. 
komisch, dieses Rätsel!
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: RobUr am Mittwoch, 27. April 2011, 20:26
Zitat von: kilgore
[…] aber da ich meistens sachen ohne tonart schreibe […]
Aha! C-Dur/a-Moll ist also keine Tonart ;D  Du meinst sicher ohne Vorzeichen … ;)  Wir geben uns immer Mühe, dass ein Snippet universell eingesetzt werden kann. Deine Hinweise sind trotzdem wertvoll für andere, die das Aussehen an ihren persönlichen Geschmack anpassen möchten.

@harm6
Ja: ein Makro à la \combinedBreak ist wohl die unaufwändigste Lösung momentan. Angesichts der Vielfalt anderer Wiederholungsstrichtypen wäre es eigentlich wünschenswert, eine Art Makro à la [\once] \override BarLine #'style = #'bracket oder auch \bracket \bar ":|.|:" zur Verfügung zu haben, das die Zeilenumbruchsregeln beibehält. Aber der ursprüngliche Wunsch war ja, nur ab und zu diese geschweiften Wiederholungen einsetzen zu wollen. Wenn ich aber an’s Real Book denke, gibt es sicherlich Bedarf an dieser Funktion nicht nur in unserer Community!

Viele Grüße, Robert
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: harm6 am Mittwoch, 27. April 2011, 23:01
Hallo Allerseits,

ich hab' mal weiter rumgespielt mit den schicken neuen Brackets. Vor allem in Hinblick auf den Zeilenumbruch und die Zeilenumbruchsregeln:


Der Code dazu:
\relative c' {
        \key cis\major

        \grace s4 ^\markup { \fontsize #'2 BracketTips }
\startRepeatBracket
b'1
        \key ces\major
        \time 2/2
        \combinedBreak
\mark\markup { \with-color #red \fontsize #'5 "!" }
        e
        \stopRepeatBracket
        \bar "|."
}

\relative c' {
        \key cis\major
        \repeat volta 2 { b'1^\markup { \fontsize #'2 default } }
       
        \key ces\major
        \time 2/2
\break
        \repeat volta 2 { \mark\markup { \with-color #red \fontsize #'5 "!" } e }
}

Ich habe auch dies probiert:
#(define my-bar-glyph-alist
  '((":|:" . (":|" . "|:"))
    (":|.|:" . (":|" . "|:"))
    (":|.:" . (":|" . "|:"))
    ("||:" . ("||" . "|:"))
    ("dashed" . ("dashed" . '()))
    ("|" . ("|" . ()))
    ("||:" . ("||" . "|:"))
    ("|s" . (() . "|"))
    ; amended this entry
    ("|:" . ("||" . "|:"))
    ("|." . ("|." . ()))

    ;; hmm... should we end with a bar line here?
    (".|" . ("|" . ".|"))
    (":|" . (":|" . ()))
    ("||" . ("||" . ()))
    (".|." . (".|." . ()))
    ("|.|" . ("|.|" . ()))
    ("" . ("" . ""))
    (":" . (":" . ""))
    ("." . ("." . ()))
    ("empty" . (() . ()))
    ("brace" . (() . "brace"))
    ("bracket" . (() . "bracket"))
    ))
%{
#(define-public (my-bar-line::calc-break-visibility grob)
  (let* ((glyph (ly:grob-property grob 'glyph))
(result (assoc glyph my-bar-glyph-alist)))
    (if result
(vector (string? (cadr result)) #t (string? (cddr result)))
#(#t #t #t))))
%}
#(define (my-bar-line::calc-glyph-name grob)
   (let* (
          ; inlined this from lily-library.scm, since it isn't public
          (index-cell (lambda (cell dir)
                        (if (equal? dir 1)
                            (cdr cell)
                            (car cell))))
          (glyph (ly:grob-property grob 'glyph))
          (dir (ly:item-break-dir grob))
          (result (assoc glyph  my-bar-glyph-alist))
          (glyph-name (if (= dir CENTER)
                          glyph
                          (if (and result (string? (index-cell (cdr result) dir)))
                              (index-cell (cdr result) -1)
                              #f)))
          )
     glyph-name))

%------------------------------ Test -------------------------------------------
\relative c' {
        \grace s4
\startRepeatBracket
b'1
        \stopRepeatBracket
    \once \override Staff.BarLine #'glyph-name = #my-bar-line::calc-glyph-name
    \bar ":|:"
    \break
    \mark\markup { \with-color #red \fontsize #'5 "?" }
        e
        \stopRepeatBracket
}
-> barlineTwo.png
In der neuen Zeile erscheint die Bracket. Warum die BracketTips mitgenommen werden weiß ich nicht. Sie sind allerdings seitenverkehrt. Der Doppelpunkt war eigentlich auch auf der falschen Seite aber durch eine kleine Änderung gegenüber dem Original (http://lists.gnu.org/archive/html/lilypond-user/2008-12/msg00307.html) ist er auf die andere Seite gerutscht.

                              (index-cell (cdr result) -1)

Das weckt in mir die Hoffnung, daß es möglich ist die zweite Bracket gänzlich zu drehen, zu spiegeln oder ähnliches.

@kilgore
Zitat
Noch doofer ist, dass der Strich dann viel zu weit links steht von dem ersten Ton in dem Takt.
komisch, dieses Rätsel!
Das ist eigentlich kein Wunder, denn (um ein Bild zu gebrauchen) Du hast eine Wand im Haus versetzt aber die Einrichtung gelassen wo sie war.

Gruß,
  Harm
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: kilgore am Mittwoch, 27. April 2011, 23:43
Aha! C-Dur/a-Moll ist also keine Tonart Grinsend  Du meinst sicher ohne Vorzeichen …
nee ich meine tatsächlich ohne Tonart  :)   Freu mich aber, dass meine Frage eine so robuste Gespräch angefangen hat  ;D
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: harm6 am Freitag, 29. April 2011, 01:36
Hallo zusammen,

es ist mir gelungen die Bracket in der neuen Zeile zudrehen! ;D

Dazu habe ich die Definition für shift-right-at-line-begin aus /scm/output-lib.scm verändert. Eine Definition für my-bar-glyph-alist, die sich in ihrem einzigen Inhaltspunkt noch nicht mal vom Original unterscheidet, war nur nötig um der Definition my-bar-line::calc-glyph-name grob einen Bezugspunkt zu liefern.
Jetzt gelingt es auch ein neues \Break zu bestimmen mit einem üblichen \bar ":|:" und \break als "Auslöser".

Nun kann man alles schöner und einfacher gestalten. Es gibt auch keine Verschiebung nach rechts mehr und beim Taktwechsel erscheint die Taktangabe genauso wie in der default-Einstellung.

Beim Schreiben würde ich ganz normal die Noten mit den neuen repeatBrackets setzen und nur dort wo \combinedRepeatBracket an ein Zeilenende kommt durch \stopRepeatBracket\Break ersetzen, alternativ #'line-break-permission = ##f und alles per Hand regeln.

@Robert
Das ist zwar ein übler Hack und noch weit entfernt von einem "Makro à la [\once] \override BarLine #'style = #'bracket oder auch \bracket \bar ":|.|:"", aber im Moment weiß ich nichts besseres. Und es funktioniert!

\version "2.12.3"

\layout {
    indent = 10
    short-indent = 10
}
\paper {
    ragged-right =##f
}

#(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) )))

#(define my-bar-glyph-alist
  '((":|:" . (":|" . "|:"))))
  
#(define (my-bar-line::calc-glyph-name grob)
   (let* (
          ; inlined this from lily-library.scm, since it isn't public
          (index-cell (lambda (cell dir)
                        (if (equal? dir 1)
                            (cdr cell)
                            (car cell))))
          (glyph (ly:grob-property grob 'glyph))
          (dir (ly:item-break-dir grob))
          (result (assoc glyph  my-bar-glyph-alist))
          (glyph-name (if (= dir CENTER)
                          glyph
                          (if (and result (string? (index-cell (cdr result) dir)))
                              (index-cell (cdr result) -1)
                              #f)))
          )
     glyph-name))

#(define (rotate-at-line-begin g)
  "Rotate an item, but only at the start of the line."
  (if (and (ly:item? g)
  (equal? (ly:item-break-dir g) RIGHT))
  (ly:grob-set-property! g 'rotation (list 180 0 0))
      ))
      
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 ":|:"
}

Break =  {
    \once\override Staff.BarLine #'glyph-name = #my-bar-line::calc-glyph-name
    \once\override Staff.BarLine #'after-line-breaking = #rotate-at-line-begin  
    \bar ":|:"
    \break
}

%------------------------- Test ------------------------------------------------


%#(set-global-staff-size 11.22) %% smallest recommended staff size
#(set-global-staff-size 20) %% default staff size
% #(set-global-staff-size 35.2) %% largest recommended staff size

\score {
  \relative c' {
          \key cis\major
  \mark\markup { \with-color #red \fontsize #'3 "Beispiel I" }
           \grace s4
   \startRepeatBracket
   b'1
           \stopRepeatBracket
           \Break
       \time 2/2
           e
           \stopRepeatBracket
           \bar "|."
  }
  \layout {
    ragged-right = ##t
  }
}

\relative c' {
        %\key cis\major
\mark\markup { \with-color #red \fontsize #'3 "Beispiel II" }
        \grace s4
\startRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
des1 \stopRepeatBracket \Break  
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
des1 \stopRepeatBracket \Break
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \combinedRepeatBracket
c1 \stopRepeatBracket
}

Grüße,
  Harm
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: RobUr am Freitag, 29. April 2011, 13:03
WOWOWOWOW!!!

Das ist ja echt abgefahren ;D Herzlichen Dank! Das Snippet ist wiedermal LSR-verdächtig ;)

Und es funktioniert auch mit \repeat volta x { ... }

Grüße, Robert
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: harm6 am Freitag, 29. April 2011, 16:08
Hallo zusammen,

ich hab' noch ein bißchen weitergetestet:
\override Staff.BarLine #'thick-thickness = #8  (hat Robert schon erwähnt)
\override Staff.BarLine #'kern = #8       
\override Staff.BarLine #'thin-kern = #8   

zerstören das Konstrukt!


\override Staff.BarLine #'bar-size = #8    
\override Staff.BarLine #'hair-thickness = #8

funktionieren!


@Robert
Ich finde auch, daß das etwas fürs LSR ist (sieht man ja schon an der Zahl der Aufrufe dieser Seite).

Allerdings sind zahlreiche Kommentare nötig:


Da die meisten Ideen von Dir stammen und mein Englisch wirklich miserabel ist, schlage ich vor, daß Du das machst. ;) Ich helf' natürlich gerne.
Wenn Du magst, kannst Du mich ja als Co-Autor benennen.


Gruß,
  Harm
Titel: Re:Wiederholung "Brackets" ?
Beitrag von: kilgore am Freitag, 29. April 2011, 18:11
Ihr seid meine Helden!!  Wirklich super geil!!
 ;D   ;D   ;D