Hello everybody,

for analysis purposes, I'd like to put a colored background behind some notes.
Here's my first approach:


\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 }
     }
  >>
}


Result: http://4.bp.blogspot.com/-h3plzLbjpdw/VHZZo4oVqlI/AAAAAAAAACY/6gL6EEf0JGk/s1600/ex01.gif

The blue line between the note heads is a cluster. To avoid covering the notes and staff lines, it's located in the layer "-1". The yellow rectangle in the background (layer "-2") is achieved by a cluster as well. But as soon as the score gets longer, this can be quite a mess...

I would therefore prefer a (slightly modified) scheme function from Lilipond Snippet 726 "Coloring staves": http://lsr.di.unimi.it/LSR/Item?id=726


\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 }
     }
  >>
}

Result: http://2.bp.blogspot.com/-tShfMsyLr04/VHZZo4nFNeI/AAAAAAAAACU/SDxqrHklKvk/s1600/ex02.gif

Here is my problem:
Now the staff lines and the yellow rectangle are located in the same layer, so it's not possible to place the blue cluster between them. Is there a way to make the scheme function put the staff lines ("StaffSymbol") and the yellow rectangle into different layers?

Thanks in advance,
Klaus

_______________________________________________
lilypond-user mailing list
lilypond-user@gnu.org
https://lists.gnu.org/mailman/listinfo/lilypond-user

Reply via email to