4.3.4 コンテキスト プロパティを変更する (GNU LilyPond 学習マニュアル)

#### 4.3.4 コンテキスト プロパティを変更する

コンテキストにはいくつかのコンテキスト プロパティを保持する責任があります。それらプロパティの多くは変更可能であり、変更することで入力の構文解釈に影響を与えて出力の見た目を変化させます。それらプロパティは \set コマンドによって変更されます。これは以下のような形で行います:

    \set ContextName.propertyName = #value

ontextName には通常、`Score`, `Staff` or `Voice` が入ります。これを省略する場合もあり、そのような場合は `Voice` であると見なされます。

コンテキスト プロパティの名前はハイフンやアンダスコアを使わずに連結された単語によって形成され、最初の単語を除いて単語の最初の文字は大文字になります。ここで、一般的に使用されるコンテキスト プロパティの例をいくつか挙げます。実際には、コンテキスト プロパティはもっとたくさんあります。

プロパティ名 | タイプ | 機能 | 実際の値の例
--- | --- | --- | ---
extraNatural | ブール値 | 真の場合、追加のナチュラル記号を臨時記号の前にセットします | `#t`, `#f`
currentBarNumber | 整数 | 小節番号をセットします | `50`
doubleSlurs | ブール値 | 真の場合、音符の上と下の両方にスラーを譜刻します | `#t`, `#f`
instrumentName | テキスト | 譜表の先頭に表示される名前をセットします | `"Cello I"`
fontSize | 実数 | フォント サイズを増減させます | `2.4`
stanza | テキスト | 歌詞の先頭に譜刻されるテキストをセットします | `"2"`

ここでのブール値とは真 (`#t`) または偽 (`#f`) のどちらかであり、整数とは正の整数であり、実数とは正または負の小数点付きの数であり、テキストはダブル アポストロフィで囲まれます。ハッシュ記号 (`#`) が 2 つの異なる箇所で出現することに注意してください – ブール値での `t` や `f` の前と、`\set` での値の前です。そのため、`\set` の値にブール値を挿入する場合、ハッシュ記号が 2 つ必要になります – つまり `##t` です。

これらのプロパティのいずれかをセットする前に、それらが操作するコンテキストはどれなのかを知る必要があります。これは明らかな場合もありますが、ややこしい場合もあります。間違ったコンテキストが指定された場合、エラー メッセージは表示されませんが、予期したアクションが起こりません。例えば、`clefGlyph` は間違いなく `Staff` コンテキストの中にきます。なぜなら、変更されるものは譜表に属する音部記号だからです。以下の例では、最初の譜表の音部記号は正しく表示されていますが、2 番目の譜表は正しくありません – ヘ音記号を指定したはずですが、デフォルトであるト音記号が表示されています – なぜなら、コンテキスト名を省略しているからです。

>     <<
>       \new Staff \relative {
>         \set Staff.clefGlyph = "clefs.C"
>         c''2 c
>       }
>       \new Staff \relative {
>         \set clefGlyph = "clefs.F"  % Wrong!
>         d'2 d
>       }
>     >>

デフォルトのコンテキスト名は `Voice` であることを思い出してください。このため、2 番目の `\set` コマンドは `Voice` コンテキストのプロパティ `clefGlyph` を “clefs.F” にセットしています。しかしながら、LilyPond は `Voice` コンテキストでそのようなプロパティを見つけ出さないため、何のアクションも起こしません。これはエラーではなく、ログ ファイルにエラー メッセージは残りません。

同様に、プロパティ名の綴りを間違えた場合もエラー メッセージは表示されず、予期したアクションが起こりません。実際のところ、`\set` コマンドを使って、存在するいかなるコンテキストにでも、いかなる (架空の) ‘プロパティ’ をセットすることができます。しかしながら、そのプロパティ名を LilyPond が知らない場合、何のアクションも起こしません。LilyPond 入力ファイルに対する特別なサポートを持ついくつかのテキスト エディタは、あなたがプロパティ名の上にマウスを持ってくるとバレット (テキストの先頭に付く小丸) 付きのプロパティ名を表示してそのプロパティの裏づけを行い (LilyPondTool を持つ JEdit)、あるいは未知のプロパティ名をハイライトします (ConTEXT)。そのような機能を持つエディタを使用していないのなら、内部リファレンスでプロパティ名をチェックすることを推奨します: Tunable context properties や Contexts を参照してください。

`clefGlyph` プロパティは `Staff` コンテキストの中にセットされた場合にのみ効果を持ちますが、いくつかのプロパティは複数のコンテキストの中にセットすることができます。例えば、プロパティ `extraNatural` はすべての譜に対してデフォルトで `##t` (真) にセットされています。ある特定の `Staff` コンテキストでこれを `##f` (偽) にセットした場合、その譜表の臨時記号にのみ適用されます。これを `Score` コンテキストにセットした場合、すべての譜に適用されます。

それでは、ある譜表の追加ナチュラル記号を消してみます:

>     <<
>       \new Staff \relative {
>         aeses'2 aes
>       }
>       \new Staff \relative {
>         \set Staff.extraNatural = ##f
>         aeses'2 aes
>       }
>     >>

さらに、すべての譜の追加ナチュラル記号を消します:

>     <<
>       \new Staff \relative {
>         aeses'2 aes
>       }
>       \new Staff \relative {
>         \set Score.extraNatural = ##f
>         aeses'2 aes
>       }
>     >>

他の例としては、`clefTransposition` が `Score` コンテキストにセットされた場合、直ちにすべての譜でのオクターブ表示を変更し、すべての譜に適用される新しいデフォルト値をセットします。

逆のことを行うコマンド `\unset` はコンテキストからプロパティを削除し、それによりたいていのプロパティはデフォルト値に戻ります。通常、望みのことを達成するために新たな `\set` コマンドを用いる場合、`\unset` は必要ありません。

`\set` と `\unset` コマンドは入力ファイルのどこにでも現れる可能性があり、そのコマンドが出現した時点から、楽譜の終わりまたはそのプロパティが再度 `\set` や `\unset` されるまで効果を持ちます。フォント サイズを変更してみましょう。それにより (他のものに加えて) 符頭のサイズが何段階か変更されます。変更は直前にセットされた値から行われるのではなく、デフォルト値から行われます。

>     \relative {
>       c'4 d
>       % 符頭を小さくします
>       \set fontSize = #-4
>       e4 f |
>       % 符頭を大きくします
>       \set fontSize = #2.5
>       g4 a
>       % デフォルトのサイズに戻します
>       \unset fontSize
>       b4 c |
>     }

これまでにいくつかのタイプのプロパティ値をセットする方法を見てきました。整数と番号の前には常にハッシュ記号 `#` が付き、真と偽の値は 2 つのハッシュ記号を付けて `##t` と `##f` によって指定されてるということに注意してください。テキスト プロパティは上で示したようにダブル クォーテーションによって囲まれます。しかしながら、後ほど、テキストは実際には非常に強力な `\markup` コマンドを用いたもっと一般的な方法で指定できるということを見ていきます。

#### `\with` を使ったコンテキスト プロパティの設定

コンテキスト プロパティはコンテキストが作成されるときにセットされることもあるかもしれません。この設定がコンテキスト全体で保持される場合、この方法でプロパティ値を指定すると明瞭になります。コンテキストが `\new` コマンドで作成されるとき、その直後に `\with { .. }` ブロックが続き、その中でプロパティ値がセットされるかもしれません。例えば、ある譜表全体で追加のナチュラルの表示を抑制しようとする場合、以下のように書きます:

    \new Staff \with { extraNatural = ##f }

like this:

>     <<
>       \new Staff {
>         \relative {
>           gisis'4 gis aeses aes
>         }
>       }
>       \new Staff \with { extraNatural = ##f } {
>         \relative {
>           gisis'4 gis aeses aes
>         }
>       }
>     >>

この方法でプロパティをセットした場合でも、`\set` を使って動的に変更されたり、`\unset` を使ってデフォルト値に戻されたりするかもしれません。

`fontSize` プロパティの扱いは異なります。これが `\with` の中でセットされた場合、フォント サイズのデフォルト値をセットし直します。そのあとでフォント サイズが `\set` によって変更された場合、`\with` でセットされた新しいデフォルト値は `\unset fontSize` コマンドによって元に戻されるかもしれません。

#### `\context` を使ったコンテキスト プロパティの設定

コンテキスト プロパティの値は単一のコマンドによってある特定のタイプのコンテキストすべて – すべての `Staff` コンテキストなどのように – にセットされるかもしれません。プロパティをセットするコンテキストのタイプは、`Staff` のようなそのコンテキストのタイプ名に接頭辞としてバック スラッシュを付けたもの – `\Staff` のように – によって指定されます。プロパティ値をセットするための記述は上で紹介した `\with` ブロックの中の記述と同じです。この記述は `\layout` ブロック内部の `\context` ブロックの中に置かれます。各 `\context` ブロックは、その `\layout` ブロックが置かれている `\score` または `\book` ブロック全体を通じて、指定されたタイプのコンテキストすべてに対して効果を持ちます。ここで、記述方法を示すための例を挙げます:

>     \score {
>       \new Staff {
>         \relative {
>           cisis''4 e d cis
>         }
>       }
>       \layout {
>         \context {
>           \Staff
>           extraNatural = ##t
>         }
>       }
>     }

プロパティのオーバライドが score の中にあるどの譜にも適用されない場合:

>     \score {
>       <<
>         \new Staff {
>           \relative {
>             gisis'4 gis aeses aes
>           }
>         }
>         \new Staff {
>           \relative {
>             gisis'4 gis aeses aes
>           }
>         }
>       >>
>       \layout {
>         \context {
>           \Score extraNatural = ##f
>         }
>       }
>     }

この方法でセットされたコンテキスト プロパティは、`\with` ブロックの中の記述によって、さらには、音楽表記の中に埋め込まれた `\set` コマンドによって、ある特定のコンテキスト インスタンスでは上書きされるかもしれません。

#### 参照

記譜法リファレンス: Changing context default settings, The set command

内部リファレンス: Contexts, Tunable context properties

#### GNU LilyPond 学習マニュアル v2.26.0 (stable-branch).

- 1 Installing
  - 1.1 Graphical setup
  - 1.2 Command line setup
- 2 チュートリアル
  - 2.1 ファイルをコンパイルする
  - 2.2 入力ファイルの書き方
    - 2.2.1 簡単な記譜法
      - ピッチ
      - 演奏時間 (リズム)
      - 休符
      - 拍子記号
      - テンポ記号
      - 音部記号
      - すべてをまとめて
    - 2.2.2 入力ファイルに取り組む
  - 2.3 エラーに対処する
    - 2.3.1 一般的なトラブルシュート Tips
    - 2.3.2 いくつかの一般的なエラー
  - 2.4 このマニュアルの読み方
    - 2.4.1 省略された構成要素
    - 2.4.2 クリック可能な例
    - 2.4.3 マニュアルの概要
- 3 一般的な記譜法
  - 3.1 単一譜表表記
    - 3.1.1 小節線と小節チェック
      - 小節線
      - 小節チェック
    - 3.1.2 ピッチと調号
      - ピッチ変更
      - 調号
      - 警告: 調号とピッチ
    - 3.1.3 タイとスラー
      - タイ
      - スラー
      - フレージング スラー
      - 警告: スラー vs. タイ
    - 3.1.4 アーティキュレーションと強弱記号
      - アーティキュレーション
      - 運指法記号
      - 強弱記号
    - 3.1.5 テキストを追加する
    - 3.1.6 自動連桁と手動連桁
    - 3.1.7 高度なリズム コマンド
      - 部分小節
      - 連符
      - 装飾小音符
  - 3.2 同時に演奏する複数の音符
    - 3.2.1 音楽表記についての説明
      - 数学的表記との類似
      - 同時進行する音楽表記: 複数の譜
      - 同時進行する音楽表記: 単一の譜表
    - 3.2.2 複数の譜
    - 3.2.3 譜表グループ
    - 3.2.4 音符を組み合わせて和音にする
    - 3.2.5 単一譜表での多声
  - 3.3 歌曲
    - 3.3.1 簡単な歌曲を作成する
    - 3.3.2 歌詞を旋律に揃える
    - 3.3.3 複数の譜への歌詞
  - 3.4 仕上げ
    - 3.4.1 変数を用いて楽曲を編成する
    - 3.4.2 タイトルを付け加える
    - 3.4.3 絶対音符名
    - 3.4.4 このチュートリアルの後にすべきこと
- 4 基礎となるコンセプト
  - 4.1 LilyPond 入力ファイルの仕組み
    - 4.1.1 LilyPond ファイル構造の紹介
    - 4.1.2 Score は (単一の) 複合的な音楽表記
    - 4.1.3 音楽表記をネストする
    - 4.1.4 入力音符の構造
    - 4.1.5 ネストされない括弧とタイ
  - 4.2 音楽を保持するボイス
    - 4.2.1 私はボイスを聴いている
    - 4.2.2 ボイスを明示的にインスタンス化する
    - 4.2.3 ボイスとボーカル
  - 4.3 コンテキストとエングラーバ
    - 4.3.1 コンテキストの説明
    - 4.3.2 コンテキストを作成する
    - 4.3.3 エングラーバの説明
    - 4.3.4 コンテキスト プロパティを変更する
    - 4.3.5 エングラーバを追加 / 削除する
  - 4.4 テンプレートを拡張する
    - 4.4.1 ソプラノとチェロ
    - 4.4.2 4 パート SATB ボーカル譜
    - 4.4.3 ゼロから楽譜を構築する
    - 4.4.4 変数と関数を用いて入力の手間を省く
    - 4.4.5 楽譜とパート
- 5 出力を調整する
  - 5.1 調整の基本
    - 5.1.1 調整の紹介
    - 5.1.2 オブジェクトとインタフェイス
    - 5.1.3 オブジェクトとプロパティの命名規則
    - 5.1.4 調整手段
      - `\override` コマンド
      - `\revert` コマンド
      - `\once` 接頭辞
      - `\overrideProperty` コマンド
      - `\tweak` コマンド
      - `\single` 接頭辞
  - 5.2 内部リファレンス マニュアル
    - 5.2.1 レイアウト オブジェクトのプロパティ
    - 5.2.2 インタフェイスの中で見つかるプロパティ
    - 5.2.3 プロパティのタイプ
  - 5.3 オブジェクトの見た目
    - 5.3.1 オブジェクトの可視性と色
      - `stencil` プロパティ
      - `break-visibility` property
      - `transparent` プロパティ
      - `color` プロパティ
    - 5.3.2 オブジェクトのサイズ
    - 5.3.3 オブジェクトの長さと太さ
  - 5.4 オブジェクトの配置
    - 5.4.1 自動配置
    - 5.4.2 譜内部オブジェクト
      - `direction` プロパティ
      - 運指
    - 5.4.3 譜外部オブジェクト
      - `outside-staff-priority` プロパティ
      - `\textLengthOn` コマンド
      - 強弱記号の配置
      - グラフィカル オブジェクトのサイズ
  - 5.5 垂直方向のスペース
  - 5.6 オブジェクトの衝突
    - 5.6.1 オブジェクトを移動させる
    - 5.6.2 表記の重なりを修正する
      - `padding` プロパティ
      - `right-padding` プロパティ
      - `staff-padding` プロパティ
      - `self-alignment-X` プロパティ
      - `staff-position` プロパティ
      - `extra-offset` プロパティ
      - `positions` プロパティ
      - `force-hshift` プロパティ
    - 5.6.3 実際の音楽からの例
  - 5.7 更なる調整
    - 5.7.1 調整のその他の使用方法
      - 異なるボイスの中にある音符をタイで結ぶ
      - MIDI でフェルマータをシミュレートする
    - 5.7.2 レイアウトの調整のために変数を使用する
    - 5.7.3 スタイル シート
    - 5.7.4 その他の情報源
    - 5.7.5 Scheme を用いた高度な調整
- Appendix A テンプレート
  - A.1 組み込まれているテンプレート
    - A.1.1 SATB テンプレート
    - A.1.2 SSAATTBB テンプレート
  - A.2 単一譜テンプレート
    - A.2.1 音符のみ
    - A.2.2 音符と歌詞
    - A.2.3 音符とコード
    - A.2.4 音符、歌詞それにコード
  - A.3 ピアノ テンプレート
    - A.3.1 ソロ ピアノ
    - A.3.2 ピアノと歌詞を持つ旋律
    - A.3.3 歌詞が中央に配置されたピアノ譜
  - A.4 弦楽四重奏テンプレート
    - A.4.1 弦楽四重奏
    - A.4.2 弦楽四重奏パート
  - A.5 合唱テンプレート
    - A.5.1 SATB ボーカル譜
    - A.5.2 SATB ボーカル譜と自動ピアノ譜
    - A.5.3 整列されたコンテキストを持つ SATB
    - A.5.4 4 つの譜に配置された SATB
    - A.5.5 ソロと 2 パートのリフレイン
    - A.5.6 賛美歌
    - A.5.7 聖歌
  - A.6 オーケストラ テンプレート
    - A.6.1 オーケストラ、合唱それにピアノ
  - A.7 古代の記譜法テンプレート
    - A.7.1 計量記譜法のテンプレート
    - A.7.2 グレゴリア聖歌のテンプレート
  - A.8 その他のテンプレート
    - A.8.1 ジャズ バンド
- Appendix B GNU Free Documentation License
- Appendix C インデックス