LilyPond Handbuch zum Lernen: 4.1.4 Optimierungsmethoden

### 4.1.4 Optimierungsmethoden

Der \override-Befehl

Wir haben uns schon mit den Befehlen `\set` und `\with` bekannt gemacht, mit welchen Eigenschaften von Kontexten verändert und Engraver entfernt oder hinzugefügt werden können. Siehe dazu Kontexteigenschaften verändern und Engraver hinzufügen und entfernen. Jetzt wollen wir uns weitere wichtige Befehle anschauen.

Der Befehl, um die Eigenschaften von Layout-Objekten zu ändern, ist `\override`. Weil dieser Befehl interne Eigenschaften tief in der Programmstruktur von LilyPond verändern muss, ist seine Syntax nicht so einfach wie die der bisherigen Befehle. Man muss genau wissen, welche Eigenschaft welches Objektes in welchem Kontext geändert werden soll, und welches der neu zu setzende Wert dann ist. Schauen wir uns an, wie das vor sich geht.

Die allgemeine Syntax dieses Befehles ist:

>     \override Kontext.LayoutObjekt #'layout-eigenschaft =
>     #Wert

Damit wir die Eigenschaft mit der Bezeichnung layout-property das Layout-Objektes mit der BezeichnungLayoutObject, welches ein Mitglied des Kontext-Kontextes ist, auf den Wert value.

Der Kontext kann (und wird auch normalerweise) ausgelassen werden, wenn der benötigte Kontext eindeutig impliziert ist und einer der untersten Kontexte ist, also etwa `Voice`, `ChordNames` oder `Lyrics`. Auch in diesem Text wird der Kontext oft ausgelassen werden. Später soll gezeigt werden, in welchen Fällen er ausdrücklich definiert werden muss.

Spätere Abschnitte behandeln umfassend Eigenschaften und ihre Werte, aber um ihre Funktion und ihr Format zu demonstrieren, werden wir hier nur einige einfache Eigenschaften und Werte einsetzen, die einfach zu verstehen sind.

Für den Moment könne Sie die `#'`-Zeichen ignorieren, die vor jeder Layout-Eigenschaft, und die `#`-Zeichen, die vor jedem Wert stehen. Sie müssen immer in genau dieser Form geschrieben werden. Das ist der am häufigsten gebrauchte Befehl für die Optimierung, und der größte Teil dieses Abschnittes wird dazu benutzt, seine Benutzung zu erläutern. Hier ein einfaches Beispiel, um die Farbe des Notenkopfes zu ändern:

>     c4 d
>     \override NoteHead #'color = #red
>     e4 f |
>     \override NoteHead #'color = #green
>     g4 a b c |

Der \revert-Befehl

Wenn eine Eigenschaft einmal überschrieben wurde, wird ihr neuer Wert so lange bewahrt, bis er noch einmal überschrieben wird oder ein `\revert`-Befehl vorkommt. Der `\revert`-Befehl hat die folgende Syntax und setzt den Wert der Eigenschaft zurück auf den Standardwert, nicht jedoch auf den vorigen Wert, wenn mehrere `\override`-Befehle benutzt wurden.

>     \revert Kontext.LayoutObjekt #'layout-eigenschaft

Wiederum, genauso wie der Kontext bei dem `\override`-Befehl, wird Kontext oft nicht benötigt. Er wird in vielen der folgenden Beispiele ausgelassen. Im nächsten Beispiel wird die Farbe des Notenkopfes wieder auf den Standardwert für die letzten zwei Noten gesetzt.

>     c4 d
>     \override NoteHead #'color = #red
>     e4 f |
>     \override NoteHead #'color = #green
>     g4 a
>     \revert NoteHead #'color
>     b4 c |

\once-Präfix

Sowohl der `\override`-Befehl als auch der `\set`-Befehl können mit dem Präfix `\once` (einmal) versehen werden. Dadurch wird der folgende `\override`- oder `\set`-Befehl nur für den aktuellen Musik-Moment wirksam, bevor sich wieder der Standard einstellt. Am gleichen Beispiel demonstriert, kann damit die Farbe eines einzelnen Notenkopfes geändert werden:

>     c4 d
>     \once \override NoteHead #'color = #red
>     e4 f |
>     \once \override NoteHead #'color = #green
>     g4 a b c |

Der \overrideProperty-Befehl

Es gibt eine andere Form des `override`-Befehls, `\overrideProperty` (überschreibe Eigenschaft), welcher ab und zu benötigt wird. Es wird hier nur der Vollständigkeit halber erwähnt, sein Einsatz wird demonstriert in Schwierige Korrekturen.

Der \tweak-Befehl

Der letzte Optimierungsbefehl in LilyPond ist `\tweak` (engl. optimieren). Er wird eingesetzt um Eigenschaften von Objekten zu verändern, die zum selben Musik-Moment auftreten, wie etwa die Noten eines Akkordes. Ein `\override` würde alle Noten des Akkords beeinflussen, während mit `\tweak` nur das nächste Objekt der Eingabe geändert wird.

Hier ein Beispiel. Angenommen, die Größe des mittleren Notenkopfes (ein E) in einem C-Dur-Akkord soll geändert werden. Schauen wir zuerst, was wir mit `\once \override` erhalten:

>     <c e g>4
>     \once \override NoteHead #'font-size = #-3
>     <c e g>4
>     <c e g>4

Wie man sehen kann, beeinflusst `override` alle Notenköpfe des Akkordes. Das liegt daran, dass alle die Noten eines Akkordes zum selben Musik-Moment auftreten und die Funktion von `\once` ist es, die Optimierung auf an allen Objekten auszuführen, die zum selben Musik-Moment auftreten wie der `\override`-Befehl.

Der `\tweak`-Befehl funktioniert anders. Er bezieht sich auf das direkt folgende Element in der Eingabe-Datei. Es wirkt aber auch nur mit Objekten, die direkt von der Eingabe kreiert werden, insbesondere Notenköpfe und Artikulationszeichen. Objekte wie etwa Hälse oder Versetzungszeichen werden erst später erstellt und lassen sich nicht auf diese Weise ändern. Zusätzlich müssen sich etwa Notenköpfe innerhalb eines Akkordes befinden, d. h. sie müssen von einfachen spitzen Klammern umschlossen sein. Um also eine einzelne Note mit `\tweak` zu verändern, muss der Befehl innerhalb der spitzen Klammern zusammen mit der Note eingegeben werden.

Um also zu unserem Beispiel zurückzukommen, könnte man die mittlere Note eines Akkordes auf diese Weise ändern:

>     <c e g>4
>     <c \tweak #'font-size #-3 e g>4

Beachten Sie, dass die Syntax des `\tweak`-Befehls sich von der des `\override`-Befehls unterscheidet. Weder Kontext noch Layout-Objekt können angegeben werden, denn das würde zu einem Fehler führen. Beide Angaben sind durch das folgende Element impliziert. Hier sollte auch kein Gleichheitszeichen vorhanden sein. Die verallgemeinerte Syntax des `\tweak`-Befehls ist also einfach

>     \tweak #'layout-eigenschaft #Wert

Ein `\tweak`-Befehl kann auch benutzt werden, um nur eine von mehreren Artikulationen zu ändern, wie im nächsten Beispiel zu sehen ist.

>     a4^"Black"
>       -\tweak #'color #red ^"Red"
>       -\tweak #'color #green _"Green"

Beachten Sie, dass dem `\tweak`-Befehl ein Artikulationsmodifikator vorangestellt werden muss, ganz als ob er selbst ein Artikulationszeichen wäre.

Der `\tweak`-Befehl muss auch benutzt werden, wenn das Aussehen einer vor mehreren geschachtelten Triolenklammern geändert werden soll, die zum selben Zeitpunkt beginnen. Im folgenden Beispiel beginnen die lange Klammer und die erste Triolenklammer zum selben Zeitpunkt, sodass ein `\override`-Befehl sich auf beide beziehen würde. In dem Beispiel wird `\tweak` benutzt, um zwischen ihnen zu unterscheiden. Der erste `\tweak`Befehl gibt an, dass die lange Klammer über den Noten gesetzt werden soll, und der zweite, dass die Zahl der rhythmischen Aufteilung für die erste der kurzen Klammern in rot gesetzt wird.

>     \tweak #'direction #up
>     \times 4/3 {
>       \tweak #'color #red
>       \times 2/3 { c8[ c c] }
>       \times 2/3 { c8[ c c] }
>       \times 2/3 { c8[ c c] }
>     }

Wenn geschachtelte N-tolen nicht zum gleichen Zeitpunkt beginnen, kann ihr Aussehen auf die übliche Art mit dem `\override`-Befehl geändert werden:

>     \times 2/3 { c8[ c c] }
>     \once \override TupletNumber
>       #'text = #tuplet-number::calc-fraction-text
>     \times 2/3 {
>       c8[ c]
>       c8[ c]
>       \once \override TupletNumber #'transparent = ##t
>       \times 2/3 { c8[ c c] }
>       \times 2/3 { c8[ c c] }
>     }

#### Siehe auch

Notationsreferenz: Der tweak-Befehl.

Andere Sprachen: English, česky, español, français, 日本語, nederlands.

#### LilyPond – Learning Manual