[ << Modifica dell'output ] | [Inizio][Contenuti][Indice][ ? ] | [ Modelli >> ] | ||
[ < ] | [ Su : Posizionamento degli oggetti ] | [ Collisioni tra oggetti > ] |
4.4.3 Oggetti esterni al rigo
Gli oggetti esterni al rigo sono disposti automaticamente in modo da evitare
collisioni. Gli oggetti dai valori più bassi per la proprietà
outside-staff-priority
vengono posizionati più vicino al rigo,
mentre gli altri oggetti esterni al rigo vengono distanziati quanto
basta per evitare collisioni. La proprietà outside-staff-priority
è
definita nell’interfaccia grob-interface
ed è quindi una proprietà di
tutti gli oggetti di formattazione. Il valore predefinito è #f
per
tutti gli oggetti interni al rigo e un valore numerico appropriato, determinato
al momento della creazione dell’oggetto, per ogni oggetto esterno al rigo. La
seguente tabella mostra i valori numerici predefiniti di alcuni dei più comuni
oggetti esterni al rigo.
Si notino i nomi insoliti di alcuni oggetti: gli oggetti estensori (spanner)
sono creati automaticamente per controllare la disposizione verticale dei
grob che (potrebbero) iniziare e finire in diversi momenti musicali, quindi
la modifica della proprietà outside-staff-priority
del grob sottostante
non produrrebbe alcun effetto. Ad esempio, la modifica di
outside-staff-priority
dell’oggetto Hairpin
non avrà alcun
effetto sulla disposizione verticale delle forcelle. Occorre invece modificare
la proprietà outside-staff-priority
dell’oggetto associato
DynamicLineSpanner
. Questa sovrascrittura deve essere posta
all’inizio dell’estensore, che potrebbe includere più forcelle e indicazioni dinamiche
tra loro collegate.
Oggetto di formattazione | Priorità | Controlla la posizione di: |
---|---|---|
RehearsalMark | 1500 | Numeri di chiamata (e oggetti di testo analoghi) |
MetronomeMark | 1000 | Indicazioni metronomiche |
VoltaBracketSpanner | 600 | Delimitatori dei finali alternativi delle ripetizioni |
TextScript | 450 | Oggetti di testo |
MultiMeasureRestText | 450 | Testi sopra pause di più misure |
OttavaBracket | 400 | Estensioni del segno d’ottava |
TextSpanner | 350 | Estensori del testo |
DynamicLineSpanner | 250 | Tutte le indicazioni dinamiche |
BarNumber | 100 | Numeri di battuta |
TrillSpanner | 50 | Linee ondulate del trillo |
Ecco un esempio che mostra il posizionamento predefinito di alcuni di questi oggetti.
% Set details for later Text Spanner \override TextSpanner #'(bound-details left text) = \markup { \small \bold Slower } % Place dynamics above staff \dynamicUp % Start Ottava Bracket \ottava #1 c'4 \startTextSpan % Add Dynamic Text and hairpin c4\pp\< c4 % Add Text Script c4^Text | c4 c % Add Dynamic Text and terminate hairpin c4\ff c \stopTextSpan | % Stop Ottava Bracket \ottava #0 c,4 c c c |
Questo esempio mostra anche come creare gli estensori (spanner) del testo,
ovvero testo con delle linee che si estendono sopra una sezione musicale.
L’estensore si allunga dal comando \startTextSpan
fino al comando
\stopTextSpan
e il formato del testo è definito dal comando
\override TextSpanner
. Per maggiori dettagli si veda
Text spanners.
Mostra anche come si creano le estensioni del segno d’ottava.
Se i valori predefiniti di outside-staff-priority
non producono
il posizionamento desiderato, è possibile sovrascrivere la priorità di
qualsiasi oggetto. Immaginiamo di voler posizionare l’estensione del segno d’ottava
sotto l’estensore del testo nell’esempio precedente. Basta controllare la
priorità dell’oggetto OttavaBracket
nella guida al Funzionamento interno
o nelle tabelle precedenti e ridurla a un valore inferiore di quello di un
oggetto TextSpanner
, ricordando che OttavaBracket
è creato
nel contesto Staff
:
% Imposta i dettagli per l'estensione del testo vocale seguente \override TextSpanner #'(bound-details left text) = \markup { \small \bold Slower } % Posiziona le indicazione dinamiche sopra il rigo \dynamicUp % Posiziona l'estensione del segno d'ottava sotto il testo vocale \once \override Staff.OttavaBracket #'outside-staff-priority = #340 % Inizia l'estensione del segno d'ottava \ottava #1 c'4 \startTextSpan % Aggiunge l'indicazione dinamica c4\pp % Aggiunge la forcella della dinamica c4\< % Aggiunge l'oggetto di testo c4^Text | c4 c % Aggiunge l'indicazione dinamica c4\ff c \stopTextSpan | % Termina l'estensione de segno d'ottava \ottava #0 c,4 c c c |
Si noti che alcuni di questi oggetti, in particolare i numeri di
battuta, i segni di metronomo e i numeri di chiamata, si trovano nel
contesto Score
; dunque, assicurati di richiamare il contesto
giusto per sovrascriverli.
Le legature di portamento sono classificate come oggetti interni al rigo, anche
se spesso sono poste sopra il rigo, se le note alle quali sono collegate si
trovano nella aprte superiore del pentagramma. Questo può far sì che gli oggetti esterni al rigo,
come le articolazioni, siano spinti troppo in alto, dato che la legatura viene
posizionata prima. La proprietà avoid-slur
dell’articolazione
può essere impostata su 'inside
per portare l’articolazione
dentro la legatura, ma la proprietà avoid-slur
funziona solo se anche
outside-staff-priority
è impostata su #f
.
Altrimenti, si può impostare la proprietà outside-staff-priority
della
legatura di portamento su un valore numerico, in modo che sia posizionata
insieme ad altri oggetti esterni al rigo in base a quel valore. Ecco un
esempio che mostra l’effetto dei due metodi:
c4( c^\markup { \tiny \sharp } d4.) c8 | c4( \once \override TextScript #'avoid-slur = #'inside \once \override TextScript #'outside-staff-priority = ##f c4^\markup { \tiny \sharp } d4.) c8 | \once \override Slur #'outside-staff-priority = #500 c4( c^\markup { \tiny \sharp } d4.) c8 |
Attraverso la proprietà outside-staff-priority
si può
regolare anche la disposizone verticale di singoli oggetti;
i risultati potrebbero tuttavia risultare non sempre ottimali. Supponiamo
di voler posizionare “Testo3” sopra “Testo4” nell’esempio
precedente (si veda Comportamento automatico).
Basta andare a cercare la priorità di TextScript
nella
guida al Funzionamento interno o nelle tabelle precedenti e
aumentare la priorità di “Testo3” assegnando un valore più alto:
c2^"Testo1" c2^"Testo2" | \once \override TextScript #'outside-staff-priority = #500 c2^"Testo3" c2^"Testo4" |
Questo ovviamente pone “Testo3” sopra “Testo4”, ma anche
sopra “Testo2”, mentre “Testo4” si sposta più in basso. Forse questo
risultato non ci soddisfa: vorremmo piuttosto collocare
tutti i testi alla stessa distanza dal rigo. Per riuscirci,
naturalmente, dobbiamo creare più spazio orizzontale tra le note per
far posto al testo. Lo si può ottenere con il comando
textLengthOn
.
\textLengthOn
Per impostazione predefinita, finché si tratta di formattare la musica il
testo prodotto dal comando \markup non occupa uno spazio orizzontale.
Il comando \textLengthOn
inverte questo comportamento e fa sì che
le note si distanzino quanto basti per introdurre il testo:
\textLengthOn % Fa sì che le note si distanzino per introdurre il testo c2^"Text1" c2^"Text2" | c2^"Text3" c2^"Text4" |
Il comando che ripristina il comportamento predefinito è
\textLengthOff
. Ricorda che \once
funziona solo insieme
a \override
, \set
, \revert
o \unset
,
dunque non si può usare con \textLengthOn
.
Per parte sua, anche il testo a margine eviterà le note che si estendono sopra il
rigo. Se lo si vuole evitare, la disposizione automatica in alto può
essere disattivata impostando la priorità su #f
. Ecco un esempio
che mostra come il testo a margine interagisce con tali note.
% Questo testo è abbastanza corto per starci senza creare collisioni c2^"Tes" c'' | R1 | % Questo è troppo lungo per starci, quindi è spostato più in alto c,,2^"Testo" c'' | R1 | % Disattiva l'elusione delle collisioni \once \override TextScript #'outside-staff-priority = ##f c,,2^"Testo Lungo " c'' | R1 | % Disattiva l'elusione delle collisioni \once \override TextScript #'outside-staff-priority = ##f \textLengthOn % e attiva textLengthOn c,,2^"Testo Lungo " % Gli spazi finali vengono rispettati c''2 |
Dinamica
Le indicazioni dinamiche sono di norma poste sotto il
rigo, ma possono essere collocati al di sopra del pentagramma col comando \dynamicUp
.
Vengono posizionati verticalmente rispetto alla figura cui
si riferiscono e fluttuano sopra (o sotto) tutti gli oggetti
interni al rigo come le legature di fraseggio e i numeri di battuta.
Si ottengono risultati abbastanza accettabili, come dimostra
questo esempio:
\clef "bass" \key aes \major \time 9/8 \dynamicUp bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! | ees,2.~\)\mf ees4 r8 |
Tuttavia, se le note e le loro dinamiche sono molto vicine, la disposizione automatica eviterà le collisioni spostando più all’esterno i segni di dinamica successivi. Questo potrebbe non essere però il posizionamento migliore, come mostra questo esempio piuttosto improbabile:
\dynamicUp a4\f b\mf c\mp b\p
Se si dovesse presentare una situazione simile in un ‘vero’ brano musicale,
converrebbe distanziare un po’ di più le note, in modo che i segni di dinamica
possano essere tutti collocati alla stessa distanza verticale dal rigo. Abbiamo
potuto farlo per il testo a margine usando il comando \textLengthOn
,
ma non esiste un comando equivalente per i segni di dinamica. Dunque
dovremo scoprire come farlo usando i comandi \override
.
Estensione dei grob
Dobbiamo innanzitutto sapere come i grob occupano lo spazio. Tutti i grob
hanno al loro interno un punto di riferimento che viene usato
per posizionarli in modo relativo all’oggetto genitore da cui derivano. Questo
punto nel grob viene poi disposto a una distanza orizzontale,
X-offset
, e a una distanza verticale, Y-offset
, dall’oggetto
genitore. L’estensione (extent) orizzontale dell’oggetto è data da una
coppia di numeri, X-extent
, che indica dove si trovano i margini
sinistro e destro rispetto al punto di riferimento. L’ampiezza verticale
è ugualmente definita da una coppia di numeri, Y-extent
.
Queste proprietà appartengono a tutti i grob che supportano l’interfaccia
grob-interface
.
Per impostazione predefinita, gli oggetti esterni al rigo presentano estensione
pari a zero, in modo da potersi sovrapporre nella direzione orizzontale.
Ciò si ottiene con un trucco, ovvero aggiungendo infinito all’estensione
sinistra e infinito negativo a quella destra, impostando il valore di
extra-spacing-width
su '(+inf.0 . -inf.0)
. Dunque, per
assicurarci che non si sovrappongano nella direzione orizzontale, dobbiamo
sovrascrivere il valore di extra-spacing-width
e impostarlo su
'(0 . 0)
in modo da inserire una larghezza vera e propria. Ecco il
comando che lo fa sul testo della dinamica:
\override DynamicText #'extra-spacing-width = #'(0 . 0)
Vediamo se funziona nell’esempio precedente:
\dynamicUp \override DynamicText #'extra-spacing-width = #'(0 . 0) a4\f b\mf c\mp b\p |
Sicuramente ha impedito un’errata disposizione delle indicazioni
dinamiche, ma restano due problemi. Le dinamiche dovrebbero
essere un po’ più distanziate; sarebbe inoltre opportuno collocarle
tutte alla stessa distanza dal rigo.
Il primo problema è facilmente risolvibile. Invece di
impostare extra-spacing-width
su zero, possiamo
aggiungere un po’ di spazio. L’unità è lo spazio tra due linee
del rigo, quindi se spostiamo il margine sinistro mezza unità
a sinistra e il margine destro mezza unità a destra dovrebbe
funzionare:
\dynamicUp % Aumenta la larghezza di 1 spazio rigo \override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5) a4\f b\mf c\mp b\p
L’aspetto è migliore, ma sarebbe preferibile avere i segni di dinamica
allineati alla stessa linea di base invece di spostarsi su e giù seguendo la posizione delle note.
La proprietà che permette di ottenere tale risultato è staff-padding
ed è trattata
nella sezione seguente.
[ << Modifica dell'output ] | [Inizio][Contenuti][Indice][ ? ] | [ Modelli >> ] | ||
[ < ] | [ Su : Posizionamento degli oggetti ] | [ Collisioni tra oggetti > ] |
Other languages: English, česky, deutsch, español, français, 日本語, nederlands.
About automatic language selection.