5.3.2 Der \set
-Befehl
Jeder Kontext kann unterschiedliche Eigenschafte 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
Das kann beispielsweise so aussehen:
R1*2 \set Score.skipBars = ##t R1*2
Mit diesem Befehl werden Takte übersprungen, die keine Noten
haben. Als Resultat werden Ganztaktpausentakte komprimiert.
Der Wert, der der Eigenschaft zugewiesen wird, ist ein
Scheme-Objekt. In diesem Fall ist es #t
, der
Boolsche Wert für „wahr“.
Wenn das Kontext-Argument ausgelassen wird, bezieht sich
der Befehl auf den gerade aktiven unterstmöglichen Kontext,
üblicherweise ChordNames
, Voice
oder
Lyrics
. In diesem Beispiel:
c8 c c c \set autoBeaming = ##f c8 c c c
wurde das Kontext-Argument für den \set
-Befehl
ausgelassen, sodass automatische Bebalkung für die aktuelle
Stimme (Voice
-Kontext) abgeschaltet wird. 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. Da der Befehl zu dem Zeitpunkt gültig
wird, an dem er im Quelltext auftritt, wird im Bebalkungsbeispiel
oben die Einstellung erst für die zweite Achtelgruppe wirksam.
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 Staff.autoBeaming = ##f
bezieht sich das auch auf die in dem Staff
enthaltenen Stimmen.
Der Befehl
\unset Voice.autoBeaming
ist jedoch ungültig und bewirkt nichts. Damit die Einstellung richtig
rückgängig gemacht werden kann, muss der Befehl auf der gleichen
Kontextebene ausgeführt werden wie der ursprüngliche \set
-Befehl.
Hier braucht man also den Befehl:
\unset Staff.autoBeaming
Genauso wie für \set
, muss auch für \unset
der unterste
Kontext nicht angegeben werden, die zwei Befehle
\set Voice.autoBeaming = ##t \set autoBeaming = ##t
bedeuten also das Gleiche.
Einstellungen, die nur einmal vorgenommen werden sollen, können
mit \once
notiert werden, etwa:
c4 \once \set fontSize = #4.7 c4 c4
Damit wirkt sich die Änderung der Schriftgröße nur auf die zweite Note aus und wird automatisch wieder rückgängig gemacht.
Eine vollständige Beschreibung aller vorhandenen Kontexteigenschaften findet sich in der Referenz der Interna, siehe