[ << 基礎となるコンセプト ] | [トップ][目次][インデックス] | [ 出力を調整する >> ] |
[ < エングラーバの説明 ] | [ 上へ : コンテキストとエングラーバ ] | [ エングラーバを追加 / 削除する > ] |
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
[ << 基礎となるコンセプト ] | [トップ][目次][インデックス] | [ 出力を調整する >> ] |
[ < エングラーバの説明 ] | [ 上へ : コンテキストとエングラーバ ] | [ エングラーバを追加 / 削除する > ] |