LilyPond 記譜法リファレンス: 4.4.1 システム内部の可変な垂直方向のスペース

### 4.4.1 システム内部の可変な垂直方向のスペース

システム内部の可変な垂直方向のスペースを制御する 3 つの仕組みがあり、以下のカテゴリに分けられます:

- グループ化されていない譜,
- グループ化されている譜 (`ChoirStaff` 等のような譜グループ内の譜)
- 譜ではない行 (`Lyrics`, `ChordNames` 等)

システムの高さは 2 つのステップで決定されます。最初に、すべての譜が利用可能なスペースの量に応じた間隔で配置されます。次に、譜ではない行が譜の間に配置されます。

このセクションでは、システム内部の譜と譜ではない行の垂直方向のスペースを制御する仕組みだけを説明しているということに注意してください。システム、score、マークアップ、それにマージン間の垂直方向のスペースは、`\paper` 変数によって制御されます – 可変な垂直方向の `\paper` スペース変数 で説明しています。

#### システム内部のスペース プロパティ

システム内部の垂直方向のスペースは、2 セットのグラフィカル オブジェクト プロパティによって制御されます。1 つ目は `VerticalAxisGroup` グラフィカル オブジェクト – これは、譜と譜ではない行によって作成されます – のプロパティ セットです。2 つ目は `StaffGrouper` グラフィカル オブジェクト – これは、明示的に呼び出された場合に、譜グループによって作成されます – のプロパティ セットです。これらのプロパティは、このセクションの終わりで説明します。

これらのプロパティの名前は (`staff-affinity` を除いて)、`item1-item2-spacing` という形式に従います – ここで、`item1` と `item2` は、スペースを入れられる要素です。`item2` は必ずしも `item1` の下にある要素ではないということに注意してください。例えば、`staff-affinity` が `UP` である場合、`nonstaff-relatedstaff-spacing` は譜ではない行から上向きにスペースをとります。

スペースは、2 つの要素の 参照ポイント 間の距離です。譜の参照ポイントは、その譜の `StaffSymbol` (すなわち、`line-count` が奇数の場合は中央の譜線で、`line-count` が偶数の場合は中央のスペースです) の垂直方向の中央です。譜ではない行の参照ポイントは、以下の表のようになります:

譜ではない行 | 参照ポイント
--- | ---
`ChordNames` | ベースライン
`NoteNames` | ベースライン
`Lyrics` | ベースライン
`Dynamics` | 垂直方向の中央
`FiguredBass` | 最も上のポイント
`FretBoards` | トップ ライン

以下の画像では、水平方向の線が参照ポイントの位置を示しています:

垂直方向のスペースのグラフィカル オブジェクト プロパティは (`staff-affinity` を除いて)、可変な垂直方向の `\paper` スペース変数 で説明した `\paper` スペース変数と同じ連想配列構造を使用します。 連想配列を変更する方法は、連想配列を変更する で説明します。グラフィカル オブジェクト プロパティの調節は、`\score` ブロックか `\layout` ブロックの内部で、`\override` を用いて行う必要があります。

以下の例は、連想配列を変更する 2 つの方法を示しています。最初の宣言は 1 つのキー値を個別に更新して、2 番目の宣言はプロパティ全体を再定義しています:

>     \new Staff \with {
>       \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
>     } { … }

>     \new Staff \with {
>       \override VerticalAxisGroup.default-staff-staff-spacing =
>         #'((basic-distance . 10)
>            (minimum-distance . 9)
>            (padding . 1)
>            (stretchability . 10))
>     } { … }

スペース設定をグローバルに変更するには、そのスペース設定を `\layout` ブロックの中に配置します:

>     \layout {
>       \context {
>         \Staff
>         \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
>       }
>     }

垂直方向スペースのグラフィカル オブジェクト プロパティの標準設定は VerticalAxisGroup と StaffGrouper でリスト アップしています。特定のタイプの譜ではない行のデフォルト設定は、 Contexts の中にある関連するコンテキストの説明でリスト アップしています。

#### `VerticalAxisGroup` グラフィカル オブジェクトのプロパティ

通常、`VerticalAxisGroup` プロパティは、`Staff` レベル (あるいはそれと同等のレベル) で、`\override` を用いて調節します。

`staff-staff-spacing`

  カレントの譜とそのすぐ下の譜の間隔 – その間に 1 つ以上の譜ではない行 (`Lyrics` 等) が配置されている場合であっても – を決定するために使用します。システムの最下段の譜には適用されません。

  `VerticalAxisGroup` の `staff-staff-spacing` は、譜がグループの一部である場合は `StaffGrouper` の `staff-staff-spacing` プロパティを適用し、グループではない譜の場合はその譜の `default-staff-staff-spacing` を適用する Scheme 関数です。これにより、グループ化されている譜に異なる間隔を入れることが可能です。グループ化されていることとは無関係に同一の間隔を入れるには、上で示したプロパティ再定義を用いて、この関数を可変スペースの連想配列で置き換えます。

`default-staff-staff-spacing`

  グループ化されていない譜で使用される `staff-staff-spacing` を定義している可変スペースの連想配列です。`staff-staff-spacing` は `\override` を用いて上書きされることがあります。

`staff-affinity`

  カレントの譜ではない行にスペースを入れるために使用する譜の方向です。選択肢は `UP`, `DOWN`, それに `CENTER` です。`CENTER` の場合、衝突や他のスペース上の制約によって妨げられない限り、譜ではない行は上下にある近くの譜から等距離になるよう配置されます。隣接する譜ではない行の `staff-affinity` は、方向が下から上へと増加しないようにする必要があります。例えば、`DOWN` に設定された譜ではない行のすぐ後に `UP` に設定された譜ではない行を置くべきではありません。システムの最上段にある譜ではない行は `DOWN` であるべきで、システムの最下段にある譜ではない行は `UP` であるべきです。譜ではない行の `staff-affinity` を `#f` に設定すると、その行は譜として扱われます。譜に対して `UP`, `CENTER`, あるいは `DOWN` の `staff-affinity` を設定すると、その譜は譜ではない行として扱われます。

`nonstaff-relatedstaff-spacing`

  カレントの譜ではない行と `staff-affinity` の方向にある最も近い譜との間隔です – 2 つの間に譜ではない行が無く、`staff-affinity` が `UP` と `DOWN` のどちらかである場合です。`staff-affinity` が `CENTER` である場合、`nonstaff-relatedstaff-spacing` は最も近くにある 上下両サイド の譜の間隔になります – たとえ、カレントの譜ではない行と上下どちらかの譜の間に、他の譜ではない行があったとしてもです。このことは、譜ではない行の配置は、上下にある譜と譜ではない行の両方に依存するということを意味します。このスペースの `stretchability` に小さな値を設定すると、そのとおりのスペースになりやすくなります。このスペースの `stretchability` に大きな値を設定すると、そのとおりのスペースになりにくくなります。

`nonstaff-nonstaff-spacing`

  カレントの譜ではない行と `staff-affinity` の方向にある次の譜ではない行の間隔です – 2 つの間に譜が無く、`staff-affinity` が `UP` と `DOWN` のどちらかである場合です。

`nonstaff-unrelatedstaff-spacing`

  カレントの譜ではない行と `staff-affinity` とは反対方向にある譜の間隔です – 2 つの間に他の譜ではない行が無く、`staff-affinity` が `UP` と `DOWN` のどちらかである場合です。これは、例えば、`Lyrics` 行と `Lyrics` が属していない譜との間のパディングを最小にする必要がある場合に使用される可能性があります。

#### `StaffGrouper` グラフィカル オブジェクトのプロパティ

通常、`StaffGrouper` プロパティは、`StaffGroup` レベル (あるいはそれと同等のレベル) で、`\override` を用いて調節します。

`staff-staff-spacing`

  カレントの譜グループ内部にある隣接する譜の間隔です。個々の譜の `VerticalAxisGroup` グラフィカル オブジェクトの `staff-staff-spacing` プロパティは、譜毎のスペース設定で上書きされる可能性があります。

`staffgroup-staff-spacing`

  カレントの譜グループの最後の譜と、同じシステム内にあるすぐ下の譜の間隔です – 2 つの譜の間に 1 つ以上の譜ではない行 (`Lyrics` 等) が存在する場合であってもです。システムの最下段の譜には適用されません。個々の譜の `VerticalAxisGroup` グラフィカル オブジェクトの `staff-staff-spacing` プロパティは、譜毎のスペース設定で上書きされる可能性があります。

#### 参照

記譜法リファレンス: 可変な垂直方向の `\paper` スペース変数, 連想配列を変更する

インストールされているファイル: ‘`ly/engraver-init.ly`’, ‘`scm/define-grobs.scm`’

内部リファレンス: Contexts, VerticalAxisGroup, StaffGrouper

#### グループ化されていない譜のスペース

譜 (`Staff`, `DrumStaff`, `TabStaff` 等) は、1 つ以上のボイス コンテキストを保持することができ、他の譜を保持することはできないコンテキストです。

以下のプロパティは、グループ化されていない 譜のスペースに影響を与えます:

- `VerticalAxisGroup` プロパティ:
  - `default-staff-staff-spacing`
  - `staff-staff-spacing`

これらのグラフィカル オブジェクト プロパティは、それぞれ上で説明しています。システム内部のスペース プロパティ を参照してください。

譜グループの一部である譜には、他にもプロパティがあります。グループ化されている譜のスペース を参照してください。

以下の例は、`default-staff-staff-spacing` プロパティがどのようにグループ化されていない譜のスペースに影響を与えるかを示しています。`staff-staff-spacing` に同じ上書きを適用すると同じ効果を持ちますが、譜がグループ化されている場合にも適用されます。

>     \layout {
>       \context {
>         \Staff
>         \override VerticalAxisGroup.default-staff-staff-spacing =
>           #'((basic-distance . 8)
>              (minimum-distance . 7)
>              (padding . 1))
>       }
>     }

>     <<
>       % 非常に低い位置にある音符は 'basic-distance が提供するよりも
>       % 大きなスペースを必要とするため、この譜と次の譜の間隔は 'padding
>       % によって決定されます。
>       \new Staff { b,2 r | }

>       % ここでは、'basic-distance が十分なスペースを提供していて、
>       % ページ上にある他の要素のスペースを確保するためにスペースを
>       % ('minimum-distance の値に向かって) 縮める必要はありません。
>       % そのため、この譜と次の譜の間隔は 'basic-distance によって
>       % 決定されます。
>       \new Staff { \clef bass g2 r | }

>       % 'padding に負の値を設定することにより、譜を重ねることができます。
>       % 'basic-distance が取り得る最小の値は 0 です。
>       \new Staff \with {
>         \override VerticalAxisGroup.default-staff-staff-spacing =
>           #'((basic-distance . 3.5)
>              (padding . -10))
>       } { \clef bass g2 r | }
>       \new Staff { \clef bass g2 r | }
>     >>

#### 参照

インストールされているファイル: ‘`scm/define-grobs.scm`’

コード断片集: Spacing

内部リファレンス: VerticalAxisGroup

#### グループ化されている譜のスペース

オーケストラ譜や他の大きな楽譜では、譜を譜ループ化することが一般的です。通常、グループ間のスペースは、同じグループの譜の間のスペースよりも大きくなります。

譜グループ (`StaffGroup`, `ChoirStaff` 等) は、同時進行する 1 つ以上の譜を保持することができるコンテキストです。

以下のプロパティは、譜グループの中にある譜のスペースに影響を与えます:

- `VerticalAxisGroup` プロパティ:
  - `staff-staff-spacing`
- `StaffGrouper` プロパティ:
  - `staff-staff-spacing`
  - `staffgroup-staff-spacing`

これらのグラフィカル オブジェクト プロパティは、上で個々に説明しています。システム内部のスペース プロパティ を参照してください。

以下の例は、`StaffGrouper` グラフィカル オブジェクトのプロパティがどのようにグループ化された譜のスペースに影響を与えるかを示しています:

>     \layout {
>       \context {
>         \Score
>         \override StaffGrouper.staff-staff-spacing.padding = #0
>         \override StaffGrouper.staff-staff-spacing.basic-distance = #1
>       }
>     }

>     <<
>       \new PianoStaff \with {
>         \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #20
>       } <<
>         \new Staff { c'1 }
>         \new Staff { c'1 }
>       >>

>       \new StaffGroup <<
>         \new Staff { c'1 }
>         \new Staff { c'1 }
>       >>
>     >>

#### 参照

インストールされているファイル: ‘`scm/define-grobs.scm`’

コード断片集: Spacing

内部リファレンス: VerticalAxisGroup, StaffGrouper

#### 譜ではない行のスペース

譜ではない行 (`Lyrics`, `ChordNames` 等) は、それが保持するレイアウト オブジェクトが譜のように譜刻される (すなわち、システム内部の水平線上での譜刻) コンテキストです。具体的に言うと、譜ではない行は Axis_group_engraver を含む譜ではないコンテキストです。

以下のプロパティが、譜ではない行のスペースに影響を与えいます:

- `VerticalAxisGroup` プロパティ:
  - `staff-affinity`
  - `nonstaff-relatedstaff-spacing`
  - `nonstaff-nonstaff-spacing`
  - `nonstaff-unrelatedstaff-spacing`

これらのグラフィカル オブジェクト プロパティは、上で個々に説明しています。システム内部のスペース プロパティ を参照してください。

以下の例は、`nonstaff-nonstaff-spacing` プロパティがどのように隣接する譜ではない行のスペースに影響を与えるかを示しています。ここでは、`stretchability` キーに非常に大きな値を設定することにより、通常よりも歌詞が広がりやすくしています:

>     \layout {
>       \context {
>         \Lyrics
>         \override VerticalAxisGroup.nonstaff-nonstaff-spacing.stretchability = #1000
>       }
>     }

>     \new StaffGroup
>     <<
>       \new Staff \with {
>         \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 30))
>       } { c'1 }
>       \new Lyrics \with {
>         \override VerticalAxisGroup.staff-affinity = #UP
>       } \lyricmode { up }
>       \new Lyrics \with {
>         \override VerticalAxisGroup.staff-affinity = #CENTER
>       } \lyricmode { center }
>       \new Lyrics \with {
>         \override VerticalAxisGroup.staff-affinity = #DOWN
>       } \lyricmode { down }
>       \new Staff { c'1 }
>     >>

#### 参照

インストールされているファイル: ‘`ly/engraver-init.ly`’, ‘`scm/define-grobs.scm`’

コード断片集: Spacing

内部リファレンス: Contexts, VerticalAxisGroup

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

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