4.4.1 Spaziatura verticale flessibile all’interno dei sistemi

Tre meccanismi distinti regolano la spaziatura verticale flessibile all’interno dei sistemi, uno per ognuna delle seguenti categorie:

L’altezza di ogni sistema è determinata in due fasi. Prima vengono spaziati tutti i righi in base alla quantità di spazio disponibile. Poi le linee che non sono righi sono distribuite tra i righi.

Nota che i meccanismi di spaziatura trattati in questa sezione regolano soltanto la spaziatura verticale dei righi e delle linee (che non sono righi) all’interno di singoli sistemi. La spaziatura verticale tra sistemi, partiture, testi e margini separati è regolata dalle variabili \paper trattate in Variabili \paper della spaziatura verticale flessibile.


Proprietà della spaziatura dentro un sistema

I meccanismi di spaziatura verticale dentro un sistema sono regolati da due gruppi di proprietà dei grob. Il primo gruppo è associato al grob VerticalAxisGroup, creato da tutti i righi e tutte le linee che non sono righi. Il secondo gruppo è associato al grob StaffGrouper, che può essere creato da gruppi di righi, ma solo se richiamato esplicitamente. Queste proprietà sono descritte una per una alla fine di questa sezione.

Il nome di queste proprietà (con l’eccezione di staff-affinity) hanno il formato elemento1-elemento2-spacing, dove elemento1 e elemento2 sono gli elementi di cui determinare la distanza. Nota che elemento2 non è necessariamente sotto elemento1; per esempio, nonstaff-relatedstaff-spacing prenderà le misure verso l’alto a partire dalla linea che non è un rigo (nonstaff) se staff-affinity è impostato su UP.

Ogni distanza è calcolata tra i punti di riferimento dei due elementi. Il punto di riferimento di un rigo è il centro verticale del suo StaffSymbol (ovvero la linea centrale se line-count (il numero di linee) è dispari; lo spazio centrale se line-count è pari). I punti di riferimento per ciascuna linea che non è un rigo sono elencati nella seguente tabella:

Linea non-rigoPunto di riferimento
ChordNameslinea di base
NoteNameslinea di base
Lyricslinea di base
Dynamicsmetà altezza di ‘m’
FiguredBasspunto più alto
FretBoardslinea più alta

Nell’immagine seguente, le linee orizzontali indicano le posizioni di questi punti di riferimento:

[image of music]

Tutte le proprietà di spaziatura verticale del grob (eccetto staff-affinity) usano la stessa struttura della lista associativa usata dalle variabili di spaziatura di \paper trattate in Variabili \paper della spaziatura verticale flessibile. Metodi specifici per modificare queste liste sono spiegati in Modifica delle liste associative. Le proprietà dei grob devono essere modificate con un comando \override dentro un blocco \score o \layout e non in un blocco \paper.

L’esempio seguente illustra i due modi con cui si possono modificare queste liste associative (alist). La prima dichiarazione trasforma un elemento-valore singolarmente, mentre la seconda ridefinisce completamente la proprietà:

\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))
} { … }

Per cambiare le impostazioni di spaziatura globalmente, inserirle in un blocco \layout:

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

Le impostazioni predefinite delle proprietà di spaziatura verticale dei grob sono elencate in VerticalAxisGroup e StaffGrouper. Le modifiche predefinite con \override per tipologie specifiche di linee che non sono righi sono elencate nelle descrizioni del relativo contesto in Contexts.

Proprietà del grob VerticalAxisGroup

Le proprietà di VerticalAxisGroup sono solitamente modificate con un \override nel livello Staff (o equivalente).

staff-staff-spacing

Usata per determinare la distanza tra il rigo corrente e il rigo inferiore nello stesso sistema, anche se tra i due si trovano una o più linee che non sono righi (come Lyrics). Non è applicata all’ultimo rigo di un sistema.

Inizialmente, la proprietà staff-staff-spacing di un VerticalAxisGroup è una funzione Scheme che applica le proprietà di StaffGrouper se il rigo fa parte di un gruppo, o la proprietà default-staff-staff-spacing del rigo altrimenti. Questo permette ai righi di essere spaziati diversamente quando sono raggruppati. Per ottenere una spaziatura uniforme indipendentemente dal raggruppamento, questa funzione può essere sostituita da un alist di spaziatura flessibile, usando la forma di override che ridefinisce completamente la variabile, come mostrato prima.

default-staff-staff-spacing

Un alist di spaziatura flessibile che definisce la proprietà staff-staff-spacing usata per i righi isolati, a meno che staff-staff-spacing non sia stata impostata esplicitamente con un \override.

staff-affinity

La direzione del rigo da usare per spaziare la linea che non è un rigo. Le opzioni sono UP (su), DOWN (giù) e CENTER (centro). Se impostata su CENTER, la linea fuori dal rigo si troverà in un punto equidistante tra i due righi più vicini su qualunque lato, a meno che delle collisioni o altre costrizioni di spazio non lo impediscano. Linee (che non sono righi) adiacenti dovrebbero avere un valore di staff-affinity che non cresce: per esempio, una linea che non è un rigo impostata su UP non deve seguire immediatamente una linea impostata su DOWN. Linee che non sono righi in cima a un sistema devono usare DOWN; quelle in fondo UP. Impostando staff-affinity per un rigo, questo sarà trattato come una linea che non è un rigo. Impostando staff-affinity su #f, una linea che non è un rigo sarà trattata come un rigo. Impostando staff-affinity su UP, CENTER o DOWN, un rigo verrà spaziato come se fosse una linea che non è un rigo.

nonstaff-relatedstaff-spacing

La distanza fra la linea (che non è un rigo) corrente e il rigo più vicino nella direzione di staff-affinity, se non ci sono linee che non sono righi tra le due e staff-affinity è impostato su UP o DOWN. Se staff-affinity è impostato su CENTER, viene usato nonstaff-relatedstaff-spacing per i righi più vicini su entrambi i lati, anche se appaiono altre linee tra quella corrente e uno qualsiasi dei righi. Ciò significa che il posizionamento di una linea dipende sia dai righi che dalle linee circostanti. Impostando la proprietà stretchability di uno di questi tipi di spaziatura su un piccolo valore, quella spaziatura sarà dominante. Impostando stretchability su un grande valore, quella spaziatura avrà poco effetto.

nonstaff-nonstaff-spacing

La distanza fra la linea (che non è un rigo) corrente e quella successiva nella direzione di staff-affinity, se entrambe sono sullo stesso lato del rigo in questione e se staff-affinity è impostata su UP o DOWN.

nonstaff-unrelatedstaff-spacing

La distanza fra la linea (che non è un rigo) corrente e il rigo nella direzione opposta rispetto a staff-affinity, se non ci sono altre linee tra i due e se staff-affinity è impostato su UP o DOWN. Ciò può servire, per esempio, a imporre un padding minimo tra una linea Lyrics e il rigo al quale non appartiene.

Proprietà del grob StaffGrouper

Le proprietà di StaffGrouper sono solitamente modificate con un \override nel livello StaffGroup (o livello equivalente).

staff-staff-spacing

La distanza tra righi consecutivi del gruppo di righi corrente. La proprietà staff-staff-spacing del grob VerticalAxisGroup di un singolo rigo può essere sovrascritta con varie impostazioni di spaziatura per quel rigo.

staffgroup-staff-spacing

La distanza tra l’ultimo rigo del gruppo di righi corrente e il rigo immediatamente successivo nello stesso sistema, anche se tra i due righi ci sono una o più linee che non sono righi (come Lyrics). Non è applicata al rigo inferiore di un sistema. La proprietà staff-staff-spacing del grob VerticalAxisGroup di un singolo rigo può essere sovrascritta con varie impostazioni di spaziatura per quel rigo.

Vedi anche

Guida alla notazione: Variabili \paper della spaziatura verticale flessibile, Modifica delle liste associative.

File installati: ‘ly/engraver-init.ly’, ‘scm/define-grobs.scm’.

Guida al funzionamento interno: Contexts, VerticalAxisGroup, StaffGrouper.


Spaziatura dei righi non raggruppati

I righi (come Staff, DrumStaff, TabStaff, etc.) sono contesti che possono contenere uno o più contesti voce, ma non possono contenere altri righi.

Le seguenti proprietà influenzano la spaziatura di righi non raggruppati:

Queste proprietà del grob sono state descritte una a una in precedenza; vedi Proprietà della spaziatura dentro un sistema.

Altre proprietà entrano in gioco per i righi che sono parte di un gruppo; vedi Spaziatura dei righi raggruppati.

L’esempio seguente mostra come la proprietà default-staff-staff-spacing possa influenzare la spaziatura di righi non raggruppati. Le stesse modifiche applicate a staff-staff-spacing avrebbero lo stesso effetto, ma verrebbero applicate anche nel caso in cui i righi siano combinati in uno o più gruppi.

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

<<
  % Questa nota molto bassa ha bisogno di più spazio di quanto 'basic-distance
  % possa fornirne, dunque la distanza tra questo rigo e quello successivo
  % è determinato da 'padding.
  \new Staff { b,2 r | }

  % Qui 'basic-distance fornisce abbastanza spazio, e non c'è bisogno
  % di comprimere lo spazio (verso 'minimum-distance) per far spazio
  % per qualcos'altro sulla pagina, dunque la distanza tra questo
  % rigo e quello successivo è determinato da 'basic-distance.
  \new Staff { \clef bass g2 r | }

  % Impostando 'padding su un valore negativo, è possibile far sì che
  % i righi entrino in collisione.  Il più basso valore accettabile per
  % '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 | }
>>

[image of music]

Vedi anche

File installati: ‘scm/define-grobs.scm’.

Frammenti: Spacing.

Guida al funzionamento interno: VerticalAxisGroup.


Spaziatura dei righi raggruppati

Nelle partiture orchestrali e in alte grosse partiture, di norma i righi vengono raggruppati. Lo spazio tra i gruppi è più ampio dello spazio tra i righi dello stesso gruppo.

I gruppi di righi (come StaffGroup, ChoirStaff, etc.) sono contesti che possono contenere uno o più righi simultaneamente.

Le seguenti proprietà influenzano la spaziatura dei righi nei gruppi:

Queste proprietà dei grob sono descritte una a una in una sezione precedente; vedi Proprietà della spaziatura dentro un sistema.

L’esempio seguente mostra come le proprietà del grob StaffGrouper possano influenzare la spaziatura dei righi raggruppati:

\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 }
  >>
>>

[image of music]

Vedi anche

File installati: ‘scm/define-grobs.scm’.

Frammenti: Spacing.

Guida al funzionamento interno: VerticalAxisGroup, StaffGrouper.


Spaziatura delle linee che non sono righi

Le linee che non sono righi (come Lyrics, ChordNames, etc.) sono contesti i cui oggetti della formattazione sono disposti come se fossero su dei righi (ovvero su linee orizzontali all’interno dei sistemi). Precisamente, le linee che non sono righi sono contesti non-rigo che contengono l’incisore Axis_group_engraver.

Le seguenti proprietà influenzano la spaziatura delle linee che non sono righi:

Queste proprietà del grob sono descritte una a una in una sezione precedente, vedi Proprietà della spaziatura dentro un sistema.

L’esempio seguente mostra come la proprietà nonstaff-nonstaff-spacing influenza la spaziatura di linee che non sono un rigo consecutive. Impostando l’elemento stretchability su un valore molto alto, il testo vocale riesce a allungarsi molto più del solito:

\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 }
>>

[image of music]

Vedi anche

File installati: ‘ly/engraver-init.ly’, ‘scm/define-grobs.scm’.

Frammenti: Spacing.

Guida al funzionamento interno: Contexts, VerticalAxisGroup.


LilyPond — Guida alla Notazione v2.23.82 (ramo di sviluppo).