5.4.7 Visibilità degli oggetti
Esistono quattro modi principali per regolare la visibilità degli oggetti della
formattazione: si può togliere il loro stampo, possono essere resi trasparenti,
possono essere colorati di bianco o si può sovrascrivere la loro proprietà
break-visibility
. Le prime tre sono valide per tutti gli oggetti
della formattazione; l’ultimo solo per alcuni, gli oggetti che possono essere
interrotti, o spezzati, (break, in inglese).
Il Manuale di apprendimento contiene un’introduzione a queste quattro tecniche
in
Visibilità e colore degli oggetti.
Esistono anche altre tecniche che sono specifiche di alcuni oggetti della formattazione. Queste sono trattate in Considerazioni speciali.
Soppressione dello stampo | ||
Rendere gli oggetti trasparenti | ||
Dipingere gli oggetti di bianco | ||
Uso di break-visibility | ||
Considerazioni speciali |
Soppressione dello stampo
Tutti gli oggetti della formattazione hanno una proprietà stencil
(in
italiano, stampo). Per impostazione predefinita questa è impostata sulla
funzione specifica che disegna quell’oggetto. Se questa proprietà viene
sovrascritta e impostata su #f
, non verrà richiamata alcuna funzione
e l’oggetto non verrà disegnato. L’azione predefinita può essere ripristinata
con \revert
.
a1 a \override Score.BarLine.stencil = ##f a a \revert Score.BarLine.stencil a a a
Questa operazione piuttosto comune ha una scorciatoia, \omit
:
a1 a \omit Score.BarLine a a \undo \omit Score.BarLine a a a
Rendere gli oggetti trasparenti
Tutti gli oggetti della formattazione hanno una proprietà transparent
la cui impostazione predefinita è #f
(falso). Se impostata su #t
(vero), l’oggetto occupa sempre lo spazio ma è reso invisibile.
a'4 a' \once \override NoteHead.transparent = ##t a' a'
Questa operazione piuttosto comune ha una scorciatoia, \hide
:
a'4 a' \once \hide NoteHead a' a'
Dipingere gli oggetti di bianco
Tutti gli oggetti della formattazione hanno una proprietà del colore il cui
valore predefinito è black
(nero). Se questa viene sovrascritta con
white
(bianco) l’oggetto non sarà più distinguibile dallo sfondo. Tuttavia
se l’oggetto attraversa altri oggetti, il colore dei punti di contatto saranno
determinati dall’ordine in cui sono disegnati, e ciò potrebbe lasciare
un’immagine “spettrale” dell’oggetto bianco, come mostrato qui:
\override Staff.Clef.color = #white a'1
Ciò può essere evitato cambiando l’ordine di stampa degli oggetti.
Tutti gli oggetti della formattazione hanno una proprietà layer
(strato) che deve essere impostata su un numero intero.
Gli oggetti col valore più basso di layer
sono disegnati
per primi, poi vengono disegnati quelli con valori via via più
alti, dunque gli oggetti con valori più alti stanno sopra gli
oggetti con valori più bassi. Per impostazione predefinita alla
maggior parte degli oggetti viene assegnato un valore di layer
pari a 1
, sebbene ad alcuni oggetti, tra cui StaffSymbol
e
BarLine
, sia assegnato un valore di 0
. L’ordine con cui
vengono stampati oggetti con lo stesso valore di layer
è indeterminato.
Nell’esempio precedente la chiave bianca, con un valore predefinito di
layer
di 1
, viene disegnato dopo le linee del rigo (il cui
valore predefinito di layer
è 0
), dunque sta sopra di esse.
Per cambiare tale comportamento, all’oggetto Clef
deve essere assegnato
un valore di layer
inferiore, per esempio -1
, in modo che
venga disegnato prima:
\override Staff.Clef.color = #white \override Staff.Clef.layer = #-1 a'1
Frammenti di codice selezionati
Uso della proprietà whiteout
Qualsiasi oggetto grafico può essere posizionato sopra uno sfondo
bianco per mascherare parti degli oggetti che si trovano sotto.
Ciò può essere utile per migliorare l’aspetto delle collisioni in
situazioni complesse in cui il riposizionamento degli oggetti è
troppo difficile. Bisogna impostare esplicitamente la proprietà
layer
(livello) per controllare quali oggetti debbano essere
mascherati dallo sfondo bianco.
In questo esempio la collisione della legatura di valore con l’indicazione
di tempo viene migliorata mascherando la parte della legatura che incrocia
l’indicazione di tempo impostando la proprietà whiteout
di
TimeSignature
. Per farlo si sposta TimeSignature
su un
livello superiore a Tie
, che viene lasciato al livello predefinito 1;
e StaffSymbol
viene spostato su un livello superiore a TimeSignature
in modo che non venga mascherato.
{ \override Score.StaffSymbol.layer = #4 \override Staff.TimeSignature.layer = #3 b'2 b'~ \once \override Staff.TimeSignature.whiteout = ##t \time 3/4 b' r4 }
Uso di break-visibility
La maggior parte degli oggetti della formattazione sono stampati una
volta sola, ma alcuni come le stanghette, le chiavi, le indicazioni
di tempo e le armature di chiave possono dover essere stampate
due volte quando si verifica un’interruzione di linea – una volta al
termine della linea e di nuovo all’inizio della linea successiva.
Tali oggetti, chiamati spezzabili, (dall’inglese breakable)
hanno una proprietà, break-visibility
, per regolare
la loro visibilità nelle tre posizioni in cui potrebbero apparire:
all’inizio di una linea, in mezzo a una linea se vengono modificati
e al termine di una linea se un cambiamento ha luogo lì.
Per esempio, l’indicazione di tempo viene stampata all’inizio della prima linea, ma da nessuna altra parte a meno che non cambi e allora verrà stampata nel punto in cui il cambiamento ha luogo. Se tale cambiamento si verifica al termine di una linea, la nuova indicazione di tempo verrà stampata all’inizio della linea successiva e un’indicazione di tempo di precauzione verrà stampata anche al termine della linea precedente.
Tale comportamento è regolato dalla proprietà break-visibility
, che
è spiegata in
Visibilità e colore degli oggetti. Questa proprietà
prende un vettore di tre valori booleani che, in ordine, determinano se
l’oggetto è stampato al termine, in mezzo o all’inizio di una linea. O, per
essere più precisi, prima di un’interruzione di linea, dove non c’è
un’interruzione di linea oppure dopo un’interruzione di linea.
Altrimenti, queste otto combinazoni possono essere specificate da funzioni predefinite, definite in ‘scm/output-lib.scm’, dove le ultime tre colonne indicano se gli oggetti della formattazione saranno visibili nelle posizioni mostrate nell’intestazione delle colonne:
Funzione
Forma
Prima di
Senza
Dopo
vettoriale
interruzione
interruzione
interruzione
all-visible
#(#t #t #t)
sì
sì
sì
begin-of-line-visible
#(#f #f #t)
no
no
sì
center-visible
#(#f #t #f)
no
sì
no
end-of-line-visible
#(#t #f #f)
sì
no
no
begin-of-line-invisible
#(#t #t #f)
sì
sì
no
center-invisible
#(#t #f #t)
sì
no
sì
end-of-line-invisible
#(#f #t #t)
no
sì
sì
all-invisible
#(#f #f #f)
no
no
no
Le impostazioni predefinite di break-visibility
dipendono dall’oggetto
della formattazione. La tabella seguente mostra tutti gli oggetti rilevanti
che sono influenzati da break-visibility
e l’impostazione predefinita
di questa proprietà:
Oggetto formattazione
Contesto abituale
Impostazione predefinita
BarLine
Score
calcolato
BarNumber
Score
begin-of-line-visible
BreathingSign
Voice
begin-of-line-invisible
Clef
Staff
begin-of-line-visible
Custos
Staff
end-of-line-visible
DoublePercentRepeat
Voice
begin-of-line-invisible
KeyCancellation
Staff
begin-of-line-invisible
KeySignature
Staff
begin-of-line-visible
ClefModifier
Staff
begin-of-line-visible
RehearsalMark
Score
end-of-line-invisible
TimeSignature
Staff
all-visible
L’esempio successivo mostra l’uso della forma vettoriale per regolare la visibilità delle stanghette:
\relative { f'4 g a b f4 g a b % Toglie la stanghetta al termine della linea corrente \once \override Score.BarLine.break-visibility = ##(#f #t #t) \break f4 g a b f4 g a b }
Sebbene tutti i componenti del vettore usati per sovrascrivere
break-visibility
debbano essere presenti, non tutti sono
funzionanti con qualsiasi oggetto della formattazione, e alcune
combinazioni potrebbero perfino dare errore. Esistono le seguenti
limitazioni:
- Non è possibile stampare le stanghette all’inizio di una linea.
- Un numero di battuta non può essere stampato all’inizio della prima
linea a meno che non sia impostato per essere diverso da
1
. - Clef – vedi la sezione successiva.
- Le ripetizioni percentuali doppie sono o tutte stampate o
tutte soppresse.
Usare
begin-of-line-invisible
per stampare eall-invisible
per sopprimere. - Key signature – vedi la sezione successiva.
- ClefModifier – vedi la sezione successiva.
Considerazioni speciali
Visibilità dopo un cambio esplicito
La proprietà break-visibility
controlla la visibilità delle
armature di chiave e dei cambi di chiave solo all’inizio delle linee,
ovvero dopo un’interruzione di linea. Non ha effetto sulla visibilità
dell’armatura di chiave o della chiave che seguono un cambio esplicito
dell’armatura o della chiave all’interno o alla fine di una linea.
Nell’esempio seguente l’armatura di chiave che segue il cambio esplicito
a Si bemolle maggiore è ancora visibile, anche se all-invisible
è impostata.
\relative { \key g \major f'4 g a b % Tentativo di eliminazione di tutte le armature di chiave \override Staff.KeySignature.break-visibility = #all-invisible \key bes \major f4 g a b \break f4 g a b f4 g a b }
La visibilità di questi cambi espliciti di armatura e di chiave è
controllata dalle proprietà explicitKeySignatureVisibility
e
explicitClefVisibility
. Sono equivalenti alla proprietà
break-visibility
e prendono entrambe come argomento un vettore
di tre booleani o le funzioni predefinite elencate prima, proprio
come break-visibility
. Entrambe le proprietà appartengono al
contesto Staff, non agli oggetti della formattazione stessi, dunque
si impostano col comando \set
. La loro impostazione predefinita
è all-visible
. Queste proprietà regolano solo la visibilità
di armature di chiave e chiavi risultanti da cambi espliciti e non
quelli all’inizio delle linee; per eliminare questi ultimi bisogna
sempre sovrascrivere break-visibility
nell’oggetto appropriato.
\relative { \key g \major f'4 g a b \set Staff.explicitKeySignatureVisibility = #all-invisible \override Staff.KeySignature.break-visibility = #all-invisible \key bes \major f4 g a b \break f4 g a b f4 g a b }
Visibilità dei bequadri
Per eliminare i bequadri stampati su un cambio di chiave esplicito,
impostare la proprietà del contesto Staff printKeyCancellation
su #f
:
\relative { \key g \major f'4 g a b \set Staff.explicitKeySignatureVisibility = #all-invisible \set Staff.printKeyCancellation = ##f \override Staff.KeySignature.break-visibility = #all-invisible \key bes \major f4 g a b \break f4 g a b f4 g a b }
Con queste modifiche restano solo le alterazioni accanto alle note per indicare il cambio di armatura.
Nota bene che quando si cambia l’armatura su Do maggiore o La minore
i bequadri sono l’unica indicazione del cambio di chiave. In questo
caso impostando printKeyCancellation
su #f
non si ottiene
alcun effetto:
\relative { \key g \major f'4 g a b \set Staff.explicitKeySignatureVisibility = #all-invisible \set Staff.printKeyCancellation = ##f \key c \major f4 g a b \break f4 g a b f4 g a b }
Per sopprimere i bequadri anche quando la tonalità passa a
Do maggiore o La minore, sovrascrivere la
visibilità del grob KeyCancellation
:
\relative { \key g \major f'4 g a b \set Staff.explicitKeySignatureVisibility = #all-invisible \override Staff.KeyCancellation.break-visibility = #all-invisible \key c \major f4 g a b \break f4 g a b f4 g a b }
Battute automatiche
In un caso particolare, la stampa delle stanghette può essere disattivata
impostando la proprietà automaticBars
nel contesto Score. Se impostata
su #f
, le stanghette non verranno stampate automaticamente; devono
invece essere create esplicitamente con un comando \bar
. Diversamente
dal comando predefinito \cadenzaOn
, le misure vengono comunque contate.
La generazione delle battute riprenderà in base a quel conteggio se questa
proprietà viene poi impostata su #t
. Se impostata su #f
, le
interruzioni di linea possono trovarsi solo su comandi \bar
espliciti.
Chiavi trasposte
Il piccolo simbolo di trasposizione sulle chiavi trasposte è prodotto
dall’oggetto di formattazione ClefModifier
. La sua visibilità
è ereditata automaticamente dall’oggetto Clef
, dunque non è necessario
applicare una modifica di break-visibility
agli oggetti ClefModifier
per sopprimere i simboli di trasposizione per le chiavi invisibili.
Per cambi di chiave espliciti, la proprietà explicitClefVisibility
regola sia il simbolo della chiave che qualsiasi simbolo di trasposizione
ad esso associato.
Vedi anche
Manuale di apprendimento: Visibilità e colore degli oggetti.