[ << 出力を調整する ] | [トップ][目次][インデックス] | [ テンプレート >> ] |
[ < オブジェクトの見た目 ] | [ 上へ : オブジェクトの見た目 ] | [ stencil プロパティ > ] |
5.3.1 オブジェクトの可視性と色
教育目的の楽譜では、ある要素を省略した楽譜を譜刻して、学生にそれを付け足させるという訓練にしたいと思うかもしれません。簡単な例として、その訓練とは小節線の無い楽譜だと仮定してみましょう。しかしながら、通常、小節線は自動的に挿入されます。どうやって小節線が譜刻されることを防ぐのでしょうか?
このことに挑戦する前に、オブジェクト プロパティは インタフェイス と呼ばれるものにグループ化されているということを思い出してください – インタフェイスの中で見つかるプロパティ を参照してください。これはあるグラフィカル オブジェクトを調整するために一緒に使用されるかもしれないプロパティをグループ化したものです – あるオブジェクトに対してインタフェイス内のプロパティの 1 つを使うことが許可されるのなら、他のプロパティも許可されます。あるオブジェクトはいくつかのインタフェイス内にあるプロパティを使用し、別のオブジェクトはそれとは別のインタフェイス内にあるプロパティを使用します。ある特定のグラフィカルオブジェクトによって使用されるプロパティを保持しているインタフェイスは、そのグラフィカル オブジェクトについて記述している内部リファレンス ページの最後にリスト アップされていて、それらのプロパティはそれらのインタフェイスを参照することによって閲覧できます。
グラフィカル オブジェクトについての情報を見つけ出す方法を
レイアウト オブジェクトのプロパティ で説明しました。同じアプローチを使って、内部リファレンスで小節線を譜刻するレイアウト オブジェクトを見つけ出します。Backend を経由して All layout objects に行くと、そこに BarLine
と呼ばれるレイアウト オブジェクトがあることがわかります。そのレイアウト オブジェクトのプロパティには小節線の可視性をコントロールする
2 つのプロパティが含まれています: break-visibility
と stencil
です。さらに、BarLine
はインタフェイスのいくつかをサポートしています。grob-interface
もサポートされていて、そこには transparent
プロパティと color
プロパティが含まれています。これらすべてが小節線の可視性に影響を与えます (そしてもちろん、拡大解釈すれば他の多くのレイアウト オブジェクトにも影響を与えます)。次はこれらのプロパティをそれぞれ見ていきましょう。
stencil プロパティ | ||
break-visibility property | ||
transparent プロパティ | ||
color プロパティ |
[ << 出力を調整する ] | [トップ][目次][インデックス] | [ テンプレート >> ] |
[ < オブジェクトの可視性と色 ] | [ 上へ : オブジェクトの可視性と色 ] | [ break-visibility プロパティ > ] |
stencil
プロパティ
このプロパティは譜刻すべきシンボル (図柄) を指定することによって小節線の見た目を制御します。他の多くのプロパティでも共通に言えますが、このプロパティの値に
#f
をセットすることによって何も譜刻させなくすることができます。ではやってみましょう。以前と同様に、暗黙のコンテキスト Voice
は省略します:
\relative { \time 12/16 \override BarLine.stencil = ##f c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
小節線はまだ譜刻されています。何が間違っているのでしょうか?内部リファレンスに戻って、BarLine
のプロパティを記述しているページを読み返してください。そのページの先頭に
“BarLine オブジェクトは Bar_engraver によって作成されます” と記述されています。Bar_engraver
ページに行ってください。そのページの最後で、Bar_engraver
を保持するコンテキストがリスト アップされています。それらのコンテキストのタイプはすべて Staff
です。ですから、\override
コマンドが予期したように機能しなかったのは、BarLine
はデフォルトの Voice
コンテキストの中にはいなかったからなのです。コンテキストが間違って指定された場合、そのコマンドは機能しません。エラー メッセージは生成されず、ログ ファイルには何もログが残りません。正しいコンテキストを付け加えることによってコマンドを修正してみましょう:
\relative { \time 12/16 \override Staff.BarLine.stencil = ##f c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
今度は小節線が消えました。stencil
プロパティに #f
をセットする操作は頻繁に行うので、短くしたコマンド \omit
が用意されています:
\relative { \time 12/16 \omit Staff.BarLine c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
しかしながら、stencil
プロパティを #f
にセットするのではなく、オブジェクトの大きさを修正する必要があるオブジェクトも存在するということに注意してください。そのようなオブジェクトの stencil
プロパティを #f
にセットするとエラーになります。
例えば、NoteHead
オブジェクトの stencil
プロパティを
#f
にセットするとエラーになります。この場合、point-stencil
を使ってサイズが 0 のステンシル (型、型紙) をオブジェクトにセットします:
\relative { c''4 c \once \override NoteHead.stencil = #point-stencil c4 c }
[ << 出力を調整する ] | [トップ][目次][インデックス] | [ テンプレート >> ] |
[ < stencil プロパティ ] | [ 上へ : オブジェクトの可視性と色 ] | [ transparent プロパティ > ] |
break-visibility
property
内部リファレンスの BarLine
のプロパティから
break-visibility
プロパティには 3 つのブール値からなるベクトルが必要であることがわかります。これらはそれぞれ、小節線が行の最後、行の途中、行の最初に譜刻されるかどうかを制御します。以下の例ではすべての小節線を消したいので、必要となる値は
#(#f #f #f)
です
(同じ結果を all-invisible
でも得ることができます)。それではやってみましょう。Staff
コンテキストを含めることを忘れないでください。また、この値を書くときに括弧を始める前に ##
を付ける必要があることにも注意してください。#
の 1 つはベクトルを導入するときに値の一部として必要とされ、先頭の #
は \override
コマンドの中で常に値の前に置くことが必要とされます。
\relative { \time 12/16 \override Staff.BarLine.break-visibility = ##(#f #f #f) c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
今度もすべての小節線が消えました。
[ << 出力を調整する ] | [トップ][目次][インデックス] | [ テンプレート >> ] |
[ < break-visibility プロパティ ] | [ 上へ : オブジェクトの可視性と色 ] | [ color プロパティ > ] |
transparent
プロパティ
内部リファレンスの grob-interface
ページにあるプロパティから
transparent
プロパティはブール値であることがわかります。これはグラフィカル オブジェクトを透明にする場合には #t
にセットします。次の例では、小節線ではなく拍子記号を不可視にしてみましょう。そうするには、まず、拍子記号のグラフィカル オブジェクト名を見つける必要があります。TimeSignature
レイアウト オブジェクトのプロパティを見つけるために内部リファレンスの ‘すべてのレイアウト オブジェクト’ ページに戻ってください。TimeSignature
は Time_signature_engraver
によって作り出され、さらに、Time_signature_engraver
は Staff
コンテキストに含まれ、さらに、Staff
コンテキストは grob-interface
をサポートしているということがわかります。そのため、拍子記号を透明にするためのコマンドは以下のようになります:
\relative { \time 12/16 \override Staff.TimeSignature.transparent = ##t c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
transparent
プロパティに #t
をセットする操作も頻繁に行うので、短くしたコマンド \hide
が用意されています:
\relative { \time 12/16 \hide Staff.TimeSignature c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
どちらの場合でも拍子記号は消えました。しかしながら、このコマンドは拍子記号があるべき場所に隙間を残しています。たぶん、これは学生がその部分を埋めるための練習としては望ましいでしょうが、他の状況ではこの隙間は望ましくありません。この隙間を取り除くには、拍子記号の transparent
の代わりにステンシル (型、型紙) を #f
にセットします:
\relative { \time 12/16 \omit Staff.TimeSignature c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
違いは明白です: ステンシルを #f
にセットする
(\omit
を用いることもできます) と、オブジェクト自体が削除されます。一方、オブジェクトを transparent
(透明) にする
(\hide
を用いることもできます)とそのオブジェクトは消えますが、オブジェクトは不可視になっただけです。
色 (color)
[ << 出力を調整する ] | [トップ][目次][インデックス] | [ テンプレート >> ] |
[ < transparent プロパティ ] | [ 上へ : オブジェクトの可視性と色 ] | [ オブジェクトのサイズ > ] |
color
プロパティ
最後に、小節線の色を白にすることによって小節線を不可視にしてみましょう。(これには白い小節線が譜線と交差したところで譜線を見えたり見えなくしてしまうかもしれないという問題があります。以下のいくつかの例で、このことを予測することはできないと思うかもしれません。そうなる理由と、それを制御する方法についての詳細は、 Painting objects white でカバーされています。しかしここでは色について学んでいるところなので、オブジェクトを白で描くことの限界を受け入れるだけにしてください。)
grob-interface
はカラー プロパティの値はリストであると指定しています。しかしながら、そのリストが何であるべきなのかの説明はありません。カラー プロパティで必要とされるリストは実際のところ内部ユニットの中にある値のリストです。しかし、内部ユニットの中にある値を知らなくても済むように、カラーを指定するための手段がいくつか用意されています。最初の方法は
List of colors にある最初の表でリスト アップされている
‘標準’ のカラーの 1 つを使用する方法です。小節線を白にするには以下のように記述します:
\relative { \time 12/16 \override Staff.BarLine.color = #white c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
今度も再び小節線は見えなくなりました。white の前にアポストロフィは付かないということに注意してください – これはシンボルではなく変数です。この変数は評価される時、小節線の色を白にセットするのに必要な内部的な値のリストを提供します。標準カラー リストにある他のカラーもまた変数です。小節線の色をこのリストの中にある他の変数に変更することで、これが機能することをあなた自身で納得できます。
カラーを変えるための 2 つ目の方法は、
List of colors の
2 番目のリストの中にある X11 カラー名のリストを使用する方法です。しかしながら、X11 カラー名は関数 x11-color
によって実際の値にマッピングされます。x11-color
は以下のように X11 カラー シンボルを内部値のリストに変換します:
\relative { \time 12/16 \override Staff.BarLine.color = #(x11-color 'white) c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
この場合、関数 x11-color
はシンボルを引数として扱うので、変数として評価されないようシンボルの前にアポストロフィを付ける必要があり、関数呼び出し全体を括弧で囲む必要があるということに注意してください。
もう 1 つ関数があります。RGB 値を内部カラーに変換する rgb-color
関数です。この関数は赤、緑、青の輝度を表す 3 つの引数をとります。これらの引数は 0 から 1 までの値をとります。ですから、カラーを赤にセットする場合の値は (rgb-color 1 0 0)
となり、白の場合は (rgb-color 1 1 1)
となります:
\relative { \time 12/16 \override Staff.BarLine.color = #(rgb-color 1 1 1) c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
最後に、X11 カラー セットの一部であるグレー スケールを用いる方法もあります。グレー スケールの範囲は黒 'grey0
から白 'grey100
まで
1 段階ずつあります。グレー スケールの使用方法を示すために、例の中にあるすべてのレイアウト オブジェクトのカラーをさまざまな濃度のグレーにセットしてみましょう:
\relative { \time 12/16 \override Staff.StaffSymbol.color = #(x11-color 'grey30) \override Staff.TimeSignature.color = #(x11-color 'grey60) \override Staff.Clef.color = #(x11-color 'grey60) \override Voice.NoteHead.color = #(x11-color 'grey85) \override Voice.Stem.color = #(x11-color 'grey85) \override Staff.BarLine.color = #(x11-color 'grey10) c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
各レイアウト オブジェクトに関連付けされているコンテキストに注意してください。これらのコンテキストを正しく取得することが重要であり、そうしなければコマンドは機能しません!コンテキストの中には特定のエングラーバが置かれているということを忘れないでください。エングラーバに対するデフォルト コンテキストを見つけ出すには、内部リファレンスのレイアウト オブジェクトからスタートして、そこからそれを作り出すエングラーバのページに行きます。エングラーバのページには、通常はどのコンテキストにそのエングラーバが含まれているのかが記述されています。
[ << 出力を調整する ] | [トップ][目次][インデックス] | [ テンプレート >> ] |
[ < transparent プロパティ ] | [ 上へ : オブジェクトの可視性と色 ] | [ オブジェクトのサイズ > ] |