LilyPond Benutzerhandbuch: 5.3.2 Der \set-Befehl

### 5.3.2 Der `\set`-Befehl

Jeder Kontext kann unterschiedliche Eigenschaften besitzen, Variablen, die in diesem Kontext definiert sind. Sie können während der Interpretation des Kontextes verändert werden. Hierzu wird der `\set`-Befehl eingesetzt:

>     \set Kontext.Eigenschaft = #Wert

Wert ist ein Scheme-Objekt, weshalb ihm `#` vorangestellt werden muss.

Kontexteigenschaften werden üblicherweise mit `kleinGroßbuchstabe` benannt. Sie kontrollieren vor allem die Übersetzung von Musik in Notation, wie etwa `localAlterations`, welche bestimmt, wann ein Taktstrich gesetzt werden muss. Kontexteigenschaften können ihren Wert mit der Zeit ändern, während eine Notationsdatei interpretiert wird. Ein gutes Beispiel dafür ist `measurePosition`, was die Position der Noten im Takt angibt. Kontexteigenschaften werden mit dem `\set`-Befehl verändert.

Mehrtaktpausen etwa können in einen Takt zusammengefasst werden, wenn die Kontexteigenschaft `skipBars` (Takte überspringen) auf `#t` (wahr) gesetzt wird:

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

Wenn das Kontext-Argument ausgelassen wird, bezieht sich der Befehl auf den gerade aktiven unterstmöglichen Kontext, üblicherweise `ChordNames`, `Voice` oder `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
>     }

Die Änderung wird zur Laufzeit während der Musik interpretiert, sodass diese Einstellung sich nur auf die zweite Gruppe von Achteln auswirkt.

Dabei gilt zu beachten, dass der unterste Kontext nicht immer die Eigenschaft enthält, die verändert werden soll. Wenn man beispielsweise `skipBars` aus dem oberen Beispiel ohne Angabe des Kontextes zu verändern sucht, hat der Befehl keine Auswirkung, weil er sich auf den `Voice`-Kontext bezieht, die Eigenschaft sich aber im `Score`-Kontext befindet:

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

Kontexte sind hierarchisch angeordnet. Wenn ein übergeordneter Kontext angegeben wird, etwa `Staff`, dann beziehen sich die Änderungen auf alle Stimmen (`Voice`), die in diesem Kontext enthalten sind.

Es gibt auch einen `\unset`-Befehl:

>     \unset Kontext.Eigenschaft

der bewirkt, dass die vorgenommenen Definitionen für Eigenschaft entfernt werden. Dieser Befehl macht nur Einstellungen im richtigen Kontext rückgängig. Wenn also im `Staff`-Kontext die Bebalkung ausgeschaltet wird:

>     \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
>     }

Wie für `\set` muss das Kontext-Argument für den untersten Kontext nicht mitangegeben werden. Die zwei Versionen

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

verhalten sich gleich, wenn die gegenwärtige Basis der `Voice`-Kontext ist.

Einstellungen, die nur einmal vorgenommen werden sollen, können mit `\once` notiert werden, etwa:

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

Eine vollständige Beschreibung aller vorhandenen Kontexteigenschaften findet sich in der Referenz der Interna, siehe Tunable context properties.

#### Siehe auch

Internals Reference:

Tunable context properties.

#### LilyPond – Notationsreferenz v2.24.4 (stabiler Zweig).