Guida alla Notazione di LilyPond: 5.4.7 Visibilità degli oggetti

### 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

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 e `all-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.

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