5.1.7 Ordine di disposizione dei contesti

Normalmente i contesti in un sistema sono posizionati dall’alto verso il basso nell’ordine in cui sono incontrati nel file di input. Quando i contesti sono annidati, il contesto più esterno includerà i contesti annidati al suo interno come specificato nel file di input solo se i contesti interni sono inclusi nell’elenco “accepts” del contesto più esterno; altrimenti saranno riposizionati sotto il contesto più esterno invece di essere annidati al suo interno.

L’elenco “accepts” di un contesto può essere modificato coi comandi \accepts o \denies. \accepts aggiunge un contesto all’elenco “accepts” mentre \denies lo rimuove dall’elenco.

Per esempio, un gruppo di righi racchiusi da una parentesi quadra non si trova solitamente all’interno di un gruppo di righi con stanghette connesse e racchiusi da una graffa, e GrandStaff non accetta al suo interno StaffGroup per impostazione predefinita.

\score {
  \new GrandStaff <<
    \new StaffGroup <<
      \new Staff { c'1 }
      \new Staff { d'1 }
    >>
    \new Staff { \set Staff.instrumentName = ultimo f'1 }
  >>
}

[image of music]

Tuttavia col comando \accepts si può aggiungere StaffGroup al contesto GrandStaff:

\score {
  \new GrandStaff <<
    \new StaffGroup <<
      \new Staff { c'1 }
      \new Staff { d'1 }
    >>
    \new Staff { \set Staff.instrumentName = ultimo f'1 }
  >>
  \layout {
    \context {
      \GrandStaff
      \accepts StaffGroup
    }
  }
}

[image of music]

\denies si usa soprattutto quando un nuovo contesto è basato su un altro, ma l’annidamento richiesto differisce. Per esempio, il contesto VaticanaStaff è basato sul contesto Staff, ma col contesto VaticanaVoice che sostituisce il contesto Voice nell’elenco “accepts”.

Nota bene: un contesto verrà creato implicitamente e senza avviso se si incontra un comando quando non c’è un contesto adatto disponibile per contenerlo.

Nella definizione di un contesto, il tipo di sottocontesto da creare implicitamente viene specificato con \defaultchild. Vari eventi musicali richiedono un contesto “di base”: quando si incontra tale evento, vengono creati ricorsivamente i sottocontesti finché non si raggiunge un contesto privo di impostazione ‘defaultchild’.

La creazione implicita di contesti può talvolta causare nuovi righi o nuove partiture non attesi. Per evitare questi problemi è consigliabile usare \new per creare i contesti esplicitamente.

Talvolta un contesto deve esistere solo per un breve periodo, come nel caso esemplare di un contesto rigo per un ossia. Per ottenere ciò, di solito si introduce la definizione di contesto nel punto appropriato in parallelo con la sezione corrispondente della musica principale. Per impostazione predefinita, il contesto temporaneo verrà posizionato sotto tutti i contesti esistenti. Per riposizionarlo sopra il contesto chiamato “principale”, dovrebbe essere definito in questo modo:

\new Staff \with { alignAboveContext = "principale" }

Una situazione simile si pone quando si posiziona un contesto temporaneo per il testo vocale all’interno di una disposizione multirigo come ChoirStaff; per esempio, quando si aggiunge una seconda strofa a una sezione ripetuta. Per impostazione predefinita, il contesto temporaneo per il testo vocale verrà posizionato sotto i righi più bassi. Definendo il contesto temporaneo per il testo vocale con alignBelowContext, questo può essere posizionato correttamente sotto i contesti della voce (con nome) che contengono la prima strofa.

Esempi che mostrano questo riposizionamento di contesti temporanei possono essere trovati altrove — vedi Annidare le espressioni musicali, Modificare singoli righi e Tecniche specifiche per il testo vocale.

Vedi anche

Manuale di apprendimento: Annidare le espressioni musicali.

Guida alla notazione: Modificare singoli righi, Tecniche specifiche per il testo vocale.

Utilizzo: Appare un rigo in più.

File installati: ly/engraver-init.ly.


Guida alla Notazione di LilyPond v2.25.22 (development-branch).