Manuale di apprendimento di LilyPond: 5.6.1 Spostare gli oggetti

### 5.6.1 Spostare gli oggetti

Per quanto possa apparire sorprendente, LilyPond non è perfetto. Alcuni elementi della notazione possono sovrapporsi. Si tratta di un caso spiacevole, anche se in realtà piuttosto raro. Di solito l’esigenza di spostare gli oggetti dipende da motivi di chiarezza o da ragioni estetiche: gli elementi possono ottenere un aspetto migliore con un po’ più o un po’ meno spazio intorno.

Esistono tre principali approcci per risolvere la sovrapposizione degli elementi della notazione. Vediamoli nel seguente ordine:

1. Si può cambiare la direzione di uno degli oggetti che si sovrappongono usando i comandi predefiniti elencati prima, in riferimento agli oggetti interni al rigo (vedi Oggetti interni al rigo). In questo modo si possono riposizionare facilmente gambi, legature di portamento e di valore, travature, segni di dinamica, testo e gruppi irregolari. La limitazione è che si tratta di una scelta circoscritta a due sole posizioni, nessuna delle quali potrebbe essere appropriata.
2. Le proprietà degli oggetti, che LilyPond usa quando dispone gli oggetti di formattazione, si possono modificare con `\override`. I vantaggi dell’intervenire su questo tipo di proprietà sono che (a) gli altri oggetti saranno spostati automaticamente se è necessario far spazio, e (b) ogni sovrascrittura può essere applicata a tutte le occorrenze di oggetti dello stesso tipo. Tali proprietà sono:
   - `direction`

     Questa è già stata trattata in dettaglio (vedi Oggetti interni al rigo).

   - `padding`, `right-padding`, `staff-padding`

     Quando un oggetto viene posizionato, il valore della sua proprietà `padding` specifica lo spazio intermedio da lasciare tra l’oggetto stesso e il bordo più vicino di quello accanto a cui si trova. Nota che si tratta del valore di `padding` dell’oggetto che si sta posizionando, mentre quello dell’oggetto già posizionato viene ignorato. Gli spazi specificati da `padding` possono essere applicati a tutti gli oggetti che supportano l’interfaccia `side-position-interface`.

     Invece che da `padding`, la disposizione dei gruppi di alterazioni è regolata da `right-padding`. Questa proprietà appartiene all’oggetto `AccidentalPlacement` che si trova nel contesto Staff. Il processo di formattazione della partitura crea per prime le teste di nota e poi, se presenti, aggiunge le alterazioni alla sinistra delle teste di nota usando la proprietà `right-padding` per stabilire la distanza tra le teste e le singole alterazioni. Dunque, solo la proprietà `right-padding` dell’oggetto `AccidentalPlacement` produce un effetto sul posizionamento delle alterazioni.

     La proprietà `staff-padding` è strettamente connessa alla proprietà `padding`: `padding` regola la quantità minima di spazio tra qualsiasi oggetto che supporti l’interfaccia `side-position-interface` e quello più vicino (solitamente, la nota o le linee del rigo); `staff-padding` si applica solo a quegli oggetti che stanno sempre fuori dal rigo e regola la distanza minima tra l’oggetto e il rigo. Nota che `staff-padding` non ha alcun effetto sugli oggetti disposti relativamente alla nota invece che al rigo, anche se può essere sovrascritto senza generare degli errori per tali oggetti; quindi viene semplicemente ignorata.

     Per scoprire quale proprietà padding è richiesta per l’oggetto che desideri riposizionare, devi tornare alla guida del Funzionamento interno e cercare le proprietà dell’oggetto. Presta attenzione al fatto che le proprietà padding potrebbero non trovarsi nell’oggetto più ovvio; in tal caso devi cercare negli oggetti simili.

     I valori delle proprietà padding sono misurati in spazi del rigo. Il valore predefinito della maggior parte degli oggetti è circa 1.0 o meno (a seconda dell’oggetto). Può essere sovrascritto per ottenere una distanza maggiore o minore.

   - `self-alignment-X`

     Questa proprietà serve ad allineare l’oggetto a sinistra, a destra o al centro rispetto al punto di riferimento dell’oggetto genitore. Si può usare con tutti gli oggetti che supportano l’interfaccia `self-alignment-interface`. Generalmente si tratta di oggetti che contengono testo. I valori sono `LEFT` (sinistra), `RIGHT` (destra) o `CENTER` (centro). Altrimenti, è possibile definire un valore numerico compreso tra `-1` e `+1`, dove `-1` indica allineamento a sinistra e `+1` allineamento a destra, mentre gli altri numeri spostano progressivamente il testo dall’allineamento a sinistra all’allineamento a destra. È possibile specificare valori numerici maggiori di `1`, per spostare il testo ancora più a sinistra, o valori inferiori a `-1`, per spostarlo ancora più a destra. Ogni modifica di `1` nel valore corrisponde a uno spostamento pari alla metà della lunghezza del testo.

   - `extra-spacing-width`

     Questa proprietà è disponibile per tutti gli oggetti che supportano l’interfaccia `item-interface`. Accetta due numeri: il primo è aggiunto all’estensione più a sinistra, il secondo a quella più a destra. I numeri negativi spostano il bordo verso sinistra, quelli positivi verso destra: quindi, per allargare un oggetto il primo numero deve essere negativo, il secondo deve essere positivo. Nota che non tutti gli oggetti rispettano entrambi i numeri. Ad esempio, l’oggetto `Accidental` considera soltanto il primo numero (bordo sinistro).

   - `staff-position`

     `staff-position` è una proprietà dell’interfaccia `staff-symbol-referencer-interface`, supportata dagli oggetti che vengono posizionati in relazione al rigo. Specifica in unità di mezzo spazio di rigo la posizione verticale dell’oggetto rispetto alla linea centrale del rigo stesso. È utile per risolvere collisioni tra oggetti come le pause di più misure, le legature di valore e le note in voci diverse.

   - `horizontal-shift`

     All’interno di una voce, tutte le note che si trovano nello stesso momento musicale sono raggruppate in una colonna di note, e viene creato un oggetto `NoteColumn` per controllare il posizionamento orizzontale di quel gruppo di note (vedi “Colonne di note” in Definire esplicitamente le voci). Se e solo se due o più colonne di note in un solo contesto Staff, entrambe con i gambi nella stessa direzione, si trovano sullo stesso momento musicale, i valori delle loro proprietà `horizontal-shift` sono usati per attribuire un punteggio e le colonne che hanno un punteggio più alto vengono progressivamente spostate per evitare le collisioni delle teste di nota. Questa proprietà viene impostata dai comandi `\voiceXXX` e può essere scavalcata direttamente con un comando `\override` o, di solito, dai comandi `\shiftOn`. Attenzione: questa proprietà viene usata per dare un punteggio alle colonne di note per spostarle orizzontalmente; non specifica la grandezza dello spostamento, che viene aumentata progressivamente per gradi in base alla larghezza della testa di nota per ogni punteggio. I gradi sono solitamente di metà della larghezza della testa di nota, ma possono essere della larghezza intera della testa quando c’è un gruppo di note molto ravvicinate.

   - `force-hshift`

     La proprietà `force-hshift` appartiene a `NoteColumn` (più precisamente all’interfaccia `note-column-interface`). Modificandola è possibile spostare la colonna di note in situazioni in cui le colonne di note sono sovrapposte. Non ha effetto su colonne di note non sovrapposte. Viene specificata in unità appropriate per una colonna di note, ovvero la larghezza della testa della nota nella prima voce. Si usa in situazioni complesse in cui i normali comandi `\shiftOn` (vedi Definire esplicitamente le voci) non risolvono adeguatamente le collisioni tra le note. Per questo scopo, è preferibile alla proprietà `extra-offset` perché non c’è bisogno di trovare la giusta distanza in spazi di rigo e lo spostamento delle note dentro o fuori da una `NoteColumn` si ripercuote su altre azioni, come il congiungimento delle teste delle note.

3. Infine, se i metodi precedenti non funzionano, si possono riposizionare verticalmente gli oggetti rispetto alla linea centrale del rigo oppure collocarli a una qualsiasi distanza rispetto a una nuova posizione. Gli svantaggi di questo metodo consistono nel fatto che i corretti valori per il riposizionamento debbano essere trovati per tentativi e per ogni singolo oggetto; inoltre, dato che lo spostamento avviene dopo che LilyPond ha posizionato tutti gli altri oggetti, spetta all’utente evitare le eventuali collisioni. La principale difficoltà che questo approccio comporta, però, è che i valori di riposizionamento potrebbero dover essere ricalcolati se la musica venisse successivamente modificata. Le proprietà che si possono usare con questo tipo di riposizionamento manuale sono:
   `extra-offset`

     Questa proprietà si applica a qualsiasi oggetto di formattazione che supporta l’interfaccia `grob-interface`. Accetta come valore una coppia di numeri che specificano l’ulteriore spostamento nelle direzioni orizzontale e verticale. I numeri negativi spostano l’oggetto a sinistra o in basso. Le unità sono gli spazi del rigo. Questo spostamento aggiuntivo è applicato dopo la formattazione degli oggetti, dunque gli oggetti possono essere riposizionati ovunque senza incidere sugli altri.

   `positions`

     Questa proprietà è utile specialmente per correggere manualmente l’inclinazione e l’altezza di travature, legature di portamento e graffette dei gruppi irregolari. Accetta come valore una coppia di numeri, che specifica la posizione dei bordi sinistro e destro della travatura, della legatura, etc., rispetto alla linea centrale del rigo. L’unità di misura è lo spazio del rigo. Considera, però, che le legature di portamento e di frase non possono essere riposizionate del tutto arbitrariamente. LilyPond, infatti, genera prima una lista delle possibili posizioni per la legatura e poi determina la legatura che “ritiene migliore”. Se la proprietà `positions` è stata sovrascritta, viene scelta dalla lista la legatura più vicina alle posizioni richieste.

Alcuni oggetti potrebbero non disporre di tutte queste proprietà. Occorre andare a vedere nella guida al Funzionamento interno quali proprietà siano disponibili per l’oggetto che si intende modificare.

Segue una lista degli oggetti che hanno la maggiore probabilità di essere coinvolti in collisioni, insieme al nome dell’oggetto che deve essere cercato nella guida al Funzionamento interno per poter sapere quali proprietà si possono usare per spostarlo.

Tipo di oggetto | Nome dell’oggetto
--- | ---
Articolazioni | `Script`
Travature | `Beam`
Dinamiche (verticalmente) | `DynamicLineSpanner`
Dinamiche (orizzontalmente) | `DynamicText`
Diteggiature | `Fingering`
Numeri di chiamata / Testi | `RehearsalMark`
Legature di portamento | `Slur`
Testi, ovvero `^"testo"` | `TextScript`
Legature di valore | `Tie`
Gruppi irregolari | `TupletBracket`

#### LilyPond — Manuale di apprendimento v2.24.4 (ramo stabile).