5.4.6 オブジェクトの可視性

レイアウト オブジェクトの可視性を制御する主な方法は 4 つあります: オブジェクトのステンシルを削除する方法、オブジェクトを透明にする方法、オブジェクトの色を白にする方法、あるいは、オブジェクトの break-visibility プロパティをオーバライドする方法です。 最初の 3 つの方法はすべてのレイアウト オブジェクトに適用されますが、最後の方法はいくつかの -- 改行可能な オブジェクト -- だけに適用されます。学習マニュアルでは、これら 4 つのテクニックについて紹介しています。 オブジェクトの可視性と色 を参照してください。

さらに、特定のレイアウト オブジェクト特有のテクニックがいくつかあります。それらについては、特別な考慮でカバーされています。


ステンシルを削除する

レウアウト オブジェクトはそれぞれステンシル プロパティを持ちます。デフォルトでは、このプロパティはそのオブジェクトを描画する特殊な関数にセットされています。このプロパティが #f にオーバライドされた場合、関数は呼び出されず、そのオブジェクトは描画されません。\rever でデフォルトの動作に戻すことができます。

a1 a
\omit Score.BarLine
a a
\undo \omit Score.BarLine
a a a

[image of music]


オブジェクトを透明にする

レイアウト オブジェクトはそれぞれ transparent プロパティを持っていて、デフォルトでは #f にセットされています。#t にセットされると、そのオブジェクトはスペースを占めたままですが、不可視になります。

a4 a
\once \hide NoteHead
a a

[image of music]


オブジェクトを白で描く

レイアウト オブジェクトはそれぞれ color プロパティを持っていて、デフォルトでは black にセットされています。このプロパティが white にセットされてると、そのオブジェクトは白い背景と区別が付かなくなります。しかしながら、そのオブジェクトが他のオブジェクトと交差している場合、交差している場所の色はオブジェクトの描画順序によって決定されます。これにより、以下に示すように、白いオブジェクトの画像が幽霊のように浮かび上がることがあります:

\override Staff.Clef.color = #white
a1

[image of music]

オブジェクトの描画順序を変更することにより、これを回避することができます。すべてのレイアウト オブジェクトは layer プロパティを持っており、このプロパティには整数がセットされています。より小さな値の layer を持つオブジェクトが最初に描画され、より大きな値の layer を持つオブジェクトが後になってから描画されます。このため、より大きな値を持つオブジェクトがより小さな値を持つオブジェクトを上書きします。デフォルトでは、たいていのオブジェクトの layer には 1 が代入されています。しかしながら、いくつかのオブジェクト -- StaffSymbolBarLine など -- には 0 が代入されています。同じ値の layer を持つオブジェクトを描画する順番は不確定です。

上記の例において、白い音部記号 (この layer のデフォルト値は 1 です) は譜線 (この layer のデフォルト値は 0 です) の後に描画されます。そのため、音部記号は譜線を上書きしています。これを変更するには、Clef オブジェクトの layer により小さな値 -- 例えば、-1 -- を与えて、音部記号を先に描画させる必要があります:

\override Staff.Clef.color = #white
\override Staff.Clef.layer = #-1
a1

[image of music]


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

以下の例は、小節線の可視性を制御するベクトルの使用方法を示しています:

f4 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

[image of music]

break-visibility をオーバライドするために使用されるベクトルの要素 3 つをすべて記述する必要がありますが、それらすべてが各レイアウト オブジェクトに対して効果を持つわけではなく、組み合わせによってはエラーになる場合もあります。以下の制限があります:


特別な考慮を必要とするもの

明示的な変更の後の可視性

break-visibility プロパティが調号の可視性と音部記号の変更を制御するのは、行の先頭 -- つまり、改行の後 -- においてだけです。行の途中や終わりでの明示的な調の変更や音部記号の変更の後に出現する調号や音部記号の可視性には効果を持ちません。以下の例では、all-invisible がセットされていますが、B フラット メジャーへの明示的な変更の後に出現する調号は可視のままです。

\key g \major
f4 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

[image of music]

そのような明示的な調号や音部記号の変更の可視性は explicitKeySignatureVisibility プロパティや explicitClefVisibility プロパティによって制御されます。これらは break-visibility プロパティと等価であり、どちらも break-visibility と同様に 3 つのブール値からなるベクトルか上でリストアップした定義済み関数をとります。どちらも Staff コンテキストのプロパティであり、レイアウト オブジェクト自体のプロパティではありません。ですから、これらは \set コマンドでセットします。どちらもデフォルトでは all-visible がセットされています。これらのプロパティは明示的な変更の結果として生じる調号と音部記号の可視性だけを制御し、行の先頭での調号や音部記号には効果を持ちませんので、オブジェクトを削除するには適切な break-visibility をオーバライドする必要があります。

\key g \major
f4 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

[image of music]

前の調をキャンセルする臨時記号の可視性

明示的な調の変更で描画される前の調をキャンセルする臨時記号を削除するには、Staff コンテキスト プロパティ printKeyCancellation#f をセットします:

\key g \major
f4 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

[image of music]

このオーバライドによって、調の変更を示す臨時記号だけが残ります。

調を C メジャーや A マイナーに変更する時、前の調をキャンセルする臨時記号は前の調のキャンセルしている だけ であることに注意してください。そのようなケースでは、printKeyCancellation#f に設定しても効果はありません:

\key g \major
f4 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

[image of music]

調を C メジャーや A マイナーに変更する場合に、前の調をキャンセルする臨時記号を消すには、KeyCancellation グラフィカル オブジェクトの可視性をオーバライドします:

\key g \major
f4 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

[image of music]

自動小節線

特殊なケースとして、Score コンテキストの automaticBars プロパティを設定することにより、小節線の描画を Off にすることもできます。#f をセットされた場合、小節線は自動的には描画されなくなり、\bar コマンドで明示的に作成しなければならなくなります。定義済みコマンド \cadenzaOn とは異なり、小節数はカウントされ続けます。後になってこのプロパティに #t がセットされると、このカウントに従って小節線の生成が再開されます。#f がセットされている場合、改行が起こりえるのは明示的な \bar コマンドがある場所でだけになります。

オクターブ移調付きの音部記号

オクターブ移調付きの音部記号上の小さなオクターブ記号は ClefModifier レイアウト オブジェクトによって作り出されます。このオブジェクトの可視性は Clef オブジェクトの可視性とは独立して制御されます。そのため、各行の先頭においてそのような音部記号を完全に消そうとするなら、Clef オブジェクトと ClefModifier オブジェクトの両方に対して必要な break-visibility のオーバライドを行う必要があります。

明示的な音部記号の変更では、explicitClefVisibility プロパティが音部記号とそれに関連するオクターブ記号の両方を制御します。

参照

学習マニュアル: オブジェクトの可視性と色


他の言語: English, deutsch, español, français, italiano
About automatic language selection.

LilyPond — 記譜法リファレンス v2.18.2 (安定版).