[ << Die Ausgabe verbessern ] | [Anfang][Inhalt][Index] | [ Vorlagen >> ] |
[ < Regeln zur Benennung von Objekten und Eigenschaften ] | [ Nach oben : Grundlagen für die Optimierung ] | [ Der override-Befehl > ] |
5.1.4 Optimierungsmethoden
Der \override -Befehl | ||
Der \revert -Befehl | ||
Der \once -Präfix | ||
Der \tweak -Befehl | ||
Der \single -Präfix |
[ << Die Ausgabe verbessern ] | [Anfang][Inhalt][Index] | [ Vorlagen >> ] |
[ < Optimierungsmethoden ] | [ Nach oben : Optimierungsmethoden ] | [ Der revert-Befehl > ] |
Der \override
-Befehl
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, siehe Typen von Eigenschaften. Aber um ihre Funktion und ihr Format zu demonstrieren, werden wir hier nur einige einfache Eigenschaften und Werte einsetzen, die einfach zu verstehen sind.
LilyPond’s hauptsächliche Ausdrücke sind musikalische Dinge wie Noten und Notendauern, sowie Zeichenketten und Markierungen. Diesen zugrunde liegende Ausdrücke wie Zahlen und Listen werden im ‚Scheme Modus‘ verarbeitet. Der Präfix ‘#’ leitet diesen Modus ein. Weiterführende Informationen zu LilyPond’s Scheme mode finden Sie unter LilyPond Scheme-Syntax.
\override
ist der bei Optimierungen am häufigsten verwendete Befehl.
Daher wird der Rest dieses Kapitels im Wesentlichen aus Anwendungsbeispielen
dieses Befehls bestehen. Hier kommt gleich ein einfaches Beispiel
zur Änderung der Farbe von Notenköpfen:
\relative { c'4 d \override NoteHead.color = "red" e4 f | \override NoteHead.color = "green" g4 a b c | }
[ << Die Ausgabe verbessern ] | [Anfang][Inhalt][Index] | [ Vorlagen >> ] |
[ < Der override-Befehl ] | [ Nach oben : Optimierungsmethoden ] | [ Der once-Präfix > ] |
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.
\relative { c'4 d \override NoteHead.color = "red" e4 f | \override NoteHead.color = "green" g4 a \once \revert NoteHead.color b4 c | \revert NoteHead.color f2 c | }
[ << Die Ausgabe verbessern ] | [Anfang][Inhalt][Index] | [ Vorlagen >> ] |
[ < Der revert-Befehl ] | [ Nach oben : Optimierungsmethoden ] | [ Der tweak-Befehl > ] |
Der \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 vorherige Zustand herstellt
(dieser kann sich vom Standard unterscheiden, wenn etwa noch ein anderer
\override
-Befehl aktiv ist). Am gleichen
Beispiel demonstriert, kann damit die Farbe eines einzelnen Notenkopfes
geändert werden:
\relative { c'4 d \override NoteHead.color = #red e4 f | \once \override NoteHead.color = #green g4 a \revert NoteHead.color b c | }
Der \once
Präfix eignet sich also dazu, die Geltungsdauer eines
anderen vordefinierten Befehls, dem er vorangestellt ist, auf ein
einziges musikalisches Ereignis zu beschränken:
\relative { c'4( d) \once \slurDashed e4( f) | g4( a) \once \hideNotes b( c) | }
[ << Die Ausgabe verbessern ] | [Anfang][Inhalt][Index] | [ Vorlagen >> ] |
[ < Der once-Präfix ] | [ Nach oben : Optimierungsmethoden ] | [ Der single-Präfix > ] |
Der \tweak
-Befehl
Der letzte Optimierungsbefehl in LilyPond ist \tweak
(engl. optimieren). Er wird eingesetzt um Eigenschaften
nur eines Objektes von mehreren Objekten zu verändern,
die zum selben Musik-Zeitpunkt
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:
\relative { <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. In seiner
einfachsten Form ist der Befehl nur an Objekten wirksam, die direkt
vom vorhergehenden Element erstellt worden sind, insbesondere
Notenköpfe und Artikulation.
Um also zu unserem Beispiel zurückzukommen, könnte man die mittlere Note eines Akkordes auf diese Weise ändern:
\relative { <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. Der
Kontext dürfen nicht angegeben werden, denn
das würde zu einem Fehler führen. Sowohl Kontext als auch das Layout-Objekt sind
durch das folgende Element im Inputstream impliziert. Hier sollte auch
kein Gleichheitszeichen vorhanden sein. Die verallgemeinerte
Syntax des \tweak
-Befehls ist also
\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.
a'4^"Black" -\tweak color "red" ^"Red" -\tweak color "green" _"Green"
Beachten Sie, dass ein Artikulationsmodifikator vor dem \tweak
-Befehl
geschrieben werden muss, weil auch der \tweak
-Ausdruck als
Artikulation angefügt wird. Im Falle von mehreren Richtungsmodifikatoren
(^
or _
) gilt der Modifikator links außen, weil er als
letzter angefügt wird.
Objekte wie Hälse und Versetzungszeichen werden später erstellt und nicht
direkt aus dem vorhergehenden Ereignis. Es ist dennoch möglich, \tweak
mit solchen indirekt erstelltn Objekten zu verwenden, indem man die
Layout-Objekte direkt benennt, vorausgesetzt dass LilyPond ihre Herkunft
bis zu dem ursprünglichen Ereignis zurück verfolgen kann:
<\tweak Accidental.color "red" cis''4 \tweak Accidental.color "green" es'' g''>
Diese Langform des \tweak
-Befehls kann wie folgend beschrieben werden:
\tweak layout-object.layout-property value
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.
\relative c'' { \tweak direction #up \tuplet 3/4 { \tweak color "red" \tuplet 3/2 { c8[ c c] } \tuplet 3/2 { c8[ c c] } \tuplet 3/2 { 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:
\relative { \tuplet 3/2 { c'8[ c c] } \once \override TupletNumber.text = #tuplet-number::calc-fraction-text \tuplet 3/2 { c8[ c] c8[ c] \once \override TupletNumber.transparent = ##t \tuplet 3/2 { c8[ c c] } \tuplet 3/2 { c8[ c c] } } }
Siehe auch
Notationsreferenz: Der tweak-Befehl.
[ << Die Ausgabe verbessern ] | [Anfang][Inhalt][Index] | [ Vorlagen >> ] |
[ < Der tweak-Befehl ] | [ Nach oben : Optimierungsmethoden ] | [ Die Referenz der Programminterna > ] |
Der \single
-Präfix
Nehmen wir einmal an, wir möchten bestimmte Noten betonen, indem wir ihre Köpfe rot einfärben und sie außerdem vergrößern. Damit das einfach zu machen ist nehmen wir ferner an, wir hätten dafür eine Funktion definiert:
emphNoteHead = { \override NoteHead.color = "red" \override NoteHead.font-size = 2 } \relative { c''4 a \once \emphNoteHead f d | }
Der \once
Präfix funktioniert wunderbar, wenn es darum geht einzelne
Noten oder ganze Akkorde zu betonen, jedoch versagt er, gilt es eine einzelne
Note innerhalb eines Akkordes zu betonen. Wir haben schon gesehen,
wie \tweak
dennoch dazu gebracht werden kann, siehe
Der \tweak
-Befehl. Aber
\tweak
kann nicht auf eine Funktion angewandt werden; hier
kommt \single
ins Spiel:
emphNoteHead = { \override NoteHead.color = "red" \override NoteHead.font-size = 2 } \relative { <c'' a \single \emphNoteHead f d>4 }
Zusammenfassend kann man sagen, \single
wandelt overrides in tweaks
sodass bei mehreren zeitgleichen musiklaischen Objekten (wie die Notenköpfe
eines Akkords), man mit \single
lediglich ein einzelnes Objekt
beeinflusst, nämlich dasjenige, was im direkt folgenden musikalischen
Ausdruck steckt. Das ist anders, als \once
, welches alle diese
Objekte beträfe.
Man kann so \single
dafür verwenden, jede kleine Funktion, die
lediglich overrides enthält auf einzelne Noten innerhalb eines Akkords
anzuwenden. Es sei jedoch darauf hingewiesen, \single
wandelt
weder \revert
, noch noch \set
oder \unset
in tweaks.
Siehe auch
Handbuch zum Lernen:
Der \tweak
-Befehl,
Variablen für Layout Anpassungen einsetzen.
[ << Die Ausgabe verbessern ] | [Anfang][Inhalt][Index] | [ Vorlagen >> ] |
[ < Der tweak-Befehl ] | [ Nach oben : Optimierungsmethoden ] | [ Die Referenz der Programminterna > ] |