| [ << 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 \keepWithTagnoch\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 }![[image of music]](../d8/lily-53aafc83.png)
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 }![[image of music]](../d6/lily-6219b01d.png)
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 >>![[image of music]](../3e/lily-8e4d6066.png)
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 }![[image of music]](../49/lily-1b514a7c.png)
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 }![[image of music]](../32/lily-cda83672.png)
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 }![[image of music]](../bb/lily-4fb0d86e.png)
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 }![[image of music]](../08/lily-0e94a4fe.png)
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 }![[image of music]](../46/lily-58a9aa9b.png)
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 }![[image of music]](../47/lily-f5e90dc0.png)
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 }![[image of music]](../90/lily-cb58c306.png)
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 } }![[image of music]](../e7/lily-a4e65242.png)
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 } }![[image of music]](../23/lily-ba7cc1b7.png)
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 } }![[image of music]](../9e/lily-4662797e.png)
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 } }![[image of music]](../10/lily-69909841.png)
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 > ] |