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 つの異なる箇所で出現することに注意してください – ブール値での tf の前と、\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
  }
>>

[image of music]

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

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

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

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

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

[image of music]

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

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

[image of music]

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

逆のことを行うコマンド \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 |
}

[image of music]

これまでにいくつかのタイプのプロパティ値をセットする方法を見てきました。整数と番号の前には常にハッシュ記号 # が付き、真と偽の値は 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
    }
  }
>>

[image of music]

この方法でプロパティをセットした場合でも、\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
    }
  }
}

[image of music]

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

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

[image of music]

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

参照

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

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


GNU LilyPond 学習マニュアル v2.25.22 (development-branch).