33.5 Changing context default settings

Context and grob properties can be changed with \set and \override commands, see Modifying properties. These commands create music events, making the changes take effect at the point in time the music is being processed.

In contrast, this section explains how to change the default values of context and grob properties at the time the context is created. There are two ways of doing this. One modifies the default values in all contexts of a particular type, the other modifies the default values in just one particular instance of a context.


33.5.1 Changing all contexts of the same type

The default context settings which are to be used for typesetting in Score, Staff, Voice, and other contexts may be specified in a \context block within any \layout block.

Settings for MIDI output as opposed to typesetting has to be separately specified in \midi blocks (see Output definitions – blueprints for contexts).

The \layout block should be placed within the \score block to which it is to apply, after the music.

\layout {
  \context {
    \Voice
    [context settings for all Voice contexts]
  }
  \context {
    \Staff
    [context settings for all Staff contexts]
  }
}

The following types of settings may be specified:

  • An \override command, but with the context name omitted.
    \score {
      \relative {
        a'4^"Thicker stems" a a a
        a4 a a\ff a
      }
      \layout {
        \context {
          \Staff
          \override Stem.thickness = 4.0
        }
      }
    }
    
    [image of music]
  • Directly setting a context property.
    \score {
      \relative {
        a'4^"Smaller font" a a a
        a4 a a\ff a
      }
      \layout {
        \context {
          \Staff
          fontSize = -4
        }
      }
    }
    
    [image of music]
  • A predefined command such as \dynamicUp or a music expression like \accidentalStyle dodecaphonic.
    \score {
      \relative {
        a'4^"Dynamics above" a a a
        a4 a a\ff a
      }
      \layout {
        \context {
          \Voice
          \dynamicUp
        }
        \context {
          \Staff
          \accidentalStyle dodecaphonic
        }
      }
    }
    
    [image of music]
  • A user-defined variable containing a \with block; for details of the \with block, see Changing just one specific context.
    StaffDefaults = \with {
      fontSize = -4
    }
    
    \score {
      \new Staff {
        \relative {
          a'4^"Smaller font" a a a
          a4 a a a
        }
      }
      \layout {
        \context {
          \Staff
          \StaffDefaults
        }
      }
    }
    
    [image of music]

Property-setting commands can be placed in a \layout block without being enclosed in a \context block. Such settings are equivalent to including the same property-setting commands at the start of every context of the type specified. If no context is specified every bottom-level context is affected (see Bottom-level contexts – voices). The syntax of a property-setting command in a \layout block is the same as the same command written in the music stream.

\score {
  \new Staff {
    \relative {
      a'4^"Smaller font" a a a
      a4 a a a
    }
  }
  \layout {
    \accidentalStyle dodecaphonic
    \set fontSize = -4
    \override Voice.Stem.thickness = 4.0
  }
}
[image of music]

33.5.2 Changing just one specific context

The context properties of just one specific context instance can be changed in a \with block. All other context instances of the same type retain the default settings built into LilyPond and modified by any \layout block within scope. The \with block must be placed immediately after the \new context-type command:

\new Staff \with {
  [context settings for this context instance only]
} {
  …
}

Alternatively, if the music is being entered using the short form of the input mode-specifying commands, e.g., \chords rather than \chordmode, the \with command must be placed immediately after the mode-specifying command:

\chords \with {
  [context settings for this (implicit) context instance only]
} {
  …
}

as it is the implicit context created by these short forms which should be modified. The same consideration applies to the other input mode-specifying short forms (\drums, \figures), see Input modes.

Since context modifications specified in \with blocks are inside music, they affect all outputs (typesetting and MIDI) as opposed to changes within an output definition.

The following types of settings may be specified:

  • An \override command, but with the context name omitted.
    \score {
      \new Staff {
        \new Voice \with { \override Stem.thickness = 4.0 } {
          \relative {
            a'4^"Thick stems" a a a
            a4 a a a
          }
        }
      }
    }
    
    [image of music]
  • Directly setting a context property.
    \score {
      <<
        \new Staff {
          \relative {
            a'4^"Default font" a a a
            a4 a a a
          }
        }
        \new Staff \with { fontSize = -4 } {
          \relative {
            a'4^"Smaller font" a a a
            a4 a a a
          }
        }
      >>
    }
    
    [image of music]
  • A predefined command such as \dynamicUp.
    \score {
      <<
        \new Staff {
          \new Voice {
            \relative {
              a'4^"Dynamics below" a a a
              a4 a a\ff a
            }
          }
        }
        \new Staff \with { \accidentalStyle dodecaphonic } {
          \new Voice \with { \dynamicUp } {
            \relative {
              a'4^"Dynamics above" a a a
              a4 a a\ff a
            }
          }
        }
      >>
    }
    
    [image of music]

See also

Notation Reference: Input modes.


33.5.3 Order of precedence

The value of a property which applies at a particular time is determined as follows:

  • if an \override or \set command in the input stream is in effect that value is used,
  • otherwise the default value taken from a \with statement on the context initiation statement is used,
  • otherwise the default value taken from the most recent appropriate \context block in the \layout or \midi blocks is used,
  • otherwise LilyPond’s built-in default is used.

See also

Learning Manual: Modifying context properties.

Notation Reference: Contexts explained, Bottom-level contexts – voices, \set and \unset, \override and \revert, The \layout block.


LilyPond Notation Reference v2.25.27 (development-branch).