LilyPond 記譜法リファレンス: 5.5.1 オブジェクトを揃える

### 5.5.1 オブジェクトを揃える

`self-alignment-interface` と/あるいは `side-position-interface` をサポートするグラフィカル オブジェクトは、さまざまな形式で配置済みのオブジェクトに揃えることができます。そのようなオブジェクトのリストは、 self-alignment-interface と side-position-interface を参照してください。

すべてのグラフィカル オブジェクトは参照ポイント、水平方向の広がり、それに垂直方向の広がりを持ちます。水平方向の広がりは、参照ポイントから左端と右端までの距離を意味する数値のペアであり、左端は負値です。垂直方向の広がりは、参照ポイントから下端と上端までの距離を意味する数値のペアであり、下端は負値です。

あるオブジェクトの譜面上の位置は、`X-offset` プロパティと `Y-offset` プロパティの値によって与えられます。`X-offset` の値は、親オブジェクトの参照ポイントの X 座標からの距離を意味します。`Y-offset` の値は、譜の中央線からの距離を意味します。`X-offset` と `Y-offset` の値は直接設定されることもありますし、いくつかの形式で親オブジェクトと揃えるためにプロシージャによって算出されることもあります。

Note: 多くのオブジェクトは特殊な配置規則を持っています。そのため、そのオブジェクトが `self-alignment-interface` をサポートしていたとしても、`X-offset` あるいは `Y-offset` の設定は無視されたり、変更されることがあります。

例えば、臨時記号は `Y-offset` を設定することにより垂直方向の位置を変更することができますが、`X-offset` は効果を持ちません。

リハーサル記号は、小節線、音部記号、拍子記号それに調号などの改行可能なオブジェクトに揃えることができます。リハーサル記号をそのようなオブジェクトに合わせて配置するために、`break-aligned-interface` の中に特別なプロパティがあります。

#### 参照

記譜法リファレンス: `break-alignable-interface` を使用する,

拡張: Callback functions

#### `X-offset` と `Y-offset` を直接設定する

多くのオブジェクトの `X-offset` プロパティと `Y-offset` プロパティに数値を与えることができます。以下の例は、3 つの音符を示していて、1 つはデフォルト配置の運指記号を持ち、他の 2 つの運指記号は `X-offset` と `Y-offset` が変更されています。

>     a'-3
>     a'
>     -\tweak X-offset #0
>     -\tweak Y-offset #0
>     -3
>     a'
>     -\tweak X-offset #-1
>     -\tweak Y-offset #1
>     -3

#### `side-position-interface` を使用する

`side-position-interface` をサポートするオブジェクトは、その親オブジェクトの隣に配置することができ、それにより、それら 2 つのオブジェクトの指定された端をくっつけることができます。オブジェクトを親オブジェクトの上、下、右、あるいは左に配置することができます。親オブジェクトを指定することはできません: 親オブジェクトは入力ストリームの中での要素の順序によって決定されます。たいていのオブジェクトの親オブジェクトは、そのオブジェクトに関連する符頭となります。

`side-axis` プロパティと `direction` プロパティの値は、以下のように、オブジェクトが配置される場所を決定します:

`side-axis` | `direction` |
--- | --- | ---
property | property | Placement
`0` | `-1` | 左
`0` | `1` | 右
`1` | `-1` | 下
`1` | `1` | 上

`side-axis` が `0` である場合、`X-offset` にはプロシージャ `ly:side-position-interface::x-aligned-side` をセットする必要があります。このプロシージャは、`direction` の値に基づいて親オブジェクトの左あるいは右にオブジェクトを配置するための適切な値を `X-offset` に返します。

`side-axis` が `1` である場合、`Y-offset` にはプロシージャ `ly:side-position-interface::y-aligned-side` をセットする必要があります。このプロシージャは、`direction` の値に基づいて親オブジェクトの上あるいは下にオブジェクトを配置するための適切な値を `Y-offset` に返します。

#### `self-alignment-interface` を使用する

#### オブジェクトを自動的に水平方向に揃える

`self-alignment-interface` をサポートするオブジェクトの水平方向の揃えは、`self-alignment-X` プロパティの値によって制御され、そのオブジェクトの `X-offset` プロパティには`ly:self-alignment-interface::x-aligned-on-self` がセットされています。 `self-alignment-X` には任意の実数値を与えることができますが、 与える値は、そのオブジェクトの X 方向の広がりの半分を単位とします。負値はオブジェクトを右に移動させ、正値はオブジェクトを左に移動させます。値が `0` であればそのオブジェクトは親オブジェクトの参照ポイントに中央揃えされ、値が `-1` であればそのオブジェクトの左端が親オブジェクトの参照ポイントに揃えられ、値が `1` であればそのオブジェクトの右端が親オブジェクトの参照ポイントに揃えられます。記号 `LEFT`, `CENTER`, それに `RIGHT` はそれぞれ `-1`, `0`, それに `1` に対応します。

通常、`\override` コマンドを用いて `self-alignment-X` の値を変更しますが、`\tweak` コマンドを用いることで単一の音符に付けられている複数の注釈を個別に揃えることができます:

>     a'
>     -\tweak self-alignment-X #-1
>     ^"left-aligned"
>     -\tweak self-alignment-X #0
>     ^"center-aligned"
>     -\tweak self-alignment-X #RIGHT
>     ^"right-aligned"
>     -\tweak self-alignment-X #-2.5
>     ^"aligned further to the right"

#### オブジェクトを自動的に垂直方向に揃える

オブジェクトの `Y-offset` プロパティに `ly:self-alignment-interface::y-aligned-on-self` がセットされていれば、水平方向の揃えと同じように、垂直方向に揃えることができます。しかしながら、垂直方向の揃えには他のメカニズムも関与します: `Y-offset` の値は、垂直方向の揃えに関与する変数の 1 つに過ぎません。このことにより、いくつかのオブジェクトの `Y-offset` 値の調整はややこしくなります。単位はそのオブジェクトの垂直方向の広がりの半分です。通常これは非常に小さいため、非常に大きな数値が必要になる可能性があります。値が `-1` であればそのオブジェクトの下端が親オブジェクトの参照ポイントに揃えられ、値が `0` であればそのオブジェクトの中央が親オブジェクトの参照ポイントに揃えられ、値が `1` であればそのオブジェクトの上端が親オブジェクトの参照ポイントに揃えられます。記号 `DOWN`, `CENTER`, それに `UP` はそれぞれ `-1`, `0`, それに `1` に対応します。

#### オブジェクトを自動的に両方向に揃える

`X-offset` と `Y-offset` の両方の設定を行うことで、オブジェクトの水平方向と垂直方向の揃えを同時に行うことができます。

以下の例は、運指記号を符頭に近づけるための調整方法を示しています。

>     a'
>     -\tweak self-alignment-X #0.5  % 左方向に移動させます
>     -\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
>     -\tweak self-alignment-Y #-1  % 上方向に移動させます
>     -3  % 3 の指

#### `break-alignable-interface` を使用する

リハーサル記号と小節番号を小節線ではなく、記譜オブジェクトに揃えることができます。対象となる記譜オブジェクトには、`ambitus`, `breathing-sign`, `clef`, `custos`, `staff-bar`, `left-edge`, `key-cancellation`, `key-signature`, それに `time-signature` があります。

それぞれの記号は、リハーサル記号が揃えられるデフォルトの参照点を持ち、その位置は種類ごとに異なります。

>     % リハーサル記号は音部記号の右端に揃えられます
>     \override Score.RehearsalMark.break-align-symbols = #'(clef)
>     \key a \major
>     \clef treble
>     \mark "↓"
>     e'1
>     % リハーサル記号は拍子記号の左端に揃えられます
>     \override Score.RehearsalMark.break-align-symbols = #'(time-signature)
>     \key a \major
>     \clef treble
>     \time 3/4
>     \mark "↓"
>     e'2.
>     % リハーサル記号はブレス記号の中央に揃えられます
>     \override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
>     \key a \major
>     \clef treble
>     \time 4/4
>     e'1
>     \breathe
>     \mark "↓"

揃えの対象となり得るオブジェクトのリストを指定することができます。揃えを行う時点で対象リストの中にあるオブジェクトのいくつかが不可視である – `break-visibility` の設定や、調号と音部に対する明示的な可視性の設定により – 場合、リハーサル記号あるいは小節番号はリストの中にある最初の可視のオブジェクトに揃えられます。リストの中にあるオブジェクトがすべて不可視である場合、小節線に揃えられます。小節線が不可視である場合、小節線があるはずの場所に揃えられます。

>     % リハーサル記号は調号の右端に揃えられます
>     \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
>     \key a \major
>     \clef treble
>     \mark "↓"
>     e'1
>     % リハーサル記号は音部記号の右端に揃えられます
>     \set Staff.explicitKeySignatureVisibility = #all-invisible
>     \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
>     \key a \major
>     \clef bass
>     \mark "↓"
>     gis,1
>     % リハーサル記号は小節線の中央に揃えられます
>     \set Staff.explicitKeySignatureVisibility = #all-invisible
>     \set Staff.explicitClefVisibility = #all-invisible
>     \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
>     \key a \major
>     \clef treble
>     \mark "↓"
>     e'1

以下の例で示すように、記譜オブジェクトに対するリハーサル記号の揃えを変更することができます。複数の譜を持つ楽譜では、この設定はすべての譜に適用されます。

>     % リハーサル記号は調号の右端に揃えられます
>     \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
>     \key a \major
>     \clef treble
>     \time 4/4
>     \mark "↓"
>     e'1
>     % リハーサル記号は調号の中央に揃えられます
>     \once \override Score.KeySignature.break-align-anchor-alignment = #CENTER
>     \mark "↓"
>     \key a \major
>     e'1
>     % リハーサル記号は調号の左端に揃えられます
>     \once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
>     \key a \major
>     \mark "↓"
>     e'1

また、リハーサル記号を左端に揃えて、さらに任意の量だけ右あるいは左にずらすことができます。単位は譜スペースです:

>     % リハーサル記号は調号の左端に揃えられて
>     % さらに 3.5 譜スペース右にずらされます
>     \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
>     \once \override Score.KeySignature.break-align-anchor = #3.5
>     \key a \major
>     \mark "↓"
>     e'1
>     % リハーサル記号は調号の左端に揃えられて
>     % さらに 2 譜スペース左にずらされます
>     \once \override Score.KeySignature.break-align-anchor = #-2
>     \key a \major
>     \mark "↓"
>     e'1

#### LilyPond — 記譜法リファレンス v2.22.2 (安定版).

- 2. 専門的な記譜法
- 3. 入出力全般
- 4. スペースの問題
- 5. デフォルトを変更する
- A. 付表
- B. カンニング ペーパー
- C. GNU Free Documentation License
- D. LilyPond コマンド インデックス
- E. LilyPond インデックス