Dec 8, 2015

A Small Holiday Gift

So, I've not been able to keep this blog as up-to-date as I'd like to. To remedy that a little, here's a small holiday gift to you. This gift was originally given by Mark Adler on the Finale Blog, but since he offered it freely, I decided to pass it along, with a little extra for all the LilyPond users out there.

Mark has created a font that has some fun clefs, noteheads, and rehearsal marks (which you should download here). I especially like the candy-cane clefs and jingle bell noteheads. Here is the full glyph set contained in the font (click to zoom-in):

If you look closely, you'll notice a couple of things, like both rehearsal marks for "J" are not in their correct code point and thus all the other glyphs have been shifted left one code point in the font table. Mark explains the reasoning this way:
Traditionally, because “I” and “J” are easily confused, “J” is never used. If your heart is set on “J”, I have included it elsewhere in the font, just not in the rehearsal letter sequence.
This seems to go against what is documented in LilyPond's NR:
The letter ‘I’ is skipped in accordance with engraving traditions.
Whatever. I'm not sure what to believe, so if you have experience in this regard, leave a comment below (thanks!). Other things to note are the boxed rehearsal marks are in the upper-case letters and the ball ornament rehearsal marks are in the lower-case letters (which currently isn't supported in the list of rehearsal mark formatters). Anyone want to tackle adding a formatter that allows lower-case letters? Let me know ;-)

Now, to use the font in LilyPond, I borrowed some of Nathan Ho's early code for using SMuFL fonts (which you can read about here) and adapted it for Mark's font. Once you've downloaded the "FinaleMisc.ily" stylesheet (get it here), then you only need to add a couple of lines to your input file to utilize any of Mark's designs in your own scores. Here's the code I used to create the first four bars of "Jingle Bells" above:
\version "2.19.31"
\include "FinaleMisc.ily"

pianoStruct = {
  \key f \major
  \time 4/4 \numericTimeSignature
  s1 |
  \set Staff.forceClef = ##t
  s1 |
  \set Staff.forceClef = ##t
  s1 |
  \set Staff.forceClef = ##t
  s1 |
pianoRH = {
  \clef treble
  a'4 a' a'2 |
  a'4 a' a'2 |
  a'4 c'' f' g' |
  a'1 |

pianoLH = {
  \clef bass
  f,4 a, c f |
  a4 f c e |
  f4 c d e |
  f4 e d c |

\score {
  \new PianoStaff <<
    \new Staff << \pianoStruct \pianoRH >>
    \new Staff << \pianoStruct \pianoLH >>
  \layout { 
    indent = 0
    ragged-right = ##f
    line-width = 5\in
  \midi { \tempo 4 = 180 }
In this example, the first line you need to add is
\include "FinaleMisc.ily"
which makes all the necessary commands available. After that, you'll notice a handful of commands:
  • \christmasStyleOn
  • \engraverClefOn
  • \splitClefOn
  • \polygonClefOn
These can occur inline with the music content or in a \layout block. Each of these commands have their "Off" counterparts to annul the overrides that the "On" commands invoke. Here's a complete list of commands that are included in "FinaleMisc.ily":
  • \candyCaneClefOn / ...Off - treble, alto, and bass clefs
  • \engraverClefOn / ...Off - treble, alto, and bass clefs
  • \splitClefOn / ...Off - treble and bass clefs (no alto clef)
  • \polygonClefOn / ...Off - treble, alto, and bass clefs
  • \holidayNotesOn / ...Off - holiday bell noteheads
  • \christmasStyleOn / ...Off - shortcut to use candycane clefs and bell noteheads
So there you go. Now you can spice up your holiday scores with candy canes and silver bells. To that end, here's my small Christmas gift to all the beginning piano players out there (like my daughter) which shows how a full score might look using Mark's font (click on image to download printable PDF):

Jingle Bells by Leigh Verlag

Merry Christmas & Happy Engraving!


  1. Amazing work! Thank you so very much! I downloaded the zip file and unpacked it but all I got was FinaleMisc.otf where is the FinaleMisc.ily file? Please forgive me as I am not very techie... PS I did rename the file ChristmasFont.otf and copied it to the otf directory and made the change in your .ly file to both ChristmasFont.ily when that didn't work changed it to ChristmasFont.otf PS I am using \version "2.18.2" Thank you so very much again for this amazing work...

  2. No, you can use a \include instruction, you can include the path (or place into the working file path) and place the font in otf folder on your lilypond installation.