[ << Tweaking output ] | [Top][Contents][Index] | [ Templates >> ] |
[ < Using variables for layout adjustments ] | [ Up : Further tweaking ] | [ Other sources of information > ] |
5.8.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 = \tweak self-alignment-X -0.6 #(make-dynamic-script #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #}) inst = #(define-music-function (string) (string?) #{ <>^\markup \bold \box #string #}) \relative { \tempo 4=50 a'4.\mpdolce d8 cis4--\glissando a | b4 bes a2 | \inst "Clarinet" cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 | }
Let’s 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 = \tweak self-alignment-X -0.6 #(make-dynamic-script #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #}) inst = #(define-music-function (string) (string?) #{ <>^\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 { \tempo 4=50 a'4.\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 = \tweak self-alignment-X -0.6 #(make-dynamic-script #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #}) inst = #(define-music-function (string) (string?) #{ <>^\markup \bold \box #string #}) \layout{ \context { \Score \override MetronomeMark.extra-offset = #'(-5 . 0) \override MetronomeMark.padding = 3 } \context { \Staff \numericTimeSignature } \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.
%%% web-publish.ily mpdolce = \tweak self-alignment-X -0.6 #(make-dynamic-script #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #}) inst = #(define-music-function (string) (string?) #{ <>^\markup \bold \box #string #}) #(set-global-staff-size 23) \layout{ \context { \Score \override MetronomeMark.extra-offset = #'(-5 . 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 that
contains only the definitions of \mpdolce
and \inst
, a
web-publish.ily file that contains only the \layout
section listed above, and a university.ily file that
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.25.22" #(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"
[ << Tweaking output ] | [Top][Contents][Index] | [ Templates >> ] |
[ < Using variables for layout adjustments ] | [ Up : Further tweaking ] | [ Other sources of information > ] |