[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

5.5 Ritocchi avanzati

@translationof Advanced tweaks

Questa sezione discute i vari approcci che permettono di migliorare l’aspetto delle partiture.

Vedi anche

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] [ ? ]

5.5.1 Allineamento degli oggetti

@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.

Vedi anche

Guida alla notazione: Uso di break-alignable-interface.

Estendere LilyPond: (extending)Callback functions section ‘Callback functions’ in Estendere.


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

Impostazione diretta di 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

[image of music]


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

Uso di 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-axisdirection
proprietàproprietàPosizionamento
0-1sinistra
01destra
1-1sotto
11sopra

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] [ ? ]

Uso di self-alignment-interface

@translationof Using the 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"

[image of music]

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

[image of music]


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

Uso di 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 "↓"

[image of music]

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

[image of music]

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

[image of music]

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

[image of music]


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

5.5.2 Raggruppamento verticale dei grob

@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] [ ? ]

5.5.3 Modifica degli stampi

@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
}

[image of music]

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.

Vedi anche

Guida alla notazione: Notazione grafica nel blocco markup, Formattazione del testo, Comandi per markup, Il font Emmentaler, Graphic.


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

5.5.4 Modifica delle forme

@translationof Modifying shapes


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

Modifica di legature di valore e di portamento

@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:

  1. specificando di quanto spostare i punti di controllo della curva Bézier calcolata automaticamente, o
  2. specificando esplicitamente le posizioni dei quattro punti di controllo richiesti per definire la curva desiderata.

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.

Curve Bézier cubiche

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.

Specificare gli spostamenti dai punti di controllo correnti

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,> }
>>

[image of music]

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,> }
>>

[image of music]

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,> }
>>

[image of music]

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\)
}

[image of music]

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)
}

[image of music]

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)
}

[image of music]

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\)
}

[image of music]

Specificare i punti di controllo esplicitamente

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,
    }
  }
}

[image of music]

Problemi noti e avvertimenti

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.

Vedi anche

Guida al funzionamento interno: (internals)TieColumn section ‘TieColumn’ in Guida al Funzionamento Interno.


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

5.5.5 Modifica degli estensori spezzati

@translationof Modifying broken spanners


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

Uso di \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
}

[image of music]

È 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
}

[image of music]

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\)
}

[image of music]

È 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.

Problemi noti e avvertimenti

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.

Vedi anche

Estendere LilyPond: (extending)Difficult tweaks section ‘Difficult tweaks’ in Estendere.


[ < ] [ > ]   [ << ] [ Su ] [ >> ]         [Inizio] [Contenuti] [Indice] [ ? ]

5.5.6 Contenitori unpure-pure

@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
}

[image of music]

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.