5.3.6 Il comando \offset

Sebbene sia possibile impostare le proprietà dei grob su nuovi valori coi comandi \override, \tweak e \overrideProperty, è spesso più opportuno modificare tali proprietà in modo relativo a un valore predefinito. A questo fine è stato creato il comando \offset.

La sintassi di \offset è

[-]\offset proprietà offset elemento

Il comando funziona aggiungendo i contenuti di offset all’impostazione predefinita della proprietà proprietà del grob indicato da elemento.

A seconda di come è formulato il comando, \offset può comportarsi come un \tweak o come un \override. Le variazioni d’uso sono trattate dopo aver considerato le proprietà del grob che possono essere usate con \offset.

Proprietà che possono essere spostate con offset

Molte, ma non tutte, le proprietà dei grob possono essere spostate con offset. Se la proprietà non può essere spostata con offset, l’oggetto resterà invariato e apparirà un avviso. In questi casi bisogna usare \override o \tweak per modificare l’oggetto.

Si potrebbe procedere per prova e errore e basarsi sugli avvisi per capire cosa può essere spostato con offset e cosa no. Tuttavia si può usare un approccio più sistematico.

I seguenti criteri determinano se una proprietà possa essere modificata con \offset:

Gli esempi seguenti prendono in considerazione varie proprietà grob in relazione ai criteri appena delineati.

\offset come override

Se elemento è un nome di grob come Arpeggio o Staff.OttavaBracket, il risultato è un \override del tipo di grob specificato.

\offset proprietà offset [contesto.]NomeGrob

Notare che il trattino iniziale non è mai usato nella forma ‘override’, proprio come non è mai usato col comando \override stesso.

L’esempio seguente usa la forma ‘override’ per allungare gli arpeggi predefiniti mostrati nella prima misura in modo che coprano del tutto l’esensione degli accordi. Gli arpeggi sono allungati di mezzo spazio rigo verso l’alto e verso il basso. Viene mostrata anche la stessa operazione fatta sul primo accordo con un normale override della proprietà positions. Questo metodo non rispecchia affatto il compito di ‘allungare di mezzo spazio rigo’, perché le estremità devono essere specificate con coordinate assolute invece che relative. Inoltre, sarebbero necessari override individuali per ciascuno degli altri accordi, dato che variano in dimensione e posizione.

arpeggioMusic = {
  <c' e' g'>\arpeggio <a' c'' e''>\arpeggio
  <d' f' a' c''>\arpeggio <c' e' g' b' d'' f'' a''>\arpeggio
}

{
  \arpeggioMusic
  \bar "||"
  \offset positions #'(-0.5 . 0.5) Arpeggio
  \arpeggioMusic
  \bar "||"
  \once \override Arpeggio.positions = #'(-3.5 . -0.5)
  <c' e' g'>1\arpeggio
  \bar "||"
}

[image of music]

Nel suo uso come ‘override’, \offset può essere preceduto da \once o \temporary e annullato con \revert e la proprietà (vedi Intermediate substitution functions). Ciò deriva dal fatto che \offset in realtà crea un \override della proprietà.

music = { c'8\< d' e' f'\! }

{
  \music
  \offset height 1 Hairpin
  \music
  \music
  \revert Hairpin.height
  \music
  \bar "||"
  \once \offset height 1 Hairpin
  \music \music
  \bar "||"
  \override Hairpin.height = 0.2
  \music
  \temporary \offset height 2 Hairpin
  \music
  \music
  \revert Hairpin.height
  \music
  \bar "||"
}

[image of music]

Proprio come \override, la forma ‘override’ di \offset può essere usata con \undo e \single.

longStem = \offset length 6 Stem

{
 \longStem c'4 c''' c' c''
 \bar "||"
 \undo \longStem c'4 c''' c' c''
 \bar "||"
 \single \longStem c'4 c''' c' c''
 \bar "||"
}

[image of music]

\offset come tweak

Se elemento è un’espressione musicale come ( o \arpeggio, il risultato è la stessa espressione musicale con una modifica di tipo tweak applicata.

[-]\offset [NomeGrob.]proprietà offset espressione-musicale

La sintassi di \offset nella sua forma ‘tweak’ è analoga a quella dello stesso comando \tweak, sia nell’ordine sia in presenza o assenza del trattino iniziale.

L’esempio seguente usa la forma ‘tweak’ per regolare la posizione verticale dell’oggetto BreathingSign. Si confronti questo col normale comando \tweak che lo segue. La sintassi è equivalente, ma l’output di \tweak è meno intuitivo, perché BreathingSign.Y-offset è calcolato dalla linea centrale del pentagramma. Al contratio, non è necessatio conoscere come è calcolato Y-offset quando si usa \offset.

{
  c''4
  \breathe
  c''4
  \offset Y-offset 2 \breathe
  c''2
  \tweak Y-offset 3 \breathe
}

[image of music]

Nell’esempio precedente, gli oggetti modificati sono stati creati direttamente dall’input dell’utente: il comando \breathe è un’istruzione esplicita che restituisce un oggetto BreathingSign. Dato che l’ambito del comando era non ambiguo, non è stato necessario specificare il nome dell’oggetto. Ma quando un oggetto viene creato indirettamente, bisogna includere il nome del grob. Ciò è valido anche per il comando \tweak.

Nell’esempio seguente, l’oggetto Beam viene abbassato di due spazi rigo applicando \offset alla proprietà positions.

Il primo impiego di \offset richiede la presenza del nome del grob, perché nessun elemento dell’input crea esplicitamente la travatura. Nel secondo impiego la travatura viene creata manualmente con l’espressione musicale [; dunque il nome del grob non è necessario. L’esempio mostra anche una scorciatoia: un singolo numero viene applicato a entrambi i membri di una coppia di numeri.)

{
  c''8 g'' e'' d''
  \offset Beam.positions #'(-2 . -2)
  c''8 g'' e'' d''
  c''8 g'' e'' d''
  c''8-\offset positions #-2 [ g'' e'' d'']
}

[image of music]

\offset con estensori spezzati

È anche possibile modificare in modo indipendente i segmenti di un estensore che va oltre una o più interruzioni di linea. In questo caso, offset prende una lista di valori del tipo di dati richiesto dalla proprietà.

Il comando \offset usato in questo modo è simile al comando \alterBroken, vedi Modifica degli estensori spezzati. Tuttavia, diversamente da \alterBroken, i valori assegnati a \offset non sono assoluti, ma relativi.

L’esempio seguente sposta l’oggetto ‘spezzato’ OttavaBracket attraverso la sua proprietà staff-padding. Dato che la proprietà prende un numero, a offset viene fornita una lista di numeri per rendere conto dei due segmenti creati dall’interruzione di linea. Il pezzo di parentesi dell’ottava sulla prima linea non viene modificato perché viene aggiunto 0 al suo valore predefinito di staff-padding. Il segmento sulla seconda linea viene alzato di tre spazi rigo dalla sua altezza predefinita. L’altezza predefinita è 2, anche se non è necessario saperlo per ottenere la posizione desiderata.

{
  \offset staff-padding #'(0 3) Staff.OttavaBracket
  \ottava #1
  c'''2 c'''
  \break
  c'''2 c'''
}

[image of music]

L’esempio seguente imita l’effetto del comando \shape spostando la proprietà control-points dell’oggetto Slur. Qui offset è una lista di number-pair-list, una per ciascun segmento della legatura di portamento. Questo esempio realizza un risultato identico a quello corrispondente in Modifica delle forme.

{
  c'4-\offset control-points #'(
               ((0 . 0) (0 . 0) (0 . 0) (0 . 1))
               ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5))
              ) ( f'4 g' c''
  \break
  d'4 c'' f' c')
}

[image of music]


Guida alla Notazione di LilyPond v2.25.22 (development-branch).