[ << デフォルトを変更する ] | [トップ][目次][インデックス] | [ 付表 >> ] |
[ < set 対 override ] | [ 上へ : プロパティを変更する ] | [ 連想配列を変更する > ] |
5.3.6 \offset
コマンド
\override
, \tweak
, \overrideProperty
コマンドによって
Grob プロパティを新たな値にセットすることができますが、そのようなプロパティをデフォルトの値との相対関係で変更できると便利な場合があります。\offset
コマンドはこのような目的のために使用することができます。
\offset
の記法は:
[-]\offset property offsets item
このコマンドは、item によって指定される Grob の property プロパティのデフォルト値に、offsets の内容を加算します。
コマンドの記法によって、\offset
は \tweak
のように作用するか
\override
のように作用します。この使用法の差は \offset
と用いられる Grob プロパティについてもう少し説明した後に示します。
オフセットできるプロパティ
全てではないですが、多くの Grob プロパティをオフセットすることができます。property がオフセットできない場合、オブジェクトは変更されず、警告が出力されます。このような場合には、代わりに \override
や \tweak
を用いてオブジェクトを変更する必要があります。
トライアンドエラーで、警告を手がかりにしてオフセットできるものとできないものを判別することができます。しかし、より系統的なアプローチも存在します。
次の基準は、プロパティが \offset
で変更できるかどうかの目安になります:
- Grob の説明に‘デフォルト設定’が記述されているプロパティ。このようなプロパティは All layout objects に Grob 毎にリストアップされています。(これらは ‘scm/define-grobs.scm’ からも確認することができます。)
-
数値を取るプロパティ。具体的には
number
、number
のリスト、number-pair
、number-pair-list
を取るものを指します。 All layout objects のページは、それぞれのプロパティが取るデータの型をリストアップしています。これはデフォルト設定が関数であっても問題ありません。 - ‘サブ プロパティ’ではないプロパティ。サブ プロパティとは、他のプロパティの中にあるプロパティを指します。
- 無限大にセットされていないプロパティ。正や負の無限大をオフセットする良い方法はありません。
次の例では、いくつかの Grob プロパティのオフセット可能性を、上の基準に基づいて判断します。
- オフセットできるプロパティ
-
Hairpin.height
-
このプロパティはサブ プロパティではなく、 Hairpin にリストアップされています。値については、‘dimension, in staff space’ を取り、デフォルト値は
0.6666
です—無限大ではないnumber
となっています。 -
Arpeggio.positions
-
Arpeggio のページには、
positions
プロパティが ‘pair of numbers’ を取ると記述されています。デフォルト値はly:arpeggio::positions
となっています—これは、タイプセットの時に評価され、各Arpeggio
オブジェクトについてnumber
のペアを返すコールバック関数です。
-
- オフセットできないプロパティ
offset を override として使う
item が Grob の名前 (例えば Arpeggio
や Staff.OttavaBracket
)
である場合、\offset
の結果は指定された Grob の \override
となります。
\offset property offsets [context.]GrobName
‘override’ の形では、先頭のハイフンは必ず使われません。\override
コマンドにハイフンが使われないのと同様です。
次の例では、最初の小節にあるデフォルト設定のアルペジオを、‘override’ 形でより和音全体に広がるようにオフセットします。アルペジオは上下に譜スペースの半分ずつ広がります。また、最初の和音について通常の方法で positions
プロパティをオーバライドする例も示しています。この方法では端点を相対座標ではなく絶対座標で指定しなければならないため、‘譜スペースの半分だけ広げる’という目的を全く表現できていません。また、他の和音についてはまたサイズや位置が異なるため、それぞれに別の \override
が必要です。
arpeggioMusic = { <c' e' g'>\arpeggio <a' c'' e''>\arpeggio <d' f' a' c''>\arpeggio <c' e' g' b' d'' f'' a''>\arpeggio } { \arpeggioMusic \bar "||" \offset positions #'(-0.5 . 0.5) Arpeggio \arpeggioMusic \bar "||" \once \override Arpeggio.positions = #'(-3.5 . -0.5) <c' e' g'>1\arpeggio \bar "||" }
‘override’ の形では、\offset
の前に \once
や \temporary
を置くことができ、\revert
で元に戻すことができます
(
Intermediate substitution functions を参照してください)。つまり、\offset
は実際には property の \override
を作成していることになります。
music = { c'8\< d' e' f'\! } { \music \offset height 1 Hairpin \music \music \revert Hairpin.height \music \bar "||" \once \offset height 1 Hairpin \music \music \bar "||" \override Hairpin.height = 0.2 \music \temporary \offset height 2 Hairpin \music \music \revert Hairpin.height \music \bar "||" }
また、\override
と同様に、\offset
の ‘override’ 形は
\undo
や \single
と使用することもできます:
longStem = \offset length 6 Stem { \longStem c'4 c''' c' c'' \bar "||" \undo \longStem c'4 c''' c' c'' \bar "||" \single \longStem c'4 c''' c' c'' \bar "||" }
offset を tweak として使う
item が音楽表記 ((
や \arpeggio
など) である場合、‘tweak’ が適用された音楽表記が出力されます。
[-]\offset [GrobName.]property offsets music-expression
‘tweak’ 形の \offset
の記法は、\tweak
コマンドそのものに似ています。引数の順番や、前に付くハイフンはそれと同様です。
次の例は、BreathingSign
オブジェクトの縦位置を調整するために
‘tweak’ 形を用いています。これと、通常の \tweak
コマンドによる例を見比べてください。記法は同一ですが、\tweak
の出力はあまり直感的ではありません。なぜなら、BreathingSign.Y-offset
が譜線の中央を原点として計算されるためです。\offset
を使えば、Y-offset
がどのように計算されているかを知る必要はありません。
{ c''4 \breathe c''4 \offset Y-offset 2 \breathe c''2 \tweak Y-offset 3 \breathe }
前の例では、‘tweak’ されたオブジェクトはユーザの入力から直接作られています:
\breathe
コマンドは BreathingSign
オブジェクトを明示的に作り出すためです。コマンドが対象にするオブジェクトが曖昧ではないため、オブジェクトの名前を指定する必要はありませんでした。しかし、オブジェクトが間接的に作られる場合には、Grob の名前を含める必要があります。これは \tweak
コマンドと同様です。
次の例では、Beam
オブジェクトの positions
プロパティを
\offset
することで、連桁を 2 譜スペース分下にずらしています。
最初の \offset
では、連桁を明示的に作り出すものが存在しないため、
Grob の名前が必要となります。次の \offset
では、連桁が音楽表記
[
によって手動で作り出されるため、Grob の名前は必要ではありません。(また、後者では number-pair
の両方をオフセットするために、単一の number
を用いる省略記法も示しています。)
{ c''8 g'' e'' d'' \offset Beam.positions #'(-2 . -2) c''8 g'' e'' d'' c''8 g'' e'' d'' c''8-\offset positions #-2 [ g'' e'' d''] }
改行するスパナを offset する
改行や改ページにまたがるスパナの一部分を個別に変更することもできます。このような場合、offsets はプロパティが要求する型のリストを取ります。
このように用いられる \offset
コマンドは \alterBroken
コマンドと類似しています。(改行するスパナを変更する を参照してください。)
ただし、\alterBroken
とは異なり、\offset
に与えられる値は絶対値ではなく相対値となります。
次の例は、‘改行する’ OttavaBracket
オブジェクトを、staff-padding
プロパティにより移動します。プロパティは元々 number
を取るため、offsets は number
のリストを取り、改行によって分けられる 2 つの部分に対応します。1 行目のブラケットは、staff-padding
のデフォルト値に
0
が加算されることになるため実質変更されません。2 行目のブラケットはデフォルトの高さから 3 譜スペースだけ上に移動します。高さのデフォルト値
(絶対値) は 2
ですが、位置をオフセットするためにこの値を知る必要はありません。
{ \offset staff-padding #'(0 3) Staff.OttavaBracket \ottava #1 c'''2 c''' \break c'''2 c''' }
次の例は、Slur
オブジェクトの control-points
プロパティをオフセットすることで \shape
コマンドを模倣しています。ここでは、offsets は number-pair-list
のリストとなり、それぞれの要素がスラーの一つの部分に対応します。この例では、形状を変更する に示した例と全く同じ結果を出力します。
{ c'4-\offset control-points #'( ((0 . 0) (0 . 0) (0 . 0) (0 . 1)) ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5)) ) ( f'4 g' c'' \break d'4 c'' f' c') }
[ << デフォルトを変更する ] | [トップ][目次][インデックス] | [ 付表 >> ] |
[ < set 対 override ] | [ 上へ : プロパティを変更する ] | [ 連想配列を変更する > ] |