• Willkommen im Forum „Archiviertes Lilypond Forum (2017)“.
 

Dies ist das Archiv des alten Forums (bis März 2017). Das aktuelle Forum ist unter lilypondforum.de zu finden.
This is the archive of the old forum (until March 2017). You can find the current forum at lilypondforum.de.

Hauptmenü

Systeme farbig hinterlegen: Problem mit scheme

Begonnen von Pusteblumi, Donnerstag, 27. November 2014, 00:25

Vorheriges Thema - Nächstes Thema

Pusteblumi

Hallo miteinander,

ich sitze vor einem kniffeligen Problem:

Ich möchte gerne für Analysezwecke die Noten stellenweise farbig hinterlegen. Hier ein erster Versuch:

\version "2.18.0"

{
  << { R1 c'2 g' c' r R1 }
     \\
     {
       \override Voice.ClusterSpanner.color = #(rgb-color 0.5 0.6 1)
       \override Voice.ClusterSpanner.layer = #-1
       \makeClusters { s1 c'2 g' c' s s1 }
     }
     \\
     {
       \override Voice.ClusterSpanner.color = #(rgb-color 1.0 0.9 0.5)
       \override Voice.ClusterSpanner.layer = #-2
       \makeClusters { s1 <g c'''> q4 q2. s1 }
     }
  >>
}


Die blaue Linie, die die Notenköpfe verbindet, besteht aus zweckentfremdeten Clustern. Damit sie die Noten und Notenlinien nicht verdeckt, ist sie in die Ebene "-1" verschoben.

Auch der gelbe Hintergrund besteht aus einem Cluster in Ebene "-2". Das kann aber auch Nachteile haben.
Praktischer wäre für mich eine scheme-Funktion, die ich (leicht modifiziert) aus dem Lilypond Snippet 726 "Coloring staves" übernommen habe:

\version "2.18.0"

bgColor =
#(define-music-function (parser location y-lower y-upper color) (number? number? string?)
   #{\stopStaff
     \override Staff.StaffSymbol $'stencil =
     $(lambda (grob)
        (let* ((staff (ly:staff-symbol::print grob))
               (X-ext (ly:stencil-extent staff X))
               (Y-ext (ly:stencil-extent staff Y)))
          (set! Y-ext (cons
                       (- (car Y-ext) y-lower)
                       (+ (cdr Y-ext) y-upper)))
          (ly:grob-set-property! grob 'layer -10)
          (ly:stencil-add
           (ly:make-stencil (list 'color (eval-string color)
                              (ly:stencil-expr (ly:round-filled-box X-ext Y-ext 0))
                              X-ext Y-ext))
           staff)))
     \startStaff
   #})

{
  << { R1
       \bgColor #3 #3 "(rgb-color 1.0 0.9 0.5)" c'2 g' c'
       \bgColor #0 #0 "white" r R1 }
     \\
     {
       \override Voice.ClusterSpanner.color = #(rgb-color 0.5 0.6 1)
       \override Voice.ClusterSpanner.layer = #-1
       \makeClusters { s1 c'2 g' c' s s1 }
     }
  >>
}


Hier kommt das Problem:
Die Notenlinien und das gelbe Rechteck liegen in derselben Ebene, und es ist jetzt nicht mehr möglich, den blauen Cluster dazwischen zu platzieren.

Ich bin mit scheme hoffnungslos überfordert... Soweit ich verstanden habe, fügt die Funktion zum ursprünglichen StaffSymbol zusätzlich ein farbiges Rechteck hinzu.
Ist es möglich, die scheme-Funktion so zu ändern, dass StaffSymbol und Rechteck in verschiedenen Ebenen abgelegt werden?


Danke im Voraus!

Viele Grüße,
Klaus