| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
@translationof Advanced tweaks
Questa sezione discute i vari approcci che permettono di migliorare l’aspetto delle partiture.
| 5.5.1 Allineamento degli oggetti | ||
| 5.5.2 Raggruppamento verticale dei grob | ||
| 5.5.3 Modifica degli stampi | ||
| 5.5.4 Modifica delle forme | ||
| 5.5.5 Modifica degli estensori spezzati | ||
| 5.5.6 Contenitori unpure-pure |
Manuale di apprendimento: (learning)Modifica dell’output section ‘Modifica dell'output’ in Manuale di Apprendimento, (learning)Altre fonti di informazione section ‘Altre fonti di informazione’ in Manuale di Apprendimento.
Guida alla notazione: Come funziona la Guida al funzionamento interno, Modifica delle proprietà.
Estendere LilyPond: (extending)Interfaces for programmers section ‘Interfaces for programmers’ in Estendere.
File installati: ‘scm/define-grobs.scm’.
Frammenti: (snippets)Tweaks and overrides section ‘Tweaks and overrides’ in Frammenti di codice.
Guida al funzionamento interno: (internals)All layout objects section ‘All layout objects’ in Guida al Funzionamento Interno.
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
@translationof Aligning objects
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
(internals)self-alignment-interface section ‘self-alignment-interface’ in Guida al Funzionamento Interno e
(internals)side-position-interface section ‘side-position-interface’ in Guida al Funzionamento Interno.
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.
Guida alla notazione:
Uso di break-alignable-interface.
Estendere LilyPond: (extending)Callback functions section ‘Callback functions’ in Estendere.
Impostazione diretta di X-offset e Y-offset | ||
Uso di side-position-interface | ||
Uso di self-alignment-interface | ||
Uso di break-alignable-interface |
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
X-offset e Y-offset@translationof Setting X-offset and Y-offset directly
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
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
side-position-interface@translationof Using the 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.
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
self-alignment-interface@translationof Using the self-alignment-interface
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"
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.
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
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
break-alignable-interface@translationof Using the 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
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
@translationof Vertical grouping of grobs
I grob VerticalAlignment e VerticalAxisGroup lavorano insieme. VerticalAxisGroup raggruppa insieme diversi grob come Staff, Lyrics, etc. VerticalAlignment quindi allinea verticalmente i diversi grob raggruppati insieme da VerticalAxisGroup. Di solito è presente un solo VerticalAlignment per partitura ma ogni Staff, Lyrics, etc. ha il suo VerticalAxisGroup.
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
@translationof Modifying stencils
Tutti gli oggetti della formattazione hanno una proprietà stencil che
fa parte dell’interfaccia grob-interface. Per impostazione predefinita,
questa proprietà è solitamente impostata su una funzione specifica per l’oggetto
per cui è concepita in modo da creare il simbolo che lo rappresenta nell’output.
Per esempio, l’impostazione standard della proprietà stencil dell’oggetto
MultiMeasureRest è ly:multi-measure-rest::print.
Il simbolo standard di qualsiasi oggetto può essere sostituito modificando la
proprietà stencil perché faccia riferimento a una procedura diversa
e scritta appositamente. Ciò richiede una profonda conoscenza del funzionamento
interno di LilyPond, ma esiste un modo più semplice che spesso è in grado di
produrre risultati accettabili.
Si tratta di impostare la proprietà stencil sulla procedura che stampa
testo – ly:text-interface::print – e aggiungere una proprietà
text all’oggetto impostato per contenere il testo markup che produce
il simbolo richiesto. Grazie alla flessibilità di markup, si può ottenere
molto – vedi in particolare Notazione grafica nel blocco markup.
L’esempio seguente illustra questa procedura cambiando il simbolo della testa di nota con una croce iscritta in un cerchio.
XinO = { \once \override NoteHead.stencil = #ly:text-interface::print \once \override NoteHead.text = \markup { \combine \halign #-0.7 \draw-circle #0.85 #0.2 ##f \musicglyph "noteheads.s2cross" } } \relative { a' a \XinO a a }
Qualsiasi glifo Feta usato nel font Emmentaler può essere passato al
comando markup \musicglyph – vedi Il font Emmentaler.
I file ‘EPS’ e i comandi Postscript possono essere inseriti entrambi nel
corpo del testo con i comandi markup \epsfile e \postscript –
vedi Graphic.
Guida alla notazione: Notazione grafica nel blocco markup, Formattazione del testo, Comandi per markup, Il font Emmentaler, Graphic.
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
@translationof Modifying shapes
| Modifica di legature di valore e di portamento |
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
@translationof Modifying ties and slurs
Le legature, siano esse di valore (Tie), di portamento (Slur),
di frase (PhrasingSlur), di laisser-vibrer (LaissezVibrerTie)
o di valore ripetute (RepeatTie), sono tutte disegnate come curve Bézier
di terzo ordine. Se la forma della legatura di valore o di frase che viene
calcolata automaticamente non è ottimale, può essere modificata manualmente
in due modi:
Entrambi i metodi sono spiegati di seguito. Il primo metodo è più adatto se sono necessari solo piccoli aggiustamenti alla curva; il secondo può essere migliore per creare curve che riguardano soltanto una singola nota.
Le curve Bézier di terzo ordine o cubiche sono definite da quattro punti di controllo. Il primo e il quarto punto di controllo sono esattamente i punti di inizio e fine della curva. I due punti intermedi definiscono la forma. Sul web si trovano delle animazioni che mostrano come viene disegnata la curva, ma la seguente descrizione può comunque essere utile. La curva inizia dal primo punto di controllo e si dirige verso il secondo, piegandosi gradualmente per arrivare al terzo e poi al quarto, arrivando lì direttamente dal terzo punto di controllo. La curva è contenuta interamente nel quadrilatero definito dai quattro punti di controllo. Traslazioni, rotazioni e ridimensionamenti dei punti di controllo risultano tutti esattamente nelle stesse operazioni sulla curva.
In questo esempio la disposizone automatica della legatura di valore non è
ottimale, e \tieDown non sarebbe di aiuto.
<< { e'1~ 1 } \\ \relative { r4 <g' c,> <g c,> <g c,> } >>
Cambiando i punti di controllo della legatura con \shape consente di
evitare le collisioni.
La sintassi di \shape è
[-]\shape spostamenti elemento |
Questo comando riposiziona i punti di controllo di elemento di quanto
indicato da spostamenti. L’argomento spostamenti è una lista
di coppie di numeri o una lista di tali liste. Ogni elemento di una coppia
rappresenta lo spostamento di una delle coordinate di un punto di controllo.
Se elemento è una stringa, il risultato è \once\override per il
tipo di grob specificato. Se elemento è un’espressione musicale, il
risultato è la stessa espressione musicale con un’appropriata modifica.
In altre parole, la funzione \shape può comportarsi come un comando
\once\override o un comando \tweak a seconda che l’argomento
elemento sia il nome di un grob, come “Slur”, o un’espressione
musicale, come “(”. L’argomento spostamenti specifica gli
sfasamenti dei quattro punti di controllo nella forma di una lista di
quattro coppie di valori (dx . dy) in unità di spazi rigo (o una lista
di tali liste se la curva ha più di un segmento).
Il trattino iniziale è richiesto se e solo se si usa la forma con
\tweak.
Dunque usando lo stesso esempio precedente e la forma \once\override
di \shape, il seguente comando alzerà la legatura di valore di
metà spazio rigo:
<< { \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie e'1~ 1 } \\ \relative { r4 <g' c,> <g c,> <g c,> } >>
Questo posizionamento è migliore, ma forse dovrebbe essere alzato di più
al centro, come viene fatto nel prossimo esempio, dove stavolta si usa
la forma alternativa \tweak:
<< { e'1-\shape #'((0 . 0.5) (0 . 1) (0 . 1) (0 . 0.5)) ~ e' } \\ \relative { r4 <g' c,> <g c,> <g c,> } >>
Le modifiche alle posizioni orizzontali dei punti di controllo funzionano nello stesso modo. Si possono ridefinire anche due curve diverse che iniziano nello stesso momento musicale:
\relative { c''8(\( a) a'4 e c\) \shape #'((0.7 . -0.4) (0.5 . -0.4) (0.3 . -0.3) (0 . -0.2)) Slur \shape #'((0 . 0) (0 . 0.5) (0 . 0.5) (0 . 0)) PhrasingSlur c8(\( a) a'4 e c\) }
La funzione \shape può sostituire anche i punti di controllo di
curve che si estendono oltre le interruzioni di linea. A ogni pezzo
della curva spezzata può essere assegnata la sua lista di spostamenti.
Se non sono necessarie delle modifiche a un segmento in particolare,
la lista vuota può servire come segnaposto. In questo esempio l’interruzione
di linea fa sembrare doppia la legatura di portamento singola:
\relative { c'4( f g c \break d,4 c' f, c) }
Cambiando le forme delle due metà della legatura di portamento diventa più chiaro che la legatura continua oltre l’interruzione di linea:
% () può essere usato come una scorciatoia per ((0 . 0) (0 . 0) (0 . 0) (0 . 0)) % nel caso in cui uno dei segmenti non necessiti di modifiche \relative c' { \shape #'( (( 0 . 0) (0 . 0) (0 . 0) (0 . 1)) ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5)) ) Slur c4( f g c \break d,4 c' f, c) }
Se è richiesta una curva a forma di S, bisogna sempre definire manualmente i punti di controllo — LilyPond non sceglierà mai tali forme automaticamente.
\relative c'' { c8( e b-> f d' a e-> g) \shape #'((0 . -1) (5.5 . -0.5) (-5.5 . -10.5) (0 . -5.5)) PhrasingSlur c8\( e b-> f d' a e-> g\) }
Le coordinate dei punti di controllo della curva di Bézier sono specificate in unità di spazi rigo. La coordinata X è relativa al punto di riferimento della nota a cui la legatura si attacca, mentre la coordinata Y è relativa alla linea centrale del rigo. Le coordinate sono specificate come una lista di quattro coppie di numeri decimali (reali). Un possibile approccio consiste nel valutare prima le coordinate delle due estremità e poi indovinare i due punti intermedi. I valori ottimali vengono quindi trovati per tentativi. Tenere conto del fatto che, in caso di ulteriori modifiche alla musica o alla formattazione, questi valori potrebbero dover essere nuovamente cambiati manualmente.
Una situazione in cui è preferibile specificare i punti di controllo esplicitamente invece di specificarne gli spostamenti è quella in cui devono essere indicati per una singola nota. Il prossimo esempio mostra un modo in cui rappresentare una legatura di portamento che si estende nelle sezioni alternative di una volta.
\relative { c''1 \repeat volta 3 { c4 d( e f } \alternative { { g2) d } { g2 % crea una legatura di portamento e spostala in una nuova posizione % il <> è solamente un accordo vuoto che serve a terminare la legatura -\tweak control-points #'((-2 . 3.8) (-1 . 3.9) (0 . 4) (1 . 3.4)) ( <> ) f, } { e'2 % crea una legatura di portamento e spostala in una nuova posizione -\tweak control-points #'((-2 . 3) (-1 . 3.1) (0 . 3.2) (1 . 2.4)) ( <> ) f, } } }
Non è possibile modificare le forme di legature di valore e di portamento
cambiando la proprietà control-points se ci sono molteplici legature
nello stesso momento musicale – anche il comando \tweak non funzionerà
in questo caso. Tuttavia si può sovrascrivere la proprietà
tie-configuration di TieColumn per impostare l’inizio della linea
e la direzione come desiderato.
Guida al funzionamento interno: (internals)TieColumn section ‘TieColumn’ in Guida al Funzionamento Interno.
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
@translationof Modifying broken spanners
Uso di \alterBroken |
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
\alterBroken@translationof Using alterBroken
Quando un estensore va a capo o si spezza, ciascun pezzo eredita gli
attributi dell’estensore originario. Dunque la normale modifica di
un estensore spezzato applica le stesse modifiche a ciascuno dei
suoi segmenti. Nell’esempio successivo, la sovrascrittura di
thickness agisce sulla legatura di portamento su entrambi
i lati rispetto all’interruzione di linea.
\relative c'' { r2 \once\override Slur.thickness = 10 c8( d e f \break g8 f e d) r2 }
È possibile modificare indipendentemente l’aspetto di singoli pezzi
di un estensore spezzato col comando \alterBroken. Questo
può generare sia un \override che un \tweak della
proprietà di un estensore.
La sintassi di \alterBroken è:
[-]\alterBroken proprietà valori elemento |
L’argomento valori è una lista di valori, uno per ogni pezzo
spezzato. Se elemento è il nome di un grob come Slur o
Staff.PianoPedalBracket, il risultato è un \override
del tipo di grob specificato. Se elemento è un’espressione
musicale come “(” o “[”, il risultato è la stessa espressione
musicale modificata da un comando \tweak.
Il trattino iniziale è richiesto nella forma \tweak. Non aggiungerlo
se \alterBroken viene usato come un \override.
Nel suo uso come \override, \alterBroken può essere
preceduto da \once o \temporary e ripristinato con
\revert seguito da proprietà
(vedi
(extending)Intermediate substitution functions section ‘Intermediate substitution functions’ in Estendere).
Il codice seguente applica un \override indipendente a ciascun
segmento della legatura di portamento dell’esempio precedente:
\relative c'' { r2 \alterBroken thickness #'(10 1) Slur c8( d e f \break g8 f e d) r2 }
Il comando \alterBroken può essere usato con qualsiasi oggetto estensore,
inclusi Tie, PhrasingSlur, Beam e TextSpanner. Per
esempio, un editor che stia preparando un’edizione colta potrebbe voler indicare
l’assenza di parte di una legatura di frase in un manoscritto tratteggiando
solo il segmento che è stato aggiunto. L’esempio seguente mostra come farlo,
in questo caso usando la forma \tweak del comando:
% Si usa per convenienza la lista vuota, perché è l'impostazione % predefinita di dash-definition, producendo così una curva continua. \relative { c''2-\alterBroken dash-definition #'(() ((0 1.0 0.4 0.75))) \(e \break g2 e\) }
È importante comprendere che \alterBroken imposterà ogni pezzo di
un estensore spezzato sul valore corrispondente specificato in
valori. Quando il numero di valori è inferiore a quello dei pezzi,
a qualsiasi pezzo ulteriore sarà assegnata una lista vuota. Ciò potrebbe
portare a risultati indesiderati se la proprietà di formattazione non è
impostata su una lista vuota per impostazione predefinita. In tali casi,
a ogni segmento deve essere assegnato un valore appropriato.
Le interruzioni di linea possono verificarsi in punti diversi in seguito
a modifiche della formattazione. Le impostazioni scelte per \alterBroken
potrebbero non essere più adatte per un estensore che non va più a capo o è
diviso in più segmenti di prima. Per proteggersi da questa situazione
conviene fare un uso esplicito di \break.
Il comando \alterBroken non funziona nel caso di proprietà dell’estensore
a cui si accede prima di line-breaking, come direction.
Estendere LilyPond: (extending)Difficult tweaks section ‘Difficult tweaks’ in Estendere.
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] | [Inizio] | [Contenuti] | [Indice] | [ ? ] |
@translationof Unpure-pure containers
I contenitori unpure-pure (impuri-puri) sono utili per sovrascrivere i calcoli
di spaziatura dell’asse Y - in particolare Y-offset e
Y-extent - tramite una funzione Scheme invece che con un numero o una
coppia di numeri.
Per alcuni grob, il cui Y-extent è basato sulla proprietà stencil,
sovrascrivere tale proprietà renderà necessario un’ulteriore sovrascrittura di
Y-extent tramite un contenitore unpure-pure.
Quando una funzione sovrascrive Y-offset e/o Y-extent, si presume
che ciò innescherà il calcolo delle interruzioni di linea troppo presto durante
la compilazione. Dunque la funzione non viene affatto calcolata (e di solito
restituirà un valore di ‘0’ o ‘'(0 . 0)’) e ciò può causare delle
collisioni. Una funzione ‘pure’ (pura) non avrà effetto su proprietà,
oggetti o “suicidi” dei grob e quindi tutto ciò che è collegato al suo
asse Y sarà sempre calcolato correttamente.
Attualmente, ci sono circa trenta funzioni che sono già considerate ‘pure’ e i contenitori unpure-pure sono un modo per impostare le funzioni non ancora presenti in questa lista come ‘pure’. La funzione ‘pure’ viene calcolata prima di qualsiasi interruzione di linea e quindi la spaziatura orizzontale può essere regolata “in tempo”. La funzione ‘unpure’ viene invece calcolata dopo le interruzioni di linea.
Nota: Dato che è difficile sapere sempre quali funzioni si trovano in
questa lista, consigliamo a chi crea funzioni ‘pure’ di non usare i
grob Beam o VerticalAlignment.
Un contenitore unpure-pure viene costruito nel modo seguente:
(ly:make-unpure-pure-container f0 f1)
dove f0 è una funzione che prende n argomenti (n >= 1)
e il primo argomento deve sempre essere il grob. Questa è la funzione che
restituisce il vero risultato. f1 è la funzione etichettata come
‘pure’ che prende n + 2 argomenti. Di nuovo, il primo argomento
deve sempre essere il grob, ma il secondo e il terzo sono il punto di
partenza, ‘start’, e quello di arrivo, ‘end’.
start e end sono, per tutti gli intenti e scopi, valori
fittizi che contano solo per gli estensori, o Spanners, (ovvero
Hairpin o Beam), che possono restituire calcoli diversi
dell’altezza in base a una colonna di inizio e di fine.
Il resto sono altri argomenti della prima funzione (che potrebbero essere nessuno se n = 1).
I risultati della seconda funzione sono usati come un’approssimazione del valore necessario che viene poi usato dalla prima funzione per ottenere il valore reale, che viene infine usato per la messa a punto, molto più tardi nel corso del processo di spaziatura.
#(define (square-line-circle-space grob) (let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch)) (notename (ly:pitch-notename pitch))) (if (= 0 (modulo notename 2)) (make-circle-stencil 0.5 0.0 #t) (make-filled-box-stencil '(0 . 1.0) '(-0.5 . 0.5))))) squareLineCircleSpace = { \override NoteHead.stencil = #square-line-circle-space } smartSquareLineCircleSpace = { \squareLineCircleSpace \override NoteHead.Y-extent = #(ly:make-unpure-pure-container ly:grob::stencil-height (lambda (grob start end) (ly:grob::stencil-height grob))) } \new Voice \with { \remove "Stem_engraver" } \relative c'' { \squareLineCircleSpace cis4 ces disis d \smartSquareLineCircleSpace cis4 ces disis d }
Nella prima misura, senza il contenitore unpure-pure, il motore della spaziatura non conosce la larghezza della testa di nota e lascia che collida con le alterazioni. Nella seconda misura, che usa i contenitori unpure-pure, il motore della spaziatura conosce la larghezza della testa di nota e evita le collisioni allungando la linea dello spazio necessario.
Di solito per semplici calcoli si possono usare funzioni quasi identiche
per entrambe le parti, ‘unpure’ e ‘pure’, cambiando soltanto il numero
di argomenti passati e la portata della funzione. Questo caso d’uso è così
frequente che ly:make-unpure-pure-container costruisce tale seconda
funzione automaticamente quando è richiamata con un solo argomento.
Nota: Se una funzione viene etichettata come ‘pure’ ma viene fuori che non lo è, i risultati possono essere imprevedibili.
| [ < ] | [ > ] | [ << ] | [ Su ] | [ >> ] |
This document was generated by gub on Luglio 13, 2020 using texi2html 1.82.
Altre lingue: English, català, deutsch, español, français, 日本語.
A proposito della selezione automatica della lingua.