3.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 NomeDelContesto.nomeDellaProprietà = #valore

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

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

nomeDellaProprietàTipoFunzioneValore di esempio
extraNaturalBooleanoSe è vero, mette i segni di bequadro prima degli accidenti#t, #f
currentBarNumberInteroImposta il numero della battuta corrente50
doubleSlursBooleanoSe è vero, stampa le legature di portamento sia sopra che sotto le note#t, #f
instrumentNameTestoImposta il nome da inserire all’inizio del rigo"Cello I"
fontSizeRealeAumenta o riduce la dimensione del carattere2.4
stanzaTestoImposta 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à instrumentName risiede ovviamente nel contesto Staff, poiché è il pentagramma a dover essere nominato. Nell’esempio seguente viene etichettato il primo pentagramma, ma non il secondo, perché abbiamo omesso il nome del contesto.

<<
  \new Staff \relative c'' {
    \set Staff.instrumentName = #"Soprano"
    c2 c
 }
  \new Staff \relative c' {
    \set instrumentName = #"Alto"  % Wrong!
    d2 d
 }
>>

[image of music]

Ricorda che il nome di contesto predefinito è Voice, dunque il secondo comando \set imposta la proprietà instrumentName nel contesto Voice col valore “Alto”, 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.

Analogamente, se il nome della proprietà è stato scritto male, non viene generato alcun messaggio di errore, e ovviamente l’azione desiderata non può essere eseguita. Infatti, col comando \set puoi impostare qualsiasi ‘proprietà’ (anche inventata) usando qualsiasi nome che ti piaccia in qualsiasi contesto esistente. Ma se LilyPond non conosce il nome, allora non verrà intrapresa alcuna azione. Alcuni editor di testo che hanno uno speciale supporto per i file di input di LilyPond presentano i nomi delle proprietà con una lista scorrevole al passaggio del mouse, come JEdit col plugin LilyPondTool, oppure evidenziano in modo diverso i nomi delle proprietà non conosciuti, come fa ConTEXT. Se non usi un editor con queste funzionalità, è consigliabile controllare il nome delle proprietà nella Guida al funzionamento interno: si veda Tunable context properties, o Contexts.

La proprietà instrumentName 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 c'' {
    aeses2 aes
 }
  \new Staff \relative c'' {
    \set Staff.extraNatural = ##f
    aeses2 aes
 }
>>

[image of music]

e in questo modo si disattiva in tutti i righi:

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

[image of music]

Un altro esempio: se la proprietà clefOctavation viene posta nel contesto Score, cambia immediatamente il valore dell’ottavazione 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.

c4 d
% make note heads smaller
\set fontSize = #-4
e4 f |
% make note heads larger
\set fontSize = #2.5
g4 a
% return to default size
\unset fontSize
b4 c |

[image of music]

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, 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 c'' {
      gisis4 gis aeses aes
    }
  }
  \new Staff \with { extraNatural = ##f } {
    \relative c'' {
      gisis4 gis aeses aes
    }
  }
>>

[image of music]

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 c'' {
      cisis4 e d cis
    }
  }
  \layout {
    \context {
      \Staff
      extraNatural = ##t
    }
  }
}

[image of music]

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

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

[image of music]

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: Changing context default settings, The set command.

Guida al funzionamento interno: Contexts, Tunable context properties.


Other languages: English, česky, deutsch, español, français, magyar, 日本語, nederlands.
About automatic language selection.

LilyPond — Learning Manual