| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Tweaking basics
| 4.1.1 Grundlagen zur Optimierung | ||
| 4.1.2 Objekte und Schnittstellen | ||
| 4.1.3 Regeln zur Benennung von Objekten und Eigenschaften | ||
| 4.1.4 Optimierungsmethoden |
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Introduction to tweaks
„Optimierung“ (engl. tweaking) ist ein LilyPond-Begriff für die verschiedenen Methoden, die Aktionen zu beeinflussen, die während der Kompilation einer Notationsdatei vorgenommen werden sowie auf das Notenbild einzuwirken. Einige dieser Optimierungen sind sehr einfach, andere dagegen recht komplex. Aber insgesamt erlaubt das System an Optimierungen so gut wie alle möglichen Erscheinungsformen für die Notenausgabe.
In diesem Abschnitt werden die grundlegenden Konzepte vorgestellt, um die Optimierung zu verstehen. Später soll eine Anzahl von fertigen Befehlen bereitgestellt werden, die einfach in die Quelldatei kopiert werden können um den selben Effekt wie im Beispiel zu erhalten. Gleichzeitig zeigen diese Beispiele, wie die Befehle konstruiert werden, so dass Sie in der Lage sein werden, eigene Befehle auf dieser Grundlage zu entwickeln.
Bevor Sie mit diesem Kapitel beginnen, könnte Sie ein Blick in den Abschnitt Kontexte und Engraver interessieren, dann Kontexte und Engraver sowie die Eigenschaften, die mit ihnen verknüpft sind, sind die Voraussetzung, um die Funktionsweise von Optimierungen verstehen zu können.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Objects and interfaces
Optimierung bedeutet, die internen Operationen und Strukturen des LilyPond-Programms zu verändern, darum sollen hier zunächst die wichtigsten Begriffe erklärt werden, die zur Beschreibung dieser Operationen und Strukturen benutzt werden.
Der Begriff „Objekt“ ist ein allgemeiner Begriff, mit dem
die Vielzahl an internen Strukturen bezeichnet wird, die LilyPond
während der Bearbeitung des Quelltextes erstellt. Wenn etwa
ein Befehl wie \new Staff auftritt, wird ein neues Objekt
vom Typ Staff erstellt. Dieses Objekt Staff enthält
dann alle Eigenschaften, die mit diesem speziellen Notensystem
verknüpft sind, wie beispielsweise seine Bezeichnung, Tonart und
spezifische Angaben über die Engraver, die innerhalb dieses Systems
eingesetzt werden. Für alle anderen Kontexte gibt es genauso
Objekte, die deren Eigenschaften beinhalten, beispielsweise für
Voice-Objekte, Score-Objekte, Lyrics-Objekte,
aber auch für Objekte, die Notationselemente wie die Taktstriche,
Notenköpfe, Bögen und Dynamikbezeichnung enthalten. Jedes
Objekt hat eine eigene Gruppe an Eigenschaftswerten.
Bestimmte Objekttypen tragen besondere Bezeichnungen. Objekte, die Notationselemente der gesetzten Ausgabe repräsentieren, also Notenköpfe, Hälse, Bögen, Fingersatz, Schlüssel usw., werden „Layout-Objekte“, oft auch „Graphische Objekte“ genannt. Daraus resultiert die künstliche Abkürzung „Grob“. Diese sind auch Objekte im allgemeinen Sinn und haben genauso Eigenschaften, die mit ihnen verknüpft sind, wie etwa Größe, Position, Farbe usw.
Einige Layout-Objekte sind etwas spezieller. Phrasierungsbögen, Crescendo-Klammern, Oktavierungszeichen und viele andere Grobs sind nicht an einer Stelle platziert – sie haben vielmehr einen Anfangspunkt, einen Endpunkt und eventuell noch andere Eigenschaften, die ihre Form bestimmen. Objekte mit solch einer erweiterten Gestalt werden als „Strecker“ (engl. Spanners) bezeichnet.
Darüber hinaus gibt es ‚abstrakte‘ Grobs, die selbst keinen Ausdruck
irgendwelcher Art erzeugen. Vielmehr sammeln sie, positionieren oder
verwalten andere Grobs. Typische Beispiele hierfür sind
DynamicLineSpanner, BreakAlignment,
NoteColumn, VerticalAxisGroup,
NonMusicalPaperColumn und Ähnliche. Wir werden uns später
mit einigen von ihnen noch näher befassen.
Es bleibt uns noch übrig zu erklären, was „Schnittstellen“
(engl. interface) sind. Wenn auch viele Objekte sehr unterschiedlich
sind, haben sie doch oft gemeinsame Eigenschaften, die auf
die gleiche Weise verarbeitet werden. Alle Grobs beispielsweise
haben eine Farbe, eine Größe, eine Position usw. und alle
diese Eigenschaften werden von LilyPond auf die gleiche Weise
verarbeitet, während der Quelltext in Notensatz umgesetzt wird.
Um die internen Operationen zu vereinfachen, sind alle diese
gemeinsamen Prozesse und Eigenschaften in einem Objekt
mit der Bezeichnung grob-interface (Schnittstelle eines
graphischen Objektes) zusammengefasst. Es gibt viele andere
Gruppen gemeinsamer Eigenschaften, die jede eine Bezeichnung
besitzen, welche auf -interface endet. Insgesamt
gibt es über 100 dieser Schnittstellen. Wir werden später sehen,
was es damit auf sich hat.
Dies waren die Hauptbegriffe, die in diesem Kapitel zur Anwendung kommen sollen.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Naming conventions of objects and properties
Es wurden schon früher einige Regeln zur Benennung von Objekten vorgestellt, siehe Kontexte und Engraver. Hier eine Referenzliste der häufigsten Objekt- und Eigenschaftsbezeichnungen mit den Regeln für ihre Bezeichnung und illustrierenden echten Bezeichnungen. Es wurde „A“ für einen beliebigen Großbuchstaben und „aaa“ für eine beliebige Anzahl an Kleinbuchstaben eingesetzt. Andere Zeichen werden explizit angegeben.
| Objekt-/Eigenschaftstyp | Naming convention | Beispiele |
|---|---|---|
| Kontexte | Aaaa oder AaaaAaaaAaaa | Staff, GrandStaff |
| Layout-Objekte | Aaaa oder AaaaAaaaAaaa | Slur, NoteHead |
| Engraver | Aaaa_aaa_engraver | Clef_engraver, Note_heads_engraver |
| Schnittstellen | aaa-aaa-interface | grob-interface, break-aligned-interface |
| Kontext-Eigenschaften | aaa oder aaaAaaaAaaa | alignAboveContext, skipBars |
| Layout-Objekt-Eigenschaften | aaa oder aaa-aaa-aaa | direction, beam-thickness |
Es wird bald ersichtlich werden, dass die Eigenschaften von unterschiedlichen Objekttypen mit unterschiedlichen Befehlen geändert werden. Deshalb ist es nützlich, bereits am Namen den Typ und die Eigenschaften eines Objekts zu erkennen.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Tweaking methods
Der \override-Befehl | ||
Der \revert-Befehl | ||
Der \once-Präfix | ||
Der \overrideProperty-Befehl | ||
Der \tweak-Befehl | ||
Der \single-Präfix |
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
\override-Befehl@translationof The override command
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, Notendauern und Markierungen. Diesen zugrunde liegende Ausdrücke wie Zahlen, Zeichenketten und Listen werden im ‚Scheme Modus‘ verarbeitet. Der Präfix ‘#’ leitet diesen Modus ein. Einige dieser Werte haben manchmal eine gültige Repräsentation in LilyPond’s Musik Modus, in diesem Handbuch werden wir aus Gründen der Einheitlichkeit immer das ‘#’ für ihre Eingabe verwenden. Weiterführende Informationen zu LilyPond’s Scheme mode finden sie unter (extending)LilyPond Scheme-Syntax in Abschnitt ‘LilyPond Scheme-Syntax’ in Extending.
\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 | }
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
\revert-Befehl@translationof The revert command
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 \revert NoteHead.color b4 c | }
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
\once-Präfix@translationof The once prefix
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) | }
Allerdings funktioniert das nicht bei vordefinierten Befehlen wie
\…Neutral, \…Off oder \un…, weil
diese intern \revert verwenden und nicht \override, sodass
ein \once Präfix hier keine Auswirkungen hat.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
\overrideProperty-Befehl@translationof The overrideProperty command
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
(extending)Schwierige Korrekturen in Abschnitt ‘Schwierige Korrekturen’ in Extending.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
\tweak-Befehl@translationof The tweak command
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 \tweakBefehl
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] } } }
Notationsreferenz: (notation)Der tweak-Befehl in Abschnitt ‘Der tweak-Befehl’ in Notationsreferenz.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
\single-Präfix@translationof The single prefix
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.
Handbuch zum Lernen:
Der \tweak-Befehl,
Variablen für Layout Anpassungen einsetzen.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] |
Dieses Dokument wurde erzeugt von gub am 13. Juli 2020 durch texi2html 1.82.
Andere Sprachen: English, català, česky, español, français, italiano, 日本語, nederlands.
Über die automatische Sprachauswahl.