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 プロパティのオフセット可能性を、上の基準に基づいて判断します。

offset を override として使う

item が Grob の名前 (例えば ArpeggioStaff.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 "||"
}

[image of music]

‘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 "||"
}

[image of music]

また、\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 "||"
}

[image of music]

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
}

[image of music]

前の例では、‘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'']
}

[image of music]

改行するスパナを offset する

改行や改ページにまたがるスパナの一部分を個別に変更することもできます。このような場合、offsets はプロパティが要求する型のリストを取ります。

このように用いられる \offset コマンドは \alterBroken コマンドと類似しています。(改行するスパナを変更する を参照してください。) ただし、\alterBroken とは異なり、\offset に与えられる値は絶対値ではなく相対値となります。

次の例は、‘改行する’ OttavaBracket オブジェクトを、staff-padding プロパティにより移動します。プロパティは元々 number を取るため、offsetsnumber のリストを取り、改行によって分けられる 2 つの部分に対応します。1 行目のブラケットは、staff-padding のデフォルト値に 0 が加算されることになるため実質変更されません。2 行目のブラケットはデフォルトの高さから 3 譜スペースだけ上に移動します。高さのデフォルト値 (絶対値) は 2 ですが、位置をオフセットするためにこの値を知る必要はありません。

{
  \offset staff-padding #'(0 3) Staff.OttavaBracket
  \ottava #1
  c'''2 c'''
  \break
  c'''2 c'''
}

[image of music]

次の例は、Slur オブジェクトの control-points プロパティをオフセットすることで \shape コマンドを模倣しています。ここでは、offsetsnumber-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')
}

[image of music]


LilyPond — 記譜法リファレンス v2.23.82 (開発版).