4.3.4 Modificare le proprietà di contesto (Manuale di apprendimento di LilyPond)

#### 4.3.4 Modificare le proprietà di contesto

I contesti si occupano di tenere i valori di un certo numero di proprietà del contesto. Molte di queste possono essere cambiate per influenzare l’interpretazione dell’input e quindi modificare l’aspetto dell’output. Per cambiarle si usa il comando `\set`. Questo assume la seguente forma

    \set NomeContesto.nomeProprietà = #valore

Dove il NomeContesto è di solito `Score`, `Staff` o `Voice`. Può essere omesso, e in questo caso viene considerato il contesto attuale (solitamente `Voice`).

I nomi delle proprietà di contesto consistono in parole unite insieme e senza lineette o trattini bassi, e tutte le parole tranne la prima iniziano con una lettera maiuscola. Ecco alcuni esempi di quelle più usate comunemente. Ma ne esistono molte altre.

nomeProprietà | Tipo | Funzione | Valore di esempio
--- | --- | --- | ---
extraNatural | Booleano | Se è vero, mette i segni di bequadro prima degli accidenti | `#t`, `#f`
currentBarNumber | Intero | Imposta il numero della battuta corrente | `50`
doubleSlurs | Booleano | Se è vero, stampa le legature di portamento sia sopra che sotto le note | `#t`, `#f`
instrumentName | Testo | Imposta il nome da inserire all’inizio del rigo | `"Cello I"`
fontSize | Reale | Aumenta o riduce la dimensione del carattere | `2.4`
stanza | Testo | Imposta il testo da stampare prima dell’inizio di una strofa | `"2"`

mentre un Booleano è o Vero (`#t`) o Falso (`#f`), un Intero è un numero intero positivo, un Reale è un numero decimale positivo o negativo, e il testo è racchiuso tra virgolette. Si noti la presenza del segno cancelletto, (`#`), in due punti diversi – come parte del valore Booleano prima di `t` o `f`, e prima del valore nell’affermazione `\set`. Dunque quando si inserisce un valore Booleano bisogna scrivere due cancelletti, ad esempio `##t`.

Prima di poter impostare una qualsiasi di queste proprietà dobbiamo sapere in quale contesto esse operino. Talvolta questo è ovvio, ma talvolta può risultare complicato. Se viene specificato il contesto sbagliato, non viene generato alcun messaggio di errore, ma l’azione desiderata non avrà luogo. Ad esempio, la proprietà `clefGlyph` risiede ovviamente nel contesto `Staff`, poiché è il glifo della chiave a dover essere cambiato. Nell’esempio seguente viene stampata correttamente la prima chiave del pentagramma, ma non la seconda (che appare come la chiave predefinita di violino, invece della chiave di basso o Fa che ci aspetteremmo) perché abbiamo omesso il nome del contesto.

>     <<
>       \new Staff \relative {
>         \set Staff.clefGlyph = "clefs.C"
>         c''2 c
>      }
>       \new Staff \relative {
>         \set clefGlyph = "clefs.F"  % Sbagliato!
>         d'2 d
>      }
>     >>

Ricorda che il nome di contesto predefinito è `Voice`, dunque il secondo comando `\set` imposta la proprietà `clefGlyph` nel contesto `Voice` col valore “clefs.F”, ma dato che LilyPond non trova tale proprietà nel contesto `Voice`, non ha avuto luogo alcuna altra azione. Questo non è un errore, e nessun messaggio di errore viene riportato nel file di log.

La proprietà `clefGlyph` funzionerà soltanto se inserita nel contesto `Staff`, ma alcune proprietà possono essere collocate in più di un contesto. Ad esempio, la proprietà `extraNatural` è impostata di default sul valore ##t (vero) su tutti i righi. Se viene impostata su ##f (falso) in uno specifico contesto `Staff` si applica solo alle alterazioni presenti su quel rigo. Se impostata su falso nel contesto `Score` si applica a tutti i righi.

Quindi in questo modo si disattiva il bequadro su un rigo:

>     <<
>       \new Staff \relative {
>         aeses'2 aes
>      }
>       \new Staff \relative {
>         \set Staff.extraNatural = ##f
>         aeses'2 aes
>      }
>     >>

e in questo modo si disattiva in tutti i righi:

>     <<
>       \new Staff \relative {
>         aeses'2 aes
>      }
>       \new Staff \relative {
>         \set Score.extraNatural = ##f
>         aeses'2 aes
>      }
>     >>

Un altro esempio: se la proprietà `clefTransposition` viene posta nel contesto `Score`, cambia immediatamente il valore della trasposizione in tutti i righi presenti e imposta un nuovo valore predefinito che sarà applicato a tutti i righi.

Il comando opposto, `\unset`, di fatto rimuove la proprietà dal contesto, e questo fa sì che molte proprietà tornino al valore predefinito. Solitamente `\unset` non è necessario dal momento che un nuovo comando `\set` permetterà di ottenere quanto si desidera.

I comandi `\set` e `\unset` possono trovarsi in qualsiasi punto del file di input e avranno effetto dal momento in cui si incontrano fino alla fine della partitura o finché la proprietà non viene attivata (`\set`) o disattivata (`\unset`) di nuovo. Proviamo a cambiare varie volte la dimensione del font, che influisce (tra le altre cose) sulla dimensione delle teste delle note. La modifica è relativa al valore predefinito, non all’ultimo valore impostato.

>     \relative {
>       c'4 d
>       % rimpicciolisce le teste di nota
>       \set fontSize = #-4
>       e4 f |
>       % ingrandisce le teste di nota
>       \set fontSize = #2.5
>       g4 a
>       % ripristina la dimensione predefinita
>       \unset fontSize
>       b4 c |
>     }

Abbiamo visto come impostare i valori di diversi tipi di proprietà. Si note che gli interi e i numeri sono sempre preceduti da un segno di cancelletto, `#`, mentre un valore vero o falso è specificato con `##t` e `##f`, ovvero con due cancelletti. Una proprietà testuale dovrebbe essere racchiusa tra virgolette, come abbiamo visto prima, sebbene vedremo in seguito che in realtà il testo può essere specificato in un modo molto più generale usando il potente comando `\markup`.

#### Impostare le proprietà di contesto con `\with`

Il valore predefinito delle proprietà di contesto possono essere impostate anche nel momento in cui il contesto viene creato. Talvolta questo è un modo più chiaro per specificare il valore della proprietà se questa deve rimanere fissa per la durata del contesto. Un contesto creato col comando `\new` può essere immediatamente seguito da un blocco `\with { … }` dove vengono impostati i valori predefiniti della proprietà. Ad esempio, se vogliamo eliminare la stampa del bequadro per l’estensione di un rigo possiamo scrivere:

    \new Staff \with { extraNatural = ##f }

così:

>     <<
>       \new Staff {
>         \relative {
>           gisis'4 gis aeses aes
>         }
>       }
>       \new Staff \with { extraNatural = ##f } {
>         \relative {
>           gisis'4 gis aeses aes
>         }
>       }
>     >>

Si possono ancora cambiare dinamicamente le proprietà impostate in questo modo usando `\set`, mentre con `\unset` si possono riportare al valore predefinito impostato nel blocco `\with`.

Quindi se la proprietà `fontSize` viene inserita in una proposizione `\with`, imposta il valore predefinito della dimensione del font. Se viene in seguito modificato con `\set`, questo nuovo valore predefinito può essere recuperato col comando `\unset fontSize`.

#### Impostare le proprietà di contesto con `\context`

I valori delle proprietà di un contesto possono essere impostate in tutti i contesti di un particolare tipo, così come in tutti i contesti `Staff`, con un solo comando. Il tipo di contesto viene identificato attraverso il suo nome, come `Staff`, preceduto da una barra inversa (backslash): `\Staff`. La dichiarazione che imposta il valore della proprietà è la stessa che abbiamo visto nel blocco `\with`, introdotto prima. Viene posta in un blocco `\context` all’interno di un blocco `\layout`. Ogni blocco `\context` avrà effetto su tutti i contesti del tipo specificato nel blocco `\score` o `\book` nel quale il blocco `\layout` si trova. Ecco un esempio per mostrare la struttura:

>     \score {
>       \new Staff {
>         \relative {
>           cisis''4 e d cis
>         }
>       }
>       \layout {
>         \context {
>           \Staff
>           extraNatural = ##t
>         }
>       }
>     }

Se si vuole che la modifica della proprietà venga applicata a tutti i righi della partitura:

>     \score {
>       <<
>         \new Staff {
>           \relative {
>             gisis'4 gis aeses aes
>           }
>         }
>         \new Staff {
>           \relative {
>             gisis'4 gis aeses aes
>           }
>         }
>       >>
>       \layout {
>         \context {
>           \Score extraNatural = ##f
>         }
>       }
>     }

Le proprietà di contesto impostate in questo modo possono essere sovrascritte per alcuni particolari contesti attraverso asserzioni in un blocco `\with`, e tramite comandi `\set` incorporati nelle asserzioni musicali.

#### Vedi anche

Guida alla notazione: Modifica delle impostazioni predefinite di un contesto, Il comando set.

Guida al funzionamento interno: Contexts, Tunable context properties.

#### Manuale di apprendimento di LilyPond v2.26.0 (stable-branch).

- 1 Installazione
  - 1.1 Installazione grafica in GNU/Linux
  - 1.2 Installazione grafica in Windows
  - 1.3 Installazione grafica in macOS
  - 1.4 Installazione da linea di comando
- 2 Tutorial
  - 2.1 Compilare un file
  - 2.2 Come scrivere i file di input
    - 2.2.1 Notazione semplice
      - Altezze
      - Durate (ritmi)
      - Pause
      - Indicazione di tempo
      - Indicazioni di tempo
      - Chiave
      - Tutto insieme
    - 2.2.2 Lavorare sui file di input
  - 2.3 Gestire gli errori
    - 2.3.1 Consigli generali per la risoluzione dei problemi
    - 2.3.2 Alcuni errori comuni
  - 2.4 Come leggere i manuali
    - 2.4.1 Materiale omesso
    - 2.4.2 Esempi cliccabili
    - 2.4.3 Panoramica dei manuali
- 3 Notazione comunemente utilizzata
  - 3.1 Notazione su un solo pentagramma
    - 3.1.1 Stanghette e controlli di battuta
      - Stanghette
      - Controlli di battuta
    - 3.1.2 Altezze e armature di chiave
      - Alterazioni dell’altezza
      - Armature di chiave
      - Attenzione: armature di chiave e altezze
    - 3.1.3 Legature di valore e di portamento
      - Legature di valore
      - Legature di portamento
      - Legature di frase
      - Attenzione: legature di portamento vs. legature di valore
    - 3.1.4 Articolazioni e dinamiche
      - Articolazioni
      - Diteggiature
      - Dinamiche
    - 3.1.5 Aggiungere il testo
    - 3.1.6 Code automatiche e manuali
    - 3.1.7 Comandi di tempo avanzati
      - Battuta parziale
      - Gruppi irregolari
      - Abbellimenti
  - 3.2 Note simultanee
    - 3.2.1 Espressioni musicali
      - Analogia: le espressioni matematiche
      - Espressioni musicali simultanee: righi multipli
      - Espressioni musicali simultanee: rigo singolo
    - 3.2.2 Righi multipli
    - 3.2.3 Gruppi di pentagrammi
    - 3.2.4 Combinare le note negli accordi
    - 3.2.5 Polifonia su un singolo rigo
  - 3.3 Canzoni
    - 3.3.1 Impostare canzoni semplici
    - 3.3.2 Allineare il testo alla melodia
    - 3.3.3 Testo su più righi
  - 3.4 Ritocchi finali
    - 3.4.1 Organizzare i brani con le variabili
    - 3.4.2 Aggiungere i titoli
    - 3.4.3 Nomi assoluti delle note
    - 3.4.4 Dopo il tutorial
- 4 Concetti fondamentali
  - 4.1 Come funzionano i file di input di LilyPond
    - 4.1.1 Introduzione alla struttura di un file di LilyPond
    - 4.1.2 La partitura è una (singola) espressione musicale composta
    - 4.1.3 Annidare le espressioni musicali
    - 4.1.4 Struttura dell’inserimento note
    - 4.1.5 Sul non annidamento di parentesi e legature di valore
  - 4.2 Le voci contengono la musica
    - 4.2.1 Sento le Voci
    - 4.2.2 Definire esplicitamente le voci
    - 4.2.3 Voci e musica vocale
  - 4.3 Contesti e incisori
    - 4.3.1 I contesti
    - 4.3.2 Creare i contesti
    - 4.3.3 Gli incisori
    - 4.3.4 Modificare le proprietà di contesto
    - 4.3.5 Aggiungere e togliere gli incisori
  - 4.4 Estendere i modelli
    - 4.4.1 Soprano e violoncello
    - 4.4.2 Partitura vocale a quattro parti SATB
    - 4.4.3 Scrivere una partitura da zero
    - 4.4.4 Ridurre l’input grazie a variabili e funzioni
    - 4.4.5 Partiture e parti
- 5 Modifica dell’output
  - 5.1 Modifiche di base
    - 5.1.1 Introduzione alle modifiche
    - 5.1.2 Oggetti e interfacce
    - 5.1.3 Convenzioni per i nomi di oggetti e proprietà
    - 5.1.4 Metodi di modifica
      - Il comando `\override`
      - Il comando `\revert`
      - Il prefisso `\once`
      - Il comando di ritocco `\tweak`
      - Il prefisso `\single`
  - 5.2 Manuale del Funzionamento interno
    - 5.2.1 Proprietà degli oggetti di formattazione
    - 5.2.2 Proprietà presenti nelle interfacce
    - 5.2.3 Tipi di proprietà
  - 5.3 Aspetto degli oggetti
    - 5.3.1 Visibilità e colore degli oggetti
      - La proprietà `stencil`
      - La proprietà `break-visibility`
      - La proprietà `transparent`
      - La proprietà `color`
    - 5.3.2 Dimensione degli oggetti
    - 5.3.3 Lunghezza e spessore degli oggetti
  - 5.4 Posizionamento degli oggetti
    - 5.4.1 Comportamento automatico
    - 5.4.2 Oggetti interni al rigo
      - La proprietà `direction`
      - Diteggiatura
    - 5.4.3 Oggetti esterni al rigo
      - La proprietà `outside-staff-priority`
      - Il comando `\textLengthOn`
      - Posizionamento delle dinamiche
      - Dimensione dei grob
  - 5.5 Spaziatura verticale
  - 5.6 Collisioni tra oggetti
    - 5.6.1 Spostare gli oggetti
    - 5.6.2 Correggere elementi della notazione sovrapposti
      - La proprietà `padding`
      - La proprietà `right-padding`
      - La proprietà `staff-padding`
      - La proprietà `self-alignment-X`
      - La proprietà `staff-position`
      - La proprietà `extra-offset`
      - La proprietà `positions`
      - La proprietà `force-hshift`
    - 5.6.3 Esempio musicale
  - 5.7 Altre modifiche
    - 5.7.1 Altri usi delle modifiche con `\tweak`
      - Legature di valore tra note di voci diverse
      - Simulare una corona nel MIDI
    - 5.7.2 Uso delle variabili per modificare la formattazione
    - 5.7.3 Fogli di stile
    - 5.7.4 Altre fonti di informazione
    - 5.7.5 Modifiche avanzate con Scheme
- Appendix A Modelli
  - A.1 Modelli integrati
    - A.1.1 Modello SATB
    - A.1.2 Modello SSAATTBB
  - A.2 Modelli per rigo singolo
    - A.2.1 Solo note
    - A.2.2 Note e testo
    - A.2.3 Note e accordi
    - A.2.4 Note, testo e accordi
  - A.3 Modelli per pianoforte
    - A.3.1 Solo pianoforte
    - A.3.2 Pianoforte e melodia con testo
    - A.3.3 Pianoforte con testo al centro
  - A.4 Modelli per quartetto d’archi
    - A.4.1 Quartetto d’archi semplice
    - A.4.2 Parti di un quartetto d’archi
  - A.5 Modelli per gruppi vocali
    - A.5.1 Partitura vocale SATB
    - A.5.2 Partitura vocale SATB e automatica riduzione per pianoforte
    - A.5.3 SATB con contesti allineati
    - A.5.4 SATB su quattro righi
    - A.5.5 Strofa sola e ritornello a due parti
    - A.5.6 Inni
    - A.5.7 Salmi
  - A.6 Modelli per orchestra
    - A.6.1 Orchestra, coro e pianoforte
  - A.7 Modelli per notazione antica
    - A.7.1 Trascrizione di musica mensurale
    - A.7.2 Trascrizione di musica Gregoriana
  - A.8 Altri modelli
    - A.8.1 Combo jazz
- Appendix B GNU Free Documentation License
- Appendix C Indice