GNU LilyPond 学習マニュアル: 4.1.4 調整手段

### 4.1.4 調整手段

#### `\override` コマンド

我々はすでに コンテキスト プロパティを変更する と エングラーバを追加 / 削除する で コンテキスト のプロパティを変更したり、エングラーバ を追加/削除したりするために使用するコマンド `\set` と `\with` を見てきました。ここでは更に重要ないくつかのコマンドについて見ていきます。

レイアウト オブジェクト のプロパティを変更するためのコマンドは `\override` です。このコマンドは LilyPond の奥深くにある内部プロパティを変更しなければならないため、これまで見てきたコマンドのように単純な構文ではありません。どのコンテキストの中にあるどのオブジェクトのどのプロパティを変更しなければならないのか、そこにセットする新しい値を何にするのかを正確に知っている必要があります。どのようにこれを行うのかを見ていきましょう。

このコマンドの一般的な構文は以下のようなものです:

>     \override Context.LayoutObject.layout-property = #value

これは Context コンテキストのメンバである LayoutObject という名前のレイアウトの layout-property という名前のプロパティに値 value をセットします。

必要とされているコンテキストが明白であり、それが最下位レベルのコンテキストである – つまり、`Voice`, `ChordNames` や `Lyrics` である – 場合、その Context は省略可能であり (そして通常は省略されます)、この後の例の多くでも省略します。後ほど、コンテキストを指定しなければならない場合について見ていきます。

これから後のセクションでは広範囲に亘るプロパティとそれらの値を扱います – プロパティのタイプ を参照してください。しかしながら、このセクションではそれらのフォーマットとコマンドの使い方を示すために、容易に理解できる簡単なプロパティと値をいくつか使用してみるだけです。

LilyPond の基本的な表記は文字列やマークアップだけでなく、音符や演奏時間のような音楽要素です。数字、シンボル、リストなどのより具体的な表記は ‘Scheme モード’ で処理されます – 表記の先頭に ‘`#`’ を記述することでこのモードが呼び出されます。Scheme モードについての更なる情報は LilyPond Scheme syntax を参照してください。

`\override` は調整で用いられる最も一般的なコマンドであり、本章の残りの大半を使ってこのコマンドの使用例を示します。まずは符頭の色を変更する簡単な例を挙げます:

>     \relative {
>       c'4 d
>       \override NoteHead.color = #red
>       e4 f |
>       \override NoteHead.color = #green
>       g4 a b c |
>     }

#### `\revert` コマンド

一旦オーバライドされると、そのプロパティは再度オーバライドされるか `\revert` コマンドに遭遇するまで新しい値のままでいます。`\revert` コマンドは以下の構文を持ち、プロパティの値をオリジナルのデフォルト値に戻します。何度か `\override` コマンドが発行されている場合は、前の値に戻すわけではないということに注意してください。

>     \revert Context.LayoutObject.layout-property

繰り返しますが、`\override` コマンドでの Context と同様に、多くの場合で Context を記述する必要はありません。以下の例の多くで、Context は省略されます。ここでは、最後の 2 つの音符の符頭の色をデフォルトに戻します:

>     \relative {
>       c'4 d
>       \override NoteHead.color = #red
>       e4 f |
>       \override NoteHead.color = #green
>       g4 a
>       \revert NoteHead.color
>       b4 c |
>     }

#### `\once` 接頭辞

`\override`, `\revert`, `\set`, `\unset` コマンドには接頭辞 `\once` が付く可能性があります。これはこのようなコマンドをその場一回限り有効にし、その後にそのプロパティの値をデフォルト値に戻します。上と同じ例を使って、以下のように 1 つだけの音符の色を変更することができます:

>     \relative {
>       c'4 d
>       \override NoteHead.color = #red
>       e4 f |
>       \once \override NoteHead.color = #green
>       g4 a
>       \once \revert NoteHead.color
>       b c |
>       \revert NoteHead.color
>       f2 c |
>     }

`\once` 接頭辞をさまざまな定義済みコマンドの前に置くことで、コマンドの効果を次の音楽タイミングに限定することもできます:

>     \relative {
>       c'4( d)
>       \once \slurDashed
>       e4( f) |
>       g4( a)
>       \once \hideNotes
>       b( c) |
>     }

#### `\overrideProperty` コマンド

オーバライド コマンドには `\overrideProperty` というもう 1 つのフォーマットがあり、時々必要となります。完璧を期すためにここでこれに言及しましたが、詳細は Difficult tweaks を参照してください。

#### `\tweak` コマンド

利用可能な最後の調整コマンドは `\tweak` です。これは同じ音楽タイミングで発生するいくつかのオブジェクトのうち、1 つのオブジェクトだけを選択してプロパティを変更したい場合に使用します – 例えば、和音の中にある 1 つの音符のプロパティを変更する場合です。`\override` コマンドを使用すると和音の中にあるすべての音符に影響を与えます。一方、`\tweak` は入力ストリームの中でその `\tweak` のすぐ後にある要素 1 つだけに影響を与えます。

ここで例を挙げます。C メジャー コードの中にある真ん中の音符 (ミドル E) の符頭のサイズを変更したいとします。まず最初に、`\once \override` だとどうなるか見てみましょう:

>     \relative {
>       <c' e g>4
>       \once \override NoteHead.font-size = #-3
>       <c e g>4
>       <c e g>4
>     }

このオーバライドは和音の中にあるすべての符頭に影響を与えています。これは和音の中にあるすべての音符が同じ タイミング で起こるためであり、`\once` のアクションは `\override` と同様に同じタイミングで起こる、指定されたタイプすべてのレイアウト オブジェクトへのオーバライドに適用されます。

`\tweak` コマンドはこれとは異なるやり方で処理されます。これは入力ストリームの中ですぐ後に続く要素にだけ作用します。最もシンプルな形式の `\tweak` コマンドは、コマンドの直後にある要素から直接作成されるオブジェクト – 本質的に符頭とアーティキュレーション – にだけ効果を持ちます。

それでは例に戻り、この方法で和音の真ん中の音符のサイズを変更します:

>     \relative {
>       <c' e g>4
>       <c \tweak font-size #-3 e g>4
>     }

`\tweak` の構文は `\override` コマンドの構文とは異なるということに注意してください。コンテキストを指定しません – 実際、指定するとエラーになります。コンテキストとレイアウト オブジェクトはどちらも入力ストリームの中で後に続く要素によって示されます。さらに、イコール記号を使うべきではないということに注意してください。そのため、簡単な形式の `\tweak` コマンドは以下のようになります:

>     \tweak layout-property #value

さらに、`\tweak` コマンドは一連のアーティキュレーションの中にあるただ 1 つのアーティキュレーションを変更されるためにも使用できます。ここに例を挙げます:

>     a'4^"Black"
>       -\tweak color #red ^"Red"
>       -\tweak color #green _"Green"

`\tweak` コマンドはアーティキュレーション マークの前に配置する必要があることに注意してください。なぜなら、調整された表記がアーティキュレーションとして適用される必要があるためです。複数の向き記号 (`^` または `_`) で上書きした場合、最後に適用される左端の記号が勝ち残ります。

符幹や臨時記号などのオブジェクトは後になってから作成されるもので、`\tweak` コマンドの後に続くイベントから直接作成されません。そのような直接作成されないオブジェクトの場合、明示的にレイアウト オブジェクト名を指定して LilyPond がそれらのオブジェクトの起源を追跡できるようにすることで、`\tweak` で調整することができます:

>     <\tweak Accidental.color #red   cis''4
>      \tweak Accidental.color #green es''
>      g''>

この長い形式の `\tweak` コマンドは以下のように記述することができます:

>     \tweak LayoutObject.layout-property #value

さらに、`\tweak` コマンドは、同時に起こるネストされた連符記号のセットのうちの 1 つの見た目を変更するためにも使用されます。以下の例では、長い連符記号と 3 つの短い連符記号のうちの最初の連符記号が同時に起こります。そのため、`\override` コマンドだと両方の連符記号に適用されてしまいます。この例では、`\tweak` は 2 つの連符記号を区別するために使用されています。最初の `\tweak` コマンドは長い連符記号を音符の上に置くことを指定していて、2 番目の `\tweak` コマンドは最初の短い連符記号の数字を赤で描くことを指定しています。

>     \relative c'' {
>       \tweak direction #up
>       \tuplet 3/4 {
>         \tweak color #red
>         \tuplet 3/2 { c8[ c c] }
>         \tuplet 3/2 { c8[ c c] }
>         \tuplet 3/2 { c8[ c c] }
>       }
>     }

ネストされた連符が同時に起こらない場合、それらの見た目は `\override` コマンドを用いた通常通りの方法で変更されるかもしれません:

>     \relative {
>       \tuplet 3/2 { c'8[ c c] }
>       \once \override TupletNumber.text = #tuplet-number::calc-fraction-text
>       \tuplet 3/2 {
>         c8[ c]
>         c8[ c]
>         \once \override TupletNumber.transparent = ##t
>         \tuplet 3/2 { c8[ c c] }
>         \tuplet 3/2 { c8[ c c] }
>       }
>     }

#### 参照

記譜法リファレンス: The tweak command

#### `\single` 接頭辞

特定の符頭を赤色にしてサイズを大きくすることによって、強調を行いたいとしましょう。また、それを簡単にするためにこのような関数を定義したとしましょう:

>     emphNoteHead = {
>       \override NoteHead.color = #red
>       \override NoteHead.font-size = 2
>     }
>     \relative {
>       c''4 a \once \emphNoteHead f d |
>     }

`\once` 接頭辞は単音や和音全体には動作しますが、和音内の一つの音符に対しては使うことができません。さっき、`\tweak` はこのような場面で使うということを学びました。 `\tweak` コマンド を参照してください。しかし、`\tweak` は関数と一緒に使うことができません。そこで `\single` の登場です:

>     emphNoteHead = {
>       \override NoteHead.color = #red
>       \override NoteHead.font-size = 2
>     }
>     \relative {
>        <c'' a \single \emphNoteHead f d>4
>     }

要約すると、`\single` は `\override` を `\tweak` に変換します。よって、(和音内の音符のように) 同じタイミングにいくつかのオブジェクトが存在する場合、`\once` はその全てに影響を与えるのに対し、 `\single` はその内の 1 つに – すぐ後に続く音楽表記のみに – 作用します。

`\single` をこのように使用することで、`\override` のみから成る簡略化のために定義された関数を、和音内の各音符に対して適用することができます。しかし、`\single` は `\revert`, `\set`, `\unset` を `\tweak` に変換することはできません。

#### 参照

学習マニュアル: `\tweak` コマンド, レイアウトの調整のために変数を使用する

#### LilyPond — 学習マニュアル v2.22.2 (安定版).