4.4.2 Posizionamento esplicito di righi e sistemi
Un modo per comprendere i meccanismi di spaziatura verticale appena spiegati è di considerarli come un insieme di impostazioni che regolano la quantità di padding verticale tra righi e tra sistemi.
È possibile gestire la spaziatura verticale in un modo diverso
usando NonMusicalPaperColumn.line-break-system-details.
Mentre i meccanismi di spaziatura verticale flessibile specificano
il padding verticale, NonMusicalPaperColumn.line-break-system-details
indica precisamente le posizioni verticali esatte sulla pagina.
NonMusicalPaperColumn.line-break-system-details accetta una
lista associativa di quattro diverse impostazioni:
-
X-offset -
Y-offset -
extra-offset -
alignment-distances
Le modifiche del grob con \override, incluse quelle per NonMusicalPaperColumn
come nell’esempio successivo, possono trovarsi in uno di questi tre diversi
punti del file di input:
- direttamente in mezzo alle note
- in un blocco
\context - nel blocco
\with
Quando si modifica NonMusicalPaperColumn, si usa il solito
comando \override nei blocchi \context e nel blocco
\with. Invece quando si modifica
NonMusicalPaperColumn in mezzo alle note,
si usa il comando speciale \overrideProperty. Ecco alcuni
esempi di modifiche di NonMusicalPaperColumn col comando
speciale \overrideProperty:
\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)))
Per comprendere come funziona ognuna di queste impostazioni, iniziamo vedendo un esempio che non contiene alcuna modifica.
\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' }
}
>>
}
}
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 Interruzioni.
Usando comandi \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 Y-offset dell’attributo
line-break-system-details del grob NonMusicalPaperColumn:
\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' }
}
>>
}
}
Nota che 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à 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 Y-offset e
X-offset, è possibile anche il posizionamento relativo tramite
la proprietà extra-offset di line-break-system-details.
Il posizionamento è relativo alla formattazione predefinita o al posizionamento
assoluto determinato dall’uso di X-offset e Y-offset. La
proprietà extra-offset accetta una coppia di numeri che
determinano lo spostamento lungo gli assi X e Y.
\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' }
}
>>
}
}
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à alignment-distances
di line-break-system-details.
\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' }
}
>>
}
}
Nota che qui assegnamo due valori diversi all’attributo
line-break-system-details del grob
NonMusicalPaperColumn. Sebbene l’attributo alist
line-break-system-details accetti molti altri parametri di
spaziatura (inclusa, per esempio, una coppia corrispondente
di X-offset), è sufficiente impostare soltanto le coppie Y-offset
e alignment-distances per regolare il punto di inizio verticale di
ogni sistema e ogni rigo. Infine nota che alignment-distances
specifica il posizionamento verticale dei righi ma non dei gruppi di righi.
\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' } }
>>
>>
}
}
Alcuni punti da considerare:
- Quando si usa
alignment-distances, il testo vocale e altre linee che non sono righi non contano come rigo. - Le unità dei numeri assegnati a
X-offset,Y-offset,extra-offsetealignment-distancessono interpretati come multipli della distanza tra linee del rigo adiacenti. Valori positivi spostano in su righi e testo, valori negativi li spostano in giù. - Dato che le impostazioni di
NonMusicalPaperColumn.line-break-system-detailsillustrate 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.
Vedi anche
Frammenti: Spacing.