[ << Modifica dell'output ] | [Inizio][Contenuti][Indice][ ? ] | [ Modelli >> ] | ||
[ < Aspetto degli oggetti ] | [ Su : Aspetto degli oggetti ] | [ Dimensione degli oggetti > ] |
4.3.1 Visibilità e colore degli oggetti
Potremmo voler creare una partitura priva di alcuni elementi a scopo didattico, perché lo studente possa esercitarsi a inserirli. Vediamo un semplice esempio e immaginiamo che l’esercizio consista nell’inserire le stanghette mancanti di un brano. Ma di norma le stanghette sono inserite automaticamente: come lo possiamo impedire?
Prima di iniziare, occorre ricordare che le proprietà degli oggetti sono raggruppate nelle cosiddette interfacce – si veda Proprietà presenti nelle interfacce. Queste servono semplicemente a raggruppare quelle proprietà che possono essere usate insieme per modificare un oggetto grafico – se una di queste è ammessa per un oggetto, lo sono anche le altre. Alcuni oggetti usano le proprietà di alcune interfacce, altri quelle di altre interfacce. Le interfacce che contengono le proprietà usate da un particolare grob (oggetto grafico) sono elencate nella guida al Funzionamento interno in fondo alla pagina che descrive il grob; queste proprietà possono essere individuate consultando quelle interfacce.
In Proprietà degli oggetti di formattazione abbiamo spiegato come trovare le
informazioni sui grob. Usando lo stesso approccio, andiamo nella guida
al Funzionamento interno per trovare l’oggetto grafico relativo alla
stanghetta (bar line). Passando da Backend e All layout objects
troviamo un oggetto grafico chiamato BarLine
. Tra le sue proprietà ce ne sono
due che controllano la visibilità: break-visibility
e stencil
. Anche
Barline supporta varie interfacce, tra cui la grob-interface
,
dove troviamo le proprietà transparent
e color
.
Tutte queste proprietà hanno degli effetti sulla visibilità delle stanghette (e,
ovviamente, anche di molti altri oggetti grafici). Vediamole una per
volta.
stencil
Questa proprietà controlla l’aspetto delle stanghette specificando il
simbolo (glifo) da usare. Come nel caso di molte altre proprietà,
si può far in modo che non usi nessun simbolo impostando il suo
valore su #f
. Proviamo, come prima, omettendo il contesto
implicito, Voice
:
{ \time 12/16 \override BarLine #'stencil = ##f c4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Le stanghette sono ancora visibili. Cosa abbiamo sbagliato? Torna alla
guida del Funzionamento interno e scorri di nuovo la pagina che elenca
le proprietà di BarLine. In cima alla pagina dice “Barline objects are
created by: Bar_engraver”. Vai alla pagina Bar_engraver
. In fondo
si trova una lista dei contesti nel quale opera l’incisore della battuta.
Tutti questi sono di tipo Staff
, dunque la ragione per cui il comando
\override
precedente non funziona è che Barline
non si trova
nel contesto predefinito, Voice
. Se il contesto indicato non è
corretto, il comando non funziona. Non viene generato alcun messaggio
di errore e non viene registrato niente nel file di log. Proviamo a
correggerlo specificando il contesto giusto:
{ \time 12/16 \override Staff.BarLine #'stencil = ##f c4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Ora le stanghette sono sparite.
Si noti però che impostare la proprietà stencil
su #f
causerà degli errori nel caso in cui le dimensioni dell’oggetto
siano necessarie per elaborarlo correttamente. Ad esempio, si creano
degli errori se la proprietà stencil
dell’oggetto NoteHead
è
impostata su #f
. In questo caso è possibile usare invece la funzione
point-stencil
, che trasforma lo stencil in un oggetto a dimensione
zero:
{ c4 c \once \override NoteHead #'stencil = #point-stencil c4 c }
break-visibility
Nella pagina di BarLine
della guida al Funzionamento interno
vediamo che la proprietà break-visibility
richiede un vettore di
tre valori booleani.
Questi valori controllano rispettivamente se le stanghette debbano
comparire alla fine, in mezzo o all’inizio dei righi. Dato
che nel nostro esempio vogliamo sopprimere tutte le stanghette, il valore
che ci serve è '#(#f #f #f)
. Proviamo, ricordando di includere
il contesto Staff
. Si noti che prima della parentesi di apertura
abbiamo #'#
. Il '#
deve far parte del valore perché introduce
un vettore, mentre il primo #
deve precedere, come sempre, il
valore del comando \override
.
{ \time 12/16 \override Staff.BarLine #'break-visibility = #'#(#f #f #f) c4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
E vediamo che anche questo comando elimina tutte le stanghette.
transparent
Nelle proprietà specificate nella pagina grob-interface
della
guida al Funzionamento interno vediamo che la proprietà transparent
è
un booleano. Quindi deve essere impostata su #t
(«true», ’vero’) per
rendere trasparente il grob. Nel prossimo esempio rendiamo trasparente
il segno di tempo invece delle stanghette. Per farlo dobbiamo trovare
il nome del grob del segno di tempo (in inglese time signature).
Torniamo alla pagina ‘All layout objects’ per scoprire quali sono le
proprietà dell’oggetto di formattazione TimeSignature
. Tale grob
è generato dall’incisore Time_signature_engraver
, che opera
nel contesto Staff
e supporta l’interfaccia grob-interface
.
Quindi il comando che rende trasparente l’indicazione di tempo è:
{ \time 12/16 \override Staff.TimeSignature #'transparent = ##t c4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
L’indicazione di tempo è scomparsa; è rimasto però uno spazio al suo posto. Magari questo è quello che si
desidera, ad esempio per creare un esercizio in cui uno studente deve
riempire degli spazi vuoti. Ma in altre circostanze ciò può
non essere gradito. Per eliminare lo spazio vuoto bisogna usare la proprietà stencil
e impostarla su #f
:
{ \time 12/16 \override Staff.TimeSignature #'stencil = ##f c4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
la differenza è ovvia: se si imposta lo stencil su #f
l’oggetto scompare del tutto; se si rende l’oggetto trasparente
questo resta dove è, anche se invisibile.
color
Infine, proviamo a rendere le stanghette invisibili colorandole di bianco. (Si tratta di un metodo problematico perché la stanghetta bianca può imbiancare o meno le linee del rigo che incrocia. Puoi vedere in alcuni degli esempi successivi che questo accade in modo imprevedibile. I motivi per cui questo accade e il modo in cui è possibile controllarlo sono esposti in Painting objects white. Ma per il momento stiamo imparando la proprietà color, quindi accettiamo questa limitazione.)
L’interfaccia grob-interface
stabilisce che il valore della
proprietà color è una lista, ma non spiega cosa debba essere questa
lista. La lista di cui ha bisogno è in realtà una lista di valori
in unità interne, ma per evitare di dover imparare quali siano queste
unità vengono forniti vari modi di specificare un colore. Il primo
modo consiste nell’usare uno dei colori ‘normali’ elencati nella
prima tabella in
List of colors. Per rendere bianche le
stanghette scriviamo:
{ \time 12/16 \override Staff.BarLine #'color = #white c4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
e di nuovo vediamo che le stanghette non sono visibili. Si noti che white non è preceduto da un apostrofo, perché non è un simbolo, ma una funzione. Quando viene chiamata, fornisce la lista di valori interni necessari per impostare il colore su bianco. Gli altri colori nella lista normale sono anch’essi funzioni. Per convincerti che funziona potresti provare a cambiare il colore e usare una delle altre funzioni presenti nella lista.
Il secondo modo per cambiare il colore è attraverso la lista
di nomi di colori X11 che si trova in
List of colors.
Tuttavia questi colori devono essere preceduti da un’altra
funzione che converte i nomi di colori X11 nella lista di
valori interni, x11-color
:
{ \time 12/16 \override Staff.BarLine #'color = #(x11-color 'white) c4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Si noti che in questo caso la funzione x11-color
prende
un simbolo come argomento, dunque il simbolo deve essere preceduto
da un apostrofo e i due elementi devono essere racchiusi tra parentesi.
Esiste una terza funzione, che converte i valori RGB in colori
interni, la funzione rgb-color
. Prende tre argomenti
che specificano l’intensità dei colori rosso, verde e blu.
I valori vanno da 0 a 1. Quindi per avere il colore rosso
il valore sarà (rgb-color 1 0 0)
e per avere il bianco sarà (rgb-color 1 1 1)
:
{ \time 12/16 \override Staff.BarLine #'color = #(rgb-color 1 1 1) c4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Infine, è disponibile anche una scala di grigi, appartenente all’insieme
di colori X11. Questi vanno dal nero, 'grey0
,
al bianco, 'grey100
, con cadenza di 1. Ecco un
esempio in cui tutti gli oggetti di formattazione sono
impostati su diverse tonalità di grigio:
{ \time 12/16 \override Staff.StaffSymbol #'color = #(x11-color 'grey30) \override Staff.TimeSignature #'color = #(x11-color 'grey60) \override Staff.Clef #'color = #(x11-color 'grey60) \override Voice.NoteHead #'color = #(x11-color 'grey85) \override Voice.Stem #'color = #(x11-color 'grey85) \override Staff.BarLine #'color = #(x11-color 'grey10) c4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Nota i contesti associati a ciascuno degli oggetti di formattazione. È importante scegliere quelli giusti, altrimenti i comandi non funzioneranno! Ricorda, il contesto è quello in cui si trova il relativo incisore. Il contesto predefinito per gli incisori si trova partendo dall’oggetto di formattazione (layout object) per poi andare all’incisore che lo produce: la pagina dell’incisore nella guida al Funzionamento interno riporterà a quale contesto appartenga di norma l’incisore.
[ << Modifica dell'output ] | [Inizio][Contenuti][Indice][ ? ] | [ Modelli >> ] | ||
[ < Aspetto degli oggetti ] | [ Su : Aspetto degli oggetti ] | [ Dimensione degli oggetti > ] |
Other languages: English, česky, deutsch, español, français, 日本語, nederlands.
About automatic language selection.