5.5.1 Allineamento degli oggetti
Gli oggetti grafici che supportano l’interfaccia self-alignment-interface
e/o l’interfaccia side-position-interface possono essere allineati a un
oggetto disposto precedentemente in vari modi. L’elenco di questi oggetti è
consultabile in
self-alignment-interface e
side-position-interface.
Tutti gli oggetti grafici hanno un punto di riferimento, un’estensione orizzontale e una verticale. L’estensione orizzontale è una coppia di numeri che determina gli spostamenti dal punto di riferimento dei margini sinistro e destro (gli spostamenti a sinistra sono negativi). L’estensione verticale è una coppia di numeri che determina lo spostamento dal punto di riferimento ai margini inferiore e superiore (gli spostamenti in giù sono negativi).
La posizione di un oggetto su un rigo è dato dai valori delle proprietà
X-offset e Y-offset. Il valore di X-offset dà lo
spostamento dalla coordinata X del punto di riferimento dell’oggetto genitore,
mentre il valore di Y-offset dà lo spostamento dalla linea centrale del
rigo. I valori di X-offset e Y-offset possono essere impostati
direttamente oppure possono essere impostati per essere calcolati dalle
procedure in modo da consentire un allineamento con l’oggetto genitore.
Nota: Molti oggetti hanno speciali questioni di posizionamento che fanno
sì che qualsiasi impostazione di X-offset o Y-offset sia
ignorata o modificata, anche se l’oggetto supporta l’interfaccia
self-alignment-interface. Sovrascrivendo le proprietà X-offset
o Y-offset su un valore fisso la rispettiva proprietà
self-alignment verrà ignorata.
Per esempio, un’alterazione può essere riposizionata verticalmente impostando
Y-offset ma qualsiasi modifica di X-offset non avrà effetto.
I segni di chiamata possono essere allineati con oggetti spezzabili come
stanghette, simboli di chiave, simboli di indicazione di tempo e armature
di chiave. Ci sono proprietà speciali elencate nell’interfaccia
break-aligned-interface per posizionare i segni di chiamata su tali
oggetti.
Vedi anche
Guida alla notazione:
Uso di break-alignable-interface.
Estendere LilyPond: Callback functions.
Impostazione diretta di X-offset e Y-offset | ||
Uso di side-position-interface | ||
Uso di self-alignment-interface | ||
Uso di break-alignable-interface |
Impostazione diretta di X-offset e Y-offset
Si possono assegnare valori numerici alle prietà X-offset e
Y-offset di molti oggetti. L’esempio seguente mostra tre note
con la posizione predefinita della diteggiatura e le posizioni con X-offset
e Y-offset modificate.
a'-3 a' -\tweak X-offset #0 -\tweak Y-offset #0 -3 a' -\tweak X-offset #-1 -\tweak Y-offset #1 -3
Uso di side-position-interface
Un oggetto che supporta l’interfaccia side-position-interface può
essere posizionato accanto al suo oggetto genitore in modo che i margini
indicati dei due oggetti si tocchino. L’oggetto può essere posizionato
sopra, sotto, a destra o a sinistra dell’oggetto genitore. Quest’ultimo
non può essere specificato; è invece determinato dall’ordine degli elementi
nel flusso di input. La maggior parte degli oggetti ha la testa di nota
associata come oggetto genitore.
I valori delle proprietà side-axis e direction determinano
dove l’oggetto deve essere posizionato, in questo modo:
side-axis | direction | |
|---|---|---|
| proprietà | proprietà | Posizionamento |
0 | -1 | sinistra |
0 | 1 | destra |
1 | -1 | sotto |
1 | 1 | sopra |
Quando side-axis è 0, X-offset deve essere impostato
sulla procedura ly:side-position-interface::x-aligned-side.
Questa procedura restituirà il valore corretto di X-offset per
porre l’oggetto al lato sinistro o destro dell’oggetto genitore in base
al valore di direction.
Quando side-axis è 1, Y-offset deve essere impostato
sulla procedura ly:side-position-interface::y-aligned-side.
Questa procedura restituirà il valore corretto di Y-offset per
porre l’oggetto sopra o sotto l’oggetto genitore in base al valore di
direction.
Uso di self-alignment-interface
Autoallineamento orizzontale degli oggetti
L’allineamento orizzontale di un oggetto che supporta l’interfaccia
self-alignment-interface è regolato dal valore della proprietà
self-alignment-X, purché la proprietà X-offset dell’oggetto
sia impostata su ly:self-alignment-interface::x-aligned-on-self.
A self-alignment-X può essere assegnato qualsiasi numero reale,
in unità di metà del totale dell’estensione X dell’oggetto. Valori
negativi spostano l’oggetto a destra, valori positivi lo spostano a
sinistra. Un valore di 0 centra l’oggetto sul punto di riferimento
del suo oggetto genitore, un valore di -1 allinea il margine
sinistro dell’oggetto al punto di riferimento del suo genitore, e un
valore di 1 allinea il margine destro dell’oggetto al punto di
riferimento del suo genitore. I simboli LEFT, CENTER e
RIGHT possono essere usati al posto dei valori -1,
0 e 1, rispettivamente.
Normalmente si usa il comando \override per modificare il valore
di self-alignment-X, ma il comando \tweak può essere utile
per allineare separatamente varie annotazioni su una singola nota:
a' -\tweak self-alignment-X #-1 ^"allineato a sinistra" -\tweak self-alignment-X #0 ^"allineato al centro" -\tweak self-alignment-X #RIGHT ^"allineato a destra" -\tweak self-alignment-X #-2.5 ^"allineato ancora più a destra"
Autoallineamento verticale degli oggetti
Gli oggetti possono essere allineati verticalmente in un modo analogo
al loro allineamento orizzontale se la proprietà Y-offset è
impostata su ly:self-alignment-interface::y-aligned-on-self.
Tuttavia altri meccanismi sono spesso implicati nell’allineamento
verticale: il valore di Y-offset è solo una delle variabili
da prendere in considerazione. Ciò potrebbe rendere complicato
l’aggiustamento del valore di alcuni oggetti.
Le unità sono soltanto la metà dell’estensione verticale dell’oggetto, che
è di solito piuttosto piccola, dunque potrebbero essere necessari grossi
numeri. Un valore di -1 allinea il margine inferiore dell’oggetto
al punto di riferimento dell’oggetto genitore, un valore di 0
allinea il centro dell’oggetto al punto di riferimento del genitore,
e un valore di 1 allinea il margine superiore dell’oggetto
al punto di riferimento del genitore. I simboli DOWN,
CENTER e UP possono essere usati al posto di -1,
0 e 1, rispettivamente.
Autoallineamento degli oggetti in entrambe le direzioni
Impostando sia X-offset che Y-offset, un oggetto può essere
allineato in entrambe le direzioni simultaneamente.
L’esempio seguente mostra come aggiustare un segno di diteggiatura in modo che stia vicino alla testa di nota.
a' -\tweak self-alignment-X #0.5 % sposta orizzontalmente a sinistra -\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self -\tweak self-alignment-Y #-1 % sposta verticalmente in su -3 % terzo dito
Uso di break-alignable-interface
I segni di chiamata e i numeri di battuta possono essere allineati con oggetti
della notazione diversi dalle stanghette. Questi oggetti comprendono
ambitus, breathing-sign, clef, custos, staff-bar,
left-edge, key-cancellation, key-signature e
time-signature.
Ogni tipo di oggetto ha il suo punto di riferimento predefinito, al quale i segni di chiamata sono allineati:
% Il segno di chiamata sarà allineato al margine destro della chiave \override Score.RehearsalMark.break-align-symbols = #'(clef) \key a \major \clef treble \mark "↓" e'1 % Il segno di chiamata sarà allineato al margine sinistro dell'indicazione di tempo \override Score.RehearsalMark.break-align-symbols = #'(time-signature) \key a \major \clef treble \time 3/4 \mark "↓" e'2. % Il segno di chiamata sarà centrato sul segno di respiro \override Score.RehearsalMark.break-align-symbols = #'(breathing-sign) \key a \major \clef treble \time 4/4 e'1 \breathe \mark "↓"
Si può specificare un elenco dei possibili oggetti a cui allineare. Se
alcuni oggetti sono invisibili in quel punto a causa dell’impostazione
di break-visibility o di impostazioni esplicite della visibilità
di tonalità e chiavi, il segno di chiamata o il numero di battuta viene
allineato al primo oggetto dell’elenco che è visibile. Se nessun oggetto
dell’elenco è visibile, l’oggetto è allineato alla stanghetta. Se la
stanghetta è invisibile, l’oggetto viene allineato al punto in cui si
dovrebbe trovare la stanghetta.
% Il segno di chiamata sarà allineato al margine destro dell'armatura di chiave \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef) \key a \major \clef treble \mark "↓" e'1 % Il segno di chiamata sarà allineato al margine destro della chiave \set Staff.explicitKeySignatureVisibility = #all-invisible \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef) \key a \major \clef bass \mark "↓" gis,1 % Il segno di chiamata sarà centrato sopra la stanghetta \set Staff.explicitKeySignatureVisibility = #all-invisible \set Staff.explicitClefVisibility = #all-invisible \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef) \key a \major \clef treble \mark "↓" e'1
L’allineamento del segno di chiamata relativo all’oggetto della notazione può essere modificato, come evidenziato nell’esempio seguente. In una partitura con molteplici righi, questa impostazione deve essere fatta per tutti i righi.
% Il segno di chiamata sarà allineato al margine destro dell'armatura di chiave \override Score.RehearsalMark.break-align-symbols = #'(key-signature) \key a \major \clef treble \time 4/4 \mark "↓" e'1 % Il segno di chiamata sarà centrato sopra l'armatura di chiave \once \override Score.KeySignature.break-align-anchor-alignment = #CENTER \mark "↓" \key a \major e'1 % Il segno di chiamata sarà allineato al margine sinistro dell'armatura di chiave \once \override Score.KeySignature.break-align-anchor-alignment = #LEFT \key a \major \mark "↓" e'1
Il segno di chiamata può anche essere spostato a destra o a sinistra del margine sinistro di una quantità arbitraria. Le unità sono gli spazi rigo:
% Il segno di chiamata sarà allineato al margine sinistro dell'armatura di chiave % e poi spostato a destra di 3.5 spazi rigo \override Score.RehearsalMark.break-align-symbols = #'(key-signature) \once \override Score.KeySignature.break-align-anchor = #3.5 \key a \major \mark "↓" e'1 % Il segno di chiamata sarà allineato al margine sinistro dell'armatura di chiave % e poi spostato a sinistra di 2 spazi rigo \once \override Score.KeySignature.break-align-anchor = #-2 \key a \major \mark "↓" e'1