| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Contexts and engravers
Kontexte und Engraver („Stempel“) sind in den vorherigen Abschnitten schon aufgetaucht; hier wollen wir uns ihnen nun etwas ausführlicher widmen, denn sie sind sehr wichtig, um Feineinstellungen in der LilyPond-Notenausgabe vornehmen zu können.
| 3.3.1 Was sind Kontexte? | ||
| 3.3.2 Kontexte erstellen | ||
| 3.3.3 Was sind Engraver? | ||
| 3.3.4 Kontexteigenschaften verändern | ||
| 3.3.5 Engraver hinzufügen und entfernen |
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Contexts explained
Wenn Noten gesetzt werden, müssen viele Elemente zu der Notenausgabe hinzugefügt werden, die im Quellcode gar nicht explizit vorkommen. Vergleichen Sie etwa den Quellcode und die Notenausgabe des folgenden Beispiels:
\relative { cis''4 cis2. | a4 a2. | }
Der Quellcode ist sehr kurz und knapp, während in der Notenausgabe Taktstriche, Vorzeichen, ein Schlüssel und eine Taktart hinzugefügt wurden. Während LilyPond den Eingabetext interpretiert, wird die musikalische Information von rechts nach links gelesen, in etwa, wie man eine Partitur von links nach rechts liest. Während das Programm den Code liest, merkt es sich, wo sich Taktgrenzen befinden und für welche Tonhöhen Versetzungszeichen gesetzt werden müssen. Diese Information muss auf mehreren Ebenen gehandhabt werden, denn Versetzungszeichen etwa beziehen sich nur auf ein System, Taktstriche dagegen üblicherweise auf die gesamte Partitur.
Innerhalb von LilyPond sind diese Regeln und
Informationshappen in Kontexten (engl.
contexts) gruppiert. Der Voice (Stimmen)-Kontext
wurde schon vorgestellt. Daneben
gibt es noch die Staff (Notensystem-) und
Score (Partitur)-Kontexte. Kontexte sind
hierarchisch geschichtet um die hierarchische
Struktur einer Partitur zu spiegeln. Ein Staff-Kontext
kann zum Beispiel viele Voice-Kontexte beinhalten,
und ein Score-Kontext kann viele
Staff-Kontexte beinhalten.
Jeder Kontext hat die Aufgabe, bestimmte Notationsregeln
zu erzwingen, bestimmte Notationsobjekte zu erstellen und
verbundene Elemente zu ordnen. Der Voice-Kontext
zum Beispiel kann eine Vorzeichenregel einführen und der
Staff-Kontext hält diese Regel dann aufrecht, um
einzuordnen, ob ein Versetzungszeichen gesetzt werden
muss oder nicht.
Ein anderes Beispiel: die Synchronisation der Taktstriche ist
standardmäßig im Score-Kontext verankert. Manchmal sollen
die Systeme einer Partitur aber unterschiedliche Taktarten
enthalten, etwa in einer polymetrischen Partitur mit
4/4- und 3/4-Takt. In diesem Fall müssen also die Standardeinstellungen
der Score- und Staff-Kontexte verändert werden.
In einfachen Partituren werden die Kontexte implizit erstellt, und es kann sein, dass Sie sich dessen gar nicht bewusst sind. Für etwas größere Projekte, etwa mit vielen Systemen, müssen die Kontexte aber explizit erstellt werden, um sicher zu gehen, dass man auch wirklich die erwünschte Zahl an Systemen in der richtigen Reihenfolge erhält. Wenn Stücke mit spezialisierter Notation gesetzt werden sollen, ist es üblich, die existierenden Kontexte zu verändern oder gar gänzlich neue zu definieren.
Zusätzlich zu den Score, Staff und
Voice-Kontexten gibt es noch Kontexte, die zwischen
der Partitur- und Systemebene liegen und Gruppen von Systemen
kontrollieren. Das sind beispielsweise der
PianoStaff und ChoirStaff-Kontext. Es gibt zusätzlich
alternative Kontexte für Systeme und Stimmen sowie eigene Kontexte
für Gesangstexte, Perkussion, Griffsymbole, Generalbass usw.
Die Bezeichnungen all dieser Kontexte werden von einem oder mehreren
englischen
Wörtern gebildet, dabei wird jedes Wort mit einem Großbuchstaben
begonnen und direkt an das folgende ohne Bindestrich oder Unterstrich
angeschlossen, etwa
GregorianTranscriptionStaff.
Notationsreferenz: (notation)Was sind Kontexte? in Abschnitt ‘Was sind Kontexte?’ in Notationsreferenz.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Creating contexts
In einer Eingabedatei enthält eine Score-Umgebung (einen
Kontext), die mit
dem Befehl \score eingeleitet wird, nur einen einzigen
musikalischen Ausdruck und mit ihm verknüpft eine Ausgabedefinition
(entweder eine \layout- oder eine \midi-Umgebung).
Üblicherweise wird der Score-Kontext automatisch von
LilyPond erstellt, wenn der musikalische Ausdruck interpretiert
wird.
Wenn nur ein System vorhanden ist, kann man es ruhig
LilyPond überlassen, auch die Voice- und Staff-Kontexte
zu erstellen, aber für komplexere Partituren ist es notwendig,
sie mit einem Befehl zu erstellen. Der einfachste Befehl
hierzu ist \new. Er wird dem musikalischen Ausdruck
vorangestellt, etwa so:
\new Typ musikalischer Ausdruck |
wobei Typ eine Kontextbezeichnung (wie etwa Staff oder
Voice) ist. Dieser Befehl erstellt einen neuen Kontext und
beginnt, den muskalischen Ausdruck innerhalb dieses
Kontexts auszuwerten.
Achtung: Der \new Score-Befehl sollte nicht benutzt werden,
weil der Partitur-(Score)-Kontext der obersten Ebene
normalerweise automatisch erstellt wird, wenn der musikalische Ausdruck
innerhalb der score-Umgebung interpretiert wird. Standard-Werte
von Kontexteigenschaften, die für einen bestimmten Score gelten
sollen, können innerhalb der \layout-Umgebung definiert werden.
Siehe Kontexteigenschaften verändern.
Wir haben schon viele explizite Beispiel gesehen, in denen
neue Staff- und Voice-Kontexte erstellt wurden, aber
um noch einmal ins Gedächtnis zu rufen, wie diese Befehle benutzt
werden, hier ein kommentiertes Beispiel aus dem richtigen Leben:
\score { % start of single compound music expression << % start of simultaneous staves section \time 2/4 \new Staff { % create RH staff \clef "treble" \key g \minor \new Voice { % create voice for RH notes \relative { % start of RH notes d''4 ees16 c8. | d4 ees16 c8. | } % end of RH notes } % end of RH voice } % end of RH staff \new Staff << % create LH staff; needs two simultaneous voices \clef "bass" \key g \minor \new Voice { % create LH voice one \voiceOne \relative { % start of LH voice one notes g8 <bes d> ees, <g c> | g8 <bes d> ees, <g c> | } % end of LH voice one notes } % end of LH voice one \new Voice { % create LH voice two \voiceTwo \relative { % start of LH voice two notes g4 ees | g4 ees | } % end of LH voice two notes } % end of LH voice two >> % end of LH staff >> % end of simultaneous staves section } % end of single compound music expression
(Beachten Sie, dass wir hier alle Zeilen, die eine neue
Umgebung entweder mit einer geschweiften Klammer ({)
oder doppelten spitzen Klammern (<<) öffnen, mit
jeweils zwei Leerzeichen, und die entsprechenden
schließenden Klammern mit der gleichen Anzahl Leerzeichen
eingerückt werden. Dies ist nicht erforderlich, es wird aber
zu einem großen Teil die nicht passenden Klammerpaar-Fehler
eliminieren und ist darum sehr empfohlen. Es macht es
möglich, die Struktur einer Partitur auf einen Blick zu
verstehen, und alle nicht passenden Klammern
erschließen sich schnell. Beachten Sie auch, dass das
untere Notensystem mit eckigen Klammern erstellt wird,
denn innerhalb dieses Systems brauchen wir zwei Stimmen,
um die Noten darzustellen. Das obere System braucht
nur einen einzigen musikalischen Ausdruck und ist deshalb
von geschweiften Klammern umschlossen.)
Der \new-Befehl kann einem Kontext auch einen
Namen zur Identifikation geben, um ihn von anderen Kontexten des
selben Typs zu unterscheiden:
\new Typ = Name musikalischer Ausdruck |
Beachten Sie den Unterschied zwischen der Bezeichnung des
Kontexttyps (Staff, Voice, usw.) und dem
Namen, der aus beliebigen Buchstaben bestehen kann
und vom Benutzer frei erfunden werden kann. Zahlen und
Leerzeichen können auch benutzt werden, in dem Fall
muss der Name aber von doppelten Anführungszeichen
umgeben werden, also etwa
\new Staff = "Mein System 1" musikalischer Ausdruck.
Der Name wird
benutzt, um später auf genau diesen spezifischen Kontext
zu verweisen. Dieses Vorgehen wurde schon in dem Abschnitt
zu Gesangstexten angewandt, siehe Stimmen und Text.
Notationsreferenz: (notation)Kontexte erstellen und referenzieren in Abschnitt ‘Kontexte erstellen und referenzieren’ in Notationsreferenz.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Engravers explained
Jedes Zeichen des fertigen Notensatzes von LilyPond wird
von einem Engraver (Stempel) produziert. Es gibt
also einen Engraver, der die Systeme erstellt, einen, der die
Notenköpfe ausgibt, einen für die Hälse, einen für die
Balken usw. Insgesamt gibt es über 120 Engraver! Zum
Glück braucht man für die meisten Partituren nur ein
paar Engraver, und für einfache Partituren muss man eigentlich
überhaupt nichts über sie wissen.
Engraver leben und wirken aus den Kontexten heraus. Engraver
wie der Metronome_mark_engraver, dessen Aktion
und Ausgabe sich auf die gesamte Partitur bezieht, wirken
in der obersten Kontextebene – dem Score-Kontext.
Der Clef_engraver (Schlüssel-Stempel) und der
Key_engraver (Vorzeichen-Stempel) finden sich in
jedem Staff-Kontext, denn unterschiedliche Systeme
könnten unterschiedliche Tonarten und Notenschlüssel
brauchen.
Der Note_heads_engraver (Notenkopf-Stempel) und der
Stem_engraver (Hals-Stempel) befinden sich in jedem
Voice-Kontext, der untersten Kontextebene.
Jeder Engraver bearbeitet die bestimmten Objekte, die mit seiner Funktion assoziiert sind, und verwaltet die Eigenschaften dieser Funktion. Diese Eigenschaften, wie etwa die Eigenschaften, die mit Kontexten assoziiert sind, können verändert werden, um die Wirkungsweise des Engravers oder das Erscheinungsbild der von ihm produzierten Elemente in der Partitur zu ändern.
Alle Engraver haben zusammengesetzte Bezeichnung, die aus
den (englischen) Wörtern ihrer Funktionsweise bestehen. Nur
das erste Wort hat einen Großbuchstaben, und die restlichen
Wörter werden mit einem Unterstrich angefügt. Ein
Staff_symbol_engraver verantwortet also die Erstellung
der Notenlinien, ein Clef_engraver entscheidet über die
Art der Notenschlüssel und setzt die entsprechenden Symbole; damit
wird gleichzeitig die Referenztonhöhe auf dem Notensystem festgelegt.
Hier die meistgebräuchlichen Engraver mit ihrer Funktion. Sie werden sehen, dass es mit etwas Englischkenntnissen einfach ist, die Funktion eines Engravers von seiner Bezeichnung abzuleiten.
| Engraver | Funktion |
|---|---|
| Accidental_engraver | Erstellt Versetzungszeichen, vorgeschlagene und Warnversetzungszeichen. |
| Beam_engraver | Erstellt Balken. |
| Clef_engraver | Erstellt Notenschlüssel. |
| Completion_heads_engraver | Teilt Noten in kleiner Werte, wenn sie über den Taktstrich reichen. |
| Dynamic_engraver | Erstellt Dynamik-Klammern und Dynamik-Texte. |
| Forbid_line_break_engraver | Verbietet Zeilenumbrüche, solange ein musikalisches Element aktiv ist. |
| Key_engraver | Erstellt die Vorzeichen. |
| Metronome_mark_engraver | Erstellt Metronom-Bezeichnungen. |
| Note_heads_engraver | Erstellt Notenköpfe. |
| Rest_engraver | Erstellt Pausen. |
| Staff_symbol_engraver | Erstellt die (standardmäßig) fünf Notenlinien des Systems. |
| Stem_engraver | Erstellt die Notenhälse und Tremolos mit einem Hals. |
| Time_signature_engraver | Erstellt die Taktartbezeichnung. |
Es soll später gezeigt werden, wie die LilyPond-Ausgabe verändert werden kann, indem die Wirkungsweise der Engraver beeinflusst wird.
Referenz der Interna: (internals)Engravers and Performers in Abschnitt ‘Engravers and Performers’ in Referenz der Interna.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Modifying context properties
Kontexte sind dafür verantwortlich, die Werte bestimmter
Kontext-Eigenschaften zu speichern. Viele davon
können verändert werden, um die Interpretation der
Eingabe zu beeinflussen und die Ausgabe zu verändern.
Kontexte werden mit dem \set-Befehl geändert.
Er wird in Form
\set KontextBezeichnung.EigenschaftsBezeichnung = #Wert |
verwendet, wobei KontextBezeichnung üblicherweise
Score,
Staff oder Voice ist. Der erste Teil kann auch
ausgelassen werden; in diesem Fall wird der aktuelle
Kontext (üblicherweise Voice) angenommen.
Die Bezeichnung von Kontexten-Eigenschaften besteht aus zwei Wörtern, die ohne Unterstrich oder Bindestrich verbunden sind. Alle außer dem ersten werden am Anfang groß geschrieben. Hier einige Beispiele der gebräuchlichsten Kontext-Eigenschaften. Es gibt sehr viel mehr.
| Eigenschaftsbezeichnung | Typ | Funktion | Beispiel-Wert |
|---|---|---|---|
| extraNatural | boolescher Wert | Wenn wahr, werden zusätzliche Auflösungszeichen vor Versetzungszeichen gesetzt. | #t, #f |
| currentBarNumber | Integer | Setzt die aktuelle Taktnummer. | 50 |
| doubleSlurs | boolescher Wert | Wenn wahr, werden Legatobögen über und unter die Noten gesetzt. | #t, #f |
| instrumentName | Text | Setzt die Instrumentenbezeichnung am Anfang eines Systems. | "Cello I" |
| fontSize | reale Zahl | Vergrößert oder verkleinert die Schriftgröße. | 2.4 |
| stanza | Text | Setzt den Text zu Beginn einer Strophe. | "2" |
Ein boolescher Wert ist entweder wahr (#t)
oder falsch (#f),
ein Integer eine positive ganze Zahl, ein Real (reelle Zahl) eine positive
oder negative Dezimalzahl, und Text wird in doppelte
Anführungszeichen (Shift+2) eingeschlossen. Beachten Sie
das Vorkommen des Rautenzeichens
(#) an unterschiedlichen Stellen: als Teil eines
booleschen Wertes vor dem t oder f, aber
auch vor einem Wert in der
\set-Befehlskette. Wenn ein boolescher Wert
eingegeben werden soll, braucht man also zwei
Rautenzeichen, z. B. ##t.
Bevor eine Eigenschaft geändert werden kann, muss man wissen,
in welchem Kontext sie sich befindet. Manchmal versteht das
sich von selbst, aber in einigen Fällen kann es zunächst
unverständlich erscheinen. Wenn der falsche Kontext angegeben
wird, wird keine Fehlermeldung produziert, aber die
Veränderung wird einfach nicht ausgeführt.
instrumentName befindet sich offensichtlich innerhalb
von einem Staff-Kontext, denn das Notensystem soll
benannt werden. In dem folgenden Beispiel erhält das erste
System korrekt die Instrumentenbezeichnung, das zweite aber
nicht, weil der Kontext ausgelassen wurde.
<< \new Staff \relative { \set Staff.instrumentName = "Soprano" c''2 c } \new Staff \relative { \set instrumentName = "Alto" % Wrong! d'2 d } >>
Denken Sie daran, dass der Standardkontext Voice ist; in dem
zweiten \set-Befehl wird also die Eigenschaft instrumentName
im Voice-Kontext auf „Alto“, gesetzt, aber weil LilyPond diese
Eigenschaft nicht im Voice-Kontext vermutet, passiert einfach
gar nichts. Das ist kein Fehler, und darum wird auch keine Fehlermeldung
produziert.
Ebenso gibt es keine Fehlermeldung, wenn die Kontext-Bezeichnung
falsch geschrieben wird und die Änderung also nicht ausgeführt werden
kann. Tatsächlich kann eine beliebige (ausgedachte) Kontextbezeichnung
mit dem \set-Befehl eingesetzt werden, genauso wie die, die
wirklich existieren. Aber wenn LilyPond diese Bezeichnung nicht
zuordnen kann, bewirkt der Befehl einfach gar nichts. Manche Editoren,
die Unterstützung für LilyPond-Befehle mitbringen, markieren existierende
Kontextbezeichnungen mit einem Punkt, wenn man mit der Maus darüber
fährt (wie etwa JEdit mit dem LilyPondTool), oder markieren
unbekannte Bezeichnungen anders (wie ConTEXT). Wenn Sie keinen
Editor mit LilyPond-Unterstützung einsetzen, wird empfohlen, die
Bezeichnungen in der Interna-Referenz zu überprüfen: siehe
(internals)Tunable context properties in Abschnitt ‘Tunable context properties’ in Referenz der Interna, oder
(internals)Contexts in Abschnitt ‘Contexts’ in Referenz der Interna.
Die Eigenschaft instrumentName wird erst aktiv, wenn sie
in einem Staff-Kontext gesetzt wird, aber manche Eigenschaften
können in mehr als einem Kontext benutzt werden. Als Beispiel mag die
extraNatural-Eigenschaft dienen, die zusätzliche Auflösungszeichen
setzt. Die Standardeinstellung ist ##t (wahr) in allen Systemen.
Wenn sie nur in einem Staff (Notensystem) auf ##f (falsch)
gesetzt wird, wirkt sie sich auf alle Noten in diesem System aus. Wird
sie dagegen in der Score-Umgebung gesetzt, wirkt sich das
auf alle darin enthaltenen Systeme aus.
Das also bewirkt, dass die zusätzlichen Auflösungszeichen in einem System ausgeschaltet sind:
<< \new Staff \relative { aeses'2 aes } \new Staff \relative { \set Staff.extraNatural = ##f aeses'2 aes } >>
während dies dazu dient, sie in allen Systemen auszuschalten:
<< \new Staff \relative { aeses'2 aes } \new Staff \relative { \set Score.extraNatural = ##f aeses'2 aes } >>
Ein anderes Beispiel ist die Eigenschaft clefTransposition:
wenn sie im Score-Kontext gesetzt wird, ändert sich sofort
der Wert der Tranponierung in allen aktuellen Systemen und wird
auf einen neuen Wert gesetzt, der sich auf alle Systeme auswirkt.
Der gegenteilige Befehl, \unset, entfernt die Eigenschaft
effektiv wieder von dem Kontext: in den meisten Fällen wird der
Kontext auf ihre Standardeinstellungen zurückgesetzt.
Normalerweise wird aber \unset nicht benötigt,
denn ein neues \set erledigt alles, was man braucht.
Die \set- und \unset-Befehle könne überall im
Eingabequelltext erscheinen und werden aktiv von dem Moment, an
dem sie auftreten bis zum Ende der Partitur oder bis die Eigenschaft
mit \set oder \unset neu gesetzt wird. Versuchen
wir als Beispiel, die Schriftgröße mehrmals zu ändern, was sich unter anderem
auf die Notenköpfe auswirkt. Die Änderung bezieht sich immer auf den Standard,
nicht vom letzten gesetzten Wert.
\relative { c'4 d % make note heads smaller \set fontSize = #-4 e4 f | % make note heads larger \set fontSize = #2.5 g4 a % return to default size \unset fontSize b4 c | }
Wir haben jetzt gesehen, wie sich die Werte von unterschiedlichen
Eigenschaften ändern lassen. Beachten Sie, dass Integer und
Zahlen immer mit einem Rautenzeichen beginnen, während
die Werte wahr und falsch (mit ##t und ##f
notiert) immer mit zwei Rauten beginnen. Eine Eigenschaft, die
aus Text besteht, muss in doppelte Anführungsstriche gesetzt werden,
auch wenn wir später sehen werden, dass Text auf eine sehr viel
allgemeinere und mächtigere Art mit dem \markup-Befehl
eingegeben werden kann.
\with setzenDie Standardwerte von Kontexteigenschaften können zu dem Zeitpunkt
definiert werden, an welchem der Kontext erstellt wird. Manchmal
ist das eine saubere Weise, eine Eigenschaft zu bestimmen, die für
die gesamte Partitur erhalten bleiben soll. Wenn ein Kontext mit
einem \new-Befehl erstellt wird, können in einer
direkt folgenden \with { … }-Umgebung die Eigenschaften
bestimmt werden. Wenn also die zusätzlichen
Auflösungszeichen für eine ganze Partitur gelten sollen, könnte
man schreiben:
\new Staff \with { extraNatural = ##f }
|
etwa so:
<< \new Staff { \relative { gisis'4 gis aeses aes } } \new Staff \with { extraNatural = ##f } { \relative { gisis'4 gis aeses aes } } >>
Eigenschaften, die auf diese Arte gesetzt werden, können immer noch
dynamisch mit dem \set-Befehl geändert werden und mit
\unset auf ihre Standardeinstellungen zurückgesetzt werden,
wie sie vorher in der \with-Umgebung definiert wurden.
Wenn also die fontSize-Eigenschaft in einer \with-Umgebung
definiert wird, wird der Standardwert für die Schriftgröße
festgelegt. Wenn dieser Wert später mit \set verändert
wird, kann dieser neue Standardwert mit dem Befehl
\unset fontSize wieder erreicht werden.
\context setzenDie Werte von Kontext-Eigenschaften können in allen Kontexten
eines bestimmten Typs (etwa alle Staff-Kontexte)
gleichzeitig mit einem Befehl gesetzt werden. Der Kontext wird
spezifiziert, indem seine Bezeichnung benutzt wird, also etwa
Staff, mit einem Backslash davor: \Staff. Der Befehl
für die Eigenschaft ist der gleiche, wie er auch in der
\with-Konstruktion benutzt wird, wie oben gezeigt. Er wird in
eine \context-Umgebung eingebettet, welche wiederum innerhalb
von einer \layout-Umgebung steht. Jede \context-Umgebung
wirkt sich auf alle Kontexte dieses Typs aus, welche sich in der
aktuellen Partitur befinden (d. h. innerhalb einer \score-
oder \book-Umgebung). Hier ist ein Beispiel, wie man diese
Funktion anwendet:
\score { \new Staff { \relative { cisis''4 e d cis } } \layout { \context { \Staff extraNatural = ##t } } }
Wenn die Veränderung der Eigenschaft sich auf alle Systeme einer
score-Umgebung beziehen soll:
\score { << \new Staff { \relative { gisis'4 gis aeses aes } } \new Staff { \relative { gisis'4 gis aeses aes } } >> \layout { \context { \Score extraNatural = ##f } } }
Kontext-Eigenschaften, die auf diese Weise gesetzt werden, können für
bestimmten Kontexte überschrieben werden, indem die
\with-Konstruktion eingesetzt wird, oder mit \set-Befehlen
innerhalb der aktuellen Noten.
Notationsreferenz: (notation)Die Standardeinstellungen von Kontexten ändern in Abschnitt ‘Die Standardeinstellungen von Kontexten ändern’ in Notationsreferenz, (notation)Der set-Befehl in Abschnitt ‘Der set-Befehl’ in Notationsreferenz.
Referenz der Interna: (internals)Contexts in Abschnitt ‘Contexts’ in Referenz der Interna, (internals)Tunable context properties in Abschnitt ‘Tunable context properties’ in Referenz der Interna.
| [ < ] | [ > ] | [ << ] | [ Nach oben ] | [ >> ] | [Anfang] | [Inhalt] | [Index] | [ ? ] |
@translationof Adding and removing engravers
Wir haben gesehen, dass jeder Kontext eine Anzahl an Engravern (Stempeln) beinhaltet, von denen ein jeder einen bestimmten Teil des fertigen Notensatzes produziert, wie z. B. Taktstriche, Notenlinien, Notenköpfe, Hälse usw. Wenn ein Engraver aus einem Kontext entfernt wird, kann er seine Objekte nicht länger produzieren. Das ist eine eher grobe Methode, die Notenausgabe zu beeinflussen, aber es kann von großem Nutzen sein.
Um einen Engraver von einem einzelnen Kontext zu entfernen,
wir der \with-Befehl eingesetzt, direkt hinter
den Befehl zur Kontext-Erstellung geschrieben, wie
in dem vorigen Abschnitt gezeigt.
Als ein Beispiel wollen wir das Beispiel aus dem letzten
Abschnitt produzieren, aber die Notenlinien entfernen. Erinnern
Sie sich, dass die Notenlinien vom Staff_symbol_engraver
erstellt werden.
\new Staff \with { \remove "Staff_symbol_engraver" } \relative { c'4 d \set fontSize = #-4 % make note heads smaller e4 f | \set fontSize = #2.5 % make note heads larger g4 a \unset fontSize % return to default size b4 c | }
Engraver können auch zu einem bestimmten Kontext hinzugefügt werden. Dies geschieht mit dem Befehl
\consists Engraver_bezeichnung
welcher auch wieder innerhalb der \with-Umgebung
gesetzt wird. Einige Chorpartituren zeigen einen
Ambitus direkt zu Beginn der ersten Notenzeile, um
den Stimmumfang des Stückes anzuzeigen, siehe auch
(music-glossary)ambitus in Abschnitt ‘ambitus’ in Glossar. Der Ambitus wird vom
Ambitus_engraver erstellt, der normalerweise
in keinem Kontext enthalten ist. Wenn wir
ihn zum Voice-Kontext hinzufügen, errechnet
er automatisch den Stimmumfang für diese einzelne Stimme
und zeigt ihn an:
\new Staff << \new Voice \with { \consists "Ambitus_engraver" } { \relative { \voiceOne c''4 a b g } } \new Voice { \relative { \voiceTwo c'4 e d f } } >>
wenn wir den Ambitus-Engraver allerdings zum
Staff-Kontext hinzufügen, wird der Stimmumfang aller
Stimmen in diesem Notensystem errechnet:
\new Staff \with { \consists "Ambitus_engraver" } << \new Voice { \relative { \voiceOne c''4 a b g } } \new Voice { \relative { \voiceTwo c'4 e d f } } >>
Die vorigen Beispiele zeigen, wie man Engraver in einem
bestimmten Kontext hinzufügen oder entfernen kann. Es ist
auch möglich, Engraver in jedem Kontext eines bestimmten
Typs hinzuzufügen oder zu entfernen. Dazu werden die
Befehle in dem entsprechenden Kontext in einer
\layout-Umgebung gesetzt. Wenn wir also z. B.
den Ambitus für jedes Notensystem in einer Partitur
mit vier Systemen anzeigen wollen, könnte das so aussehen:
\score { << \new Staff { \relative { c''4 a b g } } \new Staff { \relative { c'4 a b g } } \new Staff { \clef "G_8" \relative { c'4 a b g } } \new Staff { \clef "bass" \relative { c4 a b g } } >> \layout { \context { \Staff \consists "Ambitus_engraver" } } }
Die Werte der Kontext-Eigenschaften können auch für
alle Kontexte eines bestimmten Typs auf die gleiche
Weise geändert werden, indem der \set-Befehl in
einer \context-Umgebung angewendet wird.
Notationsreferenz: (notation)Umgebungs-Plugins verändern in Abschnitt ‘Umgebungs-Plugins verändern’ in Notationsreferenz, (notation)Die Standardeinstellungen von Kontexten ändern in Abschnitt ‘Die Standardeinstellungen von Kontexten ändern’ in Notationsreferenz.
Die Stem_engraver und Beam_engraver fügen ihre
Objekte an Notenköpfe an. Wenn der Note_heads_engraver
entfernt wird, werden keine Notenköpfe erstellt und demzufolge auch keine
Hälse oder Bögen dargestellt.
| [ < ] | [ > ] | [ << ] | [ 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, magyar, italiano, 日本語, nederlands.
Über die automatische Sprachauswahl.