[ << デフォルトを変更する ] | [トップ][目次][インデックス] | [ 付表 >> ] |
[ < line-spanner-interface を使用する ] | [ 上へ : 役に立つコンセプトとプロパティ ] | [ ステンシルを削除する > ] |
5.4.7 オブジェクトの可視性
レイアウト オブジェクトの可視性を制御する主な方法は 4 つあります:
オブジェクトのステンシルを削除する方法、オブジェクトを透明にする方法、オブジェクトの色を白にする方法、あるいは、オブジェクトの break-visibility
プロパティをオーバライドする方法です。
最初の 3 つの方法はすべてのレイアウト オブジェクトに適用されますが、最後の方法はいくつかの – 改行可能な オブジェクト –
だけに適用されます。学習マニュアルでは、これら 4 つのテクニックについて紹介しています。
オブジェクトの可視性と色 を参照してください。
さらに、特定のレイアウト オブジェクト特有のテクニックがいくつかあります。それらについては、特別な考慮でカバーされています。
ステンシルを削除する | ||
オブジェクトを透明にする | ||
オブジェクトを白で描く | ||
break-visibility を用いる | ||
特別な考慮を必要とするもの |
[ << デフォルトを変更する ] | [トップ][目次][インデックス] | [ 付表 >> ] |
[ < オブジェクトの可視性 ] | [ 上へ : オブジェクトの可視性 ] | [ オブジェクトを透明にする > ] |
ステンシルを削除する
レウアウト オブジェクトはそれぞれステンシル プロパティを持ちます。デフォルトでは、このプロパティはそのオブジェクトを描画する特殊な関数にセットされています。このプロパティが #f
にオーバライドされた場合、関数は呼び出されず、そのオブジェクトは描画されません。\revert
でデフォルトの動作に戻すことができます。
a1 a \override Score.BarLine.stencil = ##f a a \revert Score.BarLine.stencil a a a
これはよく使う操作であるため、\omit
という短縮記法が存在します:
a1 a \omit Score.BarLine a a \undo \omit Score.BarLine a a a
[ << デフォルトを変更する ] | [トップ][目次][インデックス] | [ 付表 >> ] |
[ < ステンシルを削除する ] | [ 上へ : オブジェクトの可視性 ] | [ オブジェクトを白で描く > ] |
オブジェクトを透明にする
レイアウト オブジェクトはそれぞれ transparent
プロパティを持っていて、デフォルトでは #f
にセットされています。#t
にセットされると、そのオブジェクトはスペースを占めたままですが、不可視になります。
a'4 a' \once \override NoteHead.transparent = ##t a' a'
これにも \hide
という短縮記法があります:
a'4 a' \once \hide NoteHead a' a'
[ << デフォルトを変更する ] | [トップ][目次][インデックス] | [ 付表 >> ] |
[ < オブジェクトを透明にする ] | [ 上へ : オブジェクトの可視性 ] | [ break-visibility を用いる > ] |
オブジェクトを白で描く
レイアウト オブジェクトはそれぞれ color
プロパティを持っていて、デフォルトでは black
にセットされています。このプロパティが white
にセットされてると、そのオブジェクトは白い背景と区別が付かなくなります。しかしながら、そのオブジェクトが他のオブジェクトと交差している場合、交差している場所の色はオブジェクトの描画順序によって決定されます。これにより、以下に示すように、白いオブジェクトの画像が幽霊のように浮かび上がることがあります:
\override Staff.Clef.color = #white a'1
オブジェクトの描画順序を変更することにより、これを回避することができます。すべてのレイアウト オブジェクトは layer
プロパティを持っており、このプロパティには整数がセットされています。より小さな値の layer
を持つオブジェクトが最初に描画され、より大きな値の layer
を持つオブジェクトが後になってから描画されます。このため、より大きな値を持つオブジェクトがより小さな値を持つオブジェクトを上書きします。デフォルトでは、たいていのオブジェクトの layer
には 1
が代入されています。しかしながら、いくつかのオブジェクト
– StaffSymbol
や BarLine
など –
には 0
が代入されています。同じ値の layer
を持つオブジェクトを描画する順番は不確定です。
上記の例において、白い音部記号
(この layer
のデフォルト値は 1
です)
は譜線 (この layer
のデフォルト値は 0
です)
の後に描画されます。そのため、音部記号は譜線を上書きしています。これを変更するには、Clef
オブジェクトの layer
により小さな値 – 例えば、-1
– を与えて、音部記号を先に描画させる必要があります:
\override Staff.Clef.color = #white \override Staff.Clef.layer = #-1 a'1
[ << デフォルトを変更する ] | [トップ][目次][インデックス] | [ 付表 >> ] |
[ < オブジェクトを白で描く ] | [ 上へ : オブジェクトの可視性 ] | [ 特別な考慮を必要とするもの > ] |
break-visibility を用いる
たいていのレイアウト オブジェクトは 1 回だけ描画されます。しかしながら、小節線、音部記号、拍子記号、それに調号などのオブジェクトは、改行が起こると 2 回描画する必要があります
– 行の最後で 1 回、次の行の最初でもう 1 回。そのようなオブジェクトは 改行可能 と呼ばれ、それらのオブジェクトが描画される可能性がある 3 つの場所
– 行の先頭、行の途中 (それらが変更された場合)、それに、行の最後 (そこで変更が行われた場合) –
における可視性を制御する break-visibility
プロパティを持ちます。
例えば、デフォルトでは拍子記号は最初の行の先頭で描画されますが、変更されない限り他の場所には描画されません。変更された場合、拍子記号は変更が行われた場所に描画されます。この変更が行の最後で行われた場合、新しい拍子記号は次の行の先頭に描画され、その前の行の最後にも忠告の拍子記号が描画されます。
この振る舞いは break-visibility
プロパティによって制御されます。このプロパティについての説明は
オブジェクトの可視性と色
を参照してください。このプロパティは 3 つのブール値からなるベクトルをとり、順に、そのオブジェクトが行の最後で描画されるかどうか、行の途中で描画されるかどうか、そして、行の先頭で描画されるかどうかを決定します。より正確には、改行の前、改行がない場合、改行の後です。
break-visibility
プロパティによって制御する代わりに、これら 8 通りの組み合わせを ‘scm/output-lib.scm’ で定義されている定義済み関数によって指定することもできます。このファイルの中で、最後の 3 列がその列のヘッダで示される場所での可視性を表しています:
関数形式 | ベクトル形式 | 改行前 | 改行なし | 改行後 |
---|---|---|---|---|
all-visible | #(#t #t #t) | yes | yes | yes |
begin-of-line-visible | #(#f #f #t) | no | no | yes |
center-visible | #(#f #t #f) | no | yes | no |
end-of-line-visible | #(#t #f #f) | yes | no | no |
begin-of-line-invisible | #(#t #t #f) | yes | yes | no |
center-invisible | #(#t #f #t) | yes | no | yes |
end-of-line-invisible | #(#f #t #t) | no | yes | yes |
all-invisible | #(#f #f #f) | no | no | no |
break-visibility
のデフォルト設定はレイアウト オブジェクトによって異なります。以下の表は、break-visibility
によって影響をうけるすべてのレイアウト オブジェクトと、そのプロパティのデフォルト設定を示しています:
レイアウト オブジェクト | 通常のコンテキスト | デフォルト設定 |
---|---|---|
BarLine | Score | calculated |
BarNumber | Score | begin-of-line-visible |
BreathingSign | Voice | begin-of-line-invisible |
Clef | Staff | begin-of-line-visible |
Custos | Staff | end-of-line-visible |
DoublePercentRepeat | Voice | begin-of-line-invisible |
KeyCancellation | Staff | begin-of-line-invisible |
KeySignature | Staff | begin-of-line-visible |
ClefModifier | Staff | begin-of-line-visible |
RehearsalMark | Score | end-of-line-invisible |
TimeSignature | Staff | all-visible |
以下の例は、小節線の可視性を制御するベクトルの使用方法を示しています:
\relative { f'4 g a b f4 g a b % カレント行の最後で小節線を削除します \once \override Score.BarLine.break-visibility = ##(#f #t #t) \break f4 g a b f4 g a b }
break-visibility
をオーバライドするために使用されるベクトルの要素 3 つをすべて記述する必要がありますが、それらすべてが各レイアウト オブジェクトに対して効果を持つわけではなく、組み合わせによってはエラーになる場合もあります。以下の制限があります:
- 小節線を行の先頭に描画することはできません。
- 小節番号が
1
から始まるのでなければ、最初の行の先頭に描画することはできません。 - 音部記号 – 次のセクションを参照してください
- 2 重線のパーセント繰り返しはすべて描画するか、すべて描画しないかのどちらかです。描画するには
begin-of-line-invisible
を用い、描画しないのならall-invisible
を用います。 - Key signature – 次のセクションを参照してください
- ClefModifier – 次のセクションを参照してください
[ << デフォルトを変更する ] | [トップ][目次][インデックス] | [ 付表 >> ] |
[ < break-visibility を用いる ] | [ 上へ : オブジェクトの可視性 ] | [ ライン スタイル > ] |
特別な考慮を必要とするもの
明示的な変更の後の可視性
break-visibility
プロパティが調号の可視性と音部記号の変更を制御するのは、行の先頭 – つまり、改行の後 – においてだけです。行の途中や終わりでの明示的な調の変更や音部記号の変更の後に出現する調号や音部記号の可視性には効果を持ちません。以下の例では、all-invisible
がセットされていますが、B フラット メジャーへの明示的な変更の後に出現する調号は可視のままです。
\relative { \key g \major f'4 g a b % すべての調号を削除しようと試みます \override Staff.KeySignature.break-visibility = #all-invisible \key bes \major f4 g a b \break f4 g a b f4 g a b }
そのような明示的な調号や音部記号の変更の可視性は
explicitKeySignatureVisibility
プロパティや
explicitClefVisibility
プロパティによって制御されます。これらは break-visibility
プロパティと等価であり、どちらも break-visibility
と同様に 3 つのブール値からなるベクトルか上でリストアップした定義済み関数をとります。どちらも Staff
コンテキストのプロパティであり、レイアウト オブジェクト自体のプロパティではありません。ですから、これらは \set
コマンドでセットします。どちらもデフォルトでは all-visible
がセットされています。これらのプロパティは明示的な変更の結果として生じる調号と音部記号の可視性だけを制御し、行の先頭での調号や音部記号には効果を持ちませんので、オブジェクトを削除するには適切な break-visibility
をオーバライドする必要があります。
\relative { \key g \major f'4 g a b \set Staff.explicitKeySignatureVisibility = #all-invisible \override Staff.KeySignature.break-visibility = #all-invisible \key bes \major f4 g a b \break f4 g a b f4 g a b }
前の調をキャンセルする臨時記号の可視性
明示的な調の変更で描画される前の調をキャンセルする臨時記号を削除するには、Staff
コンテキスト プロパティ printKeyCancellation
に
#f
をセットします:
\relative { \key g \major f'4 g a b \set Staff.explicitKeySignatureVisibility = #all-invisible \set Staff.printKeyCancellation = ##f \override Staff.KeySignature.break-visibility = #all-invisible \key bes \major f4 g a b \break f4 g a b f4 g a b }
このオーバライドによって、調の変更を示す臨時記号だけが残ります。
調を C メジャーや A マイナーに変更する時、前の調をキャンセルする臨時記号は前の調のキャンセルしている だけ であることに注意してください。そのようなケースでは、printKeyCancellation
を #f
に設定しても効果はありません:
\relative { \key g \major f'4 g a b \set Staff.explicitKeySignatureVisibility = #all-invisible \set Staff.printKeyCancellation = ##f \key c \major f4 g a b \break f4 g a b f4 g a b }
調を C メジャーや A マイナーに変更する場合に、前の調をキャンセルする臨時記号を消すには、KeyCancellation
グラフィカル オブジェクトの可視性をオーバライドします:
\relative { \key g \major f'4 g a b \set Staff.explicitKeySignatureVisibility = #all-invisible \override Staff.KeyCancellation.break-visibility = #all-invisible \key c \major f4 g a b \break f4 g a b f4 g a b }
自動小節線
特殊なケースとして、Score
コンテキストの automaticBars
プロパティを設定することにより、小節線の描画を Off にすることもできます。#f
をセットされた場合、小節線は自動的には描画されなくなり、\bar
コマンドで明示的に作成しなければならなくなります。定義済みコマンド \cadenzaOn
とは異なり、小節数はカウントされ続けます。後になってこのプロパティに #t
がセットされると、このカウントに従って小節線の生成が再開されます。#f
がセットされている場合、改行が起こりえるのは明示的な \bar
コマンドがある場所でだけになります。
オクターブ移調付きの音部記号
オクターブ移調付きの音部記号上の小さな移調記号は
ClefModifier
レイアウト オブジェクトによって作り出されます。このオブジェクトの可視性は
Clef
オブジェクトの可視性とは独立して制御されます。そのため、各行の先頭においてそのような音部記号を完全に消そうとするなら、Clef
オブジェクトと ClefModifier
オブジェクトの両方に対して必要な break-visibility
のオーバライドを行う必要があります。
明示的な音部記号の変更では、explicitClefVisibility
プロパティが音部記号とそれに関連する移調記号の両方を制御します。
参照
学習マニュアル: オブジェクトの可視性と色
[ << デフォルトを変更する ] | [トップ][目次][インデックス] | [ 付表 >> ] |
[ < break-visibility を用いる ] | [ 上へ : オブジェクトの可視性 ] | [ ライン スタイル > ] |