LilyPond beginnershandleiding: 4.6.3 Style sheets

### 4.6.3 Style sheets

The output that LilyPond produces can be heavily modified; see Tweaking output, for details. But what if you have many input files that you want to apply your tweaks to? Or what if you simply want to separate your tweaks from the actual music? This is quite easy to do.

Let’s look at an example. Don’t worry if you don’t understand the parts with all the `#()`. This is explained in Advanced tweaks with Scheme.

>     mpdolce =
>     #(make-dynamic-script
>       (markup #:hspace 0
>               #:translate '(5 . 0)
>               #:line (#:dynamic "mp"
>                       #:text #:italic "dolce")))

>     inst =
>     #(define-music-function
>          (parser location string)
>          (string?)
>        (make-music
>         'TextScriptEvent
>         'direction UP
>         'text (markup #:bold (#:box string))))

>     \relative c'' {
>       \tempo 4=50
>       a4.\mpdolce d8 cis4--\glissando a |
>       b4 bes a2 |
>       \inst "Clarinet"
>       cis4.\< d8 e4 fis |
>       g8(\! fis)-. e( d)-. cis2 |
>     }

There are some problems with overlapping output; we’ll fix those using the techniques in Moving objects. But let’s also do something about the `mpdolce` and `inst` definitions. They produce the output we desire, but we might want to use them in another piece. We could simply copy-and-paste them at the top of every file, but that’s an annoyance. It also leaves those definitions in our input files, and I personally find all the `#()` somewhat ugly. Let’s hide them in another file:

>     %%% save this to a file called "definitions.ily"
>     mpdolce =
>     #(make-dynamic-script
>       (markup #:hspace 0
>               #:translate '(5 . 0)
>               #:line (#:dynamic "mp"
>                       #:text #:italic "dolce")))

>     inst =
>     #(define-music-function
>          (parser location string)
>          (string?)
>        (make-music
>         'TextScriptEvent
>         'direction UP
>         'text (markup #:bold (#:box string))))

We will refer to this file using the `\include` command near the top of the music file. (The extension ‘`.ily`’ is used to distinguish this included file, which is not meant to be compiled on its own, from the main file.) Now let’s modify our music (let’s save this file as ‘`music.ly`’).

>     \include "definitions.ily"

>     \relative c'' {
>       \tempo 4=50
>       a4.\mpdolce d8 cis4--\glissando a |
>       b4 bes a2 |
>       \inst "Clarinet"
>       cis4.\< d8 e4 fis |
>       g8(\! fis)-. e( d)-. cis2 |
>     }

That looks better, but let’s make a few changes. The glissando is hard to see, so let’s make it thicker and closer to the note heads. Let’s put the metronome marking above the clef, instead of over the first note. And finally, my composition professor hates ‘C’ time signatures, so we’d better make that ‘4/4’ instead.

Don’t change ‘`music.ly`’, though. Replace our ‘`definitions.ily`’ with this:

>     %%%  definitions.ily
>     mpdolce =
>     #(make-dynamic-script
>       (markup #:hspace 0
>               #:translate '(5 . 0)
>               #:line (#:dynamic "mp"
>                       #:text #:italic "dolce")))

>     inst =
>     #(define-music-function
>          (parser location string)
>          (string?)
>        (make-music
>         'TextScriptEvent
>         'direction UP
>         'text (markup #:bold (#:box string))))

>     \layout{
>       \context {
>         \Score
>         \override MetronomeMark #'extra-offset = #'(-9 . 0)
>         \override MetronomeMark #'padding = #'3
>       }
>       \context {
>         \Staff
>         \override TimeSignature #'style = #'numbered
>       }
>       \context {
>         \Voice
>         \override Glissando #'thickness = #3
>         \override Glissando #'gap = #0.1
>       }
>     }

That looks nicer! But now suppose that I want to publish this piece. My composition professor doesn’t like ‘C’ time signatures, but I’m somewhat fond of them. Let’s copy the current ‘`definitions.ily`’ to ‘`web-publish.ily`’ and modify that. Since this music is aimed at producing a pdf which will be displayed on the screen, we’ll also increase the overall size of the output.

>     %%%  definitions.ily
>     mpdolce =
>     #(make-dynamic-script
>       (markup #:hspace 0
>               #:translate '(5 . 0)
>               #:line (#:dynamic "mp"
>                       #:text #:italic "dolce")))

>     inst =
>     #(define-music-function
>          (parser location string)
>          (string?)
>        (make-music
>         'TextScriptEvent
>         'direction UP
>         'text (markup #:bold (#:box string))))

>     #(set-global-staff-size 23)

>     \layout{
>       \context {
>         \Score
>         \override MetronomeMark #'extra-offset = #'(-9 . 0)
>         \override MetronomeMark #'padding = #'3
>       }
>       \context {
>         \Staff
>       }
>       \context {
>         \Voice
>         \override Glissando #'thickness = #3
>         \override Glissando #'gap = #0.1
>       }
>     }

Now in our music, I simply replace `\include "definitions.ily"` with `\include "web-publish.ily"`. Of course, we could make this even more convenient. We could make a ‘`definitions.ily`’ file which contains only the definitions of `mpdolce` and `inst`, a ‘`web-publish.ily`’ file which contains only the `\layout` section listed above, and a ‘`university.ily`’ file which contains only the tweaks to produce the output that my professor prefers. The top of ‘`music.ly`’ would then look like this:

>     \include "definitions.ily"

>     %%%  Only uncomment one of these two lines!
>     \include "web-publish.ily"
>     %\include "university.ily"

This approach can be useful even if you are only producing one set of parts. I use half a dozen different ‘style sheet’ files for my projects. I begin every music file with `\include "../global.ily"`, which contains

>     %%%   global.ily
>     \version "2.14.1"

>     #(ly:set-option 'point-and-click #f)

>     \include "../init/init-defs.ly"
>     \include "../init/init-layout.ly"
>     \include "../init/init-headers.ly"
>     \include "../init/init-paper.ly"

Andere talen: English, česky, deutsch, español, français, 日本語.

#### LilyPond – Beginnershandleiding