LilyPond files, preamble of

Abjad’s LilyPond file class accepts a list of items. Many LilyPond files comprise just a score:

>>> voice = abjad.Voice("c'4 d'4 e'4 f'4", name="Violin_Voice")
>>> staff = abjad.Staff([voice], name="Violin_Staff")
>>> score = abjad.Score([staff], name="Score")
>>> lilypond_file = abjad.LilyPondFile([score])

LilyPond version and language commands are inserted automatically:

>>> string = abjad.lilypond(lilypond_file)
>>> print(string)
\version "2.23.9"
\language "english"
\context Score = "Score"
<<
    \context Staff = "Violin_Staff"
    {
        \context Voice = "Violin_Voice"
        {
            c'4
            d'4
            e'4
            f'4
        }
    }
>>

You can type all other LilyPond settings directly into a string:

>>> preamble = r"""#(set-global-staff-size 14)
... 
... \header {
...     composer = \markup { Josquin }
...     subtitle = \markup { Agnus dei }
...     title = \markup { Missa sexti toni }
... }
... 
... \layout {
...     indent = 0
... }"""

Bundle the preamble and score like this:

>>> lilypond_file = abjad.LilyPondFile([preamble, score])

Then everything appears together:

>>> string = abjad.lilypond(lilypond_file)
>>> print(string)
\version "2.23.9"
\language "english"
#(set-global-staff-size 14)

\header {
    composer = \markup { Josquin }
    subtitle = \markup { Agnus dei }
    title = \markup { Missa sexti toni }
}

\layout {
    indent = 0
}
\context Score = "Score"
<<
    \context Staff = "Violin_Staff"
    {
        \context Voice = "Violin_Voice"
        {
            c'4
            d'4
            e'4
            f'4
        }
    }
>>

Click on the image below. Abjad generates this same LilyPond input behind the scenes when you call show:

>>> abjad.show(lilypond_file)