4.2.1 \layout ブロック

\paper ブロックがドキュメント全体のページ フォーマットに関係する設定を保持する一方で、\layout ブロックは楽譜特有のレイアウトに関する設定を保持します。楽譜レイアウト オプションを全体に設定するには、設定を最上位の \layout ブロックに配置します。個々の楽譜に対してレイアウト オプションを設定するには、音楽表記の後の \score ブロック内の \layout ブロックの中に設定を配置します。\layout ブロックに配置される設定には以下のものがあります:

layout-set-staff-size 関数は次のセクション 譜サイズを設定する で説明します。コンテキスト変更は コンテキストのプラグインを変更するコンテキストのデフォルト設定を変更する で説明します。

\paper ブロック内のデフォルト値が用いられ、\layout ブロック内で使用できる \paper には以下のものがあります:

ここで、\layout ブロックの例を挙げます:

\layout {
  indent = 2\cm
  \context {
    \StaffGroup
    \override StaffGrouper.staff-staff-spacing.basic-distance = #8
  }
  \context {
    \Voice
    \override TextScript.padding = #1
    \override Glissando.thickness = #3
  }
}

最上位の表記として複数の \layout ブロックを配置することができます。これは、例えば、異なる設定が別個のファイルに保存されていて、任意の方法でインクルードする場合に有用です。内部的には、\layout ブロックが評価される時、カレントの \layout 構成のコピーが作成され、評価する \layout ブロックの内部で定義されている変更が適用され、その結果が新しいカレントの構成として保存されます。ユーザからは \layout ブロックが組み合わされたように見えますが、衝突が発生した場合 (複数のブロックで同じプロパティが変更された場合)、最後の定義が有効になります。

例えば、下記のブロック:

\layout {
  \context {
    \Voice
    \override TextScript.color = #magenta
    \override Glissando.thickness = #1.5
  }
}

これが一つ前の例の後に配置された場合、TextScript'padding 設定と 'color 設定は組み合わせれますが、Glissando'thickness 設定は前の設定と置き換わります (前の設定を上書きします)。

\layout ブロックを後で再利用するために変数に代入することができます。しかしながら、この方法は \layout ブロックを直接記述した場合とは少しですが重大な違いがあります。

変数を以下のように定義した場合:

layoutVariable = \layout {
  \context {
    \Voice
    \override NoteHead.font-size = #4
  }
}

カレントの \layout 構成に NoteHead.font-size 設定を追加しますが、この組み合わせは新しいカレントの構成として保存され ません。‘カレントの構成’ は変数が定義された時に評価されるのであり、変数が使われる時に評価されるのではありません。そのため、変数の効果は変数がソースに配置された位置によって異なります。

変数を他の \layout ブロックの中で使うことができます。例えば、以下のように:

\layout {
  \layoutVariable
  \context {
    \Voice
    \override NoteHead.color = #red
  }
}

上記のような変数を含む \layout ブロックは、カレントの構成をコピーせず、設定を追加するためのベースとなる構成として \layoutVariable の内容を用います。このことは、変数が定義されてから使われるまでの間に定義された変更は失われるということを意味します。

layoutVariable が使われる (あるいは \include される) 直前に定義されている場合、layoutVariable の内容はカレントの構成に変数内部で定義した設定を加えたものになります。そのため、上で示した \layoutVariable の使用例の場合、最終的な \layout ブロックの構成は以下のようになります:

  TextScript.padding = #1
  TextScript.color = #magenta
  Glissando.thickness = #1.5
  NoteHead.font-size = #4
  NoteHead.color = #red

これに indentStaffGrouper の設定がプラスしたものです。

しかしながら、変数が最初の \layout ブロックより前に定義されていた場合、カレントの構成は以下だけになってしまいます:

  NoteHead.font-size= #4 % (変数定義で記述されたものです)
  NoteHead.color = #red % (変数が使用された後に追加されたものです)

注意深く計画を立てれば、\layout 変数はソースのレイアウト設計を構築して、\layout 構成を既知の状態にリセットするための有用なツールになります。

参照

記譜法リファレンス: コンテキストのデフォルト設定を変更する

コード断片集: Spacing


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