3.3.4 Kontexteigenschaften verändern

Kontexte sind dafür verantwortlich, die Werte bestimmter Kontext-Eigenschaften zu speichern. Viele davon können verändert werden, um die Interpretation der Eingabe zu beeinflussen und die Ausgabe zu verändern. Kontexte werden mit dem \set-Befehl geändert. Er wird in Form

\set KontextBezeichnung.eigenschaftsBezeichnung = #Wert

verwendet, wobei KontextBezeichnung üblicherweise Score, Staff oder Voice ist. Der erste Teil kann auch ausgelassen werden; in diesem Fall wird Voice eingesetzt.

Die Bezeichnung von Kontexten-Eigenschaften besteht aus zwei Wörtern, die ohne Unterstrich oder Bindestrich verbunden sind. Alle außer dem ersten werden am Anfang groß geschrieben. Hier einige Beispiele der gebräuchlichsten Kontext-Eigenschaften. Es gibt sehr viel mehr.

eigenschaftsBezeichnung

Typ

Funktion

Beispiel-Wert

extraNatural

boolescher Wert

Wenn wahr, werden zusätzliche Auflösungszeichen vor Versetzungszeichen gesetzt.

#t, #f

currentBarNumber

Integer

Setzt die aktuelle Taktnummer.

50

doubleSlurs

boolescher Wert

Wenn wahr, werden Legatobögen über und unter die Noten gesetzt.

#t, #f

instrumentName

Text

Setzt die Instrumentenbezeichnung am Anfang eines Systems.

"Cello I"

fontSize

reale Zahl

Vergrößert oder verkleinert die Schriftgröße.

2.4

stanza

Text

Setzt den Text zu Beginn einer Strophe.

"2"

Ein boolischer Wert ist entweder wahr (#t) oder falsch (#f), ein Integer eine positive ganze Zahl, eine reale Zahl eine positive oder negative Dezimalzahl, und Text wird in doppelte Anführungszeichen (Shift+2) eingeschlossen. Beachten Sie das Vorkommen des Rautenzeichens (#) an unterschiedlichen Stellen: als Teil eines booleschen Wertes vor dem t oder f, aber auch vor einem Wert in der \set-Befehlskette. Wenn ein boolescher Wert eingegeben werden soll, braucht man also zwei Rautenzeichen, z. B. ##t.

Bevor eine Eigenschaft geändert werden kann, muss man wissen, in welchem Kontext sie sich befindet. Manchmal versteht das sich von selbst, aber in einigen Fällen kann es zunächst unverständlich erscheinen. Wenn der falsche Kontext angegeben wird, wird keine Fehlermeldung produziert, aber die Veränderung wird einfach nicht ausgeführt. instrumentName befindet sich offensichtlich innerhalb von einem Staff-Kontext, denn das Notensystem soll benannt werden. In dem folgenden Beispiel erhält das erste System korrekt die Instrumentenbezeichnung, das zweite aber nicht, weil der Kontext ausgelassen wurde.

<<
  \new Staff \relative c'' {
    \set Staff.instrumentName = #"Soprano"
    c4 c
 }
  \new Staff \relative c' {
  \set instrumentName = #"Alto"  % Falsch!
  d4 d
 }
>>

[image of music]

Denken Sie daran, dass der Standardkontext Voice ist; in dem zweiten \set-Befehl wird also die Eigenschaft instrumentName im Voice-Kontext auf „Alto“, gesetzt, aber weil LilyPond diese Eigenschaft nicht im Voice-Kontext vermutet, passiert einfach gar nichts. Das ist kein Fehler, und darum wird auch keine Fehlermeldung prodziert.

Ebenso gibt es keine Fehlermeldung, wenn die Kontext-Bezeichnung falsch geschrieben wird und die Änderung also nicht ausgeführt werden kann. Tatsächlich kann eine beliebige (ausgedachte) Kontextbezeichnung mit dem \set-Befehl eingesetzt werden, genauso wie die, die wirklich existieren. Aber wenn LilyPond diese Bezeichnung nicht zuordnen kann, bewirkt der Befehl einfach gar nichts. Manche Editoren, die Unterstützung für LilyPond-Befehle mitbringen, markieren existierende Kontextbezeichnungen mit einem Punkt, wenn man mit der Maus darüber fährt (wie etwa JEdit mit dem LilyPondTool), oder markieren unbekannte Bezeichnungen anders (wie ConTEXT). Wenn Sie keinen Editor mit LilyPond-Unterstützung einsetzen, wird empfohlen, die Bezeichnungen in der Interna-Referenz zu überprüfen: siehe Tunable context properties, oder Contexts.

Die Eigenschaft instrumentName wird erst aktiv, wenn sie ineinem Staff-Kontext gesetzt wird, aber manche Eigenschaften können in mehr als einem Kontext benutzt werden. Als Beispiel mag die extraNatural-Eigenschaft dienen, die zusätzliche Erniedrigungszeichen setzt. Die Standardeinstellung ist ##t (wahr) in allen Systemen. Wenn sie nur in einem Staff (Notensystem) auf ##f (falsch) gesetzt wird, wirkt sie sich auf alle Noten in diesem System aus. Wird sie dagegen in der Score-Umgebung gesetzt, wirkt sich das auf alle darin enthaltenen Systeme aus.

Das also bewirkt, dass die zusätzlichen Erniedrigungszeichen in einem System ausgeschaltet sind:

<<
  \new Staff \relative c'' {
    ais4 aes
 }
  \new Staff \relative c'' {
    \set Staff.extraNatural = ##f
    ais4 aes
 }
>>

[image of music]

während das dazu dient, sie in allen Systemen auszuschalten:

<<
  \new Staff \relative c'' {
    ais4 aes
 }
  \new Staff \relative c'' {
    \set Score.extraNatural = ##f
    ais4 aes
 }
>>

[image of music]

Ein anderes Beispiel ist die Eigenschaft clefOctavation: wenn sie im Score-Kontext gesetzt wird, ändert sich sofort der Wert der Oktavierung in allen aktuellen Systemen und wird auf einen neuen Wert gesetzt, der sich auf alle Systeme auswirkt.

Der gegenteilige Befehl, \unset, entfernt die Eigenschaft effektiv wieder von dem Kontext: in den meisten Fällen wird der Kontext auf ihre Standardeinstellungen zurückgesetzt. Normalerweise wird aber \unset nicht benötigt, denn ein neues \set erledigt alles, was man braucht.

Die \set- und \unset-Befehle könne überall im Eingabequelltext erscheinen und werden aktiv von dem Moment, an dem sie auftreten bis zum Ende der Partitur oder bis die Eigenschaft mit \set oder \unset neu gesetzt wird. Versuchen wir als Beispiel, die Schriftgröße mehrmals zu ändern, was sich unter anderem auf die Notenköpfe auswirkt. Die Änderung bezieht sich immer auf den Standard, nicht vom letzten gesetzten Wert.

c4
% Notenköpfe verkleinern
\set fontSize = #-4
d e
% Notenköpfe vergrößern
\set fontSize = #2.5
f g
% zur Standardgröße zurückgehen
\unset fontSize
a b

[image of music]

Wir haben jetzt gesehen, wie sich die Werte von unterschiedlichen Eigenschaften ändern lassen. Beachten Sie, dass Integre und Zahlen immer mit einem Rautenzeichen beginnen, während die Werte wahr und falsch (mit ##t und ##f notiert) immer mit zwei Rauten beginnen. Eine Eigenschaft, die aus Text besteht, muss in doppelte Anführungsstriche gesetzt werden, auch wenn wir später sehen werden, dass Text auf eine sehr viel allgmeinere und mächtigere Art mit dem markup-Befehl eingegeben werden kann.

Kontexteigenschaften mit \with setzen

Kontexteigenschaften können auch gesetzt werden, wenn der Kontext erstellt wird. Das ist in manchen Fällen eine deutlichere Art, eine Eigenschaft zu bestimmen, die für die gesamte Partitur erhalten bleichen soll. Wenn ein Kontext mit einem \new-Befehl erstellt wird, dem direkt eine \with { .. }-Umgebung folgt, können hier die Eigenschaften bestimmt werden. Wenn also die zusätzlichen Auflösungszeichen für eine ganze Partitur gelten sollen, könnte man schreiben:

\new Staff \with { extraNatural = ##f }

etwa so:

<<
  \new Staff
  \relative c'' {
    gis ges aes ais
  }
  \new Staff \with { extraNatural = ##f }
  \relative c'' {
    gis ges aes ais
  }
>>

[image of music]

Eigenschaften, die auf diese Arte gesetzt werden, können immer noch dynamisch mit dem \set-Befehl geändert werden und mit \unset auf ihre Standardeinstellungen zurückgesetzt werden.

Die fontSize-Eigenschaft wird anders behandelt. Wenn sie mit einer \with-Umgebung gesetzt wird, wird die Standardschriftgröße neu gesetzt. Wenn die Schriftgröße später mit \set verändert wird, kann dieser neue Standardwert mit dem Befehl \unset fontSize erreicht werden.

Kontexteigenschaften mit \context setzen

Die Werte von Kontext-Eigenschaften können in allen Kontexten eines bestimmten Typs (etwa alle Staff-Kontexte) gleichzeitig mit einem Befehl gesetzt werden. Der Kontext wird spezifieziert, indem seine Bezeichnung benutzt wird, also etwa Staff, mit einem Backslash davor: \Staff. Der Befehl für die Eigenschaft ist der gleiche, wie er auch in der \with-Konstruktion benutzt wird, wie oben gezeigt. Er wird in eine \context-Umgebung eingebettet, welche wiederum innerhalb von einer \layout-Umgebung steht. Jede \context-Umgebung wirkt sich auf alle Kontexte dieses Types aus, welche sich in der aktuellen Partitur befinden (d. h. innherhalb einer \score- oder \book-Umgebung. Hier ist ein Beispiel, wie man diese Funktion anwendet:

\score {
  \new Staff {
    \relative c'' {
      cis4 e d ces
    }
  }
  \layout {
    \context {
      \Staff
      extraNatural = ##t
    }
  }
}

[image of music]

Kontext-Eigenschaften, die auf diese Weise gestzt werden, können für bestimmten Kontexte überschrieben werden, indem die \with-Konstruktion eingesetzt wird, oder mit \set-Befehlen innerhalb der aktuellen Noten.

Siehe auch

Notationsreferenz: Die Standardeinstellungen von Umgebungen ändern.

Referenz der Interna: Contexts, Tunable context properties.


Andere Sprachen: English, français, español.

Handbuch zum Lernen