[ << Allgemeine Eingabe und Ausgabe ] | [Top][Contents][Index] | [ Abstände >> ] |
[ < Variablen benutzen ] | [ Up: Verschiedene Editionen aus einer Quelldatei ] | [ Globale Einstellungen benutzen > ] |
Marken benutzen
Der \tag #'TeilA
-Befehl markiert einen musikalischen
Ausdruck mit der Bezeichnung TeilA. Ausdrücke, die auf diese
Weise markiert werden, können mit ihrer Bezeichnung später ausgewählt
bzw. ausgefiltert werden. Das geschieht mit den Befehlen
\keepWithTag #'Bezeichnung
bzw. \removeWithTag #'Bezeichnung
.
Die Wirkung dieser Filter auf die markierten Notenabschnitte ist
wie folgt:
Filter | Resultat |
---|---|
Markierte Noten mit vorgesetztem
\keepWithTag #'Bezeichnung oder \keepWithTag #'(Bezeichnung1 Bezeichnung2…) | Unmarkierte Noten und Noten, die mit einer der angegebenen Bezeichnung markiert sind, werden gesetzt, Noten mit einer anderen Marke werden nicht angezeigt. |
Markierte Noten mit vorgesetztem
\removeWithTag #'Bezeichnung oder \removeWithTag #'(Bezeichnung1 Bezeichnung2…) | Unmarkierte Noten und Noten, die mit keiner der angegebenen Bezeichnungen markiert sind, werden gesetzt, Noten, die mit einer der Bezeichnungen markiert sind, werden nicht angezeigt. |
Markierte Noten, weder mit vorgesetztem \keepWithTag noch
\removeWithTag | Alle markierten und unmarkierten Noten werden angezeigt. |
Die Argumente der Befehle \tag
, \keepWithTag
und
\removeWithTag
sollten ein Symbol oder eine Liste von Symbolen sein
(wie etwa #'score
oder #'(violineI violineII)
),
gefolgt von einem musikalischen Ausdruck.
Nur wenn die Symbole gültige LilyPond-Bezeichner sind
(nur Buchstaben, keine Zahlen, Unter- oder Bindestriche),
die nicht mit Noten verwechselt werden können,
kann #'
als Kurzschreibweise weggelassen werden.
Eine Liste von Symbolen kann ein Komma als Trenner nutzen,
d.h. \tag #'(violineI violineII)
kann auch als
\tag violineI,violineII
geschrieben werden.
Das gleiche gilt für \keepWithTag
und \removeWithTag
.
Die Tag-Befehle sind musikalische Funktionen und können damit nicht
zum Filtern von Objekten benutzt werden, die kein musikalischer
Ausdruck sind, also sowas wie \book
- oder \score
-Blöcke.
Es gibt jedoch auch Befehle für Tags in \markup
-Umgebungen.
Im folgenden Beispiel erscheinen zwei Versionen der Noten, eine zeigt Triller in normaler Notation, die andere zeigt sie ausgeschrieben:
music = \relative { g'8. c32 d \tag #'trills { d8.\trill } \tag #'expand { \repeat unfold 3 { e32 d } } c32 d } \score { \keepWithTag #'trills \music } \score { \keepWithTag #'expand \music }![]()
Entsprechend können auch Abschnitte ausgeschlossen werden; das erfordert manchmal weniger Schreibarbeit:
music = \relative { g'8. c32 d \tag #'trills { d8.\trill } \tag #'expand {\repeat unfold 3 { e32 d } } c32 d } \score { \removeWithTag #'expand \music } \score { \removeWithTag #'trills \music }![]()
Marken können auch auf Artikulationen, Text usw angewendet werden, indem man ihnen
-\tag #'your-tag
voranstellt (jedoch nach der Note, an die sie gebunden sind). Mit diesem Code etwa könnte man entweder Fingersatz oder aber einen Text ausgeben:
c1-\tag #'finger ^4 c1-\tag #'warn ^"Achtung!"
Mehrfache Marken können mithilfe von mehreren \tag
-Befehlen
notiert werden:
music = \relative c'' { \tag #'a \tag #'both { a4 a a a } \tag #'b \tag #'both { b4 b b b } } << \keepWithTag #'a \music \keepWithTag #'b \music \keepWithTag #'both \music >>![]()
Mehrfache \removeWithTag
-Filter können auf einen
musikalischen Ausdruck angewendet werden, um mehrere unterschiedliche
markierte Abschnitte aus dem Druckbild zu entfernen.
Alternativ kann auch ein einziger \removeWithTag
-Befehl mit
einer Liste von Marken benutzt werden.
music = \relative c'' { \tag #'A { a4 a a a } \tag #'B { b4 b b b } \tag #'C { c4 c c c } \tag #'D { d4 d d d } } \new Voice { \removeWithTag #'B \removeWithTag #'C \music \removeWithTag #'(B C) \music }![]()
Zwei oder mehr \keepWithTag
-Filter in einem musikalischen
Ausdruck bewirken, dass alle markierten Abschnitte entfernt
werden, weil der erste Befehl alle markierten Abschnitt außer dem
im Befehl genannten wegfiltert und der zweite Befehl dann auch diesen
eben genannten zusätzlich entfernt.
Ein einzelner \keepWithTag
-Befehl mit mehreren Marken entfernt
nur diejenigen markierten Abschnitte, die nur andere Marken als die
angegebenen enthalten.
In folgendem Beispiel
music = \relative c'' { \tag #'violinI { a4 a a a } \tag #'violinII { b4 b b b } \tag #'viola { c4 c c c } \tag #'cello { d4 d d d } } \new Staff { \keepWithTag #'(violinI violinII) \music }![]()
werden nur die mit \tag
markierten Abchnitte ausgegeben,
die die Bezeichner violinI und violinII,
aber nicht viola und cello benutzen.
Während \keepWithTag
gut geeignet ist, um mit einer Art
von Alternativen umzugehen, führt das Entfernen von andersartigen
Marken zu Problemen, bei Nutzung für verschiedene Zwecke.
In diesem Fall können Marken gruppiert werden:
\tagGroup #'(violinI violinII viola cello)
Verschiedene Marken können somit zu einer Gruppe zusammengefasst werden. Allerdings kann eine einzelne Marke nur in einer Gruppe sein.
Die Nutzung von
\keepWithTag #'violinI …
entfernt nur markierte Abschnitte mit Marken der gleichen Gruppe,
in der auch violinI
ist, sofern es nicht violinI
selber ist.
Marken anderer Gruppen bleiben unangetastet.
music = \relative { \tagGroup #'(violinI violinII) \tagGroup #'(viola cello) \tag #'violinI { c''4^"violinI" c c c } \tag #'violinII { a2 a } \tag #'viola { e8 e e2. } \tag #'cello { d'2 d4 d } \tag #'other { f^"other" f f f } R1^"untagged" } \new Voice { \keepWithTag #'violinI \music }![]()
Im Beispiel entfernt der \keepWithTag
-Befehl lediglich violinII
,
da diese Marke in der selben Gruppe wie violinI
ist.
viola
und cello
bleiben erhalten, weil sie in einer
anderen Gruppe sind und other
bleibt ebenfalls erhalten,
weil diese Marke gar keiner Gruppe zugeordnet ist.
Manchmal will man Noten an einem bestimmen Platz in existierenden
Noten einfügen. Dafür kann entweder \pushToTag
oder
\appendToTag
benutzt werden, um Material hinter bzw. vor den
Elementen (elements
) der existierenden Noten einzufügen. Nicht
alle musikalischen Konstruktionen haben Elemente, aber sequentielle und
simultane Noten sind ziemlich gute Kandidaten:
test = { \tag #'here { \tag #'here <<c''>> } } { \pushToTag #'here c' \pushToTag #'here e' \pushToTag #'here g' \test \appendToTag #'here c' \appendToTag #'here e' \appendToTag #'here g' \test }![]()
Beide Befehle erhalten einen Tag, das Material, das bei jedem Auftreten
des Tags eingefügt werden soll und den Ausdruck, der mit dem Tag versehen
ist. Der Befehl stellt sicher, dass alle Änderungen kopiert werden, sodass
das ursprüngliche \test
seine Bedeutung behält.
Der \tag
-Befehl kann auch in \markup
-Umgebungen eingesetzt werden.
Auch die Befehle \keep-with-tag
, \remove-with-tag
, \push-to-tag
und \append-to-tag
können genutzt werden und verhalten sich wie ihre
Pendants in musikalischen Umgebungen.
test = \markup { \tag #'a a \tag #'b b \tag #'c c } \markup { \keep-with-tag #'b \test } \markup { \remove-with-tag #'b \test } \markup { \push-to-tag #'c pre \test } \markup { \append-to-tag #'c post \test }![]()
Musikalische \keepWithTag
- und \removeWithTag
-Befehle
filtern auch Marken in \markup
-Abschnitten innerhalb des
betroffenen Musikabschnitts.
music = \relative { c'4^\markup { \tag #'one first \tag #'two second part } c c c } { \keepWithTag #'one \music \removeWithTag #'one \music }![]()
Soll an die markierten Stellen in \markup
-Abschnitten von
musikalischen Objekten etwas hinzugefügt werden, kann man
\pushToTag
und \appendToTag
nicht verwenden,
denn diese fügen nur musikalische Ausdrücke hinzu.
Hierfür wird \pushToTagMarkup
und \appendToTagMarkup
benötigt.
music = \relative { c'4^\markup { \tag #'part part } c c c } { \pushToTagMarkup #'part "great" \music \appendToTagMarkup #'part \markup { is also great } \music }![]()
Die Filterung von Marken wirkt sich umgekehrt auch auf Musik
innerhalb eines \score
-Befehls in einem \markup
-Abschnitt aus.
music = \relative { c'2^\markup { \tag #'first first \tag #'second second } c \tag #'first { d d } \tag #'second { f f } } \markup { \keep-with-tag #'first \score { \music } \remove-with-tag #'first \score { \music } }![]()
Bei der Verwendung von Marken in Markups ist allerdings beim Markieren von Listen besondere Vorsicht geboten. Während die Filter
\markup { \remove-with-tag #'test { a \tag #'test { b c } d } }![]()
gut funktionieren, gibt es bei den einfügenden Befehlen
\push-to-tag
und \append-to-tag
Probleme.
\markup { \push-to-tag #'test "twice" { a \tag #'test { b c } d } }![]()
Das liegt in diesem Falle daran, dass LilyPond das Konstrukt
\tag #'test { b c }
intern auflöst zu
\tag #'test b \tag #'test c
und daher den übergebenen Text zweimal einfügt.
Geht es wirklich darum, vor oder nach einer Liste an sich
etwas einzufügen, muss auch die ganze Liste entsprechend
markiert werden. Das geht mit \tag-list
.
\markup { \push-to-tag #'test "once" { a \tag-list #'test { b c } d } }![]()
Siehe auch
Handbuch zum Lernen: Stücke durch Variablen organisieren.
Notationsreferenz: Automatische Kombination von Stimmen, LilyPond-Dateien einfügen.
Bekannte Probleme und Warnungen
Die Nutzung von \relative
auf musikalische Abschnitte, die
mittels \keepWithTag
oder \removeWithTag
gefiltert wurden,
kann die Oktavlage verändern, da nur die Töne betrachtet werden,
die nach der Filterung noch übrig sind.
Wenn \relative
zuerst angewendet wird, bevor \keepWithTag
oder
\removeWithTag
filtern, kann das Problem vermieden werden, da
\relative
dann auf alle Töne angewendet wird
und die Filterung danach erfolgt.
[ << Allgemeine Eingabe und Ausgabe ] | [Top][Contents][Index] | [ Abstände >> ] |
[ < Variablen benutzen ] | [ Up: Verschiedene Editionen aus einer Quelldatei ] | [ Globale Einstellungen benutzen > ] |