5.4.6 Sichtbarkeit von Objekten

Die Sichtbarkeit von Layout-Objekten kann auf vier Arten kontrolliert werden: Ihre Matrizen (engl stencil) können entfernt werden, sie können unsichtbar gemacht werden, sie können weiß eingefärbt werden und ihre break-visibility-Eigenschaft kann verändert werden. Die ersten drei Möglichkeiten beziehen sich auf alle Layout-Objekte, die letzte nur auf einige wenige, nämlich die zerteilbaren Objekte. Das Handbuch zum Lernen führt in alle vier Möglichkeiten ein, siehe Sichtbarkeit und Farbe von Objekten.

Es gibt auch einige weitere Techniken, die sich nur auf bestimmte Layout-Objekte beziehen. Sie werden im letzten Abschnitt behandelt.


Einen stencil entfernen

Jedes Layout-Objekt hat eine Matrizen-(stencil)-Eigenschaft. Sie ist normalerweise definiert als die Funktion, die das entsprechende Objekt zeichnet. Wenn die Eigenschaft mit \override auf #f gesetzt wird, wird keine Funktion aufgerufen und also auch kein Objekt gezeichnet. Das Standardverhalten kann mit dem Befehl \revert wieder hergestellt werden.

a1 a
\omit Score.BarLine
a a
\undo \omit Score.BarLine
a a a

[image of music]


Objekten unsichtbar machen

Jedes Layout-Objekt hat eine Durchsichtigkeits-Eigenschaft ('transparent), die normalerweise auf den Wert #f gesetzt ist. Wenn sie auf #t gesetzt wird, nimmt das Objekt immer noch den entsprechenden Platz ein, ist aber unsichtbar.

a'4 a'
\once \hide NoteHead
a' a'

[image of music]


Objekte weiß malen

Alle Layout-Objekte haben eine Farb-(color)-Eigenschaft, die normalerweise schwarz (black) definiert ist. Wenn sie nach weiß (white) verändert wird, kann man das Objekt nicht mehr vom weißen Hintergrund unterscheiden. Wenn das Objekt jedoch andere Objekte überschneidet, wird die Farbe der Überschneidungen von der Reihenfolge entschieden, in welcher die Objekte gesetzt werden. Es kann also vorkommen, dass man die Umrisse des weißen Objektes erahnen kann, wie in diesem Beispiel:

\override Staff.Clef.color = #white
a'1

[image of music]

Das kann man vermeiden, indem man die Satzreihenfolge der Objekte verändert. Alle Layout-Objekte haben eine layer-Eigenschaft, die auf eine ganze Zahl gesetzt sein muss. Objekte mit der niedrigsten Zahl in der layer-Eigenschaft werden zuerst gesetzt, dann die nächsten Objekte in ansteigender Ordnung. Objekte mit höheren Werten überschneiden also Objekte mit niedrigeren Werten. Die meisten Objekte bekommen den Wert 1 zugewiesen, einige wenige Objekte, unter die auch StaffSymbol (die Notenlinien) gehört, jedoch den Wert 0. Die Reihenfolge, in der Objekte mit demselben Wert gesetzt werden, ist nicht definiert.

Im oberen Beispiel wird der weiße Schlüssel, der einen Wert von 1 für layer hat, nach den Notenlinien gesetzt (die einen Wert von 0 für layer haben) und überschneidet sie also. Um das zu ändern, muss dem Clef-Objekt (Notenschlüssel) ein niedrigerer Wert, etwa -1, gegeben werden, sodass es früher gesetzt wird:

\override Staff.Clef.color = #white
\override Staff.Clef.layer = #-1
a'1

[image of music]


break-visibility (unsichtbar machen) benutzen

Die meisten Layout-Objekte werden nur einmal gesetzt, aber einige, wie Taktstriche, Schlüssel, Taktartbezeichnung und Tonartvorzeichen, müssen mehrmals gesetzt werden, wenn die Zeile gewechselt wird: einmal am Ende des oberen Systems und ein zweites Mal zu Beginn des nächsten Systems. Derartige Objekte werden als trennbar bezeichnet und haben eine Eigenschaft, die break-visibility-Eigenschaft, mit der ihre Sichtbarkeit an allen drei Positionen, an denen sie auftreten können, kontrolliert werden kann: zu Beginn einer Zeile, innerhalb einer Zeile, wenn sie verändert werden, und am Ende einer Zeile, wenn die Änderung hier stattfindet.

Die Taktart wird beispielsweise standardmäßig nur zu Beginn des ersten Systems gesetzt, aber an anderen Stellen nur, wenn sie sich ändert. Wenn diese Änderung am Ende eines Systems auftritt, wird die neue Taktart am Ende des aktuellen Systems als auch zu Beginn des nächsten Systems gesetzt.

Dieses Verhalten wird von der break-visibility-Eigenschaft kontrolliert, die erklärt wird in Sichtbarkeit und Farbe von Objekten. Die Eigenschaft braucht einen Vektor von drei Booleschen Werten, die in ihrer Reihenfolge bestimmte, ob das Objekt a) zu Ende der Zeile, b) innerhalb einer Zeile oder c) zu Beginn einer Zeile gesetzt wird. Oder, genauer gesagt, vor einem Zeilenumbruch, an Stellen, wo kein Zeilenumbruch auftritt oder nach einem Zeilenumbruch.

Die acht möglichen Kombinationen können auch durch vordefinierte Funktionen bestimmt werden, welche in der Datei ‘scm/output-lib.scm’ definiert sind. Die letzten drei Spalten der folgenden Tabelle zeigen an, ob das Layout-Objekt an einer bestimmten Position sichtbar sein wird oder nicht:

FunktionVektorVorkeinNach
FormFormUmbruchUmbruchUmbruch
all-visible'#(#t #t #t)jajaja
begin-of-line-visible'#(#f #f #t)neinneinja
center-visible'#(#f #t #f)neinjanein
end-of-line-visible'#(#t #f #f)janeinnein
begin-of-line-invisible'#(#t #t #f)jajanein
center-invisible'#(#t #f #t)janeinja
end-of-line-invisible'#(#f #t #t)neinjaja
all-invisible'#(#f #f #f)neinneinnein

Die Standardeinstellungen von break-visibility hängen vom Layout-Objekt ab. Die folgende Tabelle zeigt alle wichtigen Layout-Objekte, die mit break-visibility verändert werden können und die jeweiligen Standardeinstellungen der Eigenschaft:

Layout-ObjektNormaler KontextStandardeinstellung
BarLine (Taktstrich)Scorecalculated
BarNumber (Taktzahl)Scorebegin-of-line-visible
BreathingSign (Atemzeichen)Voicebegin-of-line-invisible
Clef (Schlüssel)Staffbegin-of-line-visible
CustosStaffend-of-line-visible
DoublePercentRepeat (Doppel-Prozent-WiederholungVoicebegin-of-line-invisible
KeySignature (Tonart)Staffbegin-of-line-visible
ClefModifier (Oktavierungs-Acht)Staffbegin-of-line-visible
RehearsalMark (Übungszeichen)Scoreend-of-line-invisible
TimeSignature (Taktart)Staffall-visible

Das Beispiel unten zeigt die Verwendung der Vektor-Form um die Sichtbarkeit von Taktlinien zu bestimmten:

f4 g a b
f4 g a b
% Remove bar line at the end of the current line
\once \override Score.BarLine.break-visibility = ##(#f #t #t)
\break
f4 g a b
f4 g a b

[image of music]

Obwohl alle drei Bestandteile des Vektors, mit denen break-visibility definiert wird, vorhanden sein müssen, haben nicht alle eine Auswirkung auf jedes Layout-Objekt, und einige Kombinationen können sogar Fehler hervorrufen. Es gelten die folgenden Einschränkungen:


Besonderheiten

Sichtbarkeit nach expliziten Änderungen

Die break-visibility-Eigenschaft kontrolliert die Sichtbarkeit von Tonarten und Schlüsseländerungen nur zu Beginn einer Zeile, d.h. nach einem Zeilenumbruch. Sie hat keinen Einfluss auf die Sichtbarkeit von Tonarten bzw. Schlüsseln, die nach einer expliziten Tonart- oder Schlüsseländerung in oder am Ende einer Zeile angezeigt werden. Im nächsten Beispiel ist die Tonartangabe nach dem expliziten Wechsel zu B-Dur immer noch sichtbar, obwohl all-invisible eingesetzt wurde:

\relative {
  \key g \major
  f'4 g a b
  % Try to remove all key signatures
  \override Staff.KeySignature.break-visibility = #all-invisible
  \key bes \major
  f4 g a b
  \break
  f4 g a b
  f4 g a b
}

[image of music]

Die Sichtbarkeit derartiger expliziter Tonart- und Schlüsseländerungen wird von den explicitKeySignatureVisibility- und explicitClefVisibility-Eigenschaften kontrolliert. Sie entsprechen der break-visibility-Eigenschaft und beide brauchen drei Boolesche Werte bzw. die oben aufgelisteten vordefinierten Funktionen als Argument, genau wie break-visibility. Beide sind Eigenschaft des Staff-Kontextes, nicht der Layout-Objekte selber, weshalb sie mit dem Befehl \set eingesetzt werden. Beide sind standardmäßig auf die Funktion all-visible gesetzt. Diese Eigenschaften kontrollieren nur die Sichtbarkeit von Tonarten bzw. Schlüssel, die von expliziten Änderungen herrühren, und haben keinen Einfluss auf Tonarten und Schlüssel zu Beginn einer Zeile – um diese zu beeinflussen, muss break-visibility benutzt werden.

\relative {
  \key g \major
  f'4 g a b
  \set Staff.explicitKeySignatureVisibility = #all-invisible
  \override Staff.KeySignature.break-visibility = #all-invisible
  \key bes \major
  f4 g a b \break
  f4 g a b
  f4 g a b
}

[image of music]

Sichtbarkeit von erinnernden Versetzungszeichen

Um erinnernde Versetzungszeichen zu entfernen, die nach einer expliziten Tonartänderung auftreten, muss die Staff-Eigenschaft printKeyCancellation auf #f gesetzt werden:

\relative {
  \key g \major
  f'4 g a b
  \set Staff.explicitKeySignatureVisibility = #all-invisible
  \set Staff.printKeyCancellation = ##f
  \override Staff.KeySignature.break-visibility = #all-invisible
  \key bes \major
  f4 g a b \break
  f4 g a b
  f4 g a b
}

[image of music]

Mit diesen Veränderungen bleiben nur noch die Versetzungszeichen vor den Noten übrig um den Wechsel der Tonart anzuzeigen.

Automatische Takte

Ein Sonderfall sind die automatischen Taktstriche, die mit der Eigenschaft automaticBars im Score-Kontext ausgeschaltet werden können. Wenn sie auf #f gesetzt ist, werden Taktstrich nicht automatisch ausgegeben sondern müssen explizit mit dem \bar-Befehl eingegeben werden. Anders als bei dem \cadenzaOn-Befehl werden die Takte allerdings immer noch gezählt. Takterstellung wird später wieder mit diesem Zahl aufgenommen, wenn die Eigenschaft wieder auf #t gesetzt wird. Wenn sie den Wert #f hat, können Zeilenumbrüche nur an expliziten \bar-Befehlen auftreten.

Oktavierte Schlüssel

Das kleine Oktavierungssymbol von oktavierten Notenschlüsseln wird durch das ClefModifier-Layout-Objekt erstellt. Seine Sichtbarkeit wird automatisch vom Clef-Objekt geerbt, sodass Veränderungen von break-visibility des ClefModifier-Layout-Objekts nicht auch noch für unsichtbare Schlüssel zusätzlich vorgenommen werden müssen.

Bei expliziten Schlüsseländerungn kontrolliert die explicitClefVisibility-Eigenschaft wohl das Schlüsselsymbol als auch das damit verknüpfte Oktavierungssymbol.

Siehe auch

Handbuch zum Lernen: Sichtbarkeit und Farbe von Objekten.


LilyPond – Notationsreferenz v2.23.82 (Entwicklungszweig).