GNU LilyPond 学習マニュアル: 3.1.1 LilyPond ファイル構造の紹介

### 3.1.1 LilyPond ファイル構造の紹介

LilyPond 入力ファイルの基本例は以下のようなものです:

>     \version "2.22.2"

>     \header { }

>     \score {
>        … 複合音楽表記 …                   % すべての音楽がここに入ります！
>       \layout { }
>       \midi { }
>     }

基本パターンは本当にさまざまです。しかしながら、この例はスタート地点として役に立ちます。

これまで、あなたが見てきた例では `\score {}` コマンドを使用していませんでした。その理由は、あなたが LilyPond に与えたのが簡単な入力であった場合、LilyPond が自動的に追加のコマンドを付け加えるからです。LilyPond は以下のような入力:

>     \relative {
>       c''4 a d c
>     }

を以下を簡略表記したものとして扱います:

>     \book {
>       \score {
>         \new Staff {
>           \new Voice {
>             \relative {
>               c''4 a b c
>             }
>           }
>         }
>         \layout { }
>       }
>     }

言い換えると、入力が保持しているのが単一の音楽表記である場合、LilyPond はまるでその音楽表記が上で示されたコマンドで包まれているかのように解釈します。

一言警告！ LilyPond ドキュメントの中にある多くの例では、 `\new Staff` と `\new Voice` コマンドは暗黙的に作成されるために省略されています。簡単な例ではそれでうまくいきますが、より複雑な例の場合 – 特に追加のコマンドが使用される場合 – コンテキストの暗黙的な作成は予想外の結果となる可能性があります。多分、予期しない余分な譜が作成されるでしょう。コンテキストを明示的に作成する方法は コンテキストとエングラーバ で説明されています。

Note: 数行以上の音楽を入力する場合、常に譜とボイスを明示的に作成したほうが賢明です。

今度は最初の例に戻って、`\score` コマンドについて検証します。他のことはデフォルトのままにしておきます。

`\score` ブロックは常にただ 1 つの音楽表記を保持していなければなりません。音楽表記は単一の音符である場合もありますし、以下のような巨大な複合表記である場合もあるということを覚えておいてください:

>     {
>       \new StaffGroup <<
>          … ワーグナーのオペラの楽譜全体がここに入ります …
>       >>
>     }

すべては `{ … }` の内部にあるため、それは 1 つの音楽表記であるとカウントされます。

以前見てきたように、`\score` ブロックは他のものを含む可能性もあります。例えば以下のように:

>     \score {
>       { c'4 a b c' }
>       \header { }
>       \layout { }
>       \midi { }
>     }

これら 3 つのコマンド – `\header`, `\layout`, `\midi` – は特別なものであるということに注意してください: バックスラッシュ (`\`) で始まる他の多くのコマンドとは異なり、これらは音楽表記 ではなく、何らかの音楽表記の一部でもありません。そのため、これらは `\score` ブロックの中に置くこともできますし、外部に置くこともできます。実際、これらのコマンドは一般的に `\score` ブロックの外側に置かれます – 例えば、このセクションの最初の例のように `\header` はしばしば `\score` コマンドの上に置かれます。

以前は見なかった他の 2 つのコマンドは `\layout { }` と `\midi { }` です。それらが上記のように記述された場合、LilyPond はそれぞれ譜刻された楽譜と MIDI 出力を作り出します。それらは記譜法リファレンスの Score layout と Creating MIDI output で完全に記述されています。

あなたは複数の `\score` ブロックを記述するかもしれません。それらはそれぞれ別々の楽譜として扱われますが、それらは結合されて単一の出力ファイルに収められます。`\book` コマンドは必要ありません – このコマンドは暗黙的に 1 つ作成されます。しかしながら、あなたが 1 つの `.ly` ファイルから別々に分かれた出力ファイルを作成しようとするのなら、それぞれのセクションを異なる出力ファイルに分けるために `\book` コマンドが使用されます: 各 `\book` ブロックは別々の出力ファイルを作り出します。

要約:

各 `\book` ブロックは別々の出力ファイル (つまり PDF ファイル) を作成します。あなたが明示的に `\book` コマンドを記述しなかった場合、LilyPond は暗黙的に入力コードを `\book` ブロックで包み込みます。

各 `\score` ブロックは `\book` ブロック内部で別々の音楽表記のチャンク (塊) となります。

各 `\layout` ブロックはそのブロックを含んでいる `\score` ブロックや `\book` ブロックに影響を与えます – つまり、ある `\score` ブロックの内部にある `\layout` ブロックはその `\score` ブロックにだけ影響を与え、`\score` ブロックの外部にある (それゆえ、明示的あるいは暗黙的に `\book` ブロックの中にある) `\layout` ブロックはその `\book` ブロックの中にあるすべての `\score` に影響を与えます。

詳細は、 Multiple scores in a book を参照してください。

もう一つの重要な簡略表記は変数を定義することです。すべてのテンプレートがこれを使っています:

>     melody = \relative {
>       c'4 a b c
>     }

>     \score {
>       \melody
>     }

LilyPond がこのファイルを見ると、`melody` の値 (イコール記号の後にあるすべて) を記憶し、`\melody` と記述された箇所すべてにその値を挿入します。変数の名前について特別なことは何もありません – 変数名は `melody`, `global`, `keyTime`, `pianorighthand` などとなります。変数名はアルファベットだけで構成されていて、LilyPond コマンド名と異なっている限りは、ほぼどんな名前でも使用できるということを覚えておいてください。詳細は、変数と関数を用いて入力の手間を省く を参照してください。変数名の厳密な制限については、 File structure で詳述されています。

#### 参照

入力フォーマットの完全な定義は、 File structure を参照してください。

#### LilyPond — 学習マニュアル v2.22.2 (安定版).