[ << Tweaking output ] | [Top][Contents][Index][ ? ] | [ Templates >> ] | ||
[ < Using variables for tweaks ] | [ Up : Further tweaking ] | [ Other sources of information > ] |
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.13.27" #(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 tweaks ] | [ Up : Further tweaking ] | [ Other sources of information > ] |
Other languages: español, français, 日本語, nederlands.