5.3.2 The \set command

Each context has a set of properties, variables contained in that context. Context properties are changed with the \set command, which has the following syntax:

\set context.property = #value

value is a Scheme object, which is why it must be preceded by the # character.

Contexts properties are usually named in studlyCaps. They mostly control the translation from music to notation, e.g., localAlterations (for determining whether to print accidentals), or measurePosition (for determining when to print a bar line). Context properties can change value over time while interpreting a piece of music; measurePosition is an obvious example of this. Context properties are modified with \set.

For example, multi-measure rests will be combined into a single bar (as explained in Compressing empty measures) if the context property skipBars is set to #t:

R1*2
\set Score.skipBars = ##t
R1*2

[image of music]

If the context argument is left out, then the property will be set in the current bottom context (typically ChordNames, Voice, TabVoice, or Lyrics).

\set Score.autoBeaming = ##f
\relative {
  e''8 e e e
  \set autoBeaming = ##t
  e8 e e e
} \\
\relative {
  c''8 c c c c8 c c c
}

[image of music]

The change is applied ‘on-the-fly’, during the music, so that the setting only affects the second group of eighth notes.

Note that the bottommost context does not always contain the property that you wish to change – for example, attempting to set the skipBars property of the default bottom context, in this case Voice, will have no effect, because skipBars is a property of the Score context.

R1*2
\set skipBars = ##t
R1*2

[image of music]

Contexts are hierarchical, so if an enclosing context was specified, for example Staff, then the change would also apply to all Voices in the current staff.

The \unset command:

\unset context.property

is used to remove the definition of property from context. This command removes the definition only if it is set in context. Properties that have been set in enclosing contexts will not be altered by an unset in an enclosed context:

\set Score.autoBeaming = ##t
\relative {
  \unset autoBeaming
  e''8 e e e
  \unset Score.autoBeaming
  e8 e e e
} \\
\relative {
  c''8 c c c c8 c c c
}

[image of music]

Like \set, the context argument does not have to be specified for a bottom context, so the two statements

\set Voice.autoBeaming = ##t
\set autoBeaming = ##t

are equivalent if the current bottom context is Voice.

Preceding a \set or \unset command by \once makes the setting apply to only a single time step:

c''4
\once \set fontSize = #4.7
c''4
c''4

[image of music]

A full description of all available context properties is in the internals reference, see Tunable context properties.

See also

Internals Reference: Tunable context properties.


LilyPond — Notation Reference v2.24.4 (stable-branch).