タグを使用する

\tag #'partA コマンドは音楽表記に partA という名前を付けます。この方法でタグを付けられた表記は、後で \keepWithTag #'name\removeWithTag #'name のどちらかを用いて、名前によって選択あるいは排除することができます。タグの付いた音楽にそのようなフィルタを適用した結果は以下のようになります:

フィルタ結果
\keepWithTag #'name あるいは \keepWithTag #'(name1 name2…) が前に付くタグ付きの音楽タグの付いていない音楽と、与えられたタグ名のいずれかに当てはまる音楽がインクルードされます。他のタグ名を持つタグ付き音楽は排除されます。
\removeWithTag #'name あるいは \removeWithTag #'(name1 name2…) が前に付くタグ付きの音楽タグの付いていない音楽と、与えられたタグ名のどれにも当てはまらない音楽がインクルードされます。与えられたタグ名のいずれかに当てはまる音楽は排除されます。
\keepWithTag\removeWithTag のどちらも前に付かないタグ付きの音楽タグの付いた音楽とタグの付いていない音楽すべてがインクルードされます。

\tag\keepWithTag それに \removeWithTag コマンドの引数はシンボルやシンボルのリスト (例えば #'score or #'(violinI violinII) と、音楽表記の順であるべきです。シンボルが LilyPond において正しい識別子 (アルファベットのみから成り、数字、アンダースコア、ダッシュは含まない) であり、音符名と混同しない場合である限り#' を省略することができ、シンボルのリストはドットで区切る記法を用いることができます。例えば、\tag #'(violinI violinII)\tag violinI.violinII と書くことができます。\keepWithTag\removeWithTag でも同様です。タグコマンドは音楽関数なので、\book または \score ブロックのような、音楽表記ではないオブジェクトをフィルターするのに使うことはできません。

以下の例では、楽曲を 2 つのバージョンで示しています。1 つはトリルを通常の記譜法で示していて、もう 1 つはトリルを明示的に展開しています:

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]

\keepWithTag を使う代わりに、音楽セクションを排除する方が楽な場合もあります:

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]

タグ フィルタリングはアーティキュレーション、テキストなどにも適用することができます。フィルタリングを行うにはアーティキュレーションの前に

-\tag #'your-tag

を置きます。例えば、以下は条件付の運指指示を持つ音符と条件付注記を持つ音符を定義しています:

c1-\tag #'finger ^4
c1-\tag #'warn ^"Watch!"

複数の \tag エントリで、または複数のタグを一つのシンボルのリストにすることで、表記に複数のタグを付けることもできます:

music = \relative c'' {
  \tag #'a \tag #'both { a4 a a a }
  \tag #'(b both) { b4 b b b }
}
<<
\keepWithTag #'a \music
\keepWithTag #'b \music
\keepWithTag #'both \music
>>

[image of music]

単一の音楽表記に複数の \removeWithTag フィルタを適用することによって、いくつかの異なる名前のタグが付いたセクションを排除することができます。または、\removeWithTag にタグのリストを与える表記を用いることもできます:

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]

単一の音楽表記に 2 つ以上の \keepWithTag フィルタを適用すると、タグ付きセクションが すべて 排除されてしまいます。なぜなら、最初のフィルタがそのタグ以外を持つセクションを排除し、2 番目のフィルタが更にそのセクションを排除するからです。\keepWithTag コマンドを、複数のタグのリストを引数に与えて使うことで、そのリストに無いタグを持つセクションのみを削除することができます。

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]

上の例では、violinIviolinII\tag を表示しますが、violacello は表示しません。

While \keepWithTag is convenient when dealing with one set of alternatives, the removal of music tagged with unrelated tags is problematic when using them for more than one purpose. \keepWithTag は、1 つだけの入れ替えのセットを扱う場合には便利ですが、関係のないタグが付けられた音楽を削除してしまうことは、タグを複数の目的で使用したい場合に問題となります。そのような場合では、タグの‘グループ’を宣言することができます。

\tagGroup #'(violinI violinII viola cello)

こうすることで、4 つの異なるタグが一つの‘タグ グループ’になります。それぞれのタグは、複数の‘タグ グループ’のメンバとなることはできません。

\keepWithTag #'violinI …

これで、violinI のタグ グループに含まれるタグから、該当するタグのみが表示され、その他のタグは削除されます。(訳注: 指定されたタグ グループに含まれないタグは表示されたままになります。)

music = \relative {
  \tagGroup #'(violinI violinII 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 }
  R1^"untagged"
}

\new Voice {
  \keepWithTag #'violinI
  \music
}

[image of music]

既存の音楽表記のある特定の場所にいくつか音を組み込みたいことがあります。\pushToTag\appendToTag を使って、既存の音楽構造の elements の前または後に素材を追加することができます。すべての音楽構造が elements を持つわけではありませんが、連続するか同時進行する音楽構造はまず間違いなく elements を持ちます:

music = { \tag #'here { \tag #'here <<c''>> } }

{
  \pushToTag #'here c'
  \pushToTag #'here e'
  \pushToTag #'here g' \music
  \appendToTag #'here c'
  \appendToTag #'here e'
  \appendToTag #'here g' \music
}

[image of music]

どちらのコマンドもタグ、組み込む素材、それにタグ付けされた音楽表記を 取り、タグが出現するたびに素材を組み込みます。

参照

学習マニュアル: Organizing pieces with variables

記譜法リファレンス: 自動パート結合, LilyPond ファイルをインクルードする

既知の問題と警告

\keepWithTag\removeWithTag でフィルタリングされた音楽表記に \relative を用いると、オクターブ関係が変化してしまいます。これは、フィルタリングされた音符のみが \relative で解釈されるためです。\keepWithTag\removeWithTag よりも先にまず \relative を適用することで、全ての音符が解釈されるようになるため、危険を回避することができます。


LilyPond 記譜法リファレンス v2.25.22 (development-branch).