[ << デフォルトを変更する ] | [Top][Contents][Index] | [ 付表 >> ] |
[ < \offset コマンド ] | [ Up : プロパティを変更する ] | [ 役に立つコンセプトとプロパティ > ] |
5.3.7 連想配列を変更する
ユーザが変更可能なプロパティの中には、内部的には 連想配列 として存在しているものがあります – 連想配列は キー と 値 のペアの配列を保持します。連想配列の構造は下記のとおりです:
'((キー1 . 値1) (キー2 . 値2) (キー3 . 値3) …)
ある連想配列がグラフィカル オブジェクト プロパティまたは
\paper
変数である場合、その連想配列の個々のキーを、他のキーに影響を与えることなく、変更することができます。
例えば、譜グループの中にある隣り合う譜間のスペースを減らすには、StaffGrouper
グラフィカル オブジェクトの
staff-staff-spacing
プロパティを使用します。このプロパティは 4 つのキー
– basic-distance
, minimum-distance
,
padding
, それに stretchability
–
を持つ連想配列です。このプロパティの標準設定は、内部リファレンスの “Backend” セクションでリストアップされています
(StaffGrouper を参照してください):
'((basic-distance . 9) (minimum-distance . 7) (padding . 1) (stretchability . 5))
譜間のスペースを小さくする方法の 1 つは、basic-distance
キーの値 (9
) を
minimum-distance
キーの値 (7
) 近くまで減らすことです。個々のキーを変更するには、ネストされた宣言 を使います:
% デフォルトの譜間スペース \new PianoStaff << \new Staff { \clef treble c''1 } \new Staff { \clef bass c1 } >> % 譜間スペースを減らします \new PianoStaff \with { % this is the nested declaration \override StaffGrouper.staff-staff-spacing.basic-distance = #7 } << \new Staff { \clef treble c''1 } \new Staff { \clef bass c1 } >>
ネストされた宣言は、プロパティの他のキーに変更を加えることなく、指定されたキー (上の例では basic-distance
) を更新します。
今度は、譜を重ならない範囲でできる限り近づけたいとします。最も簡単な方法は、連想配列の 4 つのキーすべてを 0 にセットすることです。しかしながら、4 つのネストされた宣言を記述する必要はありません。1 つの宣言でプロパティを丸ごと再定義することができます:
\new PianoStaff \with { \override StaffGrouper.staff-staff-spacing = #'((basic-distance . 0) (minimum-distance . 0) (padding . 0) (stretchability . 0)) } << \new Staff { \clef treble c''1 } \new Staff { \clef bass c1 } >>
連想配列の再定義でリストアップされなかったキーは、セットされなかった場合のデフォルト値 にリセットされます。staff-staff-spacing
の場合、セットされなかったキーは 0 にリセットされます
(stretchability
は例外で、セットされなかった場合、basic-distance
にリセットされます)。このため、以下の 2 つの宣言は等価です:
\override StaffGrouper.staff-staff-spacing = #'((basic-distance . 7)) \override StaffGrouper.staff-staff-spacing = #'((basic-distance . 7) (minimum-distance . 0) (padding . 0) (stretchability . 7))
連想配列の再定義でリストアップされなかったキーがあることにより、初期化ファイルでセットされたり、入力ファイルがコンパイルされるときに読み込まれた標準設定が (意図せずに) 削除される可能性があります。上の例では、padding
と minimum-distance
の標準設定
(scm/define-grobs.scm で定義されます) は、セットされなかった場合のデフォルト値 (両方とも 0) にリセットされます。プロパティや (任意のサイズ) 連想配列を定義した場合、セットされなかったキー値はすべて セットされなかった場合のデフォルト値
にリセットされます。そうすることを意図しているのでない限り、ネストされた宣言を用いてキー値を個々に更新する方が安全です。
Note: ネストされた宣言は、コンテキスト プロパティ連想配列
(beamExceptions
, keyAlterations
, timeSignatureSettings
等)
に対しては機能しません。これらのプロパティを変更するには、連想配列として丸ごと再定義するしかありません。
[ << デフォルトを変更する ] | [Top][Contents][Index] | [ 付表 >> ] |
[ < \offset コマンド ] | [ Up : プロパティを変更する ] | [ 役に立つコンセプトとプロパティ > ] |