[ << 出力を調整する ] | [トップ][目次][インデックス][ ? ] | [ テンプレート >> ] | ||
[ < 譜表内部オブジェクト ] | [ 上へ : オブジェクトの配置 ] | [ オブジェクトの衝突 > ] |
4.4.3 譜表外部オブジェクト
譜表外部オブジェクトは自動的に衝突を回避するよう配置されます。小さな値の outside-staff-priority
プロパティを持つオブジェクトは譜表の近くに配置され、他の譜表外部オブジェクトは衝突を避けるのに必要な分だけ離されます。outside-staff-priority
は grob-interface
の中で定義されているため、すべてのレイアウト オブジェクトのプロパティです。デフォルトでは、すべての譜表内部オブジェクトの outside-staff-priority
は
#f
にセットされていて、譜表外部オブジェクトが作成されたときにその譜表外部オブジェクトの outside-staff-priority
に適当な数値がセットされます。以下の表はデフォルトで Staff
コンテキストまたは
Voice
コンテキストの中に配置されるいくつかの一般的な譜表外部オブジェクトのデフォルトの
outside-staff-priority
値を示しています。
レイアウト オブジェクト | 優先度 | 以下のオブジェクトの配置を制御する: |
---|---|---|
| | 全休符上のテキスト |
| | マークアップ テキスト |
| | オッターバ (オクターブを上下させる記号) の囲み |
| | テキスト スパナ |
| | すべての強弱記号 |
| | Volta (番号付きのリピート) の囲み |
| | トリル記号 |
これらのうちのいくつかのデフォルトでの配置を示している例を挙げます。
% Set details for later Text Spanner \override TextSpanner #'(bound-details left text) = \markup { \small \bold Slower } % Place dynamics above staff \dynamicUp % Start Ottava Bracket \ottava #1 c' \startTextSpan % Add Dynamic Text c\pp % Add Dynamic Line Spanner c\< % Add Text Script c^Text c c % Add Dynamic Text c\ff c \stopTextSpan % Stop Ottava Bracket \ottava #0 c, c c c
この例はテキスト スパナ – 音楽の上に置かれる延長線付きのテキスト – の作成方法についても示しています。スパナは \startTextSpan
コマンドから
\stopTextSpan
コマンドまで延び、テキストのフォーマットは
\override TextSpanner
コマンドによって定義されます。詳細は
Text spanners を参照してください。
この例はさらにオッターバ囲みを作成する方法についても示しています。
小節番号、メトロノーム記号、リハーサル記号は示されていないということに注意してください。デフォルトでは、それらは Score
コンテキストの中で作成され、それらの outside-staff-priority
は Staff
コンテキストの中で作成されるレイアウト オブジェクトとは異なり無視されます。小節番号、メトロノーム記号あるいはリハーサル記号をそれらの outside-staff-priority
に従って配置したいのなら、Score
コンテキストからそれぞれ Bar_number_engraver
,
Metronome_mark_engraver
, Mark_engraver
を削除して最上位の
Staff
コンテキストに置く必要があります。そうした場合、それらの記号には以下のデフォルトの outside-staff-priority
値が与えられます:
レイアウト オブジェクト | 優先度 |
---|---|
| |
| |
| |
outside-staff-priority
のデフォルト値による配置があなたの望みに合わない場合、いずれかのオブジェクトの優先度をオーバライドすることになるかもしれません。上記の例で、オッターバ囲みをテキスト スパナの下に配置したいとします。すべきことは、OttavaBracket
は Staff
コンテキストの中に作成されるということを思い出し、OttavaBracket
の優先度を内部リファレンスか上記の表で調べて、それを TextSpanner
の値よりも小さくすることです:
% Set details for later Text Spanner \override TextSpanner #'(bound-details left text) = \markup { \small \bold Slower } % Place dynamics above staff \dynamicUp %Place following Ottava Bracket below Text Spanners \once \override Staff.OttavaBracket #'outside-staff-priority = #340 % Start Ottava Bracket \ottava #1 c' \startTextSpan % Add Dynamic Text c\pp % Add Dynamic Line Spanner c\< % Add Text Script c^Text c c % Add Dynamic Text c\ff c \stopTextSpan % Stop Ottava Bracket \ottava #0 c, c c c
スラーはデフォルトでは譜表内部オブジェクトに分類されています。しかしながら、譜表の上部に配置された音符に付くスラーはしばしば譜表の上に表示されます。このことは、スラーがまず最初に配置されるため、アーティキュレーションなどの譜表外部オブジェクトをあまりにも高い位置に押し上げる可能性があります。アーティキュレーションの avoid-slur
プロパティに
'inside
をセットすることでアーティキュレーションをスラーよりも内側に配置することができます。しかし、avoid-slur
プロパティはアーティキュレーションの
outside-staff-priority
が #f
にセットされている場合にのみ効果を持ちます。代替手段として、スラーの outside-staff-priority
に数値をセットすることによって、スラーを他の譜表外部オブジェクトとともに
outside-staff-priority
値に従って配置することができます。ここで、2 つの方法の効果を示す例を挙げます:
c4( c^\markup\tiny\sharp d4.) c8 c4( \once \override TextScript #'avoid-slur = #'inside \once \override TextScript #'outside-staff-priority = ##f c^\markup\tiny\sharp d4.) c8 \once \override Slur #'outside-staff-priority = #500 c4( c^\markup\tiny\sharp d4.) c8
outside-staff-priority
は、個々のオブジェクトの垂直方向の配置を制御するために使用することもできます。しかしながら、その結果は常に望み通りになるわけではありません。自動配置 にある例で “Text3” を “Text4” の上に配置したいとします。すべきことは TextScript
の優先度を内部リファレンスか上記の表で調べて、“Text3” の優先度を大きくすることです:
c2^"Text1" c^"Text2" \once \override TextScript #'outside-staff-priority = #500 c^"Text3" c^"Text4"
これはたしかに “Text3” を “Text4” の上に配置しています。しかし、“Text3”を “Text2” の上に配置して、“Text4” を押し下げてもいます。おそらく、これはそれほど望ましい結果ではないでしょう。本当に望んでいることは、すべての注釈を譜表の上に譜表から同じ距離だけ離して配置することです。そうするには明らかに、テキストのためにもっと広いスペースを確保するために、音符を水平方向に広げる必要があります。これは \textLengthOn
コマンドを用いることで達成できます。
\textLengthOn
デフォルトでは、音楽のレイアウトが考慮されている限り、マークアップによって作り出されるテキストは水平方向のスペースと関係しません。\textLengthOn
コマンドはこの動作を逆にして、テキストの配置に便宜をはかる必要がある限り、音符の間隔を広げます:
\textLengthOn % Cause notes to space out to accommodate text c2^"Text1" c^"Text2" c^"Text3" c^"Text4"
デフォルトの動作に戻すためのコマンドは \textLengthOff
です。\once
は \override
, \set
, \revert
それに \unset
だけに付けることができるということを思い出してください。そのため、\textLengthOn
で \once
を使うことはできません。
マークアップ テキストは譜表の上に突き出している音符を避けます。このことが望ましくない場合、優先度を #f
にセットすることによって上方向への自動再配置を Off にすることになるかもしれません。ここで、マークアップ テキストがそのような音符とどのように相互作用するかを示す例を挙げます。
% This markup is short enough to fit without collision c2^"Tex" c''2 R1 % This is too long to fit, so it is displaced upwards c,,2^"Text" c''2 R1 % Turn off collision avoidance \once \override TextScript #'outside-staff-priority = ##f c,,2^"Long Text " c''2 R1 % Turn off collision avoidance \once \override TextScript #'outside-staff-priority = ##f \textLengthOn % and turn on textLengthOn c,,2^"Long Text " % Spaces at end are honored c''2
強弱記号
通常、強弱記号は譜表の下に配置されます。しかしながら、dynamicUp
コマンドを使うことで上に配置されるかもしれません。強弱記号は、その記号が付いている音符と垂直方向の関係で配置され、フレージング スラーや小節番号などの譜表内部オブジェクトのすべてよりも下 (あるいは上) に配置されます。このことは、以下の例のように、到底受け入れられない結果を生み出す可能性があります:
\clef "bass" \key aes \major \time 9/8 \dynamicUp bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! | ees,2.~\)\mf ees4 r8 |
しかしながら、音符とそれに付けられた強弱記号が互いに近い場合、自動配置は後の方にある強弱記号を譜表から離すことによって衝突を避けます。しかし、以下のかなり不自然な例が示すように、それは最適な配置ではないかもしれません:
\dynamicUp a4\f b\mf c\mp b\p
‘実際’ の音楽で同じような状況があった場合、音符の間隔をもう少し広げて、すべての強弱記号が譜表から垂直方向に同じだけ離れるようにする方が望ましいかもしれません。マークアップ テキストの場合は \textLengthOn
コマンドを用いることによってそうすることができますが、強弱記号には等価のコマンドがありません。そのため、\override
コマンドを用いてそれを達成する方法を見出す必要があります。
グラフィカル オブジェクトのサイズ
まず最初に、グラフィカル オブジェクトのサイズがどのように決定されるかを学ばなくてはなりません。すべてのグラフィカル オブジェクトの内部では参照ポイントが定義され、それはそれらの親オブジェクトとの相対位置を決定するために使用されます。このポイントは親オブジェクトから垂直方向に X-offset
、垂直方向に Y-offset
離れた位置になります。オブジェクトの水平方向の広がりは数値のペア X-extent
で与えられ、そのペアはオブジェクトの左端と右端の参照ポイントとの相対関係について述べています。垂直方向の広がりも同様に数値のペア Y-extent
によって与えられます。これらは grob-interface
をサポートするすべてのグラフィカル オブジェクトが持つプロパティです。
デフォルトでは、譜表外部オブジェクトには 0 の幅が与えられているため、水平方向で重なる可能性があります。これは extra-spacing-width
に '(+inf.0 . -inf.0)
をセットすることによって、左端の広がりにプラス無限大、右端の広がりにマイナス無限大を付け加えるというトリックによって達成されています。そのため、譜表外部オブジェクトが水平方向で重ならないことを保証するには、extra-spacing-width
の値を '(0 . 0)
にオーバライドする必要があります。これにより、本当の幅が明らかになります。以下は強弱記号テキストに対してこれを行うコマンドです:
\override DynamicText #'extra-spacing-width = #'(0 . 0)
これが前の例で機能するかどうかを見てみましょう:
\dynamicUp \override DynamicText #'extra-spacing-width = #'(0 . 0) a4\f b\mf c\mp b\p
確かに強弱記号の再配置をストップさせています。しかし、2 つの問題が残っています。強弱記号を互いにもう少し離すべきであり、それらは譜表から同じ距離にあるほうが望ましいです。最初の問題は簡単に解決できます。extra-spacing-width
を 0 にする代わりに、もう少し大きな値を与えるのです。単位は 2 本の譜表線の間隔なので、左端を 1 単位の半分だけ左に移動させ、右端を 1 単位の半分だけ右に移動させると解決になります:
\dynamicUp % Extend width by 1 staff space \override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) a4\f b\mf c\mp b\p
これで前よりも良くなりました。しかし、強弱記号が音符に合わせて上下するよりも、同じベースラインで揃っている方が望ましいでしょう。それを行うためのプロパティは staff-padding
であり、後に続くセクションでカバーされています。
[ << 出力を調整する ] | [トップ][目次][インデックス][ ? ] | [ テンプレート >> ] | ||
[ < 譜表内部オブジェクト ] | [ 上へ : オブジェクトの配置 ] | [ オブジェクトの衝突 > ] |
他の言語: English, deutsch, español, nederlands