@c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-

@ignore
    Translation of GIT committish: 0d4df37f3e3b4dc9bceb5c78ae94449bd0269c67

    When revising a translation, copy the HEAD committish of the
    version that you are working on.  For details, see the Contributors'
    Guide, node Updating translation committishes..
@end ignore

@c \version "2.19.22"

@c Translators: Federico Bruni
@c Translation checkers:

@ignore
GDP TODO list

Negative numbers are allowed:
> Are you sure? The following works well
> \paper{
>   first-page-number = -2
> }
> and prints page number -1 on the second page, for example.


Clarify
https://sourceforge.net/p/testlilyissues/issues/68/

@end ignore


@node Gestione dello spazio
@chapter Gestione dello spazio
@translationof Spacing issues

La formattazione globale del foglio è determinata da tre fattori: la
formattazione della pagina, le interruzioni di linea e la spaziatura.
Ciascun fattore influenza l'altro. La scelta della spaziatura determina
la densità con cui vengono disposti i sistemi musicali, che a sua volta
influenza la scelta delle interruzioni di linea e quindi infine quante
pagine occupa un brano.

Generalmente, questa procedura si svolge in quattro stadi. Inizialmente
vengono scelte le distanze flessibili (@q{springs}), in base alle
durate.  Poi vengono tentate tutte le possibili combinazioni per le
interruzioni di linea e viene calcolato un punteggio @q{negativo} per
ciascuna di esse. Quindi viene calcolata l'altezza di ogni possibile
sistema. Infine viene scelta una combinazione di interruzioni di linea
e di interruzioni di pagina che assicuri che la spaziatura verticale e
quella orizzontale non siano né troppo compresse né troppo allungate.

Due tipi di blocchi possono contenere le impostazioni di formattazione:
@code{\paper @{@dots{}@}} e @code{\layout @{@dots{}@}}.  Il blocco
@code{\paper} contiene le impostazioni di formattazione della pagina
da applicare a tutte le partiture di un libro o di una parte,
come l'altezza del foglio o se stampare o meno i numeri di pagina, etc.
(vedi @ref{Formattazione della pagina}).  Il blocco @code{\layout} contiene le impostazioni
di formattazione della partitura, come il numero di sistemi da usare o lo
spazio tra i gruppi di righi, etc. (vedi @ref{Formattazione della partitura}).

@menu
* Formattazione della pagina::
* Formattazione della partitura::
* Interruzioni::
* Spaziatura verticale::
* Spaziatura orizzontale::
* Riduzione del numero di pagine di una partitura::
@end menu


@node Formattazione della pagina
@section Formattazione della pagina
@translationof Page layout

Questa sezione tratta le opzioni di formattazione della pagina per il
blocco @code{\paper}.

@menu
* Il blocco paper::
* Formato carta e ridimensionamento automatico::
* Variabili paper della spaziatura verticale fissa::
* Variabili paper della spaziatura verticale flessibile::
* Variabili paper della spaziatura orizzontale::
* Altre variabili di paper::
@end menu


@node Il blocco paper
@subsection Il blocco @code{@bs{}paper}
@translationof The paper block

I blocchi @code{\paper} possono essere posizionati in tre punti diversi, in
modo da formare una gerarchia discendente di blocchi @code{\paper}:

@itemize

@item
All'inizio del file di input, prima di tutti i blocchi @code{\book},
@code{\bookpart} e @code{\score}.

@item
Dentro un blocco @code{\book} ma fuori da tutti i blocchi
@code{\bookpart} e @code{\score} in esso racchiusi.

@item
Dentro un blocco @code{\bookpart} ma fuori da tutti i blocchi
@code{\score} in esso racchiusi.

@end itemize

Non è possibile inserire un blocco @code{\paper} in un blocco @code{\score}.

I valori dei campi vengono filtrati dall'alto verso il basso attraverso
questa gerarchia: i valori impostati nei livelli più alti della
gerarchia persistono finché non sono sovrascritti da un valore
impostato in un livello più basso.

Vari blocchi @code{\paper} possono apparire in ognuno di questi livelli, per
esempio come parti di vari file inclusi con @code{\include}.  In questo caso,
i campi di ciascun livello vengono combinati e i valori riscontrati per
ultimi avranno la precedenza in caso di campi duplicati.

Le impostazioni che possono apparire in un blocco @code{\paper} comprendono:

@itemize

@item
la funzione scheme @code{set-paper-size},

@item
le variabili @code{\paper} per personalizzare la formattazione della pagina e

@item
le definizioni di markup usate per personalizzare la formattazione di intestazioni,
piè di pagina e titoli.

@end itemize

La funzione @code{set-paper-size} è trattata nella prossima
sezione, @ref{Formato carta e ridimensionamento automatico}.  Le variabili
@code{\paper} che si occupano della formattazione della pagina sono
trattate in sezioni successive.  Le definizioni di markup relative a
intestazioni, piè di pagina e titoli sono trattate in
@ref{Titoli intestazioni e piè di pagina personalizzati}.

La maggior parte delle variabili @code{\paper} funzionano soltanto in
un blocco @code{\paper}.  Le poche che funzionano anche in un blocco
@code{\layout} sono elencate in
@ref{Il blocco layout}.

Se non indicato diversamente, tutte le variabili @code{\paper} che
corrispondono a distanze sulla pagina sono misurate in millimetri,
a meno che un'unità di misura diversa non sia specificata dall'utente.
Per esempio, la seguente dichiarazione imposta @code{top-margin} su
dieci millimetri:

@example
\paper @{
  top-margin = 10
@}
@end example

Per impostarla su @code{0.5} pollici, usare il suffisso di
unità @code{\in} (inch = pollice):

@example
\paper @{
  top-margin = 0.5\in
@}
@end example

I suffissi di unità disponibili sono @code{\mm}, @code{\cm},
@code{\in} e @code{\pt}.  Queste unità sono semplici valori utili
per convertire dai millimetri e sono definite in
@file{ly/paper-defaults-init.ly}.  Solo per chiarezza, quando
si usano i millimetri, di solito si usa il suffisso @code{\mm},
anche se non è tecnicamente necessario.

È anche possibile definire i valori di @code{\paper} con Scheme.
L'equivalente Scheme dell'esempio precedente è:

@example
\paper @{
  #(define top-margin (* 0.5 in))
@}
@end example

@seealso
Guida alla notazione:
@ref{Formato carta e ridimensionamento automatico},
@ref{Titoli intestazioni e piè di pagina personalizzati},
@ref{Il blocco layout}.

File installati:
@file{ly/paper-defaults-init.ly}.


@node Formato carta e ridimensionamento automatico
@subsection Formato carta e ridimensionamento automatico
@translationof Paper size and automatic scaling

@cindex formato carta
@cindex formato pagina
@cindex carta, formato
@cindex pagina, formato

@funindex \paper

@menu
* Impostare il formato carta::
* Ridimensionamento automatico al formato carta::
@end menu


@node Impostare il formato carta
@unnumberedsubsubsec Impostare il formato carta
@translationof Setting the paper size

@q{A4} è il valore predefinito quando non viene impostato esplicitamente
alcun formato carta. Esistono due funzioni che permettono di cambiare
formato:

@table @code
@item set-default-paper-size

@example
#(set-default-paper-size "quarto")
@end example

che deve sempre trovarsi nel livello superiore, e

@item set-paper-size

@example
\paper @{
  #(set-paper-size "tabloid")
@}
@end example

che deve sempre trovarsi in un blocco @code{\paper}.
@end table

La funzione @code{set-default-paper-size}, se usata nel livello superiore,
deve precedere qualsiasi blocco @code{\paper}.
@code{set-default-paper-size} imposta il formato di tutte le pagine,
mentre @code{set-paper-size} imposta il formato soltanto di quelle
pagine a cui è applicato il blocco @code{\paper}.  Per esempio, se il
blocco @code{\paper} si trova all'inizio del file, applicherà il formato
a tutte le pagine.  Se il blocco @code{\paper} si trova dentro un blocco
@code{\book}, il formato verrà applicato a quel libro soltanto.

Quando si usa la funzione @code{set-paper-size}, questa deve essere
posta @emph{prima} di qualsiasi altra funzione usata nello stesso blocco
@code{\paper}.  Vedi @ref{Ridimensionamento automatico al formato carta}.

I formati carta sono definiti in @file{scm/paper.scm}, e sebbene sia
possibile aggiungere formati personalizzati in questo file, tali aggiunte
verrebbero sovrascritte da successivi aggiornamenti del software. I formati
disponibili sono elencati in @ref{Formati carta predefiniti}.

@c An appendix entry exists for paper sizes but is not auto-generated

È tuttavia possibile aggiungere un formato personalizzato nel file di
input per poi utilizzarlo con @code{set-default-paper-size} o
@code{set-paper-size}:

@example
#(set! paper-alist (cons '("mio formato" . (cons (* 15 in) (* 3 in))) paper-alist))

\paper @{
  #(set-paper-size "mio formato")
@}
@end example

Si può usare qualsiasi unità di misura: @code{in} (inch, o pollici), @code{cm}
(centimetri) e @code{mm} (millimetri).

@cindex formato carta, orientamento
@cindex pagina, orientamento
@cindex formato carta, orizzontale (landscape)

Aggiungendo il simbolo @code{'landscape} alla funzione del formato, le pagine
vengono ruotate di 90 gradi e le linee occupano il maggior spazio a disposizione.

@example
#(set-default-paper-size "a6" 'landscape)
@end example

Appendendo @samp{landscape} (orizzontale) al nome del formato, è possibile
scambiare le dimensioni della carta @emph{senza} ruotare la stampa
(come quando si stampa in formato cartolina o si creano dei file
grafici da includere invece di un documento indipendente):

@example
#(set-default-paper-size "a6landscape")
@end example

Quando il formato termina con un esplicito @samp{landscape} (orizzontale) o
@samp{portrait} (verticale), la presenza di un simbolo @code{'landscape}
influisce @emph{solo} sull'orientamento della stampa, non sul formato
usato per la formattazione.

@seealso
Guida alla notazione:
@ref{Ridimensionamento automatico al formato carta},
@ref{Formati carta predefiniti}.

File installati:
@file{scm/paper.scm}.


@node Ridimensionamento automatico al formato carta
@unnumberedsubsubsec Ridimensionamento automatico al formato carta
@translationof Automatic scaling to paper size

Se il formato viene cambiato con una delle funzioni scheme
(@code{set-default-paper-size} o @code{set-paper-size}), i
valori di diverse variabili @code{\paper} sono automaticamente
ricalcolati in base alla nuova dimensione.  Per aggirare il ridimensionamento
automatico di una certa variabile, impostare la variabile dopo aver
impostato il formato.  Fare attenzione al fatto che il ridimensionamento
automatico non viene attivato se si impostano le variabili
@code{paper-height} o @code{paper-width}, anche se
@code{paper-width} può influenzare altri valori (ma questo
è un argomento diverso dal ridimensionamento ed è trattato in seguito).  Le
funzioni @code{set-default-paper-size} e @code{set-paper-size} sono
descritte in @ref{Impostare il formato carta}.

Le dimensioni verticali interessate dal ridimensionamento automatico
sono @code{top-margin} e @code{bottom-margin} (vedi
@ref{Fixed vertical spacing paper variables,,Variabili fisse della spaziatura verticale di @code{@bs{}paper}}).
Le dimensioni orizzontali interessate dal ridimensionamento automatico
sono @code{left-margin}, @code{right-margin}, @code{inner-margin},
@code{outer-margin}, @code{binding-offset}, @code{indent} e @code{short-indent} (vedi
@ref{Horizontal spacing paper variables,,Variabili della spaziatura orizzontale di @code{@bs{}paper}}).

I valori predefiniti di queste dimensioni sono impostati in
@file{ly/paper-defaults-init.ly} e salvati in variabili interne
chiamate @code{top-margin-default}, @code{bottom-margin-default}, etc.
Questi valori si riferiscono al formato predefinito @code{a4}.
Per riferimento, nel formato @code{a4} il valore di @code{paper-height} è
@code{297\mm} e quello di @code{paper-width} è @code{210\mm}.

@seealso
Guida alla notazione:
@ref{Fixed vertical spacing paper variables,,Variabili fisse della spaziatura verticale di @code{@bs{}paper}},
@ref{Horizontal spacing paper variables,,Variabili della spaziatura orizzontale di @code{@bs{}paper}}.

File installati:
@file{ly/paper-defaults-init.ly},
@file{scm/paper.scm}.


@node Variabili paper della spaziatura verticale fissa
@subsection Variabili @code{@bs{}paper} della spaziatura verticale fissa
@translationof Fixed vertical spacing paper variables

@warning{Alcune dimensioni definite nel blocco @code{@bs{}paper} sono
ridimensionate automaticamente in base al formato carta, portando a
possibili risultati imprevisti. Vedi
@ref{Ridimensionamento automatico al formato carta}.}

I valori predefiniti (prima del ridimensionamento) sono definiti in
@file{ly/paper-defaults-init.ly}.

@table @code
@item paper-height
@funindex paper-height

L'altezza della pagina (valore predefinito: non impostata).  Il ridimensionamento
automatico di alcune dimensioni verticali non è influenzato da questa.

@item top-margin
@funindex top-margin

Il margine tra il punto più alto della pagina e il punto più alto
dell'area di stampa.  Se il formato viene modificato, il valore
predefinito di questa dimensione viene ridimensionato di conseguenza.

@item bottom-margin
@funindex bottom-margin

Il margine tra il punto più basso dell'area di stampa e il punto
più basso della pagina.  Se il formato viene modificato, il valore
predefinito di questa dimensione viene ridimensionato di conseguenza.

@item ragged-bottom
@funindex ragged-bottom

Se impostato su vero, i sistemi avranno la loro naturale spaziatura.
Non saranno giustificati, ovvero non saranno né compressi né allungati
verticalmente per stare nella pagina.

@item ragged-last-bottom
@funindex ragged-last-bottom

Se impostato su falso, l'ultima pagina, e l'ultima pagina
di ogni sezione creata con un blocco @code{\bookpart}, saranno
giustificate verticalmente come nelle pagine precedenti.

@end table

@seealso
Guida alla notazione:
@ref{Ridimensionamento automatico al formato carta}.

File installati:
@file{ly/paper-defaults-init.ly}.

Frammenti:
@rlsr{Spacing}.

@knownissues
I titoli (definiti nel blocco @code{\header}) sono considerati
un sistema, dunque @code{ragged-bottom} e @code{ragged-last-bottom}
aggiungeranno spazio tra i titoli e il primo sistema della partitura.

Formati carta definiti esplicitamente sovrascriveranno qualsiasi
impostazione di margine superiore o inferiore definito dall'utente.


@node Variabili paper della spaziatura verticale flessibile
@subsection Variabili @code{@bs{}paper} della spaziatura verticale flessibile
@translationof Flexible vertical spacing paper variables

Nella maggior parte dei casi è preferibile che le distanze verticali
tra certi elementi (come margini, titoli, sistemi e partiture
separate) siano flessibili, così che siano ben compresse o allungate
a seconda della situazione.  Sono disponibili diverse variabili
@code{\paper} (elencate sotto) per regolare il comportamento di
allungamento di queste dimensioni.

Nota bene che le variabili @code{\paper} trattate in questa sezione
non regolano la spaziatura dei righi dei singoli sistemi.
La spaziatura interna ai sistemi è controllata dalle proprietà
del grob, solitamente inserite in un blocco @code{\score} o
@code{\layout} e non in un blocco @code{\paper}.  Vedi
@ref{Spaziatura verticale flessibile all'interno dei sistemi}.

@menu
* Struttura delle liste associative flessibili della spaziatura verticale::
* Elenco delle variabili paper flessibili della spaziatura verticale::
@end menu


@node Struttura delle liste associative flessibili della spaziatura verticale
@unnumberedsubsubsec Struttura delle liste associative flessibili della spaziatura verticale
@translationof Structure of flexible vertical spacing alists

Ognuna delle variabili @code{\paper} flessibili della spaziatura verticale
è una lista associativa (alist) composta da quattro @emph{elementi}:

@itemize

@item
@code{basic-distance} -- la distanza verticale, misurata in
spazi rigo, tra i @emph{punti di riferimento} dei due
elementi, quando non si verificano collisioni e non sono
attivi allungamenti o compressioni.  Il punto di riferimento
di un markup (un titolo o un markup di un livello superiore)
è il suo punto più alto, mentre quello di un sistema è il
centro verticale del più vicino @code{StaffSymbol}, anche se
una linea diversa da un rigo (come un contesto @code{Lyrics}) si
trova nel mezzo.  Valori di @code{basic-distance} inferiori a quelli
di @code{padding} o @code{minimum-distance} non hanno senso, dato che
la distanza risultante non sarà mai inferiore a quella definita per
@code{padding} o @code{minimum-distance}.

@item
@code{minimum-distance} -- la minima distanza verticale consentita,
misurata in spazi rigo, tra i punti di riferimento dei due
elementi, quando la compressione è attiva.  Valori di
@code{minimum-distance} inferiori a quelli di @code{padding} non
hanno senso, perché la distanza risultante non sarà mai inferiore
a quella definita per @code{padding.}

@c TODO: explain skylines somewhere and xref to it from here.

@item
@code{padding} -- la quantità minima di spazio verticale libero
tra i profili (@emph{skyline}) dei due elementi, misurata in
spazi rigo.

@item
@code{stretchability} -- una misura, priva di unità di misura,
della relativa propensione della dimensione a allungarsi.  Se
pari a zero, la distanza non si allungherà (a meno che non ci
siano delle collisioni).  Se positiva, il significato del valore
di @code{stretchability} di una certa dimensione sta nella sua
relazione con i valori di @code{stretchability} delle altre
dimensioni.  Per esempio, se una dimensione ha un valore di
@code{stretchability} doppio rispetto a un'altra, si allungherà
il doppio.
I valori devono essere non negativi e finiti.  Il valore @code{+inf.0} causa un
errore di programmazione e viene ingorato, ma si può usare @code{1.0e7} per
ottenere un'elasticità allungabile quasi all'infinito. Se non impostata, il
valore predefinito equivale a quello di @code{basic-distance}.  Nota che la
propensione della dimensione a @emph{comprimersi} non può essere impostata
direttamente dall'utente ed è uguale a
(@code{basic-distance}@tie{}@minus{}@tie{}@code{minimum-distance}).

@end itemize

Se in una pagina lo spazio verticale non è giustificato (ovvero con
@code{ragged-bottom} impostato su vero) la distanza risultante è
data dal valore più grande assegnato a una di queste tre proprietà:

@itemize

@item
@code{basic-distance},

@item
@code{minimum-distance} e

@item
@code{padding} con l'aggiunta della più piccola distanza necessaria a
eliminare collisioni.

@end itemize

In caso di partiture con molte pagine in cui l'ultima pagina non è
giustificata (ovvero con @code{ragged-last-bottom} impostato su vero),
l'ultima pagina usa la stessa spaziatura della pagina precedente,
purché ci sia abbastanza spazio.

I metodi specifici per modificare le liste associative (alist) sono
trattati in @ref{Modifica delle liste associative}.  L'esempio seguente illustra i
due modi in cui queste possono essere modificate.  La prima dichiarazione
aggiorna un elemento-valore individualmente, mentre la seconda ridefinisce
completamente la variabile:

@example
\paper @{
  system-system-spacing.basic-distance = #8
  score-system-spacing =
    #'((basic-distance . 12)
       (minimum-distance . 6)
       (padding . 1)
       (stretchability . 12))
@}
@end example


@node Elenco delle variabili paper flessibili della spaziatura verticale
@unnumberedsubsubsec Elenco delle variabili @code{@bs{}paper} flessibili della spaziatura verticale
@translationof List of flexible vertical spacing paper variables

I nomi di queste variabili hanno il formato
@code{@var{superiore}-@var{inferiore}-spacing}, dove @code{@var{superiore}}
e @code{@var{inferiore}} indicano gli elementi di cui stabilire la
distanza.  Ogni distanza viene misurata tra i punti di riferimento
dei due elementi (vedi la descrizione precedente della struttura della
lista associativa). Nei nomi di queste variabili il termine @q{@code{markup}}
si riferisce sia ai @emph{titoli} (@code{bookTitleMarkup} o
@code{scoreTitleMarkup}) sia ai @emph{markup di livello superiore} (vedi
@ref{Struttura del file}).  Tutte le distanze sono misurate in spazi rigo.

Le impostazioni predefinite sono definite in @file{ly/paper-defaults-init.ly}.

@c TODO: Where do headers/footers fit in? -mp

@table @code
@item markup-system-spacing
@funindex markup-system-spacing

la distanza tra il testo (titolo o markup di livello superiore) e il sistema
che lo segue.

@item score-markup-spacing
@funindex score-markup-spacing

la distanza tra l'ultimo sistema di un brano e il testo (titolo o
markup di livello superiore) che lo segue.

@item score-system-spacing
@funindex score-system-spacing

la distanza tra l'ultimo sistema di un brano e il primo sistema
del brano successivo, quando non c'è alcun testo (titolo o
markup di livello superiore) tra di loro.

@item system-system-spacing
@funindex system-system-spacing

la distanza tra due sistemi di uno stesso brano.

@item markup-markup-spacing
@funindex markup-markup-spacing

la distanza tra due testi (titoli o markup di livello superiore).

@item last-bottom-spacing
@funindex last-bottom-spacing

la distanza tra l'ultimo sistema o l'ultimo markup di livello superiore di
una pagina e la fine dello spazio stampabile (ovvero la parte superiore
del margine inferiore).

@item top-system-spacing
@funindex top-system-spacing

la distanza tra l'inizio dello spazio stampabile (ovvero la parte
inferiore del margine superiore) e il primo sistema di una pagina, quando
non c'è alcun testo (titolo o markup di livello superiore) tra di loro.

@item top-markup-spacing
@funindex top-markup-spacing

la distanza tra l'inizio dello spazio stampabile (ovvero la parte
inferiore del margine superiore) e il primo testo (titolo o markup di
livello superiore) di una pagina, quando non c'è alcun sistema tra i due.
@end table

@seealso
Guida alla notazione:
@ref{Spaziatura verticale flessibile all'interno dei sistemi}.

File installati:
@file{ly/paper-defaults-init.ly}.

Frammenti:
@rlsr{Spacing}.


@node Variabili paper della spaziatura orizzontale
@subsection Variabili @code{@bs{}paper} della spaziatura orizzontale
@translationof Horizontal spacing paper variables

@warning{Alcune dimensioni in @code{@bs{}paper} sono ridimensionate
automaticamente in base al formato carta, producendo talvolta un
risultato inatteso. Vedi @ref{Ridimensionamento automatico al formato carta}.}

@menu
* Variabili paper per larghezze e margini::
* Variabili paper per la modalità due pagine per foglio::
* Variabili paper per spostamenti e indentazioni::
@end menu


@node Variabili paper per larghezze e margini
@unnumberedsubsubsec Variabili @code{@bs{}paper} per larghezze e margini
@translationof paper variables for widths and margins

I valori predefiniti (prima del ridimensionamento) non elencati qui si
trovano in @file{ly/paper-defaults-init.ly}.

@table @code

@item paper-width
@funindex paper-width

Larghezza della pagina (non impostata inizialmente).  @code{paper-width},
pur non avendo effetto sul ridimensionamento automatico di alcune dimensioni
orizzontali, influenza la variabile @code{line-width}.  Se sono impostate
sia @code{paper-width} che @code{line-width}, saranno modificate anche
@code{left-margin} e @code{right-margin}. Vedi anche @code{check-consistency}.

@item line-width
@funindex line-width

Se specificata in un blocco @code{\paper} definisce la lunghezza orizzontale
disponibile per i righi musicali nei sistemi non indentati.  Se non specificata,
la larghezza della linea (@code{line-width}) del foglio è determinata dalla sottrazione
@code{(paper-width@tie{}@minus{}@tie{}left-margin@tie{}@minus{}@tie{}right-margin)}.
Se @code{line-width} è specificata nel blocco @code{\paper} e entrambi i margini,
@code{left-margin} e @code{right-margin}, non lo sono, questi saranno aggiornati
in modo da centrare i sistemi sulla pagina automaticamente.
Vedi anche @code{check-consistency}.

Le variabili @code{line-width} per i singoli brani possono essere specificate
nel blocco @code{\layout} di ogni brano, ovvero dentro un blocco @code{\score}.
Questi valori regolano la larghezza delle linee prodotte brano per brano.  Se
@code{line-width} non viene specificata per un brano, il suo valore predefinito
coincide con la larghezza della linea del foglio, ovvero col valore della
variabile @code{line-width} del blocco @code{\paper}.  Impostando
@code{line-width} per un brano in particolare, ovvero all'interno di un blocco
@code{\score}, i margini del foglio non vengono modificati. Le linee del rigo,
la cui lunghezza è determinata dalla variabile @code{line-width} del brano, sono
allineate a sinistra all'interno dello spazio definito dalla variabile
@code{line-width} del foglio. Se le variabili @code{line-width} del brano e del
foglio sono uguali, le linee del rigo si estenderanno esattamente dal margine
sinistro al margine destro, ma se quella del brano è maggiore di quella del
foglio le linee del rigo andranno oltre il margine destro.

@item left-margin
@funindex left-margin

Margine tra il bordo sinistro della pagina e l'inizio delle linee
del rigo nei sistemi non indentati.  Se il formato è modificato, il valore
predefinito di questa dimensione viene ridimensionato proporzionalmente.  Se
@code{left-margin} non è impostato, e sono impostati sia @code{line-width} che
@code{right-margin}, allora @code{left-margin} equivale alla differenza
@code{(paper-width@tie{}@minus{}@tie{}line-width@tie{}@minus{}@tie{}right-margin)}.
Se è impostata soltanto @code{line-width}, entrambi i margini sono impostati su
@code{((paper-width@tie{}@minus{}@tie{}line-width)@tie{}/@tie{}2)},
e di conseguenza i sistemi sono centrati sulla pagina.  Vedi anche
@code{check-consistency}.

@item right-margin
@funindex right-margin

Margine tra il bordo destro della pagina e la fine delle linee
del rigo in sistemi giustificati.  Se il formato è modificato, il valore
predefinito di questa dimensione viene ridimensionato proporzionalmente.  Se
@code{right-margin} non è impostato, e sono impostati sia @code{line-width} che
@code{left-margin}, allora @code{right-margin} equivale a
@code{(paper-width@tie{}@minus{}@tie{}line-width@tie{}@minus{}@tie{}left-margin)}.
Se è impostata soltanto @code{line-width}, entrambi i margini sono impostati su
@code{((paper-width@tie{}@minus{}@tie{}line-width)@tie{}/@tie{}2)},
e di conseguenza i sistemi sono centrati sulla pagina.  Vedi anche
@code{check-consistency}.

@item check-consistency
@funindex check-consistency

Se impostata su vero (valore predefinito), appare un avvertimento nella
console se la somma di @code{left-margin}, @code{line-width} e
@code{right-margin} non corrisponde esattamente a @code{paper-width}, e a
ciascuna di queste variabili (eccetto @code{paper-width}) sarà assegnato il suo
valore predefinito (ridimensionato in base al formato, se richiesto).  Se
impostato su falso, qualsiasi incongruenza viene ignorata e i sistemi potrebbero
andare oltre il bordo della pagina.

@item ragged-right
@funindex ragged-right

Se impostato su vero, i sistemi non occuperanno interamente la larghezza
della linea, ovvero non saranno giustificati.  Termineranno invece alla loro
lunghezza orizzontale naturale.  Valori predefiniti: @code{#t} (true = vero)
per i brani con un unico sistema, e @code{#f} (false = falso) per i brani
con due o più sistemi.  Questa variabile può essere impostata anche in
un blocco @code{\layout}.

@item ragged-last
@funindex ragged-last

Se impostata su vero, l'ultimo sistema del brano non occuperà interamente
la larghezza della linea, ovvero non sarà giustificato.  Terminerà invece
alla sua lunghezza orizzontale naturale.  Valore predefinito: @code{#f} (false = falso).
Questa variabile può essere impostata anche in un blocco @code{\layout}.

@end table

@seealso
Guida alla notazione:
@ref{Ridimensionamento automatico al formato carta}.

File installati:
@file{ly/paper-defaults-init.ly}.

@knownissues
Formati carta definiti esplicitamente sovrascriveranno qualsiasi margine
destro o sinistro definito dall'utente.


@node Variabili paper per la modalità due pagine per foglio
@unnumberedsubsubsec Variabili @code{@bs{}paper} per la modalità due pagine per foglio
@translationof paper variables for two-sided mode

I valori predefiniti (prima del ridimensionamento) sono definiti in
@file{ly/paper-defaults-init.ly}.

@table @code

@item two-sided
@funindex two-sided

@cindex rilegatura
@cindex margine di rilegatura

Se impostata su vero, vengono usati @code{inner-margin}, @code{outer-margin} e
@code{binding-offset} per determinare i margini a seconda che il numero di
pagina sia dispari o pari.  Questa variabile sovrascrive @code{left-margin}
e @code{right-margin}.

@item inner-margin
@funindex inner-margin

Margine del lato interno di tutte le pagine se queste fanno parte
di un libro.  Se il formato è modificato, il valore predefinito di questa
dimensione viene ridimensionato proporzionalmente.  Funziona soltanto con
@code{two-sided} impostato su vero.

@item outer-margin
@funindex outer-margin

È il margine del lato esterno di tutte le pagine se queste fanno parte
di un libro.  Se il formato è modificato, il valore predefinito di questa
dimensione viene ridimensionato proporzionalmente.  Funziona soltanto con
@code{two-sided} impostato su vero.

@item binding-offset
@funindex binding-offset

Quantità di spazio da aggiungere a @code{inner-margin} per assicurarsi che
niente sia nascosto dalla rilegatura.  Se il formato è modificato, il valore
predefinito di questa dimensione viene ridimensionato proporzionalmente.
Funziona soltanto con @code{two-sided} impostato su vero.

@end table

@seealso
Guida alla notazione:
@ref{Ridimensionamento automatico al formato carta}.

File installati:
@file{ly/paper-defaults-init.ly}.


@node Variabili paper per spostamenti e indentazioni
@unnumberedsubsubsec Variabili @code{@bs{}paper} per spostamenti e indentazioni
@translationof paper variables for shifts and indents

I valori predefiniti (prima del ridimensionamento) non elencati qui sono
visibili in @file{ly/paper-defaults-init.ly}.

@table @code

@item horizontal-shift
@funindex horizontal-shift

@c This default value is buried in the middle of page.scm.  -mp

È la quantità di spazio di cui spostare a destra tutti i sistemi (inclusi
i titoli e i separatori dei sistemi).  Valore predefinito: @code{0.0\mm}.

@item indent
@funindex indent

Livello di indentazione del primo sistema di un brano.
Se il formato è modificato, il valore predefinito di questa dimensione viene
ridimensionato proporzionalmente.  Lo spazio compreso in @code{line-width}
disponibile per il primo sistema è ridotto di questa quantità.  @code{indent}
può essere specificato anche in blocchi @code{\layout} per impostare
l'indentazione brano per brano.

@item short-indent
@funindex short-indent

Livello di indentazione di tutti i sistemi di un brano eccetto
il primo sistema.  Se il formato è modificato, il valore predefinito di
questa dimensione viene ridimensionato proporzionalmente.  Lo spazio
compreso in @code{line-width} disponibile per tutti i sistemi tranne il
primo è ridotto di questa quantità.  @code{short-indent} può essere specificato
anche in blocchi @code{\layout} per impostare le brevi indentazioni brano per brano.

@end table

@seealso
Guida alla notazione:
@ref{Ridimensionamento automatico al formato carta}.

File installati:
@file{ly/paper-defaults-init.ly}.

Frammenti:
@rlsr{Spacing}.


@node Altre variabili di paper
@subsection Altre variabili di @code{@bs{}paper}
@translationof Other paper variables

@menu
* Variabili di paper per l'interruzione di linea::
* Variabili di paper per l'interruzione di pagina::
* Variabili di paper per la numerazione delle pagine::
* Svariate variabili di paper::
@end menu


@node Variabili di paper per l'interruzione di linea
@unnumberedsubsubsec Variabili di @code{@bs{}paper} per l'interruzione di linea
@translationof paper variables for line breaking

@table @code

@item max-systems-per-page
@funindex max-systems-per-page

Il numero massimo di sistemi che saranno disposti in una pagina.  Attualmente
ciò è supportanto soltanto dall'algoritmo @code{ly:optimal-breaking}.
Valore predefinito: non impostato.

@item min-systems-per-page
@funindex min-systems-per-page

Il numero minimo di sistemi che saranno disposti in una pagina.  Ciò
potrebbe riempire troppo le pagine, se il numero è troppo grande.  Attualmente
ciò è supportanto soltanto dall'algoritmo @code{ly:optimal-breaking}.
Valore predefinito: non impostato.

@item systems-per-page
@funindex systems-per-page

Il numero di sistemi da disporre in una pagina.  Attualmente
ciò è supportanto soltanto dall'algoritmo @code{ly:optimal-breaking}.
Valore predefinito: non impostato.

@item system-count
@funindex system-count

Il numero di sistemi da usare per un brano.  Valore predefinito: non impostato.
Questa variabile può essere impostata anche in un blocco @code{\layout}.

@end table

@seealso
Guida alla notazione:
@ref{Interruzioni di linea}.


@node Variabili di paper per l'interruzione di pagina
@unnumberedsubsubsec Variabili di @code{@bs{}paper} per l'interruzione di pagina
@translationof paper variables for page breaking

I valori predefiniti non elencati qui sono visibili in
@file{ly/paper-defaults-init.ly}

@table @code

@item page-breaking
@funindex page-breaking

L'algoritmo di interruzione di pagina da usare.  Le opzioni sono
@code{ly:minimal-breaking}, @code{ly:page-turn-breaking},
@code{ly:one-page-breaking}, @code{ly:one-line-breaking},
@code{ly:one-line-auto-height-breaking} e
@code{ly:optimal-breaking} (predefinito).

@item page-breaking-system-system-spacing
@funindex page-breaking-system-system-spacing

Induce il sistema di interruzione di pagina a credere che
@code{system-system-spacing} sia impostato in modo diverso dal
modo in cui è impostato realmente.  Per esempio, se
@code{page-breaking-system-system-spacing.padding} è impostato su un
valore molto più grande di @code{system-system-spacing.padding}, il
sistema di interruzione di pagina disporrà meno sistemi su ciascuna
pagina.  Valore predefinito: non impostato.

@item page-count
@funindex page-count

Il numero di pagine da usare per un brano, non impostato.

@end table

Le variabili seguenti sono attive soltanto quando @code{page-breaking}
è impostato su @code{ly:page-turn-breaking}.  Le interruzioni di pagina
vengono quindi scelte per minimizzare il numero di voltate di pagina.
Dato che le voltate di pagina si rendono necessarie quando si passa da
una pagina con numero dispari a una con numero pari, verrà solitamente
favorita una formattazione in cui l'ultima pagina abbia un numero dispari.
I punti preferiti per le voltate di pagina possono essere indicati
manualmente col comando @code{\allowPageTurn} o automaticamente
includendo l'incisore @code{Page_turn_engraver} (vedi @ref{Voltata di pagina ottimale}).

Se le scelte disponibili per avere voltate di pagina adeguate sono
insufficienti, LilyPond potrebbe inserire una pagina vuota all'interno
di un brano o tra i brani (se ce ne sono almeno due), oppure potrebbe
terminare un brano su una pagina pari.  Aumentando i valori delle
seguenti tre variabili diminuisce la probabilità che queste entrino
in azione.

I valori sono penalità: maggiore il valore, minore la probabilità
che si verifichi l'azione associata rispetto alle altre scelte.

@table @code

@item blank-page-penalty
@funindex blank-page-penalty

La penalità per avere una pagina vuota nel mezzo di un brano.  Se il
valore di @code{blank-page-penalty} è grande ed è selezionato
@code{ly:page-turn-breaking}, sarà meno probabile che LilyPond
insersica una pagina nel mezzo del brano.  Aggiungerà invece
maggior spazio tra i sistemi per occupare la pagina vuota e
quella successiva.  Valore predefinito: 5.

@item blank-last-page-penalty
@funindex blank-last-page-penalty

La penalità per terminare il brano su una pagina pari.  Se il
valore di @code{blank-last-page-penalty} è grande ed è selezionato
@code{ly:page-turn-breaking}, sarà meno probabile che LilyPond
produca una partitura in cui l'ultima pagina sia pari.  Regolerà
invece la spaziatura in modo da usare una pagina in più o in meno.
Valore predefinito: 0.

@item blank-after-score-page-penalty
@funindex blank-after-score-page-penalty

La penalità per avere una pagina vuota dopo la fine di un brano e
prima di quello successivo.  Il valore predefinito è inferiore a
@code{blank-page-penalty}, in modo che siano inserite preferibilmente
pagine vuote al termine di un brano piuttosto che nel mezzo di un brano.
Valore predefinito: 2.

@end table


@seealso
Guida alla notazione:
@ref{Interruzioni di pagina},
@ref{Interruzione di pagina ottimale},
@ref{Voltata di pagina ottimale},
@ref{Interruzione di pagina minimale},
@ref{Interruzione di pagina di una pagina},
@ref{Interruzione di pagina su una linea},
@ref{Interruzione di pagina su una linea con altezza automatica}.

File installati:
@file{ly/paper-defaults-init.ly}.


@node Variabili di paper per la numerazione delle pagine
@unnumberedsubsubsec Variabili di @code{@bs{}paper} per la numerazione delle pagine
@translationof paper variables for page numbering

I valori predefiniti non elencati qui sono visibili in
@file{ly/paper-defaults-init.ly}

@table @code

@cindex numero di pagina, numerazione automatica
@item auto-first-page-number
@funindex auto-first-page-number

L'algoritmo di interruzione di pagina si comporta diversamente a seconda
che il numero della prima pagina sia dispari o pari.  Se questa variabile
è impostata su vero, l'algoritmo di interruzione di pagina
deciderà se iniziare con un numero dispari o un numero pari.  Quindi il
numero della prima pagina resterà lo stesso o aumenterà di uno.
Valore predefinito: @code{#f} (falso).

@cindex numero di pagina, indicare il primo
@item first-page-number
@funindex first-page-number

Il valore del numero di pagina della prima pagina.

@item print-first-page-number
@funindex print-first-page-number

Se impostato su vero, appare il numero di pagina sulla prima pagina.

@cindex numero di pagina, sopprimere
@item print-page-number
@funindex print-page-number

Se impostato su falso, non apparirano i numeri di pagina.

@cindex numero di pagina, in numeri romani
@item page-number-type
@funindex page-number-type

Il tipo di numero usato per numerare le pagine.  Le opzioni possibili
sono @code{roman-lower}, @code{roman-upper} e @code{arabic}.
Valore predefinito: @code{'arabic}.

@end table

@seealso
File installati:
@file{ly/paper-defaults-init.ly}.

@knownissues
I numeri di pagina dispari sono sempre sulla destra.  Se la musica
deve iniziare a pagina 1, ci deve essere una pagina vuota sulla
seconda di copertina in modo che pagina 1 sia sul lato destro.


@node Svariate variabili di paper
@unnumberedsubsubsec Svariate variabili di @code{@bs{}paper}
@translationof Miscellaneous paper variables

@table @code

@item page-spacing-weight
@funindex page-spacing-weight

L'importanza della spaziatura (verticale) e della linea (orizzontale)
della pagina.  Valori più grandi renderanno la spaziatura della pagina
più importante.  Valore predefinito: @code{10}.

@item print-all-headers
@funindex print-all-headers

Se impostato su vero, appariranno nell'output tutte le intestazioni di
ciascun blocco @code{\score}.  Di norma appaiono soltanto le variabili
@code{piece} e @code{opus}.  Valore predefinito: @code{#f}.

@item system-separator-markup
@funindex system-separator-markup

@funindex \slashSeparator

Un oggetto markup inserito tra i sistemi, spesso usato per le
partiture orchestrali.  Valore predefinito: non impostato.  È
disponibile il comando markup @code{\slashSeparator}, definito
in @file{ly/titling-init.ly}, che fornisce un ragionevole valore
predefinito, per esempio:

@lilypond[quote,verbatim,noragged-right,line-width=30\mm]
#(set-default-paper-size "a8")

\book {
  \paper {
    system-separator-markup = \slashSeparator
  }
  \header {
    tagline = ##f
  }
  \score {
    \relative { c''1 \break c1 \break c1 }
  }
}
@end lilypond

@end table

@seealso
File installati:
@file{ly/titling-init.ly}.

Frammenti:
@rlsr{Spacing}.

@knownissues
L'intestazione di pagina predefinita pone sulla stessa linea il numero di
pagina e il campo @code{instrument} del blocco @code{\header}.


@node Formattazione della partitura
@section Formattazione della partitura
@translationof Score layout

Questa sezione tratta le opzioni di formattazione della partitura disponibili
nel blocco @code{\layout}.

@menu
* Il blocco layout::
* Impostare la dimensione del rigo::
@end menu


@node Il blocco layout
@subsection Il blocco @code{@bs{}layout}
@translationof The layout block

@funindex \layout

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

@itemize
@item la funzione scheme @code{layout-set-staff-size},
@item le modifiche di contesto nei blocchi @code{\context} e
@item le variabili @code{\paper} che agiscono sulla formattazione del brano.
@end itemize

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

Le variabili @code{\paper} che possono apparire in un blocco @code{\layout},
con valori predefiniti presi dal blocco @code{\paper}, sono:

@itemize

@item
@code{line-width}, @code{ragged-right} e @code{ragged-last}
(vedi @ref{Variabili paper per larghezze e margini,,variabili @code{@bs{}paper} per larghezze e margini})

@item
@code{indent} e @code{short-indent}
(vedi @ref{Variabili paper per spostamenti e indentazioni,,Variabili @code{@bs{}paper} per spostamenti e indentazioni})

@item
@code{system-count}
(vedi @ref{Variabili di paper per l'interruzione di linea,,variabili di @code{@bs{}paper} per l'interruzione di linea})

@end itemize

Ecco un esempio di blocco @code{\layout}:

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

Si possono inserire molteplici blocchi @code{\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 @code{\layout} viene elaborato, viene fatta
una copia della configurazione del blocco @code{\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 @code{\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

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

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

I blocchi @code{\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,

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

manterrà la configurazione attuale di @code{\layout} con l'aggiunta
della sovrascrittura @code{NoteHead.font-size}, ma questa combinazione
@emph{non} è salvata come la nuova configurazione corrente.  Attenzione
al fatto che la @qq{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 @code{\layout}, per esempio:

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

Un blocco @code{\layout} che contiene una variabile, come nell'esempio
precedente, @emph{non} copia la configurazione corrente bensì usa il
contenuto di @code{\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 @code{layoutVariable} è definita (o inclusa con @code{\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 @code{\layoutVariable} il blocco @code{\layout}
finale conterrebbe:

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

più le sovrascritture @code{indent} e @code{StaffGrouper}.

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

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

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

@seealso
Guida alla notazione:
@ref{Modifica delle impostazioni predefinite di un contesto}.

Frammenti:
@rlsr{Spacing}.


@node Impostare la dimensione del rigo
@subsection Impostare la dimensione del rigo
@translationof Setting the staff size

@cindex tipo di carattere, impostare la dimensione
@cindex font, impostare la dimensione
@cindex rigo, impostare la dimensione
@cindex layout, file
@funindex magnification->font-size
@funindex magstep
@funindex set-global-staff-size
@funindex layout-set-staff-size

La dimensione del rigo (in inglese @strong{staff size}) è 20 punti, che
corrispondono a un'altezza del rigo di 7.03mm (un punto è uguale a 100/7227
di un pollice o a 2540/7227 mm).  La dimensione del rigo può essere
modificata in tre modi:

@enumerate

@item
Per impostare la dimensione del rigo globalmente per tutti i brani di un
file (o di un blocco @code{\book}, per essere precisi), usare
@code{set-global-staff-size}:

@example
#(set-global-staff-size 14)
@end example

@noindent
L'esempio precedente imposta la dimensione del rigo globale a 14pt (4.92mm) e
ridimensiona proporzionalmente tutti i tipi di carattere.

@item
Per impostare la dimensione del rigo di una singola partitura in un libro, usare
@code{layout-set-staff-size} all'interno del blocco @code{\layout} di quel brano:

@example
\score @{
  @dots{}
  \layout @{
    #(layout-set-staff-size 14)
  @}
@}
@end example

@item
@funindex \magnifyStaff
Per impostare la dimensione del rigo di un singolo rigo di un sistema, usare
il comando @code{\magnifyStaff}.  Per esempio, le partiture di musica da camera
incise in modo tradizionale spesso usavano righi per pianoforte di 7mm mentre
gli altri righi erano solitamente tra 3/5 e 5/7 più grandi (tra 60% e 71%).
Per ottenere la proporzione 5/7, usare:

@example
\score @{
  <<
    \new Staff \with @{
      \magnifyStaff #5/7
    @} @{ @dots{} @}
    \new PianoStaff @{ @dots{} @}
  >>
@}
@end example

Se si desidera una dimensione del tipo di carattere (@code{fontSize}) ben
precisa, si può usare la seguente forma:

@example
\score @{
  <<
    \new Staff \with @{
      \magnifyStaff #(magstep -3)
    @} @{ @dots{} @}
    \new PianoStaff @{ @dots{} @}
  >>
@}
@end example

Per emulare l'aspetto delle partiture incise coi metodi tradizionali, è meglio
evitare di ridurre lo spessore delle linee del rigo.

@end enumerate


@subheading Corpo automatico dei tipi di carattere a dimensioni diverse

Il font Emmentaler fornisce l'insieme di glifi musicali @emph{Feta} in otto
dimensioni diverse, ciascuna calibrata per una specifica dimensione
del rigo.  Più piccola è la dimensione del glifo, più @qq{grosso} diventa,
per abbinarsi alle linee del rigo più spesse.  Le dimensioni dei glifi
consigliate sono elencate nella seguente tabella:

@multitable @columnfractions .15 .2 .22 .2
@item @b{nome del tipo di carattere} @tab @b{altezza del rigo (pt)} @tab @b{altezza del rigo (mm)} @tab @b{uso}
@item feta11 @tab 11.22 @tab 3.9 @tab partiture tascabili
@item feta13 @tab 12.60 @tab 4.4 @tab
@item feta14 @tab 14.14 @tab 5.0 @tab
@item feta16 @tab 15.87 @tab 5.6 @tab
@item feta18 @tab 17.82 @tab 6.3 @tab canzonieri
@item feta20 @tab 20    @tab 7.0 @tab parti standard
@item feta23 @tab 22.45 @tab 7.9 @tab
@item feta26 @tab 25.2  @tab 8.9 @tab @c modern rental material?
@end multitable

@seealso
Guida alla notazione:
@ref{Impostare la dimensione del rigo},
@ref{Il font Emmentaler}.

Frammenti:
@rlsr{Spacing}.


@node Interruzioni
@section Interruzioni
@translationof Breaks

@menu
* Interruzioni di linea::
* Interruzioni di pagina::
@end menu


@node Interruzioni di linea
@subsection Interruzioni di linea
@translationof Line breaking

@funindex \break
@funindex \noBreak
@funindex \autoBreaksOff
@funindex \autoBreaksOn
@funindex \autoLineBreaksOff
@funindex \autoLineBreaksOn
@cindex interruzione di linea manuale
@cindex a capo

Le interruzioni di linea di solito sono determinate automaticamente.  Sono
decise in modo che le linee non sembrino né fitte né troppo spaziate, e che
le linee consecutive abbiano una densità simile.

Per forzare manualmente un'interruzione di linea dopo una stanghetta, usare
il comando @code{\break}:

@lilypond[quote,ragged-right,verbatim]
\relative c'' {
  c4 c c c | \break
  c4 c c c |
}
@end lilypond

Per impostazione predefinita, un comando @code{\break} inserito nel mezzo di una
misura viene ignorato (e apparirà un messaggio di avvertimento durante la
compilazione del file LilyPond).  L'aggiunta di una stanghetta invisibile
-- @w{@samp{\bar ""}} -- prima del comando @code{\break} forzerà l'interruzione
di linea:

@lilypond[quote,ragged-right,verbatim]
\relative c'' {
  c4 c c
  \bar "" \break
  c |
  c4 c c c |
}
@end lilypond

Un comando @code{\break} successivo a una stanghetta viene ignorato se la
misura precedente termina nel mezzo di una nota (per esempio, quando un
gruppo irregolare inizia in una misura e termina in un'altra).  In questo
caso conviene togliere l'incisore @code{Forbid_line_break_engraver} dal
contesto @code{Voice} e usare una costruzione musicale simultanea inserendo
il @code{\break} nel punto giusto della seconda voce:

@lilypond[quote,ragged-right,verbatim]
\new Voice \with {
  \remove "Forbid_line_break_engraver"
} \relative {
  <<
    { c''2. \tuplet 3/2 { c4 c c } c2. | }
    { s1 | \break s1 | }
  >>
}
@end lilypond

Analogalmente, le interruzioni di linea vengono ignorate quando le travature
oltrepassano una stanghetta.  Tale comportamento predefinito può
essere modificato col comando @code{\override Beam.breakable = ##t}:

@lilypond[quote,ragged-right,verbatim]
\relative c'' {
  \override Beam.breakable = ##t
  c2. c8[ c | \break
  c8 c] c2. |
}
@end lilypond

Il comando @code{\noBreak} impedisce un'interruzione di linea sulla
stanghetta in cui è inserito.

In una partitura, l'interruzione di linea automatica è vietata per
la musica compresa tra i comandi @code{\autoLineBreaksOff} e
@code{\autoLineBreaksOn}.  Per impedire anche le interruzioni di
pagina, usare i comandi @code{\autoBreaksOff} e @code{\autoBreaksOn}.
Le interruzioni manuali non sono interessate da questi comandi.
Nota che bloccare le interruzioni di linea automatiche potrebbe
far andare la musica oltre il margine destro se questa non può
essere contenuta in una linea.

Le interruzioni di linea automatiche (ma non le interruzioni di pagina)
possono essere abilitate per singole stanghette usando
@code{\once \autoLineBreaksOn} all'inizio di una stanghetta.
Ciò identifica un'interruzione di linea permessa, invece che forzata.

Le impostazioni fondamentali che influenzano la spaziatura della linea
sono @code{indent} e @code{line-width}, impostate nel blocco
@code{\layout}: regolano l'indentazione della prima linea e la
lunghezza delle linee.

Se @code{ragged-right} è impostato su vero nel blocco @code{\layout}, allora
i sistemi terminano alla loro naturale lunghezza orizzontale, invece di
essere allungati orizzontalmente per riempire l'intera linea.  Ciò è
utile per brevi frammenti e per verificare quanto è stretta la spaziatura
naturale.

@c TODO Check and add para on default for ragged-right

L'opzione @code{ragged-last} è simile a @code{ragged-right}, ma agisce
soltanto sull'ultima linea del brano.

@example
\layout @{
  indent = 0\mm
  line-width = 150\mm
  ragged-last = ##t
@}
@end example

@cindex interruzione di linea regolare
@cindex musica a quattro battute

Per inserire interruzioni di linea a intervalli regolari usare @code{\break}
separato da pause spaziatrici e ripetuto con @code{\repeat}.  Per esempio,
per interrompere le seguenti 28 misure (considerando un tempo di 4/4) esattamente
ogni 4 misure, usare:

@example
<<
  \repeat unfold 7 @{
    s1 \noBreak s1 \noBreak
    s1 \noBreak s1 \break
  @}
  @{ @var{la vera musica@dots{}} @}
>>
@end example


@predefined
@code{\break},
@code{\noBreak},
@code{\autoBreaksOff},
@code{\autoBreaksOn},
@code{\autoLineBreaksOff},
@code{\autoLineBreaksOn}.
@endpredefined

@snippets

@cindex voce apposita per gestire le interruzioni
@cindex pagina, interruzione, gestione con una voce apposita
@cindex linea, interruzione, gestione con una voce apposita
@cindex interruzione, di pagina o linea, gestione con una voce apposita
@cindex a capo, gestione con una voce apposita
@lilypondfile[verbatim,quote,ragged-right,texidoc,doctitle]
{using-an-extra-voice-for-breaks.ly}

@seealso
Guida alla notazione:
@ref{Variabili di paper per l'interruzione di linea},
@ref{Il blocco layout}.

Frammenti:
@rlsr{Spacing}.

Guida al funzionamento interno:
@rinternals{LineBreakEvent}.

@knownissues

L'inserimento dei comandi @code{\autoLineBreaksOff} o @code{\autoBreaksOff}
prima della musica produrrà dei messaggi di errore.  Inserire sempre questi
comandi dopo la musica.


@node Interruzioni di pagina
@subsection Interruzioni di pagina
@translationof Page breaking

Questa sezione descrive i diversi metodi di interruzione di pagina e
spiega come modificarli.

@menu
* Interruzione di pagina manuale::
* Interruzione di pagina ottimale::
* Interruzione di pagina minimale::
* Interruzione di pagina di una pagina::
* Interruzione di pagina su una linea::
* Interruzione di pagina su una linea con altezza automatica::
* Voltata di pagina ottimale::
@end menu


@node Interruzione di pagina manuale
@unnumberedsubsubsec Interruzione di pagina manuale
@translationof Manual page breaking

@funindex \pageBreak
@funindex \noPageBreak
@funindex \autoPageBreaksOn
@funindex \autoPageBreaksOff
@cindex page breaking, manual

L'interruzione di pagina predefinita può essere sovrascritta con i
comandi @code{\pageBreak} o @code{\noPageBreak}.  Questi comandi,
analoghi a @code{\break} e @code{\noBreak}, devono essere
inseriti dopo una stanghetta e forzano o proibiscono l'interruzione
di pagina in quel punto.  Ovviamente il comando @code{\pageBreak}
forza anche un'interruzione di linea.

I comandi @code{\pageBreak} e @code{\noPageBreak} possono essere
inseriti anche nel livello superiore, tra le partiture e i testi
(nel blocco @code{markup}) di livello superiore.

In un brano, le interruzioni di pagina automatiche sono vietate per
la musica compresa tra i comandi @code{\autoPageBreaksOff} e
@code{\autoPageBreaksOn}.  Le interruzioni di pagina manuali non
sono interessate da questi comandi.

Esistono impostazioni analoghe a @code{ragged-right} e
@code{ragged-last} che hanno lo stesso effetto sulla spaziatura
verticale.  Se @code{ragged-bottom} è impostato su @code{#t}, i
sistemi non saranno giustificati verticalmente.  Quando
@code{ragged-last-bottom} è impostato su @code{#t} (valore
predefinito), è permesso dello spazio vuoto in fondo all'ultima
pagina (o in fondo all'ultima pagina di ciascun
@code{\bookpart}).  Vedi
@ref{Fixed vertical spacing paper variables,,Variabili fisse della spaziatura verticale di @code{@bs{}paper}}.

Le interruzioni di pagina sono calcolate dalla funzione @code{page-breaking}.
LilyPond fornisce vari algoritmi per calcolare le interruzioni di pagina, tra
cui @code{ly:optimal-breaking}, @code{ly:page-turn-breaking} e
@code{ly:minimal-breaking}.  Quello predefinito è
@code{ly:optimal-breaking}, ma il valore può essere modificato nel
blocco @code{\paper}:

@example
\paper @{
  page-breaking = #ly:page-turn-breaking
@}
@end example

@funindex \bookpart

Quando un libro ha molte partiture e pagine, il problema delle interruzioni
di pagina potrebbe essere difficile da risolvere e richiedere lunghi tempi
di elaborazione e molta memoria.  Per semplificare il processo di interruzione
delle pagine, si usano i blocchi @code{\bookpart} per dividere il libro in
varie parti: in questo modo l'interruzione di pagina si verifica separatamente
in ciascuna parte.  Si possono anche usare algoritmi di interruzione di
pagina diversi per le diverse parti del libro.

@example
\bookpart @{
  \header @{
    subtitle = "Prefazione"
  @}
  \paper @{
     %% In una parte contenente soprattutto testo,
     %% ly:minimal-breaking potrebbe essere preferibile
     page-breaking = #ly:minimal-breaking
  @}
  \markup @{ @dots{} @}
  @dots{}
@}
\bookpart @{
  %% In questa parte, contenente musica, si usa l'algoritmo di
  %% interruzione di pagina ottimale.
  \header @{
    subtitle = "Primo movimento"
  @}
  \score @{ @dots{} @}
  @dots{}
@}
@end example


@predefined
@code{\pageBreak},
@code{\noPageBreak},
@code{\autoPageBreaksOn},
@code{\autoPageBreaksOff}.
@endpredefined

@seealso
Guida alla notazione:
@ref{Variabili di paper per l'interruzione di pagina}.

Frammenti:
@rlsr{Spacing}.

@knownissues

Il prefisso @code{\once} non funziona con i comandi @code{\autoPageBreaksOn}
e @code{\autoPageBreaksOff}.  Se l'interruzione di pagina automatica è
disabilitata e poi viene abilitata per permettere un'interruzione di
pagina, deve restare attiva per alcune battute (il numero preciso di
battute dipende dalla partitura) prima di essere disattivata, altrimenti
la possibilità di interrompere la pagina non verrà considerata.


@node Interruzione di pagina ottimale
@unnumberedsubsubsec Interruzione di pagina ottimale
@translationof Optimal page breaking

@funindex ly:optimal-breaking

La funzione @code{ly:optimal-breaking} è il metodo predefinito di LilyPond
per determinare le interruzioni di pagina.  Tenta di individuare un'interruzione
di pagina che minimizzi la densità e l'allungamento, sia orizzontalmente che
verticalmente.  Diversamente da @code{ly:page-turn-breaking}, non prende in
considerazione le voltate di pagina.

@seealso
Frammenti:
@rlsr{Spacing}.


@node Interruzione di pagina minimale
@unnumberedsubsubsec Interruzione di pagina minimale
@translationof Minimal page breaking

@funindex ly:minimal-breaking

La funzione @code{ly:minimal-breaking} fa dei calcoli minimi
per valutare l'interruzione di pagina: riempie una pagina col
maggior numero possibile di sistemi prima di passare a quella
successiva.  Dunque potrebbe essere preferibile per le partiture
con molte pagine, per le quali le altre funzioni di interruzione
di pagina potrebbero essere troppo lente o richiedere troppa
memoria, o con molto testo.  Si abilita con:

@example
\paper @{
  page-breaking = #ly:minimal-breaking
@}
@end example

@seealso
Frammenti:
@rlsr{Spacing}.


@node Interruzione di pagina di una pagina
@unnumberedsubsubsec Interruzione di pagina di una pagina
@translationof One-page page breaking

@funindex ly:one-page-breaking

La funzione @code{ly:one-page-breaking} è un algoritmo di interruzione di
pagina per casi speciali che regola automaticamente l'altezza della pagina
per farci entrare la musica, in modo che stia tutto in una sola pagina.
La variabile @code{paper-height} del blocco paper viene ignorata, ma le
altre impostazioni funzionano normalmente.  In particolare, la spaziatura
tra l'ultimo sistema (o il testo markup di livello superiore) e il piè di pagina
può essere personalizzata grazie a @code{last-bottom-spacing} nel blocco paper.
La larghezza della pagina non viene modificata ma può essere impostata con
@code{paper-width} nel blocco paper.

@knownissues
@code{ly:one-page-breaking} non è attualmente compatibile con
@code{\bookpart}.


@node Interruzione di pagina su una linea
@unnumberedsubsubsec Interruzione di pagina su una linea
@translationof One-line page breaking

@funindex ly:one-line-breaking

La funzione @code{ly:one-line-breaking} è un algoritmo di interruzione
di pagina per uso speciale in quanto pone ogni brano su una sola pagina e
una singola linea.  Non appaiono né titoli né margini, ma viene
mostrato solo il brano musicale.

La larghezza della pagina è regolata in modo che il brano più
lungo stia su una sola linea.  In particolare, le variabili @code{paper-width},
@code{line-width} e @code{indent} del blocco @code{\paper} vengono
ignorate, sebbene @code{left-margin} e @code{right-margin} siano
comunque considerate.  L'altezza della pagina resta invariata.


@node Interruzione di pagina su una linea con altezza automatica
@unnumberedsubsubsec Interruzione di pagina su una linea con altezza automatica
@translationof One-line-auto-height page breaking

@funindex ly:one-line-auto-height-breaking

La funzione @code{ly:one-line-auto-height-breaking} funziona proprio come
@code{ly:one-line-breaking} con la differenza che l'altezza della pagina
viene modificata automaticamente per adattarsi all'altezza della musica.
Più precisamente, la variabile @code{paper-height} del blocco @code{\paper}
viene impostata in modo che abbracci l'altezza della partitura più alta
e i margini superiore e inferiore (@code{top-margin} e @code{bottom-margin}).

Fare attenzione al fatto che l'impostazione @code{top-system-spacing} avrà
effetto sulla posizione verticale della musica.  Impostarla su @code{##f} in
un blocco @code{\paper} per posizionare la musica tra i margini superiore e
inferiore.


@node Voltata di pagina ottimale
@unnumberedsubsubsec Voltata di pagina ottimale
@translationof Optimal page turning

@funindex ly:page-turn-breaking

È spesso necessario trovare una configurazione delle interruzioni di
pagina in cui ci sia una pausa al termine di ogni due pagine.
In questo modo il musicista può voltare la pagina senza perdere
le note.  La funzione @code{ly:page-turn-breaking} tenta di trovare
un'interruzione di pagina che minimizzi densità e allungamento, ma
con l'ulteriore restrizione che le voltate di pagina sono permesse
solo in punti specifici.

Ci sono due passi da seguire per usare questa funzione.  Prima
occorre abilitarla nel blocco @code{\paper}, come è spiegato in
@ref{Interruzioni di pagina}.  Poi bisogna indicare alla funzione dove
sono permesse le interruzioni di pagina.

Ci sono due modi per fare il secondo passo.  Si può specificare
manualmente ogni potenziale voltata di pagina, inserendo
@code{\allowPageTurn} nei punti adatti del file di input.

Oppure, se ciò è troppo noioso, si può aggiungere l'incisore
@code{Page_turn_engraver} a un contesto Staff o Voice.  L'incisore
@code{Page_turn_engraver} analizzerà il contesto in cerca di sezioni
senza note (non cerca pause, bensì l'assenza di note, in modo che
la polifonia su un singolo rigo con pause in una delle parti non
confonda @code{Page_turn_engraver}).  Quando trova una sezione
senza note abbastanza lunga, @code{Page_turn_engraver} inserirà il
comando @code{\allowPageTurn} nella stanghetta finale di quella
sezione, a meno che non ci sia una stanghetta @q{speciale} (come
una doppia stanghetta), nel qual caso il comando @code{\allowPageTurn}
sarà inserito nella stanghetta finale @qq{speciale} della sezione.

@funindex minimumPageTurnLength
L'incisore @code{Page_turn_engraver} legge la proprietà di contesto
@code{minimumPageTurnLength} per determinare quanto deve essere lunga
una sezione senza note prima che una voltata di pagina sia considerata.
Il valore predefinito di @code{minimumPageTurnLength} è
@code{(ly:make-moment 1/1)}.  Per disabilitare le voltate di pagina,
impostarla su un valore @qq{molto grande}.

@example
\new Staff \with @{ \consists "Page_turn_engraver" @}
@{
  a4 b c d |
  R1 | % voltata di pagina permessa qui
  a4 b c d |
  \set Staff.minimumPageTurnLength = #(ly:make-moment 5/2)
  R1 | % voltata di pagina non permessa qui
  a4 b r2 |
  R1*2 | % voltata di pagina permessa qui
  a1
@}
@end example

@funindex minimumRepeatLengthForPageTurn
Quando si usano ripetizioni con finali alternativi, l'incisore @code{Page_turn_engraver}
permetterà una voltata di pagina durante la ripetizione soltanto se c'è
abbastanza tempo all'inizio e alla fine della ripetizione per voltare
indietro la pagina.  Se la ripetizione è troppo breve, si può usare
@code{Page_turn_engraver} per @emph{disabilitare} le voltate impostando
un valore appropriato per la proprietà di contesto @code{minimumRepeatLengthForPageTurn}.
In questo caso @code{Page_turn_engraver} consentirà le voltate soltanto nelle
ripetizioni la cui durata sia maggiore del valore specificato.

I comandi per le voltate di pagina (@code{\pageTurn}, @code{\noPageTurn}
e @code{\allowPageTurn}), possono essere usati anche nel livello superiore,
nei blocchi markup di livello superiore e tra una partitura e l'altra.

@predefined
@funindex \pageTurn
@code{\pageTurn},
@funindex \noPageTurn
@code{\noPageTurn},
@funindex \allowPageTurn
@code{\allowPageTurn}.
@endpredefined

@seealso
Guida alla notazione:
@ref{Variabili di paper per l'interruzione di linea}.

Frammenti:
@rlsr{Spacing}.

@knownissues
Usare soltanto un incisore @code{Page_turn_engraver} per partitura.  Se ce
n'è più d'uno, interferiranno uno con l'altro.


@seealso
Guida alla notazione:
@ref{Spaziatura verticale}.

Frammenti:
@rlsr{Spacing}.


@node Spaziatura verticale
@section Spaziatura verticale
@translationof Vertical spacing

@cindex spaziatura verticale
@cindex verticale, spaziatura

La spaziatura verticale è regolata da tre elementi: la quantità di
spazio disponibile (ovvero il formato e i margini), la quantità di
spazio tra i sistemi e la quantità di spazio tra i righi di un
sistema.

@menu
* Spaziatura verticale flessibile all'interno dei sistemi::
* Posizionamento esplicito di righi e sistemi::
* Elusione delle collisioni verticali::
@end menu


@node Spaziatura verticale flessibile all'interno dei sistemi
@subsection Spaziatura verticale flessibile all'interno dei sistemi
@translationof Flexible vertical spacing within systems

@cindex distanza, tra i righi
@cindex rigo, distanza
@cindex spazio, tra i righi
@cindex spazio, dentro i sistemi

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

@itemize

@item
@emph{righi non raggruppati},

@item
@emph{righi raggruppati} (righi con un gruppo come
@code{ChoirStaff}, etc.), e

@item
@emph{linee che non sono righi} (come @code{Lyrics}, @code{ChordNames},
etc.).

@end itemize

@c TODO: Clarify this.  This almost implies that non-staff lines
@c       have NO effect on the spacing between staves.  -mp

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
@code{\paper} trattate in
@ref{Flexible vertical spacing paper variables,,Variabili @code{@bs{}paper} della spaziatura verticale flessibile}.

@menu
* Proprietà della spaziatura dentro un sistema::
* Spaziatura dei righi non raggruppati::
* Spaziatura dei righi raggruppati::
* Spaziatura delle linee che non sono righi::
@end menu


@node Proprietà della spaziatura dentro un sistema
@unnumberedsubsubsec Proprietà della spaziatura dentro un sistema
@translationof Within-system spacing properties

@funindex staff-affinity
@funindex staffgroup-staff-spacing
@funindex staff-staff-spacing
@funindex nonstaff-unrelatedstaff-spacing
@funindex nonstaff-relatedstaff-spacing
@funindex nonstaff-nonstaff-spacing
@funindex default-staff-staff-spacing
@funindex minimum-Y-extent
@funindex extra-offset
@funindex self-alignment-X
@funindex X-offset
@funindex VerticalAxisGroup

I meccanismi di spaziatura verticale dentro un sistema sono regolati da
due gruppi di proprietà dei grob.  Il primo gruppo è associato al grob
@code{VerticalAxisGroup}, creato da tutti i righi e tutte le linee che
non sono righi.  Il secondo gruppo è associato al grob
@code{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 @code{staff-affinity})
hanno il formato @code{@var{elemento1}-@var{elemento2}-spacing}, dove
@code{@var{elemento1}} e @code{@var{elemento2}} sono gli elementi di
cui determinare la distanza.  Nota che @code{@var{elemento2}} non è
necessariamente sotto @code{@var{elemento1}}; per esempio,
@code{nonstaff-relatedstaff-spacing} prenderà le misure verso l'alto a
partire dalla linea che non è un rigo (nonstaff) se
@code{staff-affinity} è impostato su @code{UP}.

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

@multitable {Non-staff line} {Reference point}
@headitem Linea non-rigo     @tab Punto di riferimento
@item @code{ChordNames}      @tab linea di base
@item @code{NoteNames}       @tab linea di base
@item @code{Lyrics}          @tab linea di base
@item @code{Dynamics}        @tab metà altezza di @q{m}
@item @code{FiguredBass}     @tab punto più alto
@item @code{FretBoards}      @tab linea più alta
@end multitable

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

@lilypond[quote,noragged-right,line-width=110\mm]
#(define zero-space '((padding . -inf.0) (basic-distance . 0)))

alignToZero = \with {
  \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #zero-space
  \override VerticalAxisGroup.nonstaff-nonstaff-spacing = #zero-space
  \override VerticalAxisGroup.staff-affinity = #DOWN
  \remove Text_engraver % impedisce di averne due
  \consists Text_engraver
}
lowerCaseChords = \with {
  chordNameLowercaseMinor = ##t
}
labelContext =
#(define-music-function
     (context)
     (string?)
     #{ s1*0^\markup { \upright {\typewriter #context } } #})

\layout {
  \context { \Dynamics    \alignToZero }
  \context { \FiguredBass \alignToZero }
  \context { \Lyrics      \alignToZero }
  \context { \NoteNames   \alignToZero }
  \context { \ChordNames  \alignToZero \lowerCaseChords }
  \context { \FretBoards  \alignToZero }
  \context { \Score
    \omit BarLine
    \override DynamicText.self-alignment-X = #-1
    \override FretBoard.X-offset = #1.75
    \override InstrumentName.minimum-Y-extent = #'(-1 . 2)
    \textLengthOn
    \omit TimeSignature
  }
}

%% Questi contesti hanno punti di riferimento nella linea di base:
%%   ChordNames, NoteNames, and Lyrics
<<
  \new ChordNames { \chords { \labelContext "ChordNames"  g1:m } }
  \new NoteNames { s1 |\labelContext "NoteNames"  g1 | }
  \new Lyrics { \lyrics { \skip 1*2 | \labelContext "Lyrics" ghijk1 | } }
  \new RhythmicStaff \with { instrumentName = "linea di base " } s1*3
>>

%% Il punto di riferimento per Dynamics è la linea centrale della 'm' nel tipo di carattere
<<
  \new Dynamics { \labelContext "Dynamics" s1\mp s\fp }
  \new RhythmicStaff \with { instrumentName = "metà altezza " } s1*3
>>

%% Il punto di riferimento per FiguredBass è il suo punto più alto
<<
  \new FiguredBass { \labelContext "FiguredBass" \figuremode { <6 5>1 } }
  \new RhythmicStaff \with { instrumentName = "punto più alto " } s1
>>

%% Il punto di riferimento per FretBoards è la linea più alta
\include "predefined-guitar-fretboards.ly"
<<
  \new FretBoards { \labelContext "FretBoards" \chordmode { e1 } }
  \new RhythmicStaff \with { instrumentName = "linea più alta " } s1
>>
@end lilypond

Tutte le proprietà di spaziatura verticale del grob (eccetto
@code{staff-affinity}) usano la stessa struttura della lista
associativa usata dalle variabili di spaziatura di @code{\paper}
trattate in
@ref{Flexible vertical spacing paper variables,,Variabili @code{@bs{}paper} della spaziatura verticale flessibile}.
Metodi specifici per modificare queste liste sono spiegati in
@ref{Modifica delle liste associative}.  Le proprietà dei grob devono essere
modificate con un comando @code{\override} dentro un blocco
@code{\score} o @code{\layout} e non in un blocco
@code{\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à:

@example
\new Staff \with @{
  \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
@} @{ @dots{} @}

\new Staff \with @{
  \override VerticalAxisGroup.default-staff-staff-spacing =
    #'((basic-distance . 10)
       (minimum-distance . 9)
       (padding . 1)
       (stretchability . 10))
@} @{ @dots{} @}
@end example

Per cambiare le impostazioni di spaziatura globalmente, inserirle in
un blocco @code{\layout}:

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

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


@subsubheading Proprietà del grob @code{VerticalAxisGroup}

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

@table @code
@item 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 @code{Lyrics}).
Non è applicata all'ultimo rigo di un sistema.

Inizialmente, la proprietà @code{staff-staff-spacing} di un
@code{VerticalAxisGroup} è una funzione Scheme che applica le
proprietà di @code{StaffGrouper} se il rigo fa parte di un
gruppo, o la proprietà @code{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.

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

@item staff-affinity
La direzione del rigo da usare per spaziare la linea che non è un rigo.
Le opzioni sono @code{UP} (su), @code{DOWN} (giù) e
@code{CENTER} (centro).  Se impostata su @code{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 @code{staff-affinity} che
non cresce: per esempio, una linea che non è un rigo impostata su
@code{UP} non deve seguire immediatamente una linea impostata su
@code{DOWN}.  Linee che non sono righi in cima a un sistema devono usare
@code{DOWN}; quelle in fondo @code{UP}.  Impostando
@code{staff-affinity} per un rigo, questo sarà trattato come
una linea che non è un rigo.  Impostando @code{staff-affinity} su @code{#f},
una linea che non è un rigo sarà trattata come un rigo.  Impostando
@code{staff-affinity} su @code{UP}, @code{CENTER} o @code{DOWN},
un rigo verrà spaziato come se fosse una linea che non è un rigo.

@item nonstaff-relatedstaff-spacing
La distanza fra la linea (che non è un rigo) corrente e il rigo più
vicino nella direzione di @code{staff-affinity}, se non ci sono
linee che non sono righi tra le due e @code{staff-affinity} è
impostato su @code{UP} o @code{DOWN}.  Se @code{staff-affinity} è
impostato su @code{CENTER}, viene usato @code{nonstaff-relatedstaff-spacing}
per i righi più vicini su @emph{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à @code{stretchability}
di uno di questi tipi di spaziatura su un piccolo valore, quella spaziatura
sarà dominante.  Impostando @code{stretchability} su un grande valore, quella
spaziatura avrà poco effetto.

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

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


@subsubheading Proprietà del grob @code{StaffGrouper}

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

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

@item 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
@code{Lyrics}).  Non è applicata al rigo inferiore di un sistema.  La
proprietà @code{staff-staff-spacing} del grob @code{VerticalAxisGroup}
di un singolo rigo può essere sovrascritta con varie impostazioni di
spaziatura per quel rigo.
@end table

@seealso
Guida alla notazione:
@ref{Flexible vertical spacing paper variables,,Variabili @code{@bs{}paper} della spaziatura verticale flessibile},
@ref{Modifica delle liste associative}.

File installati:
@file{ly/engraver-init.ly},
@file{scm/define-grobs.scm}.

Guida al funzionamento interno:
@rinternals{Contexts},
@rinternals{VerticalAxisGroup},
@rinternals{StaffGrouper}.


@node Spaziatura dei righi non raggruppati
@unnumberedsubsubsec Spaziatura dei righi non raggruppati
@translationof Spacing of ungrouped staves

I @emph{righi} (come @code{Staff}, @code{DrumStaff},
@code{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 @emph{non raggruppati}:

@itemize
@item Proprietà di @code{VerticalAxisGroup}:
@itemize
@item @code{default-staff-staff-spacing}
@item @code{staff-staff-spacing}
@end itemize
@end itemize

Queste proprietà del grob sono state descritte una a una in precedenza; vedi
@ref{Within-system spacing properties}.

Altre proprietà entrano in gioco per i righi che sono parte di un gruppo;
vedi @ref{Spacing of grouped staves}.

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

@lilypond[verbatim,quote,staffsize=16]
\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 | }
>>
@end lilypond

@seealso
File installati:
@file{scm/define-grobs.scm}.

Frammenti:
@rlsr{Spacing}.

Guida al funzionamento interno:
@rinternals{VerticalAxisGroup}.


@node Spaziatura dei righi raggruppati
@unnumberedsubsubsec Spaziatura dei righi raggruppati
@translationof Spacing of grouped staves

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 @emph{gruppi di righi} (come @code{StaffGroup}, @code{ChoirStaff},
etc.) sono contesti che possono contenere uno o più righi
simultaneamente.

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

@itemize
@item Proprietà di @code{VerticalAxisGroup}:
@itemize
@item @code{staff-staff-spacing}
@end itemize
@item Proprietà di @code{StaffGrouper}:
@itemize
@item @code{staff-staff-spacing}
@item @code{staffgroup-staff-spacing}
@end itemize
@end itemize

Queste proprietà dei grob sono descritte una a una in una sezione precedente; vedi
@ref{Within-system spacing properties}.

L'esempio seguente mostra come le proprietà del grob
@code{StaffGrouper} possano influenzare la spaziatura dei righi raggruppati:

@lilypond[verbatim,quote,staffsize=16]
\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 }
  >>
>>
@end lilypond

@seealso
File installati:
@file{scm/define-grobs.scm}.

Frammenti:
@rlsr{Spacing}.

Guida al funzionamento interno:
@rinternals{VerticalAxisGroup},
@rinternals{StaffGrouper}.


@node Spaziatura delle linee che non sono righi
@unnumberedsubsubsec Spaziatura delle linee che non sono righi
@translationof Spacing of non-staff lines

Le @emph{linee che non sono righi} (come @code{Lyrics}, @code{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 @rinternals{Axis_group_engraver}.

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

@itemize
@item Proprietà di @code{VerticalAxisGroup}:
@itemize
@item @code{staff-affinity}
@item @code{nonstaff-relatedstaff-spacing}
@item @code{nonstaff-nonstaff-spacing}
@item @code{nonstaff-unrelatedstaff-spacing}
@end itemize
@end itemize

Queste proprietà del grob sono descritte una a una in una sezione
precedente, vedi @ref{Within-system spacing properties}.

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

@lilypond[verbatim,quote,staffsize=16]
\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 }
>>
@end lilypond

@seealso
File installati:
@file{ly/engraver-init.ly},
@file{scm/define-grobs.scm}.

Frammenti:
@rlsr{Spacing}.

@c @lsr{spacing,page-spacing.ly},
@c @lsr{spacing,alignment-vertical-spacing.ly}.

Guida al funzionamento interno:
@rinternals{Contexts},
@rinternals{VerticalAxisGroup}.


@node Posizionamento esplicito di righi e sistemi
@subsection Posizionamento esplicito di righi e sistemi
@translationof Explicit staff and system positioning

Un modo per comprendere i meccanismi di spaziatura verticale
appena spiegati è di considerarli come un insieme di impostazioni
che regolano la quantità di @emph{padding} verticale tra righi
e tra sistemi.

È possibile gestire la spaziatura verticale in un modo diverso
usando @code{NonMusicalPaperColumn.line-break-system-details}.
Mentre i meccanismi di spaziatura verticale flessibile specificano
il padding verticale, @code{NonMusicalPaperColumn.line-break-system-details}
indica precisamente le posizioni verticali esatte sulla pagina.

@code{NonMusicalPaperColumn.line-break-system-details} accetta una
lista associativa di quattro diverse impostazioni:

@itemize
@item @code{X-offset}
@item @code{Y-offset}
@item @code{extra-offset}
@item @code{alignment-distances}
@end itemize

Le modifiche del grob con @code{\override}, incluse quelle per @code{NonMusicalPaperColumn}
come nell'esempio successivo, possono trovarsi in uno di questi tre diversi
punti del file di input:

@itemize
@item direttamente in mezzo alle note
@item in un blocco @code{\context}
@item nel blocco @code{\with}
@end itemize

Quando si modifica @code{NonMusicalPaperColumn}, si usa il solito
comando @code{\override} nei blocchi @code{\context} e nel blocco
@code{\with}.  Invece quando si modifica
@code{NonMusicalPaperColumn} in mezzo alle note,
si usa il comando speciale @code{\overrideProperty}.  Ecco alcuni
esempi di modifiche di @code{NonMusicalPaperColumn} col comando
speciale @code{\overrideProperty}:

@example
\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)))
@end example

Per comprendere come funziona ognuna di queste impostazioni, iniziamo
vedendo un esempio che non contiene alcuna modifica.

@c \book { } is required in these examples to ensure the spacing
@c overrides can be seen between systems. -np

@lilypond[verbatim,quote,staffsize=16]
\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' }
      }
    >>
  }
}
@end lilypond

Questa partitura isola l'informazione sulle interruzioni di linea e di pagina
in una voce apposita.  Questa tecnica di creare una voce per le interruzioni
permette di tenere la formattazione separata dalla musica via via che il
nostro esempio diventa più complicato.  Vedi anche @ref{Interruzioni}.

Usando comandi @code{\break} espliciti, la musica viene divisa proporzionalmente
in cinque misure per linea.  La spaziatura verticale è quella predefinita di
LilyPond ma il punto di inizio verticale di ogni sistema è impostato
esplicitamente con la coppia @code{Y-offset} dell'attributo
@code{line-break-system-details} del grob @code{NonMusicalPaperColumn}:

@lilypond[verbatim,quote,staffsize=16]
\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' }
      }
    >>
  }
}
@end lilypond

Nota che @code{line-break-system-details} accetta una lista associativa di
molti valori, ma ne abbiamo impostato solo uno in questo esempio.  Nota
anche che la proprietà @code{Y-offset} qui determina la posizione verticale
esatta sulla pagina in cui ogni nuovo sistema verrà visualizzato.

Oltre al posizionamento assoluto che si ottiene con @code{Y-offset} e
@code{X-offset}, è possibile anche il posizionamento relativo tramite
la proprietà @code{extra-offset} di @code{line-break-system-details}.
Il posizionamento è relativo alla formattazione predefinita o al posizionamento
assoluto determinato dall'uso di @code{X-offset} e @code{Y-offset}.  La
proprietà @code{extra-offset} accetta una @code{coppia} di numeri che
determinano lo spostamento lungo gli assi X e Y.

@lilypond[verbatim,quote,staffsize=16]
\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' }
      }
    >>
  }
}
@end lilypond


Ora che abbiamo impostato esplicitamente il punto di inizio verticale di
ogni sistema, possiamo impostare manualmente anche le distanze verticali
tra i righi.  Per farlo usiamo la sottoproprietà @code{alignment-distances}
di @code{line-break-system-details}.

@lilypond[verbatim,quote,staffsize=16]
\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' }
      }
    >>
  }
}
@end lilypond

Nota che qui assegnamo due valori diversi all'attributo
@code{line-break-system-details} del grob
@code{NonMusicalPaperColumn}.  Sebbene l'attributo alist
@code{line-break-system-details} accetti molti altri parametri di
spaziatura (inclusa, per esempio, una coppia corrispondente
di @code{X-offset}), è sufficiente impostare soltanto le coppie @code{Y-offset}
e @code{alignment-distances} per regolare il punto di inizio verticale di
ogni sistema e ogni rigo.  Infine nota che @code{alignment-distances}
specifica il posizionamento verticale dei righi ma non dei gruppi di righi.

@lilypond[verbatim,quote,staffsize=16]
\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' } }
      >>
    >>
  }
}
@end lilypond

Alcuni punti da considerare:

@itemize
@item Quando si usa @code{alignment-distances}, il testo vocale e altre linee
che non sono righi non contano come rigo.

@item Le unità dei numeri assegnati a @code{X-offset},
@code{Y-offset}, @code{extra-offset} e @code{alignment-distances} sono interpretati
come multipli della distanza tra linee del rigo adiacenti.  Valori positivi
spostano in su righi e testo, valori negativi li spostano in giù.

@item Dato che le impostazioni di @code{NonMusicalPaperColumn.line-break-system-details}
illustrate qui permettono il posizionamento di righi e sistemi ovunque
sulla pagina, è possibile violare i confini del foglio o dei margini o
perfino sovrapporre righi e sistemi uno sopra l'altro.  Ciò può essere
evitato assegnando valori ragionevoli a queste diverse impostazioni.
@end itemize

@seealso
Frammenti:
@rlsr{Spacing}.


@node Elusione delle collisioni verticali
@subsection Elusione delle collisioni verticali
@translationof Vertical collision avoidance

@funindex outside-staff-priority
@funindex outside-staff-padding
@funindex outside-staff-horizontal-padding

Intuitivamente, ci sono alcuni oggetti della notazione musicale che
appartengono al rigo e altri che devono essere disposti fuori dal
rigo.  Gli oggetti esterni al rigo comprendono i numeri di chiamata,
il testo e le dinamiche (d'ora in avanti tutti questi elementi saranno
chiamati oggetti esterni al rigo).  La regola di LilyPond per il
posizionamento verticale degli oggetti esterni al rigo è di disporli
il più vicino possibile al rigo ma non così vicino da farli collidere
con un altro oggetto.

LilyPond usa la proprietà @code{outside-staff-priority} per determinare
se un grob è un oggetto fuori dal rigo: se @code{outside-staff-priority}
è un numero, il grob è un oggetto esterno al rigo.  @code{outside-staff-priority}
indica a LilyPond anche in quale ordine disporre gli oggetti.

LilyPond posiziona prima tutti gli oggetti che non sono esterni al
rigo.  Quindi ordina gli oggetti esterni al rigo in base al loro valore
di @code{outside-staff-priority} (in ordine crescente).  Uno per volta, LilyPond
prende gli oggetti esterni al rigo e li dispone in modo che non entrino in
collisione con alcun oggetto che sia già stato disposto.  Ovvero, se due
grob esterni al rigo si contendono lo stesso spazio, quello col valore
di @code{outside-staff-priority} più basso sarà posto più vicino al rigo.

Un elenco delle proprietà esterne al rigo si trova in
@rlearning{La proprietà outside-staff-priority}.

@lilypond[quote,ragged-right,verbatim]
\relative c'' {
  c4_"Testo"\pp
  r2.
  \once \override TextScript.outside-staff-priority = #1
  c4_"Testo"\pp % stavolta il testo sarà più vicino al rigo
  r2.
  % impostando outside-staff-priority su un non-numero,
  % disabilitiamo l'elusione automatica delle collisioni
  \once \override TextScript.outside-staff-priority = ##f
  \once \override DynamicLineSpanner.outside-staff-priority = ##f
  c4_"Testo"\pp % qui entrano in collisione
}
@end lilypond

Il padding verticale intorno agli oggetti esterni al rigo
può essere regolato con @code{outside-staff-padding}.

@lilypond[quote,ragged-right,verbatim,staffsize=18]
\relative {
  \once \override TextScript.outside-staff-padding = #0
  a'4-"outside-staff-padding = #0"
  \once \override TextScript.outside-staff-padding = #3
  d-"outside-staff-padding = #3"
  c-"outside-staff-padding predefinito"
  b-"outside-staff-padding predefinito"
  R1
}
@end lilypond


Per impostazione predefinita, gli oggetti esterni al rigo sono disposti
in modo da evitare la collisione orizzontale con grob posizionati
precedentemente.  Ciò può portare a situazioni in cui gli oggetti
sono posizionati uno vicino all'altro orizzontalmente.
Come è dimostrato nell'esempio successivo, impostando @code{outside-staff-horizontal-padding}
si aumenta la spaziatura orizzontale richiesta e in questo caso si sposta
in su il testo per impedire che si avvicini troppo ai tagli addizionali.

@lilypond[quote,ragged-right,verbatim]
\relative {
  c''4^"Parola" c c''2
  R1
  \once \override TextScript.outside-staff-horizontal-padding = #1
  c,,4^"Parola" c c''2
}
@end lilypond

@seealso
Frammenti:
@rlsr{Spacing}.


@node Spaziatura orizzontale
@section Spaziatura orizzontale
@translationof Horizontal spacing

@cindex spaziatura orizzontale
@cindex orizzontale, spaziatura

@menu
* Panoramica sulla spaziatura orizzontale::
* Nuova spaziatura nel corso di un brano::
* Modifica della spaziatura orizzontale::
* Larghezza della linea::
* Notazione proporzionale::
@end menu


@node Panoramica sulla spaziatura orizzontale
@subsection Panoramica sulla spaziatura orizzontale
@translationof Horizontal spacing overview

Il motore della spaziatura traduce le differenze delle durate delle
note in distanze allungabili (@q{springs}) di diversa lunghezza.  Durate
più lunghe occupano più spazio, quelle più brevi ne occupano meno.
Le durate più brevi occupano una quantità fissa di spazio (regolata da
@code{shortest-duration-space} nell'oggetto @rinternals{SpacingSpanner}).
Più lunga è la durata, più spazio occupa: raddoppiando una durata
si aggiunge spazio alla nota di una quantità pari al valore di
@code{spacing-increment}.

Per esempio, il brano seguente contiene molte minime, semiminime e
crome; la croma (1/8) è seguita da 1 Larghezza della Testa di Nota (LTN).
La semiminima (1/4) è seguita da 2 LTN, la minima (1/2) da 3 LTN, etc.

@lilypond[quote,verbatim]
\relative c' {
  c2 c4. c8
  c4. c8 c4. c8
  c8 c c4 c c
}
@end lilypond

Solitamente, @code{spacing-increment} è impostato su 1.2 di spazio rigo, che
equivale all'incirca alla larghezza della testa di nota, e
@code{shortest-duration-space} è impostato su 2.0, che significa che
la nota più breve occupa 2.4 di spazio rigo (2 volte @code{spacing-increment})
di spazio orizzontale.  Questo spazio è calcolato dal margine sinistro
del simbolo, dunque le note più brevi sono generalmente seguite da
un LTN di spazio.

Se si seguisse esattamente la procedura descritta, aggiungendo una
sola biscroma (1/32) a un brano che usa solo crome e semicrome, la
spaziatura orizzontale dell'intero brano sarebbe troppo larga.  Infatti
la nota più breve non è più una semicroma ma una biscroma, aggiungendo
quindi 1 LTN a ogni nota.  Per impedire ciò, la durata più breve per
la spaziatura non deriva dalla nota più breve, bensì dalla nota che
ricorre più frequentemente nel brano.

La durata più breve più comune viene individuata nel modo seguente.  In ogni
misura viene determinata la durata più breve e quella più frequente viene
scelta come base per la spaziatura, con la condizione che tale durata debba
essere sempre uguale o inferiore a una nota di un ottavo.

Tali durate possono anche essere personalizzate.  Impostando
@code{common-shortest-duration} in @rinternals{SpacingSpanner}, si
imposta la durata di base per la spaziatura.  La durata massima per
essa (solitamente un ottavo), si imposta con @code{base-shortest-duration}.

@funindex common-shortest-duration
@funindex base-shortest-duration
@funindex stem-spacing-correction
@funindex spacing

Note ancora più brevi della nota più breve più comune sono seguite
da uno spazio proporzionale alla loro durata rispetto a essa.  Dunque
se aggiungessimo solo alcuni sedicesimi all'esempio precedente, sarebbero
seguiti dalla metà di LTN:

@lilypond[quote,verbatim]
\relative { c''2 c4. c8 | c4. c16[ c] c4. c8 | c8 c c4 c c }
@end lilypond


Come è spiegato nel saggio @emph{Essay on automated music engraving}, le
direzioni del gambo influenzano la spaziatura (vedi @ressay{Optical spacing}) e
possono essere aggiustate usando la proprietà @code{stem-spacing-correction}
dell'oggetto @rinternals{NoteSpacing} (che sono generati per ogni
contesto @rinternals{Voice}.

L'oggetto @code{StaffSpacing} (generato nel contesto @rinternals{Staff})
contiene la stessa proprietà per regolare la spaziatura tra gambo e stanghetta.

L'esempio seguente mostra tutto questo: una volta con le impostazioni
predefinite e una volta con un aggiustamento esagerato:

@lilypond[quote,ragged-right]
\fixed c' {
  c4 e'4 e4 b4 |
  b4 e'4 b4 e'4 |
  \override Staff.NoteSpacing.stem-spacing-correction = #1.5
  \override Staff.StaffSpacing.stem-spacing-correction = #1.5
  c4 e'4 e4 b4 |
  b4 e'4 b4 e'4 |
}
@end lilypond

LilyPond supporta la notazione proporzionale, vedi @ref{Proportional notation}.

@seealso
Essay on automated music engraving:
@ressay{Spaziatura ottica}.

Frammenti:
@rlsr{Spacing}.

Guida al funzionamento interno:
@rinternals{SpacingSpanner},
@rinternals{NoteSpacing},
@rinternals{StaffSpacing},
@rinternals{NonMusicalPaperColumn}.

@knownissues
Non esiste un modo semplice per modificare manualmente la spaziatura.  Per
aggirare il problema si può inserire dell'ulteriore spazio in una partitura,
regolando il valore di padding di quanto è necessario:

@example
 \override Score.NonMusicalPaperColumn.padding = #10
@end example

Non esiste alcun trucco per diminuire la quantità di spazio.


@c traduzione del titolo non letterale ma più chiara
@node Nuova spaziatura nel corso di un brano
@subsection Nuova spaziatura nel corso di un brano
@translationof New spacing section

@funindex \newSpacingSection
@cindex nuova spaziatura nel corso di un brano
@cindex spaziatura nuova nel corso di un brano
@cindex nota, spaziatura orizzontale

Nuove sezioni con parametri di spaziatura diversi possono essere iniziati
col comando @code{\newSpacingSection}.  Ciò può essere utile per sezioni
con nozioni diverse di note @q{lunghe} e note @q{brevi}.  Il comando
@code{\newSpacingSection} crea un nuovo oggetto @code{SpacingSpanner} in
quel momento musicale.

Nell'esempio seguente, il cambio di indicazione di tempo introduce una
nuova sezione, e i sedicesimi hanno automaticamente una spaziatura
un po' più larga.

@lilypond[verbatim,quote]
\relative c' {
  \time 2/4
  c4 c8 c
  c8 c c4 c16[ c c8] c4
  \newSpacingSection
  \time 4/16
  c16[ c c8]
}
@end lilypond

Se gli aggiustamenti automatici della spaziatura non producono la
spaziatura richiesta, si possono applicare degli @code{\override}
manuali alle sue proprietà.  Questi devono essere applicati nello
stesso momento musicale del comando @code{\newSpacingSection} stesso e
avranno effetto sulla spaziatura di tutta la musica seguente finché
le proprietà non vengono cambiate in una nuova sezione.  Per esempio:

@lilypond[verbatim,quote]
\relative c' {
  \time 4/16
  c16[ c c8]
  \newSpacingSection
  \override Score.SpacingSpanner.spacing-increment = #2
  c16[ c c8]
  \newSpacingSection
  \revert Score.SpacingSpanner.spacing-increment
  c16[ c c8]
}
@end lilypond


@seealso
Frammenti:
@rlsr{Spacing}.

Guida al funzionamento interno:
@rinternals{SpacingSpanner}.


@node Modifica della spaziatura orizzontale
@subsection Modifica della spaziatura orizzontale
@translationof Changing horizontal spacing

@menu
* Allungamento uniforme dei gruppi irregolari::
* Spaziatura rigorosa della nota::
@end menu

La spaziatura orizzontale può essere modificata tramite la proprietà
@code{base-shortest-duration}.  Nel prossimo esempio confrontiamo
la stessa musica, prima senza cambiare la proprietà e poi cambiandola.
Valori più grandi di @code{ly:make-moment} produrranno musica più densa.
Nota che @code{ly:make-moment} constituisce una durata, dunque
@code{1 4} è una durata più lunga di @code{1 16}.

@lilypond[verbatim,line-width=12\cm]
\score {
  \relative {
    g'4 e e2 | f4 d d2 | c4 d e f | g4 g g2 |
    g4 e e2 | f4 d d2 | c4 e g g | c,1 |
    d4 d d d | d4 e f2 | e4 e e e | e4 f g2 |
    g4 e e2 | f4 d d2 | c4 e g g | c,1 |
  }
}
@end lilypond

@lilypond[verbatim,line-width=12\cm]
\score {
  \relative {
    g'4 e e2 | f4 d d2 | c4 d e f | g4 g g2 |
    g4 e e2 | f4 d d2 | c4 e g g | c,1 |
    d4 d d d | d4 e f2 | e4 e e e | e4 f g2 |
    g4 e e2 | f4 d d2 | c4 e g g | c,1 |
  }
  \layout {
    \context {
      \Score
      \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
    }
  }
}
@end lilypond


@node Allungamento uniforme dei gruppi irregolari
@unnumberedsubsubsec Allungamento uniforme dei gruppi irregolari
@translationof Uniform stretching of tuplets

L'impostazione predefinita prevede che la spaziatura nei gruppi irregolari
dipenda da vari fattori diversi dalla durata (come alterazioni, cambi di
chiave, etc).  Per ignorare tali simboli e forzare la spaziatura perché
sia uniforme, usare @code{Score.SpacingSpanner.uniform-stretching}.  Questa
proprietà può essere modificata soltanto all'inizio di una partitura:

@lilypond[quote,ragged-right,verbatim]
\score {
  <<
    \new Staff \relative c' {
      \tuplet 5/4 { c8 c c c c } c8 c c c
    }
    \new Staff \relative c' {
      c8 c c c \tuplet 5/4 { c8 c c c c }
    }
  >>
  \layout {
    \context {
      \Score
      \override SpacingSpanner.uniform-stretching = ##t
    }
  }
}
@end lilypond


@node Spaziatura rigorosa della nota
@unnumberedsubsubsec Spaziatura rigorosa della nota
@translationof Strict note spacing

Se si imposta @code{strict-note-spacing}, la spaziatura tra le note non tiene
conto di chiavi, stanghette e abbellimenti:

@lilypond[quote,ragged-right,fragment,verbatim]
\override Score.SpacingSpanner.strict-note-spacing = ##t
\new Staff \relative {
  c''8[ c \clef alto c \grace { c16 c } c8 c c]  c32[ c] }
@end lilypond

@seealso
Frammenti:
@rlsr{Spacing}.


@node Larghezza della linea
@subsection Larghezza della linea
@translationof Line width

@cindex interruzione di pagina
@cindex pagina, interruzione

@funindex indent
@funindex line-width
@funindex ragged-right
@funindex ragged-last

@c Although line-width can be set in \layout, it should be set in paper
@c block, to get page layout right.
@c Setting indent in \paper block makes not much sense, but it works.

@c Bit verbose and vague, use examples?
Le impostazioni fondamentali che influenzano la spaziatura sono @code{indent} e
@code{line-width}, impostate nel blocco @code{\layout}.  Regolano l'indentazione
della prima linea musicale e la lunghezza delle linee.

Se @code{ragged-right} è impostato su vero nel blocco @code{\layout}, i sistemi
terminano alla loro naturale lunghezza orizzontale, invece di essere espansi
orizzontalmente per riempire tutta la linea.  Ciò è utile in caso di brevi
frammenti e per verificare quanto è compatta la spaziatura naturale.  L'impostazione
predefinita è solitamente falso, ma se la partitura ha un solo sistema il
valore predefinito è vero.

@cindex formattazione della pagina
@cindex spaziatura verticale
@cindex verticale, spaziatura

L'opzione @code{ragged-last} è simile a @code{ragged-right}, ma ha effetto
soltanto sull'ultima linea del brano.  Nessune restrizioni vengono poste su
quella linea.  Il risultato è simile alla formattazione dei paragrafi di testo.
In un paragrafo l'ultima linea occupa la sua naturale lunghezza orizzontale.
@c Note that for text there are several options for the last line.
@c While Knuth TeX uses natural length, lead typesetters use the same
@c stretch as the previous line.  eTeX uses \lastlinefit to
@c interpolate between both these solutions.

@example
\layout @{
  indent = #0
  line-width = #150
  ragged-last = ##t
@}
@end example

@seealso
Frammenti:
@rlsr{Spacing}.


@node Notazione proporzionale
@subsection Notazione proporzionale
@translationof Proportional notation

LilyPond supporta la notazione proporzionale, un tipo di spaziatura orizzontale
in cui ogni nota occupa una quantità di spazio orizzontale esattamente
equivalente alla sua durata musicale.  Questo tipo di spaziatura proporzionale
può essere paragonata alla spaziatura orizzontale su carta quadrettata.  Alcune
partiture della fine del ventesimo secolo e dell'inizio del ventunesimo usano
la notazione proporzionale per chiarire relazioni ritmiche complesse o per
agevolare il posizionamento della linea del tempo o di altri elementi
grafici direttamente nella partitura.

LilyPond supporta cinque diverse impostazioni per la notazione proporzionale,
che possono essere usate insieme o da sole:

@itemize
@item @code{proportionalNotationDuration}
@item @code{uniform-stretching}
@item @code{strict-note-spacing}
@item @code{\remove "Separating_line_group_engraver"}
@item @code{\override PaperColumn.used = ##t}
@end itemize

Nell'esempio seguente analizziamo queste cinque diverse impostazioni di
notazione proporzionale e valutiamo come esse interagiscono tra loro.

Iniziamo con l'esempio seguente di una misura, che usa la spaziatura
classica con la giustificazione del rigo disattivata.

@c The initial pitch is not necessary as long as RhythmicStaff is
@c not preceded by other material in the score, but we don't want
@c to explain that.
@lilypond[quote,verbatim,ragged-right]
\score {
  <<
    \new RhythmicStaff {
      c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
    }
  >>
}
@end lilypond

La minima all'inizio della misura occupa uno spazio molto inferiore alla metà
dello spazio orizzontale della misura.  Ugualmente, i sedicesimi e le quintine
di sedicesimi alla fine della battuta insieme occupano molto più spazio della
metà dello spazio orizzontale della misura.

Nell'incisione tipografica classica, questa spaziatura è solitamente proprio
ciò che si desidera, perché è possibile prendere in prestito dello spazio
orizzontale dalla minima e economizzare lo spazio orizzontale complessivo
della misura.

D'altra parte, se vogliamo inserire una linea del tempo con tacche o altri
elementi grafici sopra o sotto la partitura, abbiamo bisogno della notazione
proporzionale.  Per attivarla si usa l'impostazione proportionalNotationDuration.

@lilypond[quote,verbatim,ragged-right]
\score {
  <<
    \new RhythmicStaff {
      c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
    }
  >>
 \layout {
    \context {
      \Score
      proportionalNotationDuration = #(ly:make-moment 1/20)
    }
  }
}
@end lilypond

La minima all'inizio della misura e le note più veloci nella seconda
metà della misura ora occupano la stessa quantità di spazio orizzontale.
Potremmo inserire una linea del tempo con tacche o un'immagine
grafica sopra o sotto questo esempio.

L'impostazione @code{proportionalNotationDuration} è un'impostazione di
contesto che si trova in @code{Score}.  Ricordiamo che le impostazioni di
contesto possono apparire in tre luoghi del file di input: in un blocco
@code{\with}, in un blocco @code{\context} o direttamente in mezzo alle
note preceduta dal comando @code{\set}.  Come per tutte le impostazioni di
contesto, l'utente può scegliere in quale di questi tre luoghi impostare
@code{proportionalNotationDuration}.

L'impostazione @code{proportionalNotationDuration} prende un solo argomento,
che è la durata di riferimento in base alla quale tutta la musica verrà
spaziata.  La funzione Scheme di LilyPond @code{make-moment} prende due
argomenti: un numeratore e un denominatore che insieme esprimono una qualche
frazione di una nota intera.  La funzione di chiamata @code{(ly:make-moment 1/20)}
produce quindi una durata di riferimento di un ventesimo di nota.  Sono ammessi
anche valori come @code{(ly:make-moment 1/16)}, @code{(ly:make-moment 1/8)} e
@code{(ly:make-moment 3/97)}.

Come scegliamo la durata di riferimento corretta da passare a
@code{proportionalNotationDuration}?  Solitamente attraverso un processo di
prova e errore, iniziando con una durata vicina alla più veloce (o piccola)
durata del brano.  Durate di riferimento più piccole determinano una spaziatura
della musica più larga; quelle più grandi causano una spaziatura più stretta.

@lilypond[quote,verbatim,ragged-right]
\score {
  <<
    \new RhythmicStaff {
      c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
    }
  >>
  \layout {
    \context {
      \Score
      proportionalNotationDuration = #(ly:make-moment 1/8)
    }
  }
}

\score {
  <<
    \new RhythmicStaff {
      c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
    }
  >>
  \layout {
    \context {
      \Score
      proportionalNotationDuration = #(ly:make-moment 1/16)
    }
  }
}

\score {
  <<
    \new RhythmicStaff {
      c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
    }
  >>
  \layout {
    \context {
      \Score
      proportionalNotationDuration = #(ly:make-moment 1/32)
    }
  }
}
@end lilypond

Nota che una durata di riferimento troppo grande -- come la nota di
un ottavo, sopra -- determina una spaziatura della musica troppo stretta
e può causare collisioni tra le teste di nota.  Fare attenzione anche al
fatto che la notazione proporzionale in generale occupa più spazio orizzontale
della spaziatura classica.  Insomma, la spaziatura proporzionale fornisce
chiarezza ritmica al costo dello spazio orizzontale.

Ora vediamo come spaziare in modo ottimale i gruppi irregolari sovrapposti.

Iniziamo esaminando cosa succede al nostro esempio di partenza, con la
spaziatura classica, quando aggiungiamo un secondo rigo con un diverso
tipo di gruppo irregolare.

@lilypond[quote,verbatim,ragged-right]
\score {
  <<
    \new RhythmicStaff {
      c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
    }
    \new RhythmicStaff {
      \tuplet 9/8 { c8 8 8 8 8 8 8 8 8 }
    }
  >>
}
@end lilypond

La spaziatura è pessima perché le note del rigo inferiore spaziate a distanze
uguali non si allungano in modo uniforme.  Le incisioni classiche contengono
pochissime terzine complesse e quindi le regole di incisione classica possono
generare questo tipo di risultato.  Impostando @code{proportionalNotationDuration}
ciò viene corretto.

@lilypond[quote,verbatim,ragged-right]
\score {
  <<
    \new RhythmicStaff {
      c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
    }
    \new RhythmicStaff {
      \tuplet 9/8 { c8 8 8 8 8 8 8 8 8 }
    }
  >>
  \layout {
    \context {
      \Score
      proportionalNotationDuration = #(ly:make-moment 1/20)
    }
  }
}
@end lilypond

Ma se osserviamo con attenzione possiamo vedere che le note della seconda
metà della nonina hanno una spaziatura leggermente più larga delle note
della prima parte della nonina.  Per assicurare un allungamento uniforme,
attiviamo @code{uniform-stretching}, una proprietà di
@code{SpacingSpanner}.

@lilypond[quote,verbatim,ragged-right]
\score {
  <<
    \new RhythmicStaff {
      c2 16 16 16 16 \tuplet 5/4 { 16 16 16 16 16 }
    }
    \new RhythmicStaff {
      \tuplet 9/8 { c8 8 8 8 8 8 8 8 8 }
    }
  >>
  \layout {
    \context {
      \Score
      proportionalNotationDuration = #(ly:make-moment 1/20)
      \override SpacingSpanner.uniform-stretching = ##t
    }
  }
}
@end lilypond

Il nostro esempio di due righi ora ha una spaziatura esatta, le relazioni
ritmiche sono visivamente chiare e possiamo includere una linea del tempo
con tacche o altro elemento grafico, se lo vogliamo.

Nota che la notazione proporzionale di LilyPond si aspetta che tutte le
partiture proporzionali impostino l'attributo 'uniform-stretching di
SpacingSpanner su @code{##t}.  Impostare proportionalNotationDuration senza
impostare anche l'attributo 'uniform-stretching di SpacingSpanner su
@code{##t} farà sì, per esempio, che le pause invisibili occupino una quantità
scorretta di spazio orizzontale.

SpacingSpanner è un grob astratto che si trova nel contesto Score.
Come per le impostazioni di proportionalNotationDuration, le modifiche
@code{\override} a SpacingSpanner si possono trovare in uno dei tre diversi
punti del file di input – nel blocco \with del brano, nel blocco \context
del brano o direttamente in mezzo alle note.

Per impostazione predefinita, esiste un solo @code{SpacingSpanner} per
@code{Score}.  Ciò significa che @code{uniform-stretching} è attivato o
disattivato per l'intera partitura.  Possiamo tuttavia modificare tale
comportamento e attivare diverse funzionalità di spaziatura in punti
diversi del brano.  Per farlo si usa il comando @code{\newSpacingSection}.
Maggiori informazioni in @ref{New spacing section}.

Ora esaminiamo gli effetti dell'incisore @code{Separating_line_group_engraver} e
vediamo perché le partiture proporzionali solitamente tolgano questo incisore.
L'esempio seguente mostra che c'è un piccolo spazio @qq{introduttivo} proprio
prima della prima nota di ogni sistema.

@lilypond[quote,verbatim,ragged-right]
\paper {
  indent = #0
}

\new Staff {
  c'1
  \break
  c'1
}
@end lilypond


L'ampiezza di questo spazio introduttivo è la stessa sia dopo un'indicazione di
tempo che dopo un'armatura di chiave o una chiave.
È l'incisore @code{Separating_line_group_engraver} a causare questo spazio.
Togliendolo lo spazio diventa zero.

@lilypond[quote,verbatim,ragged-right]
\paper {
  indent = #0
}

\new Staff \with {
  \remove "Separating_line_group_engraver"
} {
  c'1
  \break
  c'1
}
@end lilypond

Nella notazione proporzionale gli elementi non musicali come le indicazioni di
tempo, le armature di chiave, le chiavi e le alterazioni sono problematiche.
Nessuna di queste infatti ha una durata ritmica, ma tutte occupano spazio
orizzontale.  Questi problemi sono affrontati diversamente dalle varie
partiture proporzionali.

È possibile evitare i problemi di spaziatura dovuti alle armature di
chiave semplicemente omettendole.  Questa è un'opzione valida dato che
la maggior parte delle partiture proporzionali sono di musica contemporanea.
Lo stesso potrebbe valere per le indicazioni di tempo, specialmente per quelle
partiture che includono una linea del tempo o altri elementi grafici.  Ma queste
partiture sono un'eccezione e la maggior parte delle partiture proporzionali
hanno almeno qualche indicazione di tempo.  Le chiavi e le alterazioni sono
ancora più fondamentali.

Dunque quali strategie adottare per spaziare elementi non musicali nel contesto
di musica proporzionale?  Una valida opzione è la proprietà @code{strict-note-spacing}
di @code{SpacingSpanner}.  Confrontiamo i seguenti due righi:

@lilypond[quote,verbatim,ragged-right]
\new Staff {
  \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
  c''8 8 8 \clef alto d'2 2
}

\new Staff {
  \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
  \override Score.SpacingSpanner.strict-note-spacing = ##t
  c''8 8 8 \clef alto d'2 2
}
@end lilypond

Entrambi sono proporzionali, ma la spaziatura del primo è troppo
larga a causa del cambio di chiave.  La spaziatura del secondo
resta invece stretta, perché è attivato strict-note-spacing.
Attivando strict-note-spacing, la larghezza di indicazioni di tempo,
armature di chiave, chiavi e alterazioni non ha alcun ruolo
nell'algoritmo di spaziatura.

Oltre alle impostazioni che abbiamo visto, ce ne sono altre che appaiono
frequentemente nelle partiture proporzionali, tra cui:

@itemize
@item @code{\override SpacingSpanner.strict-grace-spacing = ##t}
@item @code{\set tupletFullLength = ##t}
@item @code{\override Beam.breakable = ##t}
@item @code{\override Glissando.breakable = ##t}
@item @code{\override TextSpanner.breakable = ##t}
@item @code{\remove "Forbid_line_break_engraver" nel contesto Voice}
@end itemize

Queste impostazioni spaziano in modo conciso gli abbellimenti, estendono le
parentesi dei gruppi irregolari per contrassegnare i punti di inizio e di
fine del ritmo, e permettono agli elementi che si estendono orizzontalmente
di andare oltre i sistemi e le pagine.  Consultare le sezioni del manuale
per queste impostazioni.

@seealso
Guida alla notazione:
@ref{New spacing section}.

Frammenti:
@rlsr{Spacing}.


@node Riduzione del numero di pagine di una partitura
@section Riduzione del numero di pagine di una partitura
@translationof Fitting music onto fewer pages

Talvolta può capitare di avere uno o due righi su una seconda
(o terza, o quarta@dots{}) pagina.  Ciò è fastidioso, specialmente
se c'è molto spazio nelle pagine precedenti.

Quando si studiano i problemi di formattazione, uno strumento irrinunciabile
è @code{annotate-spacing}, un comando che mostra i valori delle diverse
variabili di spaziatura.  Maggiori dettagli nella prossima sezione,
@ref{Visualizzare la spaziatura}.

@menu
* Visualizzare la spaziatura::
* Modificare la spaziatura::
@end menu


@node Visualizzare la spaziatura
@subsection Visualizzare la spaziatura
@translationof Displaying spacing

@funindex annotate-spacing
@cindex spaziatura, visualizzazione della formattazione

Per visualizzare graficamente le dimensioni delle varibili della formattazione
verticale che possono essere modificate per formattare la pagina, impostare
@code{annotate-spacing} nel blocco @code{\paper}:

@lilypond[verbatim,quote,papersize=a6landscape]
\book {
  \score { { c4 } }
  \paper { annotate-spacing = ##t }
}
@end lilypond


@noindent
Tutte le dimensioni della formattazione sono visualizzate in spazi rigo,
indipendentemente dalle unità di misura specificate nei blocchi
@code{\paper} o @code{\layout}.  Nell'esempio qui sopra, l'altezza
del foglio (@code{paper-height}) ha un valore di 59.75 spazi
rigo (@code{staff-space}), e la dimensione del rigo (@code{staff-size}) è
pari a 20 punti (il valore predefinito).  Nota che:

@multitable {1 staff-space} {staff-size)/4 * (25.4/72.27) mm}

@item 1 punto
@tab = (25.4/72.27) mm

@item 1 staff-space
@tab = (@code{staff-size})/4 pts
@item
@tab = (@code{staff-size})/4 * (25.4/72.27) mm

@end multitable

@noindent
In questo caso, uno @code{staff-space} è uguale all'incirca a
1.757mm.  Dunque i 59.75 @code{staff-space} di @code{paper-height}
corrispondono a 105 millimetri, pari all'altezza del formato @code{a6}
in orientamento orizzontale.  Le coppie (@var{a},@var{b}) sono
intervalli, dove @var{a} è l'estremo inferiore e @var{b} l'estremo
superiore dell'intervallo.

@seealso
Guida alla notazione:
@ref{Impostare la dimensione del rigo}.

Frammenti:
@rlsr{Spacing}.


@node Modificare la spaziatura
@subsection Modificare la spaziatura
@translationof Changing spacing

L'output di @code{annotate-spacing} svela le dimensioni verticali molto
dettagliatamente.  Maggiori informazioni su come modificare i margini e
altre variabili di formattazione si trovano in @ref{Formattazione della pagina}.

Oltre ai margini, ci sono altre opzioni utili per salvare spazio:

@itemize
@item
Forzare i sistemi perché si avvicinino il più possibile (per far
entrare più sistemi possibile in una pagina) mentre sono spaziati in
modo da non lasciare spazio bianco in fondo alla pagina.

@example
\paper @{
  system-system-spacing = #'((basic-distance . 0.1) (padding . 0))
  ragged-last-bottom = ##f
  ragged-bottom = ##f
@}
@end example

@item
Forzare il numero dei sistemi.  Ciò può essere utile in due modi.  Il
semplice impostare un valore, persino lo stesso valore del numero di
sistemi disposti senza modificare la variabile, può far sì che più
sistemi riescano a entrare in ogni pagina, perché viene saltato il
passaggio di valutazione, dando un valore più adatto per ogni pagina.
Inoltre, forzare davvero una riduzione nel numero di sistemi può far
risparmiare un'ulteriore pagina.  Per esempio, se la formattazione
predefinita ha 11 sistemi, la seguente impostazione forzerà la
formattazione con 10 sistemi.

@example
\paper @{
  system-count = #10
@}
@end example

@item
Forzare il numero delle pagine.  Per esempio, la seguente impostazione
forzerà la formattazione in due pagine.

@example
\paper @{
  page-count = #2
@}
@end example

@item
Evitare (o ridurre) gli oggetti che aumentano la dimensione verticale di
un sistema.  Per esempio, le parentesi delle volte per i finali alternativi
richiedono ulteriore spazio.  Se questi finali si estendono per due sistemi,
occupano più spazio che se fossero sullo stesso sistema.  Altro esempio: le
dinamiche che @qq{spuntano fuori} da un sistema possono essere avvicinate al
rigo:

@lilypond[verbatim,quote]
\relative e' {
  e4 c g\f c
  e4 c g-\tweak X-offset #-2.7 \f c
}
@end lilypond

@item
Modificare la spaziatura orizzontale tramite @code{SpacingSpanner}.  Maggiori
informazioni in @ref{Modifica della spaziatura orizzontale}.  L'esempio seguente mostra
la spaziatura predefinita:

@lilypond[verbatim,quote]
\score {
  \relative {
    g'4 e e2 |
    f4 d d2 |
    c4 d e f |
    g4 g g2 |
    g4 e e2 |
  }
}
@end lilypond

@noindent
L'esempio successivo modifica @code{common-shortest-duration} da un
valore di @code{1/4} a uno di @code{1/2}.  La nota di un quarto è la
durata più comune e più breve in questo esempio, dunque rendendola più
lunga si verifica un effetto @qq{compressione}:

@lilypond[verbatim,quote]
\score {
  \relative {
    g'4 e e2 |
    f4 d d2 |
    c4 d e f |
    g4 g g2 |
    g4 e e2 |
  }
  \layout {
    \context {
      \Score
      \override SpacingSpanner.common-shortest-duration =
        #(ly:make-moment 1/2)
    }
  }
}
@end lilypond

@noindent
La proprietà @code{common-shortest-duration} non può essere modificata in
modo dinamico, quindi deve essere sempre posta in un blocco @code{\context}
così che sia applicata all'intera partitura.

@end itemize

@seealso
Guida alla notazione:
@ref{Formattazione della pagina},
@ref{Modifica della spaziatura orizzontale}.

Frammenti:
@rlsr{Spacing}.

