LilyPond 記譜法リファレンス: 4.4.2 譜とシステムを明示的に配置する

### 4.4.2 譜とシステムを明示的に配置する

上で説明した可変な垂直方向のスペースの仕組みを理解する方法の 1 つに、譜とシステムの間の垂直方向のパティングの大きさを制御する設定をコレクションすることがあります。

`NonMusicalPaperColumn.line-break-system-details` を用いて、垂直方向のスペースに別の方法でアプローチすることができます。可変な垂直方向のスペースの仕組みが垂直方向のパディングを指定するのに対して、`NonMusicalPaperColumn.line-break-system-details` はページ上の垂直方向の位置を指定することができます。

`NonMusicalPaperColumn.line-break-system-details` は 4 つの設定からなる連想配列を受け取ります:

- `X-offset`
- `Y-offset`
- `extra-offset`
- `alignment-distances`

以下の `NonMusicalPaperColumn` に対する上書きを含む、グラフィカル オブジェクトの上書きは、入力ファイルの中の 3 つの場所に配置することができます:

- 音符入力の途中に直接配置する
- `\context` ブロックの中に配置する
- `\with` ブロックの中に配置する

`NonMusicalPaperColumn` を上書きする場合、通常は `\context` ブロックや `\with` ブロックの中で`\override` コマンドを使用します。一方、音符入力の途中で `NonMusicalPaperColumn` を上書きする場合、特殊なコマンド `\overrideProperty` を使用します。ここで、特殊なコマンド `\overrideProperty` で `NonMusicalPaperColumn` を上書きする例をいくつか挙げます:

>     \overrideProperty NonMusicalPaperColumn.line-break-system-details
>       #'((X-offset . 20))

>     \overrideProperty NonMusicalPaperColumn.line-break-system-details
>       #'((Y-offset . 40))

>     \overrideProperty NonMusicalPaperColumn.line-break-system-details
>       #'((X-offset . 20)
>          (Y-offset . 40))

>     \overrideProperty NonMusicalPaperColumn.line-break-system-details
>       #'((alignment-distances . (15)))

>     \overrideProperty NonMusicalPaperColumn.line-break-system-details
>       #'((X-offset . 20)
>          (Y-offset . 40)
>          (alignment-distances . (15)))

これらの異なる設定がそれぞれどのように機能するのかを理解するために、まったく上書きを含まない例を見ることから始めます。

>     \header { tagline = ##f }
>     \paper { left-margin = 0\mm }
>     \book {
>       \score {
>         <<
>           \new Staff <<
>             \new Voice {
>               s1*5 \break
>               s1*5 \break
>               s1*5 \break
>             }
>             \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
>           >>
>           \new Staff {
>             \repeat unfold 15 { d'4 d' d' d' }
>           }
>         >>
>       }
>     }

この楽譜は改行/改ページ情報を専用のボイスに孤立させています。この改行/改ページ用のボイスを作成するテクニックは、例がより複雑になっていくときに、レイアウトと音楽入力を分離することを助けてくれます。改行/改ページ を参照してください。

明示的な `\breaks` を使うことで、音楽を 1 行あたり 5 小節に分割しています。垂直方向のスペースは LilyPond のデフォルトですが、各システムの垂直方向の開始位置が、`NonMusicalPaperColumn` グラフィカル オブジェクトの `line-break-system-details` 属性の中にある `Y-offset` により明示的にセットされています。

>     \header { tagline = ##f }
>     \paper { left-margin = 0\mm }
>     \book {
>       \score {
>         <<
>           \new Staff <<
>             \new Voice {
>               \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
>                 #'((Y-offset . 0))
>               s1*5 \break
>               \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
>                 #'((Y-offset . 40))
>               s1*5 \break
>               \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
>                 #'((Y-offset . 60))
>               s1*5 \break
>             }
>             \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
>           >>
>           \new Staff {
>             \repeat unfold 15 { d'4 d' d' d' }
>           }
>         >>
>       }
>     }

`line-break-system-details` は潜在的に多くの値を持つ連想リストをとりますが、ここでは値を 1 つだけしかセットしていないということに注意してください。また、ここでは `Y-offset` プロパティは、各システムがページに描画される垂直方向の位置を決定しているということにも注意してください。

`Y-offset` や `X-offset` を用いて絶対位置を指定することができる一方、`line-break-system-details` の `extra-offset` プロパティを用いて、相対位置を指定することもできます。この時、位置はデフォルトあるいは `X-offset` と `Y-offset` によって絶対的に指定された位置からの相対的なものになります。`extra-offset` は、X 軸、Y 軸のオフセットからなる `ペア` を受け入れます。

>     \header { tagline = ##f }
>     \paper { left-margin = 0\mm }
>     \book {
>       \score {
>         <<
>           \new Staff <<
>             \new Voice {
>               s1*5 \break
>               \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
>                 #'((extra-offset . (0 . 10)))
>               s1*5 \break
>               \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
>                 #'((extra-offset . (0 . 10)))
>               s1*5 \break
>             }
>             \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
>           >>
>           \new Staff {
>             \repeat unfold 15 { d'4 d' d' d' }
>           }
>         >>
>       }
>     }

これまでに各システムの垂直方向の開始位置を明示的に設定しましたが、各システム内部の各譜の垂直方向の開始位置を手動で設定することも可能です。`line-break-system-details` のサブプロパティ `alignment-offsets` を用います。

>     \header { tagline = ##f }
>     \paper { left-margin = 0\mm }
>     \book {
>       \score {
>         <<
>           \new Staff <<
>             \new Voice {
>               \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
>                 #'((Y-offset . 20)
>                    (alignment-distances . (10)))
>               s1*5 \break
>               \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
>                 #'((Y-offset . 60)
>                    (alignment-distances . (15)))
>               s1*5 \break
>               \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
>               #'((Y-offset . 85)
>                  (alignment-distances . (20)))
>               s1*5 \break
>             }
>             \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
>           >>
>           \new Staff {
>             \repeat unfold 15 { d'4 d' d' d' }
>           }
>         >>
>       }
>     }

ここでは `NonMusicalPaperColumn` グラフィカル オブジェクトの`line-break-system-details` 属性に 2 つの値を代入しているということに注意してください。`line-break-system-details` 属性の連想配列はもっと多くのスペース パラメータ (例えば、`Y-offset` ペアに相当する `X-offset` ペア) を受け付けますが、システムと譜の垂直方向の開始地点を制御するのに必要な設定は、`Y-offset` ペアと `alignment-offsets` ペアだけです。 最後に、`alignment-offsets` は譜の垂直方向の位置を指定するのであり、譜グループの位置を指定するわけではないということに注意してください。

>     \header { tagline = ##f }
>     \paper { left-margin = 0\mm }
>     \book {
>       \score {
>         <<
>           \new Staff <<
>             \new Voice {
>               \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
>                 #'((Y-offset . 0)
>                    (alignment-distances . (30 10)))
>               s1*5 \break
>               \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
>                 #'((Y-offset . 60)
>                    (alignment-distances . (10 10)))
>               s1*5 \break
>               \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details
>                 #'((Y-offset . 100)
>                    (alignment-distances . (10 30)))
>               s1*5 \break
>             }
>             \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
>           >>
>           \new StaffGroup <<
>             \new Staff { \repeat unfold 15 { d'4 d' d' d' } }
>             \new Staff { \repeat unfold 15 { e'4 e' e' e' } }
>           >>
>         >>
>       }
>     }

考慮すべき点がいくつかあります:

- `alignment-offsets` を使用する場合、歌詞と他の譜ではない行は譜としてカウントされません。
- `X-offset`, `Y-offset`, `extra-offset`, `alignment-offsets` に渡される数の単位は、譜線間隔の倍数と解釈されます。正の値は譜と歌詞を下または右に移動させ、負の値は譜と歌詞を上または左に移動させます。
- ここで扱った `NonMusicalPaperColumn.line-break-system-details` 設定は譜とシステムを任意の場所に配置することを可能にするため、紙面領域やマージン領域を犯したり、他の譜やシステムの上に譜刻する可能性さえあります。これらの設定に適切な値を渡すことで、そのようなことは避けられます。

#### 参照

コード断片集: Spacing

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

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