Guida alla Notazione di LilyPond: 4.2.1 Il blocco \layout

### 4.2.1 Il blocco `\layout`

Mentre il blocco `\paper` contiene le impostazioni relative alla formattazione della pagina per l’intero documento, il blocco `\layout` contiene impostazioni di formattazione specifica di un brano. Per impostare globalmente le opzioni di formattazione del brano, inserirle in un blocco `\layout` del livello superiore. Per impostare le impostazioni di formattazione per un singolo brano, inserirle in un blocco `\layout` racchiuso in un blocco `\score`, dopo la musica. Le impostazioni che possono apparire in un blocco `\layout` includono:

- la funzione Scheme `layout-set-staff-size`,
- le modifiche di contesto nei blocchi `\context` e
- le variabili `\paper` che agiscono sulla formattazione del brano.

La funzione `layout-set-staff-size` è spiegata nella prossima sezione, Impostare la dimensione del rigo. Le modifiche di contesto sono trattate in un capitolo separato; vedi Modifica dei componenti aggiuntivi di un contesto e Modifica delle impostazioni predefinite di un contesto.

Le variabili `\paper` che possono apparire in un blocco `\layout`, con valori predefiniti presi dal blocco `\paper`, sono:

- `line-width`, `ragged-right` e `ragged-last` (vedi Variabili `\paper` per larghezze e margini)
- `indent` e `short-indent` (vedi Variabili `\paper` per spostamenti e indentazioni)
- `system-count` (vedi Variabili di `\paper` per l’interruzione di linea)

Ecco un esempio di blocco `\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
>       }
>     }

Si possono inserire molteplici blocchi `\layout` come espressioni di livello superiore. Ciò può essere utile, per esempio, se impostazioni diverse sono salvate in file separati e incluse facoltativamente. Internamente, quando un blocco `\layout` viene elaborato, viene fatta una copia della configurazione del blocco `\layout` corrente, poi qualsiasi modifica apportata nel blocco viene applicata e il risultato viene salvato come la nuova configurazione corrente. Dalla prospettiva dell’utente, i blocchi `\layout` sono combinati, ma in situazioni di conflitto (ovvero quando viene modificata la stessa proprietà in blocchi diversi) hanno precedenza le definizioni più recenti.

Per esempio, se questo blocco

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

viene posto dopo quello dell’esempio precedente, le sovrascritture di `'padding` e `'color` per `TextScript` sono combinate, mentre quella più recente di `'thickness` per `Glissando` sostituisce (o nasconde) quella precedente.

I blocchi `\layout` possono essere assegnati a delle variabili per poterli riusare successivamente, ma il modo in cui ciò funziona è leggermente ma significativamente diverso rispetto a scriverle davvero.

Se una variabile è definita in questo modo,

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

manterrà la configurazione attuale di `\layout` con l’aggiunta della sovrascrittura `NoteHead.font-size`, ma questa combinazione non è salvata come la nuova configurazione corrente. Attenzione al fatto che la “configurazione corrente” viene letta quando la variabile è definita e non quando viene usata, dunque il contenuto della variabile dipende dalla sua posizione nel file di input.

La variabile può quindi essere usata all’interno di un altro blocco `\layout`, per esempio:

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

Un blocco `\layout` che contiene una variabile, come nell’esempio precedente, non copia la configurazione corrente bensì usa il contenuto di `\layoutVariable` come configurazione di base per altre aggiunte. Ciò significa che qualsiasi modifica definita tra la definizione della variabile e il momento in cui essa viene usata è perduta.

Se `layoutVariable` è definita (o inclusa con `\include`) subito prima di essere usata, il suo contenuto comprende soltanto la configurazione corrente più le sovrascritture definite al suo interno. Quindi nell’esempio precedente che illustra l’uso di `\layoutVariable` il blocco `\layout` finale conterrebbe:

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

più le sovrascritture `indent` e `StaffGrouper`.

Ma se la variabile fosse già stata definita prima del primo blocco `\layout`, la configurazione corrente conterrebbe soltanto

>       NoteHead.font-size = #4 % (scritta nella definizione della variabile)
>       NoteHead.color = #red % (aggiunta dopo l'uso della variabile)

Se ben organizzate, le variabili `\layout` possono essere un valido strumento per strutturare le formattazioni dei sorgenti, e anche per ripristinare la configurazione di `\layout` a uno stato conosciuto.

#### Vedi anche

Guida alla notazione: Modifica delle impostazioni predefinite di un contesto.

Frammenti: Spacing.

#### LilyPond — Guida alla Notazione v2.24.4 (ramo stabile).