LilyPond Benutzerhandbuch: 5.4.7 Sichtbarkeit von Objekten

### 5.4.7 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
>     \override Score.BarLine #'stencil = ##f
>     a a
>     \revert Score.BarLine #'stencil
>     a a a

#### 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.

>     a4 a
>     \once \override NoteHead #'transparent = ##t
>     a a

#### 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
>     a1

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
>     a1

#### `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:

Funktion | Vektor | Vor | kein | Nach
--- | --- | --- | --- | ---
Form | Form | Umbruch | Umbruch | Umbruch
`all-visible` | `'#(#t #t #t)` | ja | ja | ja
`begin-of-line-visible` | `'#(#f #f #t)` | nein | nein | ja
`center-visible` | `'#(#f #t #f)` | nein | ja | nein
`end-of-line-visible` | `'#(#t #f #f)` | ja | nein | nein
`begin-of-line-invisible` | `'#(#t #t #f)` | ja | ja | nein
`center-invisible` | `'#(#t #f #t)` | ja | nein | ja
`end-of-line-invisible` | `'#(#f #t #t)` | nein | ja | ja
`all-invisible` | `'#(#f #f #f)` | nein | nein | nein

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-Objekt | Normaler Kontext | Standardeinstellung
--- | --- | ---
`BarLine` (Taktstrich) | `Score` | calculated
`BarNumber` (Taktzahl) | `Score` | `begin-of-line-visible`
`BreathingSign` (Atemzeichen) | `Voice` | `begin-of-line-invisible`
`Clef` (Schlüssel) | `Staff` | `begin-of-line-visible`
`Custos` | `Staff` | `end-of-line-visible`
`DoublePercentRepeat` (Doppel-Prozent-Wiederholung | `Voice` | `begin-of-line-invisible`
`KeySignature` (Tonart) | `Staff` | `begin-of-line-visible`
`OctavateEight` (Oktavierungs-Acht) | `Staff` | `begin-of-line-visible`
`RehearsalMark` (Übungszeichen) | `Score` | `end-of-line-invisible`
`TimeSignature` (Taktart) | `Staff` | `all-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

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:

- Taktstriche können nicht zu Beginn einer Zeile gesetzt werden.
- Eine Taktzahl kann nicht zu Beginn der ersten Zeile gesetzt werden, außer wenn er nicht 1 ist.
- Schlüssel – siehe unten.
- Doppel-Prozent-Wiederholungen werden entweder alle ausgegeben oder alle unterdrückt. Mit `begin-of-line-invisible` werden sie ausgegeben, mit `all-invisible` unterdrückt.
- Tonart – siehe unten.
- Oktavierungs-Acht – siehe unten.

#### 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:

>     \key g \major
>     f4 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

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.

>     \key g \major
>     f4 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

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:

>     \key g \major
>     f4 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

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 `OctavateEight`-Layout-Objekt erstellt. Seine Sichtbarkeit wird automatisch vom `Clef`-Objekt geerbt, sodass Veränderungen von `break-visibility` des `OctavateEight`-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

Andere Sprachen: English, español, 日本語.

#### LilyPond – Notationsreferenz