[ << Tweaking output ] | [Top][Contents][Index] | [ Templates >> ] |
[ < The transparent property ] | [ Up : Visibility and color of objects ] | [ Size of objects > ] |
The color
property
Finally let us try making the bar lines invisible by coloring them white. (There is a difficulty with this in that the white bar line may or may not blank out the staff lines where they cross. You may see in some of the examples below that this happens unpredictably. The details of why this is so and how to control it are covered in Painting objects white. But at the moment we are learning about color, so please just accept this limitation for now.)
The grob-interface
specifies that the
color
property value is a list, but there is no
explanation of what that list should be. The list it
requires is actually a list of values in internal units,
but, to avoid having to know what these are, several ways
are provided to specify colors. The first way is to use one
of the predefined ‘CSS’ colors listed in
List of colors. To set the bar lines to white
we write
\relative { \time 12/16 \override Staff.BarLine.color = "white" c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
and again, we see the bar lines are not visible. Note that
"white"
is not preceded by an apostrophe – it is not
a symbol, but a character string, mapped to a predefined list
of internal values. In that regard, LilyPond’s syntax mimics the
CSS language
commonly used in webpages; in addition to predefined names,
we can specify a hexadecimal color code:
\relative { \time 12/16 \override Staff.BarLine.color = "#FFFFFF" c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
We could even define that color as a variable, and then use that variable as a property definition. Since it is both a LilyPond variable and a Scheme object, it can be prefixed with a backslash or with a hash character without any difference:
whiteVar = "#FFFFFF" \relative { \time 12/16 \override Staff.BarLine.color = \whiteVar c''4 b8 c d16 c d8 | \override Staff.BarLine.color = #whiteVar g,8 a16 b8 c d4 e16 | e8 }
Another way of adding colors to your score is by using a function.
There are two useful functions in this regard; one is the
x11-color
function, which we’ll get to use shortly.
The other one, the rgb-color
function, closely
demonstrates LilyPond’s internal logic: it takes
three arguments giving the intensities of the red, green, and
blue colors. These take values in the range 0 to 1. So to
set the color to red the value should be (rgb-color 1 0 0)
and to white it should be (rgb-color 1 1 1)
:
\relative { \time 12/16 \override Staff.BarLine.color = #(rgb-color 1 1 1) c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Note that in this case the whole function call has to be
enclosed in parentheses. The same can be said of the
x11-color
function which we just skipped over.
x11-color
, again, maps predefined color names
to internal values – but offers many more choices
than CSS names, as you can see in List of colors).
For example, the X11 set of colors includes an extensive
grey scale, whose names range from black, 'grey0
,
to white, 'grey100
, in steps of 1. Let’s illustrate
this by setting all the layout objects in our example to
various shades of grey:
\relative { \time 12/16 \override Staff.StaffSymbol.color = #(x11-color 'grey30) \override Staff.TimeSignature.color = #(x11-color 'grey60) \override Staff.Clef.color = #(x11-color 'grey60) \override Voice.NoteHead.color = #(x11-color 'grey85) \override Voice.Stem.color = #(x11-color 'grey85) \override Staff.BarLine.color = #(x11-color 'grey10) c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Note the contexts associated with each of the layout objects. It is important to get these right, or the commands will not work! Remember, the context is the one in which the appropriate engraver is placed. The default context for engravers can be found by starting from the layout object, going from there to the engraver which produces it, and on the engraver page in the IR it tells you in which context the engraver will normally be found.
[ << Tweaking output ] | [Top][Contents][Index] | [ Templates >> ] |
[ < The transparent property ] | [ Up : Visibility and color of objects ] | [ Size of objects > ] |