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:

FilterResultat
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 \removeWithTagAlle 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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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]

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.


LilyPond Benutzerhandbuch v2.25.27 (development-branch).