| [ << デフォルトを変更する ] | [Top][Contents][Index] | [ 付表 >> ] |
[ < \set 対 \override ] | [ Up: プロパティを変更する ] | [ 連想配列を変更する > ] |
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') }![]()
| [ << デフォルトを変更する ] | [Top][Contents][Index] | [ 付表 >> ] |
[ < \set 対 \override ] | [ Up: プロパティを変更する ] | [ 連想配列を変更する > ] |
![[image of music]](../58/lily-81728362.png)
![[image of music]](../9e/lily-c4e40f3d.png)
![[image of music]](../15/lily-2ec29228.png)
![[image of music]](../61/lily-dda2b50b.png)
![[image of music]](../f1/lily-31c93cd8.png)
![[image of music]](../74/lily-e38afc4d.png)
![[image of music]](../24/lily-0308bdd5.png)