LilyPond Notation Reference: 5.3.2 The \set command

### 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. `localKeySignature` (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, multimeasure rests will be combined into a single bar if the context property `skipBars` is set to `#t`:

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

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
>     <<
>       {
>         e8 e e e
>         \set autoBeaming = ##t
>         e8 e e e
>       } \\ {
>         c8 c c c c8 c c c
>       }
>     >>

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 bottom-most 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

Contexts are hierarchical, so if an enclosing context was specified, for example `Staff`, then the change would also apply to all `Voice`s 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
>     <<
>       {
>         \unset autoBeaming
>         e8 e e e
>         \unset Score.autoBeaming
>         e8 e e e
>       } \\ {
>         c8 c c c c8 c c c
>       }
>     >>

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` command by `\once` makes the setting apply to only a single time-step:

>     c4
>     \once \set fontSize = #4.7
>     c4
>     c4

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

#### See also

Internals Reference:

Tunable context properties.

其它语言：deutsch, español, français, 日本語。

#### LilyPond — Notation Reference