Hallo erich,
willkommen im Forum.
Zum Problem:
Erst mal etwas Hintergrund:
Zur Zeit macht LilyPond aus der Anweisung \bar ":|.|:"
einen Stencil. Diesen kann man aber nicht zur Hälfte einfärben. Der entsprechende Code ist in den .cc-Dateien weggeschlossen und damit nicht für den Benutzer zugänglich.
Ich schrieb "zur Zeit", denn Marc Hohl, Arnold und ich, wir versuchen die BarLines aus der Versenkung in C++ herauszuholen, also nach scheme zu portieren, und als zweiten Schritt die ganze Erstellung der BarLines zu ändern, sodaß jeder Benutzer-definierte Code akzeptiert werden kann.
Wenn es Dich interessiert, die Portierung C++ -> scheme kann man
hier verfolgen. Das neue (und noch stark zu verbessernde user-interface) habe ich erstmalig
hier gepostet.
Das ganze wird aber noch eine Weile dauern bis es reif ist in den source-code implementiert zu werden.
Teilweiser work-around:
Im Moment ist die einzige Möglichkeit Dein Ziel zu erreichen, eine Neu-konstruktion des BarLine-stencil.
Schau mal wie Dir das Ergebnis gefällt. Der Haken ist, daß es mit SpanBars nicht funktioniert (massive Verschiebungen!).
Falls Dir ansonsten irgendwelche Details nicht gefallen, so könnte ich sie ja ändern.
\version "2.14.2"
#(define (make-simple-bar-line grob width extent rounded)
(let* ((height (interval-length extent))
(blot-diameter (if rounded
(ly:output-def-lookup (ly:grob-layout grob) 'blot-diameter)
0)))
(ly:round-filled-box (cons 0 width)
extent
blot-diameter)))
#(define (make-thick-bar-line grob width extent rounded)
(let* ((staff-line-thickness (ly:staff-symbol-line-thickness grob))
(fatline (* (ly:grob-property grob 'thick-thickness 1) staff-line-thickness)))
(make-simple-bar-line grob fatline extent rounded)))
#(define (make-colon-bar-line grob)
(let* ((dot (ly:font-get-glyph (ly:grob-default-font grob) "dots.dot"))
(staff-symbol (ly:grob-object grob 'staff-symbol))
(line-count (ly:grob-property staff-symbol 'line-count 0))
(staff-space (ly:staff-symbol-staff-space grob))
(dist (cond ((odd? line-count) 1)
((= line-count 0) 1)
((< staff-space 2) (* 2 staff-space))
(else (* 0.5 staff-space))))
(colon empty-stencil))
(set! colon (ly:stencil-add colon dot))
(set! colon (ly:stencil-translate-axis colon dist Y))
(set! colon (ly:stencil-add colon dot))
(set! colon (ly:stencil-translate-axis colon (/ dist -2) Y))
colon))
#(define (repeat-left grob kern width extent rounded)
(ly:stencil-combine-at-edge
(ly:stencil-combine-at-edge
(make-colon-bar-line grob)
X RIGHT
(make-simple-bar-line grob width extent rounded)
kern)
X RIGHT
(make-thick-bar-line grob width extent rounded)
kern))
#(define (repeat-right grob kern width extent rounded)
(ly:stencil-scale
(repeat-left grob kern width extent rounded)
-1 1))
#(define (double-repeat-color-right grob)
(let* ((staff-line (ly:output-def-lookup (ly:grob-layout grob) 'line-thickness))
(kern (* (ly:grob-property grob 'kern) staff-line))
(width (* (ly:grob-property grob 'hair-thickness) staff-line))
(extent (ly:grob-property grob 'bar-extent)))
(ly:stencil-combine-at-edge
(repeat-left grob kern width extent #t)
X RIGHT
(ly:stencil-in-color
(repeat-right grob kern width extent #t)
1 0 0)
kern)))
#(define (double-repeat-color-left grob)
(ly:stencil-scale
(double-repeat-color-right grob )
-1 1))
repeatBarColorRight =
\once \override Staff.BarLine #'stencil = #double-repeat-color-right
repeatBarColorLeft =
\once \override Staff.BarLine #'stencil = #double-repeat-color-left
\relative c' {
c1
d
\repeatBarColorRight
e
f
\repeatBarColorLeft
g
}HTH,
Harm