[ << 入出力全般 ] | [Top][Contents][Index] | [ スペースの問題 >> ] |
[ < 変数を使用する ] | [ Up : 1 つのソースから異なる版を生成する ] | [ グローバル設定を使用する > ] |
タグを使用する
\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 }
\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 }
タグ フィルタリングはアーティキュレーション、テキストなどにも適用することができます。フィルタリングを行うにはアーティキュレーションの前に
-\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 >>
単一の音楽表記に複数の \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 }
単一の音楽表記に 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 }
上の例では、violinI と violinII の \tag
を表示しますが、viola や cello は表示しません。
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 }
既存の音楽表記のある特定の場所にいくつか音を組み込みたいことがあります。\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 }
どちらのコマンドもタグ、組み込む素材、それにタグ付けされた音楽表記を 取り、タグが出現するたびに素材を組み込みます。
参照
学習マニュアル: Organizing pieces with variables
記譜法リファレンス: 自動パート結合, LilyPond ファイルをインクルードする
既知の問題と警告
\keepWithTag
や \removeWithTag
でフィルタリングされた音楽表記に \relative
を用いると、オクターブ関係が変化してしまいます。これは、フィルタリングされた音符のみが \relative
で解釈されるためです。\keepWithTag
や \removeWithTag
よりも先にまず \relative
を適用することで、全ての音符が解釈されるようになるため、危険を回避することができます。
[ << 入出力全般 ] | [Top][Contents][Index] | [ スペースの問題 >> ] |
[ < 変数を使用する ] | [ Up : 1 つのソースから異なる版を生成する ] | [ グローバル設定を使用する > ] |