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

[image of music]

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
}

[image of music]

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

[image of music]

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
}

[image of music]

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

[image of music]

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 Benutzerhandbuch v2.25.22 (development-branch).