]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/it/notation/changing-defaults.itely
New upstream version 2.19.80
[lilypond.git] / Documentation / it / notation / changing-defaults.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
2
3 @ignore
4     Translation of GIT committish: c377d85f06e524599d20e9edf102ae186ede5e77
5
6     When revising a translation, copy the HEAD committish of the
7     version that you are working on.  For details, see the Contributors'
8     Guide, node Updating translation committishes..
9 @end ignore
10
11 @c Translators: Federico Bruni
12 @c Translation checkers:
13
14 @c \version "2.19.22"
15
16 @node Modifica delle impostazioni predefinite
17 @chapter Modifica delle impostazioni predefinite
18 @translationof Changing defaults
19
20 LilyPond è progettato per fornire la migliore qualità grafica mantenendo le
21 impostazioni predefinite.  Tuttavia può capitare che sia necessario modificare
22 la sua formattazione predefinita.  La formattazione è regolata da un gran
23 numero di @qq{pulsanti e interruttori} chiamati @q{proprietà}.  Prima di
24 proseguire si consiglia di leggere una guida introduttiva su come accedere
25 a queste proprietà e modificarle: vedi @rlearning{Modifica dell'output}, nel
26 Manuale di apprendimento.  Questo capitolo tratta lo stesso argomento, ma in
27 uno stile più adatto a un manuale.
28
29 @cindex Internals Reference
30 @cindex Guida al funzionamento interno
31
32 La descrizione completa delle proprietà che si possono ritoccare si trova
33 in un documento separato: @rinternalsnamed{Top,la Guida al funzionamento
34 interno}.  Questo manuale elenca tutte le variabili, le funzioni e le
35 opzioni disponibili in LilyPond.  Viene fornito come un documento HTML,
36 disponibile
37 @c leave the @uref as one long line.
38 @uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/internals/,on@/-line},
39 ed è anche incluso nel pacchetto della documentazione di LilyPond.
40
41 Internamente, LilyPond usa il linguaggio Scheme (un dialetto di LISP) per
42 fornire l'infrastruttura.  Modificare le decisioni di formattazione prevede
43 in effetti l'accesso alle funzioni interne del programma, cosa che
44 richiede l'input Scheme.  In un file @file{.ly} gli elementi Scheme
45 sono introdotti col segno
46 cancelletto@tie{}@code{#}.@footnote{@rextend{Scheme tutorial}, contiene
47 una breve guida sull'inserimento di numeri, liste, stringhe e simboli in
48 Scheme.}
49
50
51 @menu
52 * Contesti di interpretazione::
53 * Come funziona la Guida al funzionamento interno::
54 * Modifica delle proprietà::
55 * Proprietà e concetti utili::
56 * Ritocchi avanzati::
57 * Uso delle funzioni musicali::
58 @end menu
59
60
61 @node Contesti di interpretazione
62 @section Contesti di interpretazione
63 @translationof Interpretation contexts
64
65 Questa sezione spiega cosa sono i contesti e come modificarli.
66
67 @menu
68 * Tutto sui contesti::
69 * Creazione e citazione di un contesto::
70 * Conservazione di un contesto::
71 * Modifica dei componenti aggiuntivi di un contesto::
72 * Modifica delle impostazioni predefinite di un contesto::
73 * Definizione di nuovi contesti::
74 * Ordine di disposizione dei contesti::
75 @end menu
76
77 @seealso
78 Manuale di apprendimento:
79 @rlearning{Contesti e incisori}.
80
81 File installati:
82 @file{ly/engraver-init.ly},
83 @file{ly/performer-init.ly}.
84
85 Frammenti:
86 @rlsr{Contexts and engravers}.
87
88 Guida al funzionamento interno:
89 @rinternals{Contexts},
90 @rinternals{Engravers and Performers}.
91
92
93 @node Tutto sui contesti
94 @subsection Tutto sui contesti
95 @translationof Contexts explained
96
97 @ignore
98 @c TODO Rethink and rewrite
99
100 >> > > - list of contexts: my *danger unmaintainable*
101 >> > > alarm just went off.  I'm
102
103 I knew it would... And leaving out some of them is perfectly fine
104 with me.
105 I do think that a list like this, with the main contexts and a
106 brief
107 description of  what they do (perhaps also with a note about what
108 default
109 behavior is associated with each of them, but this may be
110 unmanageable),
111 should be there, and then we could simply list the remaining ones
112 without
113 further explanation and with links to the IR.
114 @end ignore
115
116 @c TODO Improve layout, order and consistency of wording -td
117
118 @c TODO Add introduction which explains contexts in generality  -td
119
120 @c TODO Describe propagation of property values -td
121
122 I contesti sono organizzati in modo gerarchico:
123
124 @menu
125 * Definizioni di output - gerarchia dei contesti::
126 * Score - il padre di tutti i contesti::
127 * Contesti del livello superiore - contenitori di righi::
128 * Contesti del livello intermedio - righi::
129 * Contesti del livello inferiore - voci::
130 @end menu
131
132 @c blueprint letteralmente indica la cianografia architettonica
133 @node Definizioni di output - gerarchia dei contesti
134 @unnumberedsubsubsec Definizioni di output - gerarchia dei contesti
135 @translationof Output definitions - blueprints for contexts
136
137 Questa sezione spiega la rilevanza delle definizioni di output quando
138 si lavora coi contesti.  Esempi di vere definizioni di output sono
139 illustrati dopo (vedi @ref{Changing all contexts of the same type}).
140
141 @cindex output, definizioni
142 @cindex definizioni di output
143 @funindex \layout
144 Sebbene la musica scritta in un file possa riferirsi a un certo tipo o
145 nome di un contesto, i contesti vengono creati soltanto quando la musica
146 viene interpretata.  LilyPond interpreta la musica in base a una
147 @qq{definizione di output} e lo fa per le varie definizioni di output,
148 producendo un output diverso per ciascuna.  La definizione di output che
149 crea l'output grafico si specifica con @code{\layout}.
150
151 @funindex \midi
152 Una definizione di output molto più semplice, usata per produrre l'output
153 Midi, si specifica con @code{\midi}.  Molte altre definizioni di output
154 sono usate da LilyPond internamente, come quando si usa la combinazione
155 automatica delle parti (@ref{Combinazione automatica delle parti}) o si creano citazioni
156 musicali (@ref{Quoting other voices}).
157
158 Le definizioni di output definiscono la relazione tra i contesti e le loro
159 rispettive impostazioni predefinite.  Sebbene la maggior parte dei cambiamenti
160 venga fatta solitamente in un blocco @code{\layout}, le impostazioni relative
161 al Midi avranno effetto solo se inserite in un blocco @code{\midi}.
162
163 @funindex autoBeaming
164 Alcune impostazioni interessano vari tipi di output: per esempio, se
165 @code{autoBeaming} è disattivato in qualche contesto, le travature contano
166 come melismi al fine di abbinare musica e testo vocale, come descritto
167 in @ref{Durate automatiche delle sillabe}.  Questo abbinamento viene fatto
168 sia per l'output grafico che per il Midi.  Se le modifiche fatte a
169 @code{autoBeaming} in una definizione di contesto di un blocco @code{\layout}
170 non sono ripetute nel corrispondente blocco @code{\midi}, il testo e la
171 musica andranno fuori sincrono nel Midi.
172
173 @seealso
174 File installati:
175 @file{ly/engraver-init.ly}.
176 @file{ly/performer-init.ly}.
177
178 @node Score - il padre di tutti i contesti
179 @unnumberedsubsubsec Score - il padre di tutti i contesti
180 @translationof Score - the master of all contexts
181
182 Questo è il contesto del livello superiore.  Nessun altro contesto può
183 contenere un contesto Score.  Per impostazione predefinita, il contesto
184 Score gestisce l'amministrazione delle indicazioni di tempo e garantisce
185 che elementi come le chiavi, le indicazioni di tempo e le armature di chiave
186 siano allineate da rigo a rigo.
187
188 Un contesto Score viene istanziato implicitamente quando viene elaborato
189 un blocco @code{\score @{@dots{}@}}.
190
191 @node Contesti del livello superiore - contenitori di righi
192 @unnumberedsubsubsec Contesti del livello superiore - contenitori di righi
193 @translationof Top-level contexts - staff containers
194
195 @strong{@emph{StaffGroup}}
196
197 Raggruppa i righi e aggiunge una parentesi quadra sul lato sinistro, che
198 raggruppa insieme i righi.  Le stanghette dei righi in esso contenuti sono
199 connessi verticalmente.  @code{StaffGroup} è semplicemente un insieme di righi,
200 con una parentesi quadra all'inizio e le stanghette che li attraversano.
201
202 @strong{@emph{ChoirStaff}}
203
204 Identico a @code{StaffGroup} eccetto che le stanghette dei righi in esso
205 contenuti non sono connesse verticalmente.
206
207 @strong{@emph{GrandStaff}}
208
209 Un gruppo di righi, con una parentesi graffa sul lato sinistro, che raggruppa
210 insieme i righi.  Le stanghette dei righi in esso contenuti sono
211 connessi verticalmente.
212
213 @strong{@emph{PianoStaff}}
214
215 Identico a @code{GrandStaff}, ma con il supporto ai nomi degli strumenti a
216 sinistra di ogni sistema.
217
218 @node Contesti del livello intermedio - righi
219 @unnumberedsubsubsec Contesti del livello intermedio - righi
220 @translationof Intermediate-level contexts - staves
221
222 @strong{@emph{Staff}}
223
224 Gestisce chiavi, stanghette, armature di chiave, alterazioni.  Può contenere
225 contesti @code{Voice}.
226
227 @strong{@emph{RhythmicStaff}}
228
229 Come @code{Staff} ma per le ritmiche.  Le altezze vengono ignorate e le
230 note appaiono su una linea.  L'output MIDI conserva le altezze inalterate.
231
232 @strong{@emph{TabStaff}}
233
234 Contesto per generare l'intavolatura (o tablatura).  La forma predefinita è
235 quella dell'intavolatura per chitarra, con sei linee.
236
237 @strong{@emph{DrumStaff}}
238
239 Contesto per gli strumenti percussivi.  Può contenere @code{DrumVoice}.
240
241 @strong{@emph{VaticanaStaff}}
242
243 Identico a @code{Staff}, a parte il fatto che è progettato per rappresentare
244 un brano in stile gregoriano.
245
246 @strong{@emph{MensuralStaff}}
247
248 Identico a @code{Staff}, a parte il fatto che è progettato per rappresentare
249 un brano in stile mensurale.
250
251 @node Contesti del livello inferiore - voci
252 @unnumberedsubsubsec Contesti del livello inferiore - voci
253 @translationof Bottom-level contexts - voices
254
255 I contesti al livello della voce inizializzano alcune proprietà e avviano
256 gli incisori adatti.  Un contesto del livello inferiore è privo di
257 @code{defaultchild}.  Sebbene sia possibile far sì che accetti/@/contenga
258 sottocontesti, questi possono essere creati e inseriti solo esplicitamente.
259
260 @strong{@emph{Voice}}
261
262 Corrisponde a una voce di un rigo.  Questo contesto gestisce la
263 conversione di segni di dinamica, gambi, travature, apici e pedici,
264 legature di portamento e di valore e pause.  Deve essere istanziata
265 esplicitamente se si hanno molteplici voci nello stesso rigo.
266
267 @strong{@emph{VaticanaVoice}}
268
269 Identico a @code{Voice}, a parte il fatto che è progettato per rappresentare
270 un brano in stile gregoriano.
271
272 @strong{@emph{MensuralVoice}}
273
274 Identico a @code{Voice}, con delle modifiche per rappresentare un brano in
275 stile mensurale.
276
277 @strong{@emph{Lyrics}}
278
279 Corrisponde a una voce con testo vocale.  Gestisce la stampa di una singola
280 linea di testo vocale.
281
282 @strong{@emph{DrumVoice}}
283
284 Il contesto della voce usato in un rigo per percussioni.
285
286 @strong{@emph{FiguredBass}}
287
288 Il contesto in cui sono creati gli oggetti @code{BassFigure} a partire
289 dall'input inserito in modalità @code{\figuremode}.
290
291 @strong{@emph{TabVoice}}
292
293 Il contesto della voce usato all'interno di un contesto @code{TabStaff}.
294 Solitamente omesso così che sia creato implicitamente.
295
296 @strong{@emph{CueVoice}}
297
298 Un contesto della voce usato per rappresentare note a dimensione ridotta, inteso
299 soprattutto per aggiungere citazioni in corpo più piccolo a un rigo, vedi
300 @ref{Formatting cue notes}.  Solitamente omesso così che sia creato implicitamente.
301
302 @strong{@emph{ChordNames}}
303
304 Crea e dispone i nomi degli accordi.
305
306
307
308 @node Creazione e citazione di un contesto
309 @subsection Creazione e citazione di un contesto
310 @translationof Creating and referencing contexts
311
312 @funindex \new
313 @funindex \context
314 @cindex nuovi contesti
315 @cindex citazione di un contesto
316 @cindex Contesti, creazione e citazione
317
318 LilyPond crea i contesti del livello inferiore automaticamente se incontra
319 un'espressione musicale prima di un contesto adatto, ma questo approccio
320 di solito funziona soltanto per partiture semplici o frammenti musicali
321 simili a quelli della documentazione.  Per partiture più complesse si
322 consiglia di specificare tutti i contesti esplicitamente coi comandi
323 @code{\new} o @code{\context}.  La sintassi di questi due comandi è
324 molto simile:
325
326 @example
327 [\new | \context] @var{Contesto} [ = @var{nome}] [@var{espressione-musicale}]
328 @end example
329
330 @noindent
331 dove si può usare @code{\new} o @code{\context}.
332 @var{Contesto} è il tipo di contesto che deve essere creato,
333 @var{nome} è un nome opzionale da assegnare al contesto che si
334 sta creando e @var{espressione-musicale} è una singola espressione
335 musicale che deve essere interpretata dagli incisori e dai performer
336 in questo contesto.
337
338 Il prefisso @code{\new} senza un nome viene usato comunemente per creare
339 partiture con molti righi:
340
341 @lilypond[quote,verbatim]
342 <<
343   \new Staff \relative {
344     % lascia che il contesto Voice sia creato implicitamente
345     c''4 c
346   }
347   \new Staff \relative {
348     d''4 d
349   }
350 >>
351 @end lilypond
352
353 @noindent
354 e per mettere varie voci in un rigo:
355
356 @lilypond[quote,verbatim]
357 \new Staff <<
358   \new Voice \relative {
359     \voiceOne
360     c''8 c c4 c c
361   }
362   \new Voice \relative {
363     \voiceTwo
364     g'4 g g g
365   }
366 >>
367 @end lilypond
368
369 @noindent
370 @code{\new} deve essere sempre usato per specificare contesti senza nome.
371
372 La differenza tra @code{\new} e @code{\context} sta nell'azione
373 presa:
374
375 @itemize
376 @item
377 @code{\new} con o senza un nome creerà sempre un contesto del tutto
378 nuovo e distinto, anche se ne esiste già uno con lo stesso nome:
379
380 @lilypond[quote,verbatim]
381 \new Staff <<
382   \new Voice = "A" \relative {
383     \voiceOne
384     c''8 c c4 c c
385   }
386   \new Voice = "A" \relative {
387     \voiceTwo
388     g'4 g g g
389   }
390 >>
391 @end lilypond
392
393 @item
394 @code{\context} seguito da un nome creerà un contesto distinto solo se
395 non esiste già un contesto dello stesso tipo con lo stesso nome nella
396 stessa gerarchia di contesto.  Altrimenti sarà preso come riferimento
397 per quel contesto precedentemente creato, e la sua espressione musicale
398 verrà passata a quel contesto per la sua interpretazione.
399
400 Una possibile applicazione dei contesti con nome è la separazione di
401 formattazione della partitura e contenuto musicale.  Le seguenti due
402 forme sono entrambe valide:
403
404 @lilypond[quote,verbatim]
405 \score {
406   <<
407     % formattazione della partitura
408     \new Staff <<
409       \new Voice = "one" {
410         \voiceOne
411       }
412       \new Voice = "two" {
413         \voiceTwo
414       }
415     >>
416
417     % contenuto musicale
418     \context Voice = "one" {
419       \relative {
420         c''4 c c c
421       }
422     }
423     \context Voice = "two" {
424       \relative {
425         g'8 g g4 g g
426       }
427     }
428   >>
429 }
430 @end lilypond
431
432 @lilypond[quote,verbatim]
433 \score {
434   <<
435     % formattazione della partitura
436     \new Staff <<
437       \context Voice = "one" {
438         \voiceOne
439       }
440       \context Voice = "two" {
441         \voiceTwo
442       }
443     >>
444
445     % contenuto musicale
446     \context Voice = "one" {
447       \relative {
448         c''4 c c c
449       }
450     }
451     \context Voice = "two" {
452       \relative {
453         g'8 g g4 g g
454       }
455     }
456   >>
457 }
458 @end lilypond
459
460 @noindent
461 Altrimenti si possono usare le variabili per ottenere un risultato simile.  Vedi
462 @rlearning{Organizzare i brani con le variabili}.
463
464 @item
465 @code{\context} senza nome corrisponderà al primo di qualsiasi contesto
466 precedentemente creato dello stesso tipo nella stessa gerarchia di contesto,
467 anche uno a cui è stato assegnato un nome, e la sua espressione musicale sarà
468 passata a quel contesto per la sua interpretazione.  Questa forma è raramente
469 utile.  Tuttavia, si usa @code{\context} senza nome e senza espressione
470 musicale per impostare il contesto in cui una procedura Scheme specificata con
471 @code{\applyContext} viene eseguita:
472
473 @example
474 \new Staff \relative @{
475   c'1
476   \context Timing
477   \applyContext #(lambda (ctx)
478                    (newline)
479                    (display (ly:context-current-moment ctx)))
480   c1
481 @}
482 @end example
483
484 @end itemize
485
486 Un contesto deve essere nominato se deve essere citato successivamente, per
487 esempio quando il testo vocale è associato alla musica:
488
489 @example
490 \new Voice = "tenore" @var{musica}
491 @dots{}
492 \new Lyrics \lyricsto "tenore" @var{testo}
493 @end example
494
495 @noindent
496 Maggiori informazioni sull'associazione del testo vocale alla musica in
497 @ref{Durate automatiche delle sillabe}.
498
499 Le proprietà di tutti i contesti di un certo tipo possono essere modificate
500 in un blocco @code{\layout} (con una sintassi diversa), vedi
501 @ref{Changing all contexts of the same type}.  Questo costrutto fornisce anche
502 un mezzo per mantenere le istruzioni di formattazione separate dal contenuto
503 musicale.  Se occorre modificare un solo contesto, bisogna usare un blocco
504 @code{\with}, vedi @ref{Modifica di un solo contesto specifico}.
505
506 @seealso
507 Manuale di apprendimento:
508 @rlearning{Organizzare i brani con le variabili}.
509
510 Guida alla notazione:
511 @ref{Modifica di un solo contesto specifico},
512 @ref{Durate automatiche delle sillabe}.
513
514
515 @node Conservazione di un contesto
516 @subsection Conservazione di un contesto
517 @translationof Keeping contexts alive
518
519 @cindex contexts, keeping alive
520 @cindex contexts, lifetime
521
522 I contesti vengono solitamente terminati nel primo momento musicale in
523 cui non hanno niente da fare.  Quindi i contesti @code{Voice} muoiono
524 appena non contengono eventi; i contesti @code{Staff} muoiono appena
525 tutti i contesti @code{Voice} al loro interno non contengono eventi; etc.
526 Ciò può causare difficoltà se contesti precedenti, che sono stati
527 terminati, devono essere richiamati; per esempio, quando si cambia
528 il rigo col comando @code{\change}, quando si associa il testo a una
529 voce col comando @code{\lyricsto} o quando si aggiungono ulteriori eventi
530 musicali a un contesto precedente.
531
532 C'è un'eccezione a questa regola generale: all'interno di un costrutto
533 @code{@{@dots{}@}} (musica sequenziale), la nozione di «contesto corrente»
534 scenderà di livello ogni volta che un elemento della sequenza termina in un
535 sottocontesto del precedente contesto corrente.  Ciò evita la falsa creazione di
536 contesti impliciti in varie situazioni, ma significa che il primo contesto in
537 cui si scende verrà conservato fino alla fine dell'espressione.
538
539 Al contrario, i contesti di un construtto @code{<<@dots{}>>} (musica simultanea)
540 non sono portati avanti, dunque racchiudendo un comando di creazione di contesto
541 in un'ulteriore coppia di @code{<<@dots{}>>} impedirà che il contesto persista
542 in tutta la sequenza @code{@{@dots{}@}}.
543
544 Un contesto può essere tenuto attivo assicurandosi che abbia qualcosa
545 da fare in ogni momento musicale.  I contesti @code{Staff} sono tenuti
546 attivi assicurandosi che una delle loro voci sia conservata.  Un modo per
547 farlo consiste nell'aggiungere pause spaziatrici a una voce in parallelo
548 con la musica vera.  Queste devono essere aggiunte a ogni contesto
549 @code{Voice} da tenere attivo.  Se si usano sporadicamente varie voci,
550 è più sicuro tenerle attive invece di tentare di affidarsi alle eccezioni
551 menzionate sopra.
552
553 Nell'esempio seguente, sia la voce A che la voce B sono mantenute attive
554 in questo modo per la durata del brano:
555
556 @lilypond[quote,verbatim]
557 musicA = \relative { d''4 d d d }
558 musicB = \relative { g'4 g g g }
559 keepVoicesAlive = {
560   <<
561     \new Voice = "A" { s1*5 }  % Tiene la voce "A" attiva per 5 battute
562     \new Voice = "B" { s1*5 }  % Tiene la voce "B" attiva per 5 battute
563   >>
564 }
565
566 music = {
567   \context Voice = "A" {
568     \voiceOneStyle
569     \musicA
570   }
571   \context Voice = "B" {
572     \voiceTwoStyle
573     \musicB
574   }
575   \context Voice = "A" { \musicA }
576   \context Voice = "B" { \musicB }
577   \context Voice = "A" { \musicA }
578 }
579
580 \score {
581   \new Staff <<
582     \keepVoicesAlive
583     \music
584   >>
585 }
586 @end lilypond
587
588 @cindex testo vocale, allineamento con una melodia sporadica
589
590 L'esempio seguente mostra come scrivere una linea melodica sporadica con
591 testo vocale usando questo approccio.  Ovviamente, in una situazione reale
592 la melodia e l'accompagnamento consisterebbero di varie e diverse sezioni.
593
594 @lilypond[quote,verbatim]
595 melodia = \relative { a'4 a a a }
596 accompagnamento = \relative { d'4 d d d }
597 parole = \lyricmode { Queste parole seguo -- no la mel -- o -- dia }
598 \score {
599   <<
600     \new Staff = "musica" {
601       <<
602         \new Voice = "melodia" {
603           \voiceOne
604           s1*4  % Tiene la voce "melodia" attiva per 4 battute
605         }
606         {
607           \new Voice = "accompagnamento" {
608             \voiceTwo
609             \accompagnamento
610           }
611           <<
612             \context Voice = "melodia" { \melodia }
613             \context Voice = "accompagnamento" { \accompagnamento }
614           >>
615           \context Voice = "accompagnamento" { \accompagnamento }
616           <<
617             \context Voice = "melodia" { \melodia }
618             \context Voice = "accompagnamento" { \accompagnamento }
619           >>
620         }
621       >>
622     }
623     \new Lyrics \with { alignAboveContext = #"musica" }
624     \lyricsto "melodia" { \parole }
625   >>
626 }
627 @end lilypond
628
629 Un modo alternativo, migliore in molte circostanze, è quello di mantenere la
630 linea melodica attiva semplicemente includendo le note spaziatrici in modo
631 che si allineino correttamente con l'accompagnamento:
632
633 @lilypond[quote,verbatim]
634 melodia = \relative {
635   s1  % salta una battuta
636   a'4 a a a
637   s1  % salta una battuta
638   a4 a a a
639 }
640 accompagnamento = \relative {
641   d'4 d d d
642   d4 d d d
643   d4 d d d
644   d4 d d d
645 }
646 parole = \lyricmode { Queste parole seguo -- no la mel -- o -- dia }
647
648 \score {
649   <<
650     \new Staff = "musica" {
651       <<
652         \new Voice = "melodia" {
653           \voiceOne
654           \melodia
655         }
656         \new Voice = "accompagnamento" {
657           \voiceTwo
658           \accompagnamento
659         }
660       >>
661     }
662     \new Lyrics \with { alignAboveContext = #"musica" }
663     \lyricsto "melodia" { \parole }
664   >>
665 }
666 @end lilypond
667
668
669 @node Modifica dei componenti aggiuntivi di un contesto
670 @subsection Modifica dei componenti aggiuntivi di un contesto
671 @translationof Modifying context plug-ins
672
673 I contesti della notazione (come @code{Score} e @code{Staff}) non contengono
674 solo le proprietà, ma anche dei componenti aggiuntivi chiamati @qq{engraver}
675 (incisori) che creano gli elementi della notazione.  Per esempio, il contesto
676 @code{Voice} contiene l'incisore @code{Note_heads_engraver} e il contesto
677 @code{Staff} contiene l'incisore @code{Key_engraver}.
678
679 Una descrizione completa di ogni componente aggiuntivo si trova in
680 @ifhtml
681 @rinternals{Engravers and Performers}.
682 @end ifhtml
683 @ifnothtml
684 Guida al funzionamento interno @expansion{} Translation @expansion{} Engravers.
685 @end ifnothtml
686 Ogni contesto descritto in
687 @ifhtml
688 @rinternals{Contexts}
689 @end ifhtml
690 @ifnothtml
691 Guida al funzionamento interno @expansion{} Translation @expansion{} Context.
692 @end ifnothtml
693 elenca gli incisori usati per quel contesto.
694
695
696 Può essere utile sperimentare questi componenti aggiuntivi.  Per farlo si
697 avvia un nuovo contesto con @code{\new} o @code{\context} e si modifica:
698
699 @funindex \with
700
701 @example
702 \new @var{contesto} \with @{
703   \consists @dots{}
704   \consists @dots{}
705   \remove @dots{}
706   \remove @dots{}
707   @emph{etc.}
708 @}
709 @{
710   @emph{@dots{}musica@dots{}}
711 @}
712 @end example
713
714 @noindent
715 dove @dots{} deve essere sostituito dal nome dell'incisore.  Il comando
716 @code{\remove} toglie l'incisore, mentre @code{\consists} lo mantiene.
717 Ecco un semplice esempio che toglie l'incisore dell'indicazione di tempo
718 (@code{Time_signature_engraver}) e quello della chiave (@code{Clef_engraver})
719 da un contesto @code{Staff}:
720
721 @lilypond[quote,verbatim]
722 <<
723   \new Staff \relative {
724     f'2 g
725   }
726   \new Staff \with {
727      \remove "Time_signature_engraver"
728      \remove "Clef_engraver"
729   } \relative {
730     f'2 g2
731   }
732 >>
733 @end lilypond
734
735 Nel secondo rigo non ci sono indicazioni di tempo né simboli della chiave.
736 Questo è un metodo piuttosto grezzo per far scomparire gli oggetti, dato
737 che ha effetto sull'intero rigo.  Questo metodo influenza anche la spaziatura,
738 cosa che potrebbe non essere desiderabile.  Metodi più sofisticati per
739 nascondere gli oggetti sono mostrati in @rlearning{Visibilità e colore degli oggetti}.
740
741 L'esempio successivo mostra un'applicazione pratica.  Le stanghette e le
742 indicazioni di tempo sono normalmente sincronizzate al livello dell'intera
743 partitura.  Ciò viene fatto da @code{Timing_translator} e
744 @code{Default_bar_line_engraver}.  Questo componente aggiuntivo gestisce
745 le indicazioni di tempo, il posizionamento nella misura, etc.  Spostando
746 questi incisori dal contesto @code{Score} al contesto @code{Staff}, possiamo
747 ottenere una partitura in cui ogni rigo ha la sua indicazione di tempo.
748
749 @cindex polimetria
750 @cindex partiture polimetriche
751 @cindex indicazione di tempo, multipla
752
753 @lilypond[quote,verbatim]
754 \score {
755   <<
756     \new Staff \with {
757       \consists "Timing_translator"
758       \consists "Default_bar_line_engraver"
759     }
760     \relative {
761         \time 3/4
762         c''4 c c c c c
763     }
764   \new Staff \with {
765     \consists "Timing_translator"
766     \consists "Default_bar_line_engraver"
767   }
768   \relative {
769       \time 2/4
770       c''4 c c c c c
771   }
772 >>
773 \layout {
774   \context {
775     \Score
776     \remove "Timing_translator"
777     \remove "Default_bar_line_engraver"
778     }
779   }
780 }
781 @end lilypond
782
783 @knownissues
784
785 L'ordine in cui vengono specificati gli incisori è l'ordine in cui
786 vengono richiamati per compiere la loro elaborazione.  Di solito
787 l'ordine in cui gli incisori sono specificati non conta, ma in
788 pochi casi speciali l'ordine è importante, per esempio quando un
789 incisore scrive una proprietà e un altro la legge o quando un incisore
790 crea un grob e un altro lo deve elaborare.
791
792 I seguenti ordini sono importanti:
793
794 @itemize
795 @item
796 l'incisore @code{Bar_engraver} deve essere primo di solito,
797
798 @item
799 l'incisore @code{New_fingering_engraver} deve precedere l'incisore
800 @code{Script_column_engraver},
801
802 @item
803 @code{Timing_translator} deve precedere l'incisore
804 @code{Bar_number_engraver}.
805
806 @end itemize
807
808 @seealso
809 File installati:
810 @file{ly/engraver-init.ly}.
811
812
813 @node Modifica delle impostazioni predefinite di un contesto
814 @subsection Modifica delle impostazioni predefinite di un contesto
815 @translationof Changing context default settings
816
817 @cindex default context properties, changing
818 @cindex context properties, changing defaults
819
820 Le proprietà dei contesti e dei grob possono essere modificate con i comandi
821 @code{\set} e @code{\override}, come è spiegato in
822 @ref{Modifying properties}.  Questi comandi creano eventi musicali,
823 rendendo effettivi i cambiamenti nel momento temporale in cui è
824 elaborata la musica.
825
826 Questa sezione spiega invece come cambiare i valori @emph{predefiniti}
827 delle proprietà dei contesti e dei grob nel momento in cui viene creato
828 il contesto.  Esistono due modi per farlo.  Uno modifica i valori
829 predefiniti in tutti i contesti di un certo tipo, l'altro modifica i
830 valori predefiniti soltanto in una certa istanza di un contesto.
831
832 @menu
833 * Modifica di tutti i contesti dello stesso tipo::
834 * Modifica di un solo contesto specifico::
835 * Ordine di precedenza::
836 @end menu
837
838 @node Modifica di tutti i contesti dello stesso tipo
839 @unnumberedsubsubsec Modifica di tutti i contesti dello stesso tipo
840 @translationof Changing all contexts of the same type
841
842 @cindex \context nel blocco \layout
843 @funindex \context
844 @funindex \layout
845
846 Le impostazioni di contesto predefinite da usare per l'output grafico nei
847 contesti @code{Score}, @code{Staff}, @code{Voice} e in altri contesti possono
848 essere specificate in un blocco @code{\context} compreso in un qualsiasi
849 blocco @code{\layout}.
850
851 Le impostazioni per l'output Midi invece devono essere specificate separatamente
852 in blocchi @code{\midi} (vedi @ref{Output definitions - blueprints for contexts}).
853
854 Il blocco @code{\layout} deve trovarsi all'interno del blocco @code{\score}
855 al quale si vuole applicare, dopo la musica.
856
857 @example
858 \layout @{
859   \context @{
860     \Voice
861     [impostazioni di contesto per tutti i contesti Voice]
862   @}
863   \context @{
864     \Staff
865     [impostazioni di contesto per tutti i contesti Staff]
866   @}
867 @}
868 @end example
869
870 Si possono specificare i seguenti tipi di impostazioni:
871
872 @itemize
873 @item
874 Un comando @code{\override}, ma col nome del contesto omesso
875
876 @lilypond[quote,verbatim]
877 \score {
878   \relative {
879     a'4^"Gambi più spessi" a a a
880     a4 a a\ff a
881   }
882   \layout {
883     \context {
884       \Staff
885       \override Stem.thickness = #4.0
886     }
887   }
888 }
889 @end lilypond
890
891 @item
892 Impostando direttamente una proprietà di contesto
893
894 @lilypond[quote,verbatim]
895 \score {
896   \relative {
897     a'4^"Tipo di carattere più piccolo" a a a
898     a4 a a\ff a
899   }
900   \layout {
901     \context {
902       \Staff
903       fontSize = #-4
904     }
905   }
906 }
907 @end lilypond
908
909 @item
910 Un comando predefinito come @code{\dynamicUp} o un'espressione
911 musicale come @code{\accidentalStyle dodecaphonic}
912
913 @lilypond[quote,verbatim]
914 \score {
915   \relative {
916     a'4^"Dinamiche sopra" a a a
917     a4 a a\ff a
918   }
919   \layout {
920     \context {
921       \Voice
922       \dynamicUp
923     }
924     \context {
925       \Staff
926       \accidentalStyle dodecaphonic
927     }
928   }
929 }
930 @end lilypond
931
932 @item
933 Una variabile definita dall'utente contenente un blocco @code{\with}; il blocco
934 @code{\with} è spiegato approfonditamente in
935 @ref{Modifica di un solo contesto specifico}.
936
937 @lilypond[quote,verbatim]
938 StaffDefaults = \with {
939   fontSize = #-4
940 }
941
942 \score {
943   \new Staff {
944     \relative {
945       a'4^"Tipo di carattere più piccolo" a a a
946       a4 a a a
947     }
948   }
949   \layout {
950     \context {
951       \Staff
952       \StaffDefaults
953     }
954   }
955 }
956 @end lilypond
957
958 @end itemize
959
960 I comandi che impostano una proprietà possono essere posti in un blocco
961 @code{\layout} senza doverli racchiudere in un blocco @code{\context}.  Così
962 facendo si ottiene lo stesso risultato che si otterrebbe se si includessero
963 gli stessi comandi all'inizio di ogni contesto del tipo specificato.  Se non
964 è specificato alcun contesto, avranno effetto su @emph{qualsiasi} contesto
965 di basso livello, vedi @ref{Contesti del livello inferiore - voci}.  La sintassi di
966 un comando di impostazione della proprietà in un blocco @code{\layout} è
967 identico a quello che si userebbe in mezzo alle note.
968
969 @lilypond[quote,verbatim]
970 \score {
971   \new Staff {
972     \relative {
973       a'4^"Tipo di carattere più piccolo" a a a
974       a4 a a a
975     }
976   }
977   \layout {
978     \accidentalStyle dodecaphonic
979     \set fontSize = #-4
980     \override Voice.Stem.thickness = #4.0
981   }
982 }
983 @end lilypond
984
985
986 @node Modifica di un solo contesto specifico
987 @unnumberedsubsubsec Modifica di un solo contesto specifico
988 @translationof Changing just one specific context
989
990 @cindex \with
991 @funindex \with
992
993 Le proprietà di contesto di una sola istanza di un contesto specifico possono
994 essere cambiate in un blocco @code{\with}.  Tutte le altre istanze di contesto
995 dello stesso tipo manterranno le impostazioni predefinite di LilyPond e saranno
996 modificate da qualsiasi blocco @code{\layout} che le riguarda.  Il blocco
997 @code{\with} deve essere posto subito dopo il
998 comando @code{\new} @var{tipo-contesto}:
999
1000 @example
1001 \new Staff \with @{ [impostazioni di contesto per questa istanza di contesto soltanto] @}
1002 @{
1003   @dots{}
1004 @}
1005 @end example
1006
1007 Altrimenti, se la musica viene inserita usando la forma breve dei comandi
1008 che specificano la modalità di inserimento, per esempio @code{\chords} invece di
1009 @code{\chordmode}, il comando @code{\with} deve essere posto subito dopo il
1010 comando che specifica la modalità:
1011
1012 @example
1013 \chords \with @{ [impostazioni di contesto per questo contesto (implicito) soltanto] @}
1014 @{
1015   @dots{}
1016 @}
1017 @end example
1018
1019 @noindent
1020 perché è il contesto implicito creato da queste forme brevi che deve essere
1021 modificato.  Vale la stessa considerazione per le altre forme brevi che
1022 indicano la modalità di inserimento (@code{\drums}, @code{\figures}), vedi
1023 @ref{Input modes}.
1024
1025 Le @q{modifiche di contesto}, essendo specificate in blocchi @code{\with} che
1026 si trovano all'interno della musica, avranno effetto su @emph{tutti} gli
1027 output (quello grafico @emph{e} il Midi), diversamente da quanto avviene per
1028 le modifiche inserite in una definizione di output.
1029
1030 Si possono specificare i seguenti tipi di impostazioni:
1031
1032 @itemize
1033 @item
1034 Un comando @code{\override}, ma col nome di contesto omesso
1035
1036 @lilypond[quote,verbatim]
1037 \score {
1038   \new Staff {
1039     \new Voice \with { \override Stem.thickness = #4.0 }
1040     {
1041       \relative {
1042         a'4^"Gambi spessi" a a a
1043         a4 a a a
1044       }
1045     }
1046   }
1047 }
1048 @end lilypond
1049
1050 @item
1051 Impostando direttamente una proprietà di contesto
1052
1053 @lilypond[quote,verbatim]
1054 \score {
1055   <<
1056     \new Staff {
1057       \relative {
1058         a'4^"Tipo di carattere predefinito" a a a
1059         a4 a a a
1060       }
1061     }
1062     \new Staff \with { fontSize = #-4 }
1063     {
1064       \relative {
1065         a'4^"Tipo di carattere più piccolo" a a a
1066         a4 a a a
1067       }
1068     }
1069   >>
1070 }
1071 @end lilypond
1072
1073 @item
1074 Un comando predefinito come @code{\dynamicUp}
1075
1076 @lilypond[quote,verbatim]
1077 \score {
1078   <<
1079     \new Staff {
1080       \new Voice {
1081         \relative {
1082           a'4^"Dinamiche sotto" a a a
1083           a4 a a\ff a
1084         }
1085       }
1086     }
1087     \new Staff \with { \accidentalStyle dodecaphonic }
1088     {
1089       \new Voice \with { \dynamicUp }
1090       {
1091         \relative {
1092           a'4^"Dinamiche sopra" a a a
1093           a4 a a\ff a
1094         }
1095       }
1096     }
1097   >>
1098 }
1099 @end lilypond
1100
1101 @end itemize
1102
1103 @seealso
1104 Guida alla notazione:
1105 @ref{Modalità di inserimento}
1106
1107
1108 @node Ordine di precedenza
1109 @unnumberedsubsubsec Ordine di precedenza
1110 @translationof Order of precedence
1111
1112 Il valore di una proprietà da applicare in un certo momento viene determinato
1113 nel modo seguente:
1114
1115 @itemize
1116 @item
1117 se un comando @code{\override} o @code{\set} nel flusso dell'input (le note) è
1118 attivo viene usato quel valore,
1119
1120 @item
1121 altrimenti viene usato il valore predefinito preso da una dichiarazione
1122 @code{\with} nella dichiarazione di iniziazione del contesto,
1123
1124 @item
1125 altrimenti viene usato il valore predefinito preso dal blocco @code{\context}
1126 appropriato più recente nei blocchi @code{\layout} o @code{\midi},
1127
1128 @item
1129 altrimenti viene usato il valore predefinito in LilyPond.
1130 @end itemize
1131
1132 @seealso
1133 Manuale di apprendimento:
1134 @rlearning{Modificare le proprietà di contesto}.
1135
1136 Guida alla notazione:
1137 @ref{Tutto sui contesti},
1138 @ref{Contesti del livello inferiore - voci},
1139 @ref{The set command},
1140 @ref{The override command},
1141 @ref{The layout block,,Il blocco @code{@bs{}layout}}.
1142
1143
1144 @node Definizione di nuovi contesti
1145 @subsection Definizione di nuovi contesti
1146 @translationof Defining new contexts
1147
1148 @cindex contesti, definire nuovi
1149 @cindex incisori, includere nei contesti
1150
1151 @funindex \alias
1152 @funindex \name
1153 @funindex \type
1154 @funindex \consists
1155 @funindex \accepts
1156 @funindex \denies
1157
1158 Contesti specifici, come @code{Staff} e @code{Voice}, sono creati a partire
1159 da semplici mattoncini.  È possibile creare nuovi tipi di contesto con
1160 diverse combinazioni di incisori.
1161
1162 Il prossimo esempio mostra come costruire un diverso tipo di contesto
1163 @code{Voice} da zero.  Sarà simile a @code{Voice}, ma stamperà soltanto
1164 teste di nota a forma di barra posizionate al centro.  Può essere usato
1165 per indicare l'improvvisazione nei brani jazz:
1166
1167 @lilypond[quote,ragged-right]
1168 \layout { \context {
1169   \name ImproVoice
1170   \type "Engraver_group"
1171   \consists "Note_heads_engraver"
1172   \consists "Rhythmic_column_engraver"
1173   \consists "Text_engraver"
1174   \consists "Pitch_squash_engraver"
1175   squashedPosition = #0
1176   \override NoteHead.style = #'slash
1177   \hide Stem
1178   \alias Voice
1179 }
1180 \context { \Staff
1181   \accepts "ImproVoice"
1182 }}
1183
1184 \relative {
1185   a'4 d8 bes8 \new ImproVoice { c4^"ad lib" c
1186    c4 c^"undress" c_"while playing :)" c }
1187   a1
1188 }
1189 @end lilypond
1190
1191
1192 Queste impostazioni sono definite in un blocco @code{\context} compreso in
1193 un blocco @code{\layout}:
1194
1195 @example
1196 \layout @{
1197   \context @{
1198     @dots{}
1199   @}
1200 @}
1201 @end example
1202
1203 L'input di esempio che segue sostituisce i @dots{} del frammento precedente.
1204
1205 Per prima cosa occorre definire un nome per il nuovo contesto:
1206
1207 @example
1208 \name ImproVoice
1209 @end example
1210
1211 Essendo simile al contesto @code{Voice}, ci servono comandi che funzionano
1212 in contesti @code{Voice} esistenti per far sì che continuino a funzionare.  Per
1213 farlo si assegna al nuovo contesto un alias di @code{Voice},
1214
1215 @example
1216 \alias Voice
1217 @end example
1218
1219 Il contesto stamperà note e testi di spiegazione, dunque dobbiamo
1220 aggiungere gli incisori che forniscono queste funzionalità, più
1221 l'incisore che raggruppa in colonne le note, i gambi e le pause che
1222 si trovano nello stesso momento musicale:
1223
1224 @example
1225 \consists "Note_heads_engraver"
1226 \consists "Text_engraver"
1227 \consists "Rhythmic_column_engraver"
1228 @end example
1229
1230 Le teste di nota devono essere poste tutte sulla linea centrale:
1231
1232 @example
1233 \consists "Pitch_squash_engraver"
1234 squashedPosition = #0
1235 @end example
1236
1237 L'incisore @code{Pitch_squash_engraver} modifica le teste di nota (create
1238 dall'incisore @code{Note_heads_engraver}) e imposta la loro posizione
1239 verticale sul valore di @code{squashedPosition}, in questo
1240 caso@tie{}@code{0}, la linea centrale.
1241
1242 Le note appaiono come una barra e non hanno gambi:
1243
1244 @example
1245 \override NoteHead.style = #'slash
1246 \hide Stem
1247 @end example
1248
1249 Tutti questi componenti aggiuntivi devono comunicare sotto il controllo
1250 del contesto.  I meccanismi con cui i contesti comunicano sono stabiliti
1251 dichiarando il tipo di contesto con @code{\type}.  In un blocco
1252 @code{\layout}, la maggior parte dei contesti sarà del tipo
1253 @code{Engraver_group}.  Alcuni contesti speciali e i contesti nei
1254 blocchi @code{\midi} usano altri tipi di contesto.  Copiare e modificare
1255 una definizione di contesto esistente comprenderà anche la definizione
1256 del tipo.  Poiché questo esempio crea una definizione da zero, deve essere
1257 specificato in modo esplicito.
1258
1259 @example
1260 \type "Engraver_group"
1261 @end example
1262
1263 Mettendo tutte queste parti insieme otteniamo:
1264
1265 @example
1266 \context @{
1267   \name ImproVoice
1268   \type "Engraver_group"
1269   \consists "Note_heads_engraver"
1270   \consists "Text_engraver"
1271   \consists "Rhythmic_column_engraver"
1272   \consists "Pitch_squash_engraver"
1273   squashedPosition = #0
1274   \override NoteHead.style = #'slash
1275   \hide Stem
1276   \alias Voice
1277 @}
1278 @end example
1279
1280 @funindex \accepts
1281 I contesti formano gerarchie.  Vogliamo posizionare il contesto @code{ImproVoice}
1282 all'interno del contesto @code{Staff}, proprio come i normali contesti
1283 @code{Voice}.  Cambiamo quindi la definizione di @code{Staff} col comando
1284 @code{\accepts},
1285
1286 @example
1287 \context @{
1288   \Staff
1289   \accepts ImproVoice
1290 @}
1291 @end example
1292
1293 @funindex \inherit-acceptability
1294 Spesso quando si riutilizza una definizione di contesto esistente, il contesto
1295 risultante può essere usato in qualsiasi situazione in cui il contesto originale
1296 sarebbe stato utile.
1297
1298 @example
1299 \layout @{
1300   @dots{}
1301   \inherit-acceptability @var{a} @var{da}
1302 @}
1303 @end example
1304
1305 @noindent
1306 farà sì che i contesti del tipo @var{a} siano accettati da tutti i
1307 contesti che accettano anche @var{da}.  Per esempio, usando
1308
1309 @example
1310 \layout @{
1311   @dots{}
1312   \inherit-acceptability "ImproVoice" "Voice"
1313 @}
1314 @end example
1315
1316 @noindent
1317 verrà aggiunto un @code{\accepts} per @code{ImproVoice} a entrambe le
1318 definizioni di @code{Staff} e @code{RhythmicStaff}.
1319
1320 @funindex \denies
1321 L'opposto di @code{\accepts} è @code{\denies},
1322 che è talvolta necessario se si riusano definizioni di contesto esistenti.
1323
1324 Sistemando i pezzi necessari in un blocco @code{\layout} ci porta a:
1325
1326 @example
1327 \layout @{
1328   \context @{
1329     \name ImproVoice
1330     @dots{}
1331   @}
1332   \inherit-acceptability "ImproVoice" "Voice"
1333 @}
1334 @end example
1335
1336 Quindi l'output all'inizio di questa parte può essere inserito così:
1337
1338 @example
1339 \relative @{
1340   a'4 d8 bes8
1341   \new ImproVoice @{
1342     c4^"ad lib" c
1343     c4 c^"undress"
1344     c c_"while playing :)"
1345   @}
1346   a1
1347 @}
1348 @end example
1349
1350 Per completare questo esempio, le modifiche che alterano la gerarchia dei
1351 contesti devono essere ripetute in un blocco @code{\midi} per far sì che
1352 l'output Midi dipenda dalle stesse relazioni di contesto.
1353
1354 @seealso
1355
1356 Guida al funzionamento interno:
1357 @rinternals{Note_heads_engraver},
1358 @rinternals{Text_engraver},
1359 @rinternals{Rhythmic_column_engraver},
1360 @rinternals{Pitch_squash_engraver}.
1361
1362
1363 @node Ordine di disposizione dei contesti
1364 @subsection Ordine di disposizione dei contesti
1365 @translationof Context layout order
1366
1367 @cindex contesti, ordine di disposizione
1368 @funindex \accepts
1369 @funindex \denies
1370
1371 Normalmente i contesti in un sistema sono posizionati dall'alto verso il
1372 basso nell'ordine in cui sono incontrati nel file di input.  Quando i
1373 contesti sono annidati, il contesto più esterno includerà i contesti
1374 annidati al suo interno come specificato nel file di input solo se i
1375 contesti interni sono inclusi nell'elenco @qq{accepts} del contesto
1376 più esterno; altrimenti saranno riposizionati sotto il contesto più
1377 esterno invece di essere annidati al suo interno.
1378
1379 L'elenco @qq{accepts} di un contesto può essere modificato coi comandi
1380 @code{\accepts} o @code{\denies}.  @code{\accepts} aggiunge un contesto
1381 all'elenco @qq{accepts} mentre @code{\denies} lo rimuove dall'elenco.
1382
1383 Per esempio, un gruppo di righi racchiusi da una parentesi quadra non si
1384 trova solitamente all'interno di un gruppo di righi con stanghette
1385 connesse e racchiusi da una graffa, e @code{GrandStaff} non accetta al suo
1386 interno @code{StaffGroup} per impostazione predefinita.
1387
1388 @lilypond[verbatim,quote]
1389 \score {
1390   \new GrandStaff <<
1391     \new StaffGroup <<
1392       \new Staff { c'1 }
1393       \new Staff { d'1 }
1394     >>
1395     \new Staff { \set Staff.instrumentName = ultimo f'1 }
1396   >>
1397 }
1398 @end lilypond
1399
1400 Tuttavia col comando @code{\accepts} si può aggiungere @code{StaffGroup}
1401 al contesto @code{GrandStaff}:
1402
1403 @lilypond[verbatim,quote]
1404 \score {
1405   \new GrandStaff <<
1406     \new StaffGroup <<
1407       \new Staff { c'1 }
1408       \new Staff { d'1 }
1409     >>
1410     \new Staff { \set Staff.instrumentName = ultimo f'1 }
1411   >>
1412   \layout {
1413     \context {
1414       \GrandStaff
1415       \accepts "StaffGroup"
1416     }
1417   }
1418 }
1419 @end lilypond
1420
1421 @code{\denies} si usa soprattutto quando un nuovo contesto è basato su
1422 un altro, ma l'annidamento richiesto differisce.  Per esempio, il contesto
1423 @code{VaticanaStaff} è basato sul contesto @code{Staff}, ma col contesto
1424 @code{VaticanaVoice} che sostituisce il contesto @code{Voice} nell'elenco
1425 @qq{accepts}.
1426
1427 @cindex contesti impliciti
1428 @funindex \defaultchild
1429
1430 Nota bene: un contesto verrà creato implicitamente e senza avviso se
1431 si incontra un comando quando non c'è un contesto adatto disponibile
1432 per contenerlo.
1433
1434 Nella definizione di un contesto, il tipo di sottocontesto da creare
1435 implicitamente viene specificato con @code{\defaultchild}.  Vari eventi
1436 musicali richiedono un contesto @qq{di base}: quando si incontra tale
1437 evento, vengono creati ricorsivamente i sottocontesti finché non si
1438 raggiunge un contesto privo di impostazione @samp{defaultchild}.
1439
1440 La creazione implicita di contesti può talvolta causare nuovi righi o nuove
1441 partiture non attesi.  Per evitare questi problemi è consigliabile usare
1442 @code{\new} per creare i contesti esplicitamente.
1443
1444 @cindex alignAboveContext
1445 @cindex alignBelowContext
1446 @funindex alignAboveContext
1447 @funindex alignBelowContext
1448
1449 Talvolta un contesto deve esistere solo per un breve periodo, come nel
1450 caso esemplare di un contesto rigo per un ossia.  Per ottenere ciò, di
1451 solito si introduce la definizione di contesto nel punto appropriato
1452 in parallelo con la sezione corrispondente della musica principale.
1453 Per impostazione predefinita, il contesto temporaneo verrà posizionato
1454 sotto tutti i contesti esistenti.  Per riposizionarlo sopra il contesto
1455 chiamato @qq{principale}, dovrebbe essere definito in questo modo:
1456
1457 @example
1458 \new Staff \with @{ alignAboveContext = #"principale" @}
1459 @end example
1460
1461 Una situazione simile si pone quando si posiziona un contesto temporaneo
1462 per il testo vocale all'interno di una disposizione multirigo come
1463 @code{ChoirStaff}; per esempio, quando si aggiunge una seconda strofa a
1464 una sezione ripetuta.  Per impostazione predefinita, il contesto temporaneo
1465 per il testo vocale verrà posizionato sotto i righi più bassi.  Definendo il
1466 contesto temporaneo per il testo vocale con @code{alignBelowContext}, questo
1467 può essere posizionato correttamente sotto i contesti della voce (con nome)
1468 che contengono la prima strofa.
1469
1470 Esempi che mostrano questo riposizionamento di contesti temporanei possono
1471 essere trovati altrove --- vedi @rlearning{Annidare le espressioni musicali},
1472 @ref{Modifying single staves} e @ref{Techniques specific to lyrics}.
1473
1474 @seealso
1475 Manuale di apprendimento:
1476 @rlearning{Annidare le espressioni musicali}.
1477
1478 Guida alla notazione:
1479 @ref{Modifying single staves},
1480 @ref{Techniques specific to lyrics}.
1481
1482 Utilizzo:
1483 @rprogram{Appare un rigo in più}.
1484
1485 File installati:
1486 @file{ly/engraver-init.ly}.
1487
1488
1489 @node Come funziona la Guida al funzionamento interno
1490 @section Come funziona la Guida al funzionamento interno
1491 @translationof Explaining the Internals Reference
1492
1493 @menu
1494 * Navigazione nella guida al programma::
1495 * Interfacce di formattazione::
1496 * Determinazione della proprietà del grob::
1497 * Convenzioni sui nomi::
1498 @end menu
1499
1500 @node Navigazione nella guida al programma
1501 @subsection Navigazione nella guida al programma
1502 @translationof Navigating the program reference
1503
1504 @c TODO remove this (it's in the LM)
1505 @c Replace with more factual directions
1506
1507 Supponiamo di voler togliere l'indicazione di diteggiatura nel seguente
1508 frammento:
1509
1510 @lilypond[quote,fragment,verbatim]
1511 c''-2
1512 @end lilypond
1513
1514 Consultando la documentazione sulle istruzioni di diteggiatura (in
1515 @ref{Fingering instructions}), si nota:
1516
1517 @quotation
1518 @strong{Vedi anche}
1519
1520 Guida al funzionamento interno: @rinternals{Fingering}.
1521
1522 @end quotation
1523
1524 @ifnothtml
1525 La guida del programmatore è disponibile come documento HTML.  È caldamente
1526 consigliata la lettura della versione HTML, accessibile online o in locale
1527 scaricando la documentazione HTML.  Questa sezione sarà molto più difficile da
1528 comprendere se si usa il manuale PDF.
1529 @end ifnothtml
1530
1531 Seguire il collegamento a @rinternals{Fingering}.  In cima alla pagina
1532 si vede
1533
1534 @c Non tradurre le parti citate del manuale Internals Reference, che non è tradotto.
1535 @quotation
1536 Fingering objects are created by: @rinternals{Fingering_engraver} and
1537 @rinternals{New_fingering_engraver}.
1538 @end quotation
1539
1540 Seguendo i collegamenti correlati nella guida del programma, possiamo seguire
1541 il flusso di informazione del programma:
1542
1543 @itemize
1544
1545 @item @rinternals{Fingering}:
1546 @rinternals{Fingering} objects are created by:
1547 @rinternals{Fingering_engraver}
1548
1549 @item @rinternals{Fingering_engraver}:
1550 Music types accepted: @rinternals{fingering-event}
1551
1552 @item @rinternals{fingering-event}:
1553 Music event type @code{fingering-event} is in Music expressions named
1554 @rinternals{FingeringEvent}
1555 @end itemize
1556
1557 Questo percorso va in direzione contraria al flusso dell'informazione nel
1558 programma: parte dall'output e termina nell'evento di input.  Si può anche
1559 partire da un evento di input e leggere seguendo il flusso di informazione
1560 arrivando infine all'oggetto di output.
1561
1562 La guida al programma può anche essere sfogliata come un normale
1563 documento.  Contiene capitoli su
1564 @ifhtml
1565 @rinternals{Music definitions},
1566 @end ifhtml
1567 @ifnothtml
1568 @code{Music definitions}
1569 @end ifnothtml
1570 su @rinternals{Translation}, e sul @rinternals{Backend}.  Ogni capitolo
1571 elenca tutte le definizioni usate e tutte le proprietà che possono
1572 essere ritoccate.
1573
1574
1575 @node Interfacce di formattazione
1576 @subsection Interfacce di formattazione
1577 @translationof Layout interfaces
1578
1579 @cindex interface, layout
1580 @cindex layout interface
1581 @cindex grob
1582
1583 La pagina HTML che abbiamo incontrato nella sezione precedente descrive
1584 l'oggetto di formattazione chiamato @rinternals{Fingering}.  Tale oggetto
1585 è un simbolo interno alla partitura.  Ha delle proprietà che contengono
1586 numeri (come gli spessori e le direzioni), ma anche collegamenti a oggetti
1587 correlati.  Un oggetto di formattazione viene chiamato anche @emph{Grob},
1588 che è un diminutivo di Graphical Object (oggetto grafico).  Maggiori dettagli
1589 sui Grob si trovano in @rinternals{grob-interface}.
1590
1591 La pagina relativa al grob @code{Fingering} elenca le definizioni per l'oggetto
1592 @code{Fingering}.  Per esempio, la pagina dice
1593
1594 @quotation
1595 @code{padding} (dimension, in staff space):
1596
1597 @code{0.5}
1598 @end quotation
1599
1600 @noindent
1601 che significa che il numero verrà tenuto a una distanza di almento 0.5 spazi
1602 rigo dalla testa della nota.
1603
1604 Ogni oggetto di formattazione può avere varie funzioni come elemento
1605 della notazione o tipografico.  Per esempio, l'oggetto Fingering ha
1606 i seguenti aspetti
1607
1608 @itemize
1609 @item
1610 La sua dimensione è indipendente dalla spaziatura orizzontale, diversamente
1611 da legature di portamento o travature.
1612
1613 @item
1614 È un frammento testuale, solitamente molto breve.
1615
1616 @item
1617 Questo frammento di testo viene rappresentato con un tipo di carattere,
1618 diversamente da legature di portamento o travature.
1619
1620 @item
1621 Orizzontalmente, il centro del simbolo deve essere allineato al centro della
1622 testa della nota.
1623
1624 @item
1625 Verticalmente, il simbolo viene posto accanto alla nota e sul rigo.
1626
1627 @item
1628 La posizione verticale viene coordinata anche con altri simboli di apici
1629 o pedici.
1630 @end itemize
1631
1632 Ognuno di questi aspetti viene registrato nelle cosiddette interfacce
1633 (@emph{interface}), che sono elencate in fondo alla
1634 pagina @rinternals{Fingering}:
1635
1636 @c non tradurre
1637 @quotation
1638 This object supports the following interfaces:
1639 @rinternals{item-interface},
1640 @rinternals{self-alignment-interface},
1641 @rinternals{side-position-interface}, @rinternals{text-interface},
1642 @rinternals{text-script-interface}, @rinternals{font-interface},
1643 @rinternals{finger-interface}, and @rinternals{grob-interface}.
1644 @end quotation
1645
1646 Facendo clic su uno di questo collegamenti si arriva alla pagina dell'interfaccia
1647 del rispettivo oggetto.  Ogni interfaccia ha una serie di proprietà.  Alcune
1648 non sono a disposizione dell'utente (@q{Internal properties}), ma altre
1649 possono essere modificate.
1650
1651 Abbiamo parlato dell'oggetto @code{Fingering}, ma in realtà non si tratta
1652 di niente di troppo complesso.  Il file di inizializzazione (vedi
1653 @rlearning{Altre fonti di informazione})
1654 @file{scm/define-grobs.scm} mostra l'anima di questo @qq{oggetto},
1655
1656 @example
1657 (Fingering
1658   . ((padding . 0.5)
1659      (avoid-slur . around)
1660      (slur-padding . 0.2)
1661      (staff-padding . 0.5)
1662      (self-alignment-X . 0)
1663      (self-alignment-Y . 0)
1664      (script-priority . 100)
1665      (stencil . ,ly:text-interface::print)
1666      (direction . ,ly:script-interface::calc-direction)
1667      (font-encoding . fetaText)
1668      (font-size . -5)           ; don't overlap when next to heads.
1669      (meta . ((class . Item)
1670      (interfaces . (finger-interface
1671                     font-interface
1672                     text-script-interface
1673                     text-interface
1674                     side-position-interface
1675                     self-alignment-interface
1676                     item-interface))))))
1677 @end example
1678
1679 @noindent
1680 Come si può vedere, l'oggetto @code{Fingering} non è niente più di un insieme
1681 di impostazioni di variabili e la pagina web nella Guida al funzionamento interno
1682 è generata direttamente da questa definizione.
1683
1684
1685 @node Determinazione della proprietà del grob
1686 @subsection Determinazione della proprietà del grob
1687 @translationof Determining the grob property
1688
1689 @c TODO remove this (it's in the LM)
1690 @c Replace with more factual directions
1691
1692 Volevamo cambiare la posizione del @b{2} in
1693
1694 @lilypond[quote,fragment,verbatim]
1695 c''-2
1696 @end lilypond
1697
1698 Dato che il @b{2} è posizionato verticalmente vicino alla sua nota, dobbiamo
1699 fare delle prove con l'interfaccia associata a questo posizionamento, ovvero
1700 @code{side-position-interface}.  La pagina relativa a questa interfaccia
1701 dice
1702
1703 @c non tradurre
1704 @quotation
1705 @code{side-position-interface}
1706
1707 Position a victim object (this one) next to other objects (the
1708 support).  The property @code{direction} signifies where to put the
1709 victim object relative to the support (left or right, up or down?)
1710 @end quotation
1711
1712 @cindex padding
1713 @noindent
1714 Sotto questa descrizione, la variabile @code{padding} viene descritta come
1715
1716 @c non tradurre
1717 @quotation
1718 @table @code
1719 @item padding
1720 (dimension, in staff space)
1721
1722 Add this much extra space between objects that are next to each other.
1723 @end table
1724 @end quotation
1725
1726 Aumentando il valore di @code{padding}, possiamo spostare la diteggiatura
1727 lontana dalla testa di nota.  Il seguente comando inserisce @qq{tre spazi rigo}
1728 di distanza tra la nota e un segno di diteggiatura:
1729 @example
1730 \once \override Voice.Fingering.padding = #3
1731 @end example
1732
1733 L'inserimento di spazio prima che l'oggetto della diteggiatura venga
1734 creato produce il seguente risultato:
1735
1736 @lilypond[quote,fragment,verbatim]
1737 \once \override Voice.Fingering.padding = #3
1738 c''-2
1739 @end lilypond
1740
1741 In questo caso, il contesto per questa modifica è @code{Voice}.  Come è
1742 scritto nella pagina sull'incisore @rinternals{Fingering_engraver}:
1743
1744 @quotation
1745 Fingering_engraver is part of contexts: @dots{} @rinternals{Voice}
1746 @end quotation
1747
1748
1749 @node Convenzioni sui nomi
1750 @subsection Convenzioni sui nomi
1751 @translationof Naming conventions
1752
1753 È importante conoscere le convenzioni sui nomi.  Ecco una panoramica:
1754
1755 @itemize
1756 @item funzioni scheme: minuscolo-con-trattini (inclusi i nomi di una-parola)
1757 @item funzioni scheme specifiche di LilyPond: ly:plus-scheme-style
1758 @item eventi, classi e proprietà musicali:
1759 come-le-funzioni-scheme
1760 @item interfacce Grob: stile-scheme
1761 @item proprietà del backend: stile-scheme (ma ammette X e Y!)
1762 @item contesti (e EspressioniMusicali e grob): Maiuscolo o CamelCase
1763 @item proprietà di contesto: minuscoloSeguitoDaCamelCase
1764 @item incisori:
1765 Maiuscolo_seguito_da_minuscolo_e_con_trattini_bassi
1766 @end itemize
1767
1768 Domande che aspettano una risposta:
1769 @itemize
1770 @item Quali di queste sono convenzioni e quali sono regole?
1771 @item Quali sono regole del linguaggio sottostante e quali sono specifiche
1772 di LilyPond?
1773 @end itemize
1774
1775 @node Modifica delle proprietà
1776 @section Modifica delle proprietà
1777 @translationof Modifying properties
1778
1779 @c TODO change the menu and subsection node names to use
1780 @c backslash once the new macro to handle the refs
1781 @c is available.  Need to find and change all refs at
1782 @c the same time. -td
1783
1784 @menu
1785 * Panoramica sulla modifica delle proprietà::
1786 * Il comando set::
1787 * Il comando override::
1788 * Il comando tweak::
1789 * set vs override::
1790 * Il comando offset::
1791 * Modifica delle liste associative::
1792 @end menu
1793
1794
1795 @node Panoramica sulla modifica delle proprietà
1796 @subsection Panoramica sulla modifica delle proprietà
1797 @translationof Overview of modifying properties
1798
1799 Ogni contesto è responsabile della creazione di certi tipi di oggetti
1800 grafici.  Le impostazioni usate per la rappresentazione grafica di
1801 questi oggetti sono anch'esse salvate dal contesto.  Cambiando queste
1802 impostazioni, si può alterare l'aspetto degli oggetti.
1803
1804 Ci sono due tipi diversi di proprietà salvate nei contesti: le proprietà
1805 del contesto e quelle del grob.  Le proprietà del contesto sono proprietà
1806 che si applicano al contesto nel suo complesso e regolano il modo in cui
1807 il contesto stesso viene mostrato.  Al contrario, le proprietà del grob
1808 si applicano a tipi di grob specifici che verranno mostrati nel contesto.
1809
1810 I comandi @code{\set} e @code{\unset} vengono usati per cambiare i valori
1811 delle proprietà di contesto.  I comandi @code{\override} e @code{\revert}
1812 servono a cambiare i valori delle proprietà dei grob.
1813
1814
1815 @seealso
1816 Guida al funzionamento interno:
1817 @rinternals{Backend},
1818 @rinternals{All layout objects},
1819 @rinternals{OverrideProperty},
1820 @rinternals{RevertProperty},
1821 @rinternals{PropertySet}.
1822
1823 @knownissues
1824 Il backend non è molto stretto nel controllo del tipo delle proprietà di un
1825 oggetto.  Riferimenti ciclici nei valori Scheme delle proprietà possono
1826 causare attese o crash, o entrambi.
1827
1828
1829
1830 @node Il comando set
1831 @subsection Il comando @code{@bs{}set}
1832 @translationof The set command
1833
1834 @cindex proprietà
1835 @funindex \set
1836 @cindex modifica delle proprietà
1837
1838 Ogni contesto ha un insieme di @emph{proprietà}, variabili contenute in
1839 quel contesto.  Le proprietà di contesto si cambiano col comando @code{\set},
1840 che ha la seguente sintassi:
1841
1842 @example
1843 \set @var{contesto}.@var{proprietà} = #@var{valore}
1844 @end example
1845
1846 @var{valore} è un oggetto Scheme, ecco perché deve essere preceduto dal
1847 carattere @tie{}@code{#}.
1848
1849 Le proprietà dei contesti sono solitamente nominate in
1850 @code{studlyCaps}.  Perlopiù regolano la traduzione dalla musica
1851 alla notazione, per esempio @code{localAlterations} (per determinare
1852 se stampare le alterazioni), o @code{measurePosition} (per determinare
1853 quando stampare una stanghetta).  Le proprietà di contesto possono
1854 cambiare nel tempo nel corso dell'interpretazione di un brano musicale;
1855 @code{measurePosition} ne è un ovvio esempio.  Le proprietà di contesto
1856 si modificano con @code{\set}.
1857
1858 Per esempio, le pause multiple sono combinate in una singola battuta
1859 se la proprietà di contesto @code{skipBars} viene impostata su @code{#t}:
1860
1861 @lilypond[quote,fragment,verbatim]
1862 R1*2
1863 \set Score.skipBars = ##t
1864 R1*2
1865 @end lilypond
1866
1867 Se l'argomento @var{contesto} non viene specificato, la proprietà sarà
1868 impostata nel contesto di base corrente (solitamente @code{ChordNames},
1869 @code{Voice}, @code{TabVoice} o @code{Lyrics}).
1870
1871 @lilypond[quote,fragment,verbatim]
1872 \set Score.autoBeaming = ##f
1873 \relative {
1874   e''8 e e e
1875   \set autoBeaming = ##t
1876   e8 e e e
1877 } \\
1878 \relative {
1879   c''8 c c c c8 c c c
1880 }
1881 @end lilypond
1882
1883 La modifica viene applicata @q{al volo}, durante l'interpretazione della
1884 musica, in modo che l'impostazione abbia effetto soltanto sul secondo
1885 gruppo di note da un ottavo.
1886
1887 Nota che il contesto più inferiore non contiene sempre la proprietà che si
1888 desidera cambiare.  Per esempio, il tentativo di impostare la proprietà
1889 @code{skipBars} del contesto di base predefinito, in questo caso
1890 @code{Voice}, non produrrà alcun risultato, perché skipBars è una
1891 proprietà del contesto @code{Score}.
1892
1893 @lilypond[quote,fragment,verbatim]
1894 R1*2
1895 \set skipBars = ##t
1896 R1*2
1897 @end lilypond
1898
1899 I contesti sono gerarchici, per cui se viene specificato un contesto che ne
1900 racchiude altri, per esempio @code{Staff}, il cambiamento viene applicato
1901 anche a tutti i contesti @code{Voice} del rigo corrente.
1902
1903 @funindex \unset
1904
1905 Il comando @code{\unset}:
1906
1907 @example
1908 \unset @var{contesto}.@var{proprietà}
1909 @end example
1910
1911 @noindent
1912 viene usato per togliere la definizione di @var{proprietà} dal
1913 @var{contesto}.  Questo comando rimuove la definizione solo se
1914 impostata nel @var{contesto}.  Le proprietà impostate nei contesti
1915 più esterni non saranno modificate da un @code{\unset} in un contesto
1916 più interno:
1917
1918 @lilypond[quote,fragment,verbatim]
1919 \set Score.autoBeaming = ##t
1920 \relative {
1921   \unset autoBeaming
1922   e''8 e e e
1923   \unset Score.autoBeaming
1924   e8 e e e
1925 } \\
1926 \relative {
1927   c''8 c c c c8 c c c
1928 }
1929 @end lilypond
1930
1931 Come in @code{\set}, non è necessario specificare l'argomento @var{contesto}
1932 per un contesto di fondo, quindi le due dichiarazioni
1933
1934 @example
1935 \set Voice.autoBeaming = ##t
1936 \set autoBeaming = ##t
1937 @end example
1938
1939 @noindent
1940 sono equivalenti se l'attuale contesto di fondo è @code{Voice}.
1941
1942
1943 @cindex \once
1944 Anteponendo @code{\once} ai comandi @code{\set} o @code{\unset} l'impostazione
1945 verrà applicata soltanto a un singolo momento temporale:
1946
1947 @lilypond[quote,fragment,verbatim]
1948 c''4
1949 \once \set fontSize = #4.7
1950 c''4
1951 c''4
1952 @end lilypond
1953
1954 Una descrizione completa di tutte le proprietà di contesto disponibili si
1955 trova nella Guida al funzionamento interno, vedi
1956 @ifhtml
1957 @rinternals{Tunable context properties}.
1958 @end ifhtml
1959 @ifnothtml
1960 Translation @expansion{} Tunable context properties.
1961 @end ifnothtml
1962
1963 @seealso
1964 Guida al funzionamento interno:
1965 @rinternals{Tunable context properties}.
1966
1967
1968 @node Il comando override
1969 @subsection Il comando @code{\override}
1970 @translationof The override command
1971
1972 @cindex grob, proprietà
1973 @cindex proprietà dei grob
1974 @funindex \override
1975
1976 Esiste un tipo particolare di proprietà di contesto: la descrizione del
1977 grob.  Le descrizioni dei grob vengono nomimate in @code{StudlyCaps}
1978 (iniziando con lettere maiuscole).  Contengono le
1979 @qq{impostazioni predefinite} per un certo tipo di grob, come una
1980 lista associativa.  Consultare @file{scm/define-grobs.scm}
1981 per vedere le impostazioni per ogni descrizione di grob.  Le descrizioni
1982 di grob si modificano con @code{\override}.
1983
1984 La sintassi del comando @code{\override} è
1985
1986 @example
1987 \override [@var{contesto}.]@var{NomeGrob}.@var{proprietà} = #@var{valore}
1988 @end example
1989
1990 Per esempio, possiamo aumentare lo spessore del gambo di una nota
1991 modificando la proprietà @code{thickness} dell'oggetto @code{Stem}:
1992
1993 @lilypond[quote,fragment,verbatim]
1994 c''4 c''
1995 \override Voice.Stem.thickness = #3.0
1996 c''4 c''
1997 @end lilypond
1998
1999 Se non viene specificato il contesto in un @code{\override}, viene usato
2000 il contesto di base:
2001
2002 @lilypond[quote,fragment,verbatim]
2003 \override Staff.Stem.thickness = #3.0
2004 <<
2005   \relative {
2006     e''4 e
2007     \override Stem.thickness = #0.5
2008     e4 e
2009   } \\
2010   \relative {
2011     c''4 c c c
2012   }
2013 >>
2014 @end lilypond
2015
2016 Alcune opzioni modificabili vengono chiamate @q{sottoproprietà} e stanno
2017 dentro le proprietà.  Per cambiarle, usare i comandi nella forma
2018
2019 @example
2020 \override Stem.details.beamed-lengths = #'(4 4 3)
2021 @end example
2022
2023 o, per modificare le estremità degli estensori, usare una forma simile
2024 alle seguenti
2025
2026 @example
2027 \override TextSpanner.bound-details.left.text = #"left text"
2028 \override TextSpanner.bound-details.right.text = #"right text"
2029 @end example
2030
2031 @funindex \revert
2032 @cindex ripristinare le modifiche
2033 @cindex modifiche, ripristinare
2034
2035 Gli effetti di @code{\override} possono essere annullati con @code{\revert}.
2036
2037 La sintassi del comando @code{\revert} è
2038
2039 @example
2040 \revert [@var{contesto}.]@var{NomeGrob}.@var{proprietà}
2041 @end example
2042
2043 Per esempio,
2044
2045 @lilypond[quote,verbatim]
2046 \relative {
2047   c''4
2048   \override Voice.Stem.thickness = #3.0
2049   c4 c
2050   \revert Voice.Stem.thickness
2051   c4
2052 }
2053 @end lilypond
2054
2055 Gli effetti di @code{\override} e @code{\revert} si applicano a tutti i
2056 grob nel contesto interessato da quel momento in poi:
2057
2058 @lilypond[quote,verbatim]
2059 <<
2060   \relative {
2061     e''4
2062     \override Staff.Stem.thickness = #3.0
2063     e4 e e
2064   } \\
2065   \relative {
2066     c''4 c c
2067     \revert Staff.Stem.thickness
2068     c4
2069   }
2070 >>
2071 @end lilypond
2072
2073 @funindex \once
2074 @cindex modificare in un solo istante
2075
2076 Si può usare @code{\once} insieme a @code{\override} o @code{\revert}
2077 per agire solo sul momento corrente:
2078
2079 @lilypond[quote,verbatim]
2080 <<
2081   \relative c {
2082     \override Stem.thickness = #3.0
2083     e''4 e e e
2084   } \\
2085   \relative {
2086     c''4
2087     \once \override Stem.thickness = #3.0
2088     c4 c c
2089   }
2090 >>
2091 @end lilypond
2092
2093 @seealso
2094 Guida al funzionamento interno:
2095 @rinternals{Backend}
2096
2097
2098 @node Il comando tweak
2099 @subsection Il comando @code{\tweak}
2100 @translationof The tweak command
2101
2102 @funindex \tweak
2103 @cindex tweak
2104
2105 Modificare le proprietà dei grob con @code{\override} fa sì che i
2106 cambiamenti siano applicati a tutti i grob in questione in quel
2107 contesto nel momento in cui la modifica viene applicata.  Talvolta,
2108 tuttavia, si può voler applicare le modifiche a un solo grob invece
2109 che a tutti i grob del contesto interessato.  Per farlo si usa il
2110 comando @code{\tweak}, che ha la seguente sintassi:
2111
2112 @example
2113 \tweak [@var{oggetto-formattazione}.]@var{proprietà-grob} @var{valore}
2114 @end example
2115
2116 @var{oggetto-formattazione} è opzionale.
2117 Il comando @code{\tweak} viene applicato all'oggetto musicale che segue
2118 immediatamente @var{valore} nel flusso musicale.
2119
2120 Per un'introduzione alla sintassi e agli usi del comando tweak leggere
2121 @rlearning{Metodi di modifica}.
2122
2123 Quando molti elementi simili sono disposti nello stesso momento musicale,
2124 non è possibile usare il comando @code{\override} per modificarne soltanto
2125 uno.  È in casi come questi che occorre usare il comando @code{\tweak}.
2126 Ecco alcuni elementi che possono apparire più di una volta nello stesso
2127 momento musicale:
2128
2129 @itemize
2130 @item teste di note di un accordo
2131 @item segni di articolazione su una singola nota
2132 @item legature di valore tra note di un accordo
2133 @item parentesi di gruppi irregolari che iniziano nello stesso momento
2134 @end itemize
2135
2136 @cindex accordo, modificare una nota dell'
2137
2138 In questo esempio, il colore di una testa di nota e il tipo di testa di
2139 un'altra nota sono modificati all'interno di un accordo:
2140
2141 @lilypond[verbatim,fragment,quote]
2142 < c''
2143   \tweak color #red
2144   d''
2145   g''
2146   \tweak duration-log #1
2147   a''
2148 > 4
2149 @end lilypond
2150
2151 @code{\tweak} può essere usato per modificare le legature di portamento:
2152
2153 @lilypond[verbatim,quote]
2154 \relative { c'-\tweak thickness #5 ( d e f) }
2155 @end lilypond
2156
2157
2158 Perché il comando @code{\tweak} funzioni, deve trovarsi proprio accanto
2159 all'oggetto al quale deve essere applicato dopo che il file di input è
2160 stato convertito in un flusso musicale.  Modificare un intero accordo
2161 non cambia niente perché il suo evento musicale agisce solo come
2162 contenitore, mentre tutti gli oggetti della formattazione sono creati
2163 dagli eventi interni all'@tie{}@code{EventChord}:
2164
2165 @lilypond[verbatim,fragment,quote]
2166 \tweak color #red c''4
2167 \tweak color #red <c'' e''>4
2168 <\tweak color #red c'' e''>4
2169 @end lilypond
2170
2171 Il semplice comando @code{\tweak} non può essere usato per modificare un
2172 oggetto che non sia creato direttamente dall'input.  In particolare, non
2173 agirà su gambi, travature automatiche o alterazioni, dato che questi sono
2174 generati successivamente dagli oggetti della formattazione di @code{NoteHead}
2175 invece che da elementi musicali nel flusso dell'input.
2176
2177 Tali oggetti della formattazione creati indirettamente possono essere tuttavia
2178 modificati usando una forma del comando @code{\tweak} in cui il nome del grob
2179 è indicato esplicitamente:
2180
2181 @lilypond[fragment,verbatim,quote]
2182 \tweak Stem.color #red
2183 \tweak Beam.color #green c''8 e''
2184 <c'' e'' \tweak Accidental.font-size #-3 ges''>4
2185 @end lilypond
2186
2187 @code{\tweak} non può essere usato per modificare le chiavi o le indicazioni
2188 di tempo, perché queste vengono separate da qualsiasi comando @code{\tweak}
2189 precedente nel flusso dell'input a causa dell'inserimento automatico di ulteriori
2190 elementi richiesti per specificare il contesto.
2191
2192 Si possono usare vari comandi @code{\tweak} prima di un elemento della
2193 notazione e tutti avranno effetto su di esso:
2194
2195 @lilypond[verbatim,fragment,quote]
2196 c'
2197   -\tweak style #'dashed-line
2198   -\tweak dash-fraction #0.2
2199   -\tweak thickness #3
2200   -\tweak color #red
2201   \glissando
2202 f''
2203 @end lilypond
2204
2205 Il flusso musicale generato da una sezione di un file di input, compresi
2206 gli elementi inseriti automaticamente, può essere esaminato, vedi
2207 @rextend{Displaying music expressions}.  Ciò può essere utile nel determinare
2208 cosa può essere modificato da un comando @code{\tweak} o nel valutare come
2209 aggiustare l'input per far sì che un @code{\tweak} sia applicato.
2210
2211 @seealso
2212 Manuale di apprendimento:
2213 @rlearning{Metodi di modifica}.
2214
2215 Estendere LilyPond:
2216 @rextend{Displaying music expressions}.
2217
2218 @knownissues
2219
2220 @cindex \tweak e punti di controllo
2221 @cindex punti di controllo e \tweak
2222
2223 Il comando @code{\tweak} non può essere usato per modificare i punti di
2224 controllo di una sola legatura di valore tra tante in un accordo, se non
2225 quelli della prima legatura incontrata nel file di input.
2226
2227
2228 @node set vs override
2229 @subsection @code{\set} vs. @code{\override}
2230 @translationof set versus override
2231
2232 @funindex \set
2233 @funindex \override
2234 I comandi @code{\set} e @code{\override} manipolano le proprietà
2235 associate ai contesti.  In entrambi i casi, le proprietà
2236 seguono una @emph{gerarchia dei contesti}; proprietà non impostate in
2237 un contesto mostreranno i valori del rispettivo contesto padre.
2238
2239 La durata e il valore di una proprietà di contesto sono dinamici e
2240 disponibili soltanto mentre la musica viene interpretata (ovvero @q{reiterata}).
2241 Nel momento della creazione del contesto, le proprietà sono inizializzate
2242 a partire dalle definizioni corrispondenti (insieme a altre modifiche) di
2243 quel contesto.  Qualsiasi modifica successiva viene fatta con dei comandi
2244 di impostazione della proprietà presenti nella musica stessa.
2245
2246 Le definizioni degli oggetti grafici (o @qq{grob}) sono una categoria
2247 @emph{speciale} di proprietà di contesto, perché la loro struttura e uso
2248 sono diversi da quelli delle normali proprietà di contesto.  Diversamente
2249 da quest'ultime, le definizioni dei grob sono suddivise
2250 in @emph{proprietà dei grob}.
2251
2252 Inoltre, diversamente dalle normali proprietà di contesto, le definizioni dei
2253 grob hanno una loro @q{contabilità} interna usata per tenere traccia delle
2254 loro individuali proprietà e sottoproprietà.  Ciò significa che è possibile
2255 definire queste parti in contesti diversi e avere sempre a disposizione la
2256 definizione complessiva del grob nel momento della sua creazione, assemblata
2257 da tutti i pezzi compresi tra il contesto corrente e i suoi contesti superiori.
2258
2259 Un grob viene solitamente creato da un incisore nel momento in cui l'espressione
2260 musicale viene interpretata e riceve le sue proprietà iniziali dalla definizione
2261 del grob corrente del contesto dell'incisore.  L'incisore (o altre parti del
2262 @q{backend} di LilyPond) può successivamente cambiare (o aggiungere) le
2263 proprietà iniziali del grob, ma ciò non ha effetto sulla definizione di
2264 grob del contesto.
2265
2266 Ciò che LilyPond chiama @q{proprietà del grob} nel contesto delle modifiche a
2267 livello di utente sono in realtà le proprietà della definizione di grob di
2268 un @emph{contesto}.
2269
2270 Le definizioni di grob sono manipolate con @code{\override} e
2271 @code{\revert} e hanno un nome che inizia con una lettera maiuscola
2272 (come @samp{NoteHead}), mentre le normali proprietà di contesto sono
2273 manipolate con @code{\set} e @code{\unset} e il loro nome inizia con
2274 una lettera minuscola.
2275
2276 @cindex tweak, relazione con @code{\override}
2277 @funindex \tweak
2278 @funindex \overrideProperty
2279 I comandi @code{\tweak} e @code{\overrideProperty} modificano le proprietà
2280 dei grob bypassando completamente tutte le proprietà di contesto.
2281 Catturano i grob mentre vengono creati, impostando le loro proprietà per un
2282 evento musicale (@code{\tweak}) o, nel caso di @code{\overrideProperty}, per
2283 una sovrascrittura specifica.
2284
2285
2286 @node Il comando offset
2287 @subsection Il comando @code{\offset}
2288 @translationof The offset command
2289
2290 @funindex \offset
2291 @cindex offset
2292 @cindex predefinito, offset
2293 @cindex spostamento relativo (offset)
2294
2295 Sebbene sia possibile impostare le proprietà dei grob su nuovi valori coi
2296 comandi @code{\override}, @code{\tweak} e @code{\overrideProperty}, è spesso
2297 più opportuno modificare tali proprietà in modo relativo a un valore
2298 predefinito.  A questo fine è stato creato il comando @code{\offset}.
2299
2300 La sintassi di @code{\offset} è
2301
2302 @example
2303 [-]\offset @var{proprietà} @var{offset} @var{elemento}
2304 @end example
2305
2306 Il comando funziona aggiungendo i contenuti di @var{offset} all'impostazione
2307 predefinita della proprietà @var{proprietà} del grob indicato da
2308 @var{elemento}.
2309
2310 A seconda di come è formulato il comando, @code{\offset} può comportarsi
2311 come un @code{\tweak} o come un @code{\override}.  Le variazioni d'uso
2312 sono trattate dopo aver considerato le proprietà del grob che possono
2313 essere usate con @code{\offset}.
2314
2315 @subsubsubheading{Proprietà che possono essere spostate con offset}
2316
2317 Molte, ma non tutte, le proprietà dei grob possono essere spostate con
2318 offset.  Se la @var{proprietà} non può essere spostata con offset, l'oggetto
2319 resterà invariato e apparirà un avviso.  In questi casi bisogna usare
2320 @code{\override} o @code{\tweak} per modificare l'oggetto.
2321
2322 Si potrebbe procedere per prova e errore e basarsi sugli avvisi per capire
2323 cosa può essere spostato con offset e cosa no.  Tuttavia si può usare un
2324 approccio più sistematico.
2325
2326 I seguenti criteri determinano se una proprietà possa essere modificata con
2327 @code{\offset}:
2328
2329 @itemize
2330
2331 @item
2332 La proprietà ha un'@q{impostazione predefinita} nella descrizione del grob.
2333 Queste proprietà sono elencate, per ogni grob, in @rinternals{All layout objects}
2334 (si trovano anche in @file{scm/define-grobs.scm}).
2335
2336 @item
2337 La proprietà accetta un valore numerico.  I valori numerici comprendono
2338 @code{number}, una lista di @code{number}, @code{number-pair} e
2339 @code{number-pair-list}.  Le pagine in @rinternals{All layout objects}
2340 elencano il tipo di dati tipici di ciascuna proprietà.  È irrilevante
2341 che l'impostazione predefinita sia una funzione.
2342
2343 @item
2344 La proprietà non può essere una @q{sottoproprietà}, ovvero una proprietà che
2345 risiede all'interno di un'altra proprietà.
2346
2347 @item
2348 Le proprietà impostate su valori infiniti non possono essere spostate con
2349 offset, perché non esiste un modo sensato per spostare un infinito positivo
2350 o negativo.
2351 @end itemize
2352
2353 Gli esempi seguenti prendono in considerazione varie proprietà grob in relazione
2354 ai criteri appena delineati.
2355
2356 @itemize
2357
2358 @item Proprietà che possono essere spostate con offset
2359
2360 @table @asis
2361
2362 @item @code{Hairpin.height}
2363
2364 Questa proprietà non è una sottoproprietà e è elencata in
2365 @rinternals{Hairpin}.  Come valore prende @q{dimensione, in spazi
2366 rigo} impostata su @code{0.6666}, ovviamente non un numero infinito.
2367
2368 @item @code{Arpeggio.positions}
2369
2370 La pagina @rinternals{Arpeggio} elenca una proprietà @code{positions} che
2371 accetta una @q{coppia di numeri}.  Il suo valore predefinito è
2372 @code{ly:arpeggio::positions}, una funzione di callback che verrà elaborata
2373 durante la fase di formattazione tipografica per emettere una coppia di numeri
2374 per ogni oggetto @code{Arpeggio}.
2375
2376 @end table
2377
2378 @item Proprietà che non possono essere spostate con offset
2379
2380 @table @asis
2381
2382 @item @code{Hairpin.color}
2383
2384 @code{color} non è presente in @rinternals{Hairpin}.
2385
2386 @item @code{Hairpin.circled-tip}
2387
2388 L'elenco per @code{Hairpin.circled-tip} in @rinternals{Hairpin} mostra
2389 che prende un valore @code{booleano}.  I booleani sono non numerici.
2390
2391 @item @code{Stem.details.lengths}
2392
2393 Benché sia elencato in @rinternals{Stem} e il suo valore predefinito sia
2394 un elenco di @code{number}, si tratta di una @q{sottoproprietà}.  Attualmente
2395 non sono supportate le @q{proprietà annidate}.
2396
2397 @end table
2398
2399 @end itemize
2400
2401 @subsubsubheading{@bs{}offset come override}
2402
2403 Se @var{elemento} è un nome di grob come @code{Arpeggio} o
2404 @code{Staff.OttavaBracket}, il risultato è un @code{\override} del tipo
2405 di grob specificato.
2406
2407 @example
2408 \offset @var{proprietà} @var{offset} [@var{contesto}.]@var{NomeGrob}
2409 @end example
2410
2411 Notare che il trattino iniziale non è @emph{mai} usato nella forma @q{override},
2412 proprio come non è mai usato col comando @code{\override} stesso.
2413
2414 L'esempio seguente usa la forma @q{override} per allungare gli arpeggi
2415 predefiniti mostrati nella prima misura in modo che coprano del tutto
2416 l'esensione degli accordi.  Gli arpeggi sono allungati di mezzo spazio
2417 rigo verso l'alto e verso il basso.  Viene mostrata anche la stessa
2418 operazione fatta sul primo accordo con un normale override della proprietà
2419 @code{positions}.  Questo metodo non rispecchia affatto il compito di
2420 @q{allungare di mezzo spazio rigo}, perché le estremità devono essere
2421 specificate con coordinate assolute invece che relative.  Inoltre, sarebbero
2422 necessari override individuali per ciascuno degli altri accordi, dato che
2423 variano in dimensione e posizione.
2424
2425 @lilypond[quote,verbatim]
2426 arpeggioMusic = {
2427   <c' e' g'>\arpeggio <a' c'' e''>\arpeggio
2428   <d' f' a' c''>\arpeggio <c' e' g' b' d'' f'' a''>\arpeggio
2429 }
2430
2431 {
2432   \arpeggioMusic
2433   \bar "||"
2434   \offset positions #'(-0.5 . 0.5) Arpeggio
2435   \arpeggioMusic
2436   \bar "||"
2437   \once \override Arpeggio.positions = #'(-3.5 . -0.5)
2438   <c' e' g'>1\arpeggio
2439   \bar "||"
2440 }
2441 @end lilypond
2442
2443 Nel suo uso come @q{override}, @code{\offset} può essere preceduto da
2444 @code{\once} o @code{\temporary} e annullato con @code{\revert} e la
2445 @var{proprietà}.  Ciò deriva dal fatto che @code{\offset} in realtà crea
2446 un @code{\override} della @var{proprietà}.
2447
2448 @lilypond[quote,verbatim]
2449 music = { c'8\< d' e' f'\! }
2450
2451 {
2452   \music
2453   \offset height 1 Hairpin
2454   \music
2455   \music
2456   \revert Hairpin.height
2457   \music
2458   \bar "||"
2459   \once \offset height 1 Hairpin
2460   \music \music
2461   \bar "||"
2462   \override Hairpin.height = 0.2
2463   \music
2464   \temporary \offset height 2 Hairpin
2465   \music
2466   \music
2467   \revert Hairpin.height
2468   \music
2469   \bar "||"
2470 }
2471 @end lilypond
2472
2473 Proprio come @code{\override}, la forma @q{override} di @code{\offset} può
2474 essere usata con @code{\undo} e @code{\single}.
2475
2476 @lilypond[quote,verbatim]
2477 longStem = \offset length 6 Stem
2478
2479 {
2480  \longStem c'4 c''' c' c''
2481  \bar "||"
2482  \undo \longStem c'4 c''' c' c''
2483  \bar "||"
2484  \single \longStem c'4 c''' c' c''
2485  \bar "||"
2486 }
2487 @end lilypond
2488
2489 @subsubsubheading{@bs{}offset come tweak}
2490
2491 Se @var{elemento} è un'espressione musicale come @code{(} o
2492 @code{\arpeggio}, il risultato è la stessa espressione musicale
2493 con una modifica di tipo tweak applicata.
2494
2495 @example
2496 [-]\offset [@var{NomeGrob}.]@var{proprietà} @var{offset} @var{espressione-musicale}
2497 @end example
2498
2499 La sintassi di @code{\offset} nella sua forma @q{tweak} è analoga a quella
2500 dello stesso comando @code{\tweak}, sia nell'ordine sia in presenza o assenza
2501 del trattino iniziale.
2502
2503 L'esempio seguente usa la forma @q{tweak} per regolare la posizione verticale
2504 dell'oggetto @code{BreathingSign}.  Si confronti questo col normale comando
2505 @code{\tweak} che lo segue.  La sintassi è equivalente, ma l'output di
2506 @code{\tweak} è meno intuitivo, perché @code{BreathingSign.Y-offset} è
2507 calcolato dalla linea centrale del pentagramma.  Al contratio, non è necessatio
2508 conoscere come è calcolato @code{Y-offset} quando si usa @code{\offset}.
2509
2510 @lilypond[quote,verbatim]
2511 {
2512   c''4
2513   \breathe
2514   c''4
2515   \offset Y-offset 2 \breathe
2516   c''2
2517   \tweak Y-offset 3 \breathe
2518 }
2519 @end lilypond
2520
2521 Nell'esempio precedente, gli oggetti modificati sono stati creati direttamente
2522 dall'input dell'utente: il comando @code{\breathe} è un'istruzione esplicita
2523 che restituisce un oggetto @code{BreathingSign}.  Dato che l'ambito del comando
2524 era non ambiguo, non è stato necessario specificare il nome dell'oggetto.
2525 Ma quando un oggetto viene creato @emph{indirettamente}, bisogna includere il
2526 nome del grob.  Ciò è valido anche per il comando @code{\tweak}.
2527
2528 Nell'esempio seguente, l'oggetto @code{Beam} viene abbassato di due spazi
2529 rigo applicando @code{\offset} alla proprietà @code{positions}.
2530
2531 Il primo impiego di @code{\offset} richiede la presenza del nome del grob,
2532 perché nessun elemento dell'input crea esplicitamente la travatura.  Nel
2533 secondo impiego la travatura viene creata manualmente con l'espressione
2534 musicale @code{[}; dunque il nome del grob non è necessario.  L'esempio
2535 mostra anche una scorciatoia: un singolo @code{numero} viene applicato
2536 a entrambi i membri di una coppia di numeri.)
2537
2538 @lilypond[quote,verbatim]
2539 {
2540   c''8 g'' e'' d''
2541   \offset Beam.positions #'(-2 . -2)
2542   c''8 g'' e'' d''
2543   c''8 g'' e'' d''
2544   c''8-\offset positions #-2 [ g'' e'' d'']
2545 }
2546 @end lilypond
2547
2548 @subsubsubheading{@bs{}offset con estensori spezzati}
2549
2550 È anche possibile modificare in modo indipendente i segmenti di un estensore
2551 che va oltre una o più interruzioni di linea.  In questo caso, @var{offset}
2552 prende una lista di valori del tipo di dati richiesto dalla proprietà.
2553
2554 Il comando @code{\offset} usato in questo modo è simile al comando
2555 @code{\alterBroken}, vedi @ref{Modifica degli estensori spezzati}.
2556 Tuttavia, diversamente da @code{\alterBroken}, i valori assegnati a
2557 @code{\offset} non sono assoluti, ma relativi.
2558
2559 L'esempio seguente sposta l'oggetto @q{spezzato} @code{OttavaBracket}
2560 attraverso la sua proprietà @code{staff-padding}.  Dato che la proprietà
2561 prende un @code{numero}, a @var{offset} viene fornita una lista di
2562 @code{numeri} per rendere conto dei due segmenti creati dall'interruzione
2563 di linea.
2564 Il pezzo di parentesi dell'ottava sulla prima linea non viene modificato
2565 perché viene aggiunto @code{0} al suo valore predefinito di @code{staff-padding}.
2566 Il segmento sulla seconda linea viene alzato di tre spazi rigo dalla sua
2567 altezza predefinita.  L'altezza predefinita è @code{2}, anche se non è
2568 necessario saperlo per ottenere la posizione desiderata.
2569
2570 @lilypond[quote,verbatim]
2571 {
2572   \offset staff-padding #'(0 3) Staff.OttavaBracket
2573   \ottava #1
2574   c'''2 c'''
2575   \break
2576   c'''2 c'''
2577 }
2578 @end lilypond
2579
2580 L'esempio seguente imita l'effetto del comando @code{\shape} spostando la
2581 proprietà @code{control-points} dell'oggetto @code{Slur}.
2582 Qui @var{offset} è una lista di @code{number-pair-list}, una per ciascun
2583 segmento della legatura di portamento.  Questo esempio realizza un risultato
2584 identico a quello corrispondente in @ref{Modifica delle forme}.
2585
2586 @lilypond[quote,verbatim]
2587 {
2588   c'4-\offset control-points #'(
2589                ((0 . 0) (0 . 0) (0 . 0) (0 . 1))
2590                ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5))
2591               ) ( f'4 g' c''
2592   \break
2593   d'4 c'' f' c')
2594 }
2595 @end lilypond
2596
2597
2598 @node Modifica delle liste associative
2599 @subsection Modifica delle liste associative
2600 @translationof Modifying alists
2601
2602 Alcune proprietà configurabili dall'utente sono rappresentate internamente
2603 come @emph{alist} (liste associative), che contengono coppie di
2604 @emph{chiavi} e @emph{valori}.  La struttura di una lista associativa è:
2605
2606 @example
2607 '((@var{chiave1} . @var{valore1})
2608   (@var{chiave2} . @var{valore2})
2609   (@var{chiave3} . @var{valore3})
2610   @dots{})
2611 @end example
2612
2613 Se una lista associativa è una proprietà di un grob o una variabile
2614 @code{\paper}, le sue chiavi possono essere modificate individualmente
2615 senza influenzare altre chiavi.
2616
2617 Per esempio, per ridurre lo spazio tra righi adiacenti in un gruppo di
2618 righi, si usa la proprietà @code{staff-staff-spacing} del grob
2619 @code{StaffGrouper}.  La proprietà è una lista associativa con quattro
2620 chiavi: @code{basic-distance}, @code{minimum-distance},
2621 @code{padding} e @code{stretchability}.  Le impostazioni predefinite
2622 per questa proprietà sono elencate nella sezione @qq{Backend} della
2623 Guida al funzionamento interno (vedi @rinternals{StaffGrouper}):
2624
2625 @example
2626 '((basic-distance . 9)
2627   (minimum-distance . 7)
2628   (padding . 1)
2629   (stretchability . 5))
2630 @end example
2631
2632 Un modo per avvicinare i righi è ridurre il valore della chiave
2633 @code{basic-distance} (@code{9}) perché corrisponda al valore
2634 di @code{minimum-distance} (@code{7}).  Per modificare una chiave
2635 singola individualmente, usare una @emph{dichiarazione annidata}:
2636
2637 @lilypond[quote,verbatim]
2638 % spazio predefinito tra i righi
2639 \new PianoStaff <<
2640   \new Staff { \clef treble c''1 }
2641   \new Staff { \clef bass   c1   }
2642 >>
2643
2644 % spazio ridotto tra i righi
2645 \new PianoStaff \with {
2646   % questa è la dichiarazione annidata
2647   \override StaffGrouper.staff-staff-spacing.basic-distance = #7
2648 } <<
2649   \new Staff { \clef treble c''1 }
2650   \new Staff { \clef bass   c1   }
2651 >>
2652 @end lilypond
2653
2654 Con una dichiarazione annidata si aggiornerà la chiave specificata (come
2655 @code{basic-distance} nell'esempio precedente) senza modificare alcuna
2656 altra chiave già impostata per la stessa proprietà.
2657
2658 Ora immaginiamo di volere che i righi siano più vicini possibile ma senza
2659 sovrapporsi.  Il modo più semplice per fare ciò è impostare tutte e quattro
2660 le chiavi della lista su zero.  Tuttavia, non è necessario inserire quattro
2661 dichiarazioni annidate, una per ogni chiave.  Si può invece ridefinire
2662 completamente la proprietà con una sola dichiarazione, attraverso una
2663 lista associativa:
2664
2665 @lilypond[quote,verbatim]
2666 \new PianoStaff \with {
2667   \override StaffGrouper.staff-staff-spacing =
2668     #'((basic-distance . 0)
2669        (minimum-distance . 0)
2670        (padding . 0)
2671        (stretchability . 0))
2672 } <<
2673   \new Staff { \clef treble c''1 }
2674   \new Staff { \clef bass   c1   }
2675 >>
2676 @end lilypond
2677
2678 Nota bene che qualsiasi chiave non elencata esplicitamente nella
2679 definizione della lista associativa sarà ripristinata al suo valore
2680 @emph{predefinito-quando-non-impostato}.  Nel caso di
2681 @code{staff-staff-spacing}, qualsiasi chiave-valore non impostata
2682 viene ripristinata su zero (eccetto @code{stretchability}, che
2683 prende il valore di @code{basic-distance} quando non è impostata).  Dunque
2684 le due seguenti dichiarazioni sono equivalenti:
2685
2686 @example
2687 \override StaffGrouper.staff-staff-spacing =
2688   #'((basic-distance . 7))
2689
2690 \override StaffGrouper.staff-staff-spacing =
2691   #'((basic-distance . 7)
2692      (minimum-distance . 0)
2693      (padding . 0)
2694      (stretchability . 7))
2695 @end example
2696
2697 Una conseguenza (possibilmente non voluta) di questo approccio è
2698 l'eliminazione di eventuali impostazioni predefinite impostate in
2699 un file di inizializzazione e caricate ogni volta che un file di
2700 input viene compilato.  Nell'esempio precedente le impostazioni
2701 predefinite per @code{padding} e @code{minimum-distance} (definite
2702 in @file{scm/define-grobs.scm}) sono ripristinate ai loro valori
2703 predefiniti-quando-non-impostati (zero per entrambe le chiavi).
2704 La definizione di una proprietà o di una variabile come una lista
2705 associativa (di qualsiasi dimensione) ripristinerà sempre tutte
2706 le chiavi-valori ai loro valori predefiniti-quando-non-impostati.
2707 A meno che questo non sia il risultato voluto, è più sicuro
2708 aggiornare le chiavi-valori individualmente con una dichiarazione
2709 annidata.
2710
2711 @warning{Le dichiarazioni annidate non funzionano per le liste
2712 associative delle proprietà di contesto (come @code{beamExceptions},
2713 @code{keyAlterations}, @code{timeSignatureSettings}, etc.).  Queste
2714 proprietà possono essere modificate soltanto ridefinendole completamente
2715 come liste associative.}
2716
2717
2718 @node Proprietà e concetti utili
2719 @section Proprietà e concetti utili
2720 @translationof Useful concepts and properties
2721
2722
2723 @menu
2724 * Modalità di inserimento::
2725 * Direzione e posizionamento::
2726 * Distanze e misurazioni::
2727 * Dimensioni::
2728 * Proprietà del simbolo del rigo::
2729 * Estensori::
2730 * Visibilità degli oggetti::
2731 * Stili della linea::
2732 * Rotazione degli oggetti::
2733 @end menu
2734
2735 @node Modalità di inserimento
2736 @subsection Modalità di inserimento
2737 @translationof Input modes
2738
2739 Il modo in cui la notazione contenuta in un file di input è interpretata è
2740 determinato dalla modalità di inserimento corrente.  In generale, esistono
2741 due modi di specificare la modalità: una forma lunga, come @code{\chordmode},
2742 e una breve, come @code{\chords}.  La forma lunga viene usata tipicamente
2743 quando si passa l'input a una variabile o quando si inserisce l'input
2744 direttamente in un contesto creato esplicitamente.  La forma breve crea
2745 implicitamente un contesto del tipo corretto per quell'input e passa l'input
2746 a questo direttamente.  È utile in casi semplici in cui non è necessario
2747 creare esplicitamente il contesto.
2748
2749 @subsubsubheading Modalità accordo
2750
2751 Viene attivata col comando @code{\chordmode} e fa sì che l'input
2752 sia interpretato con la sintassi della notazione degli accordi, vedi
2753 @ref{Chord notation}.  La musica in modalità accordo viene elaborata
2754 come accordi su un rigo se inserita in un contesto @code{Staff}, come
2755 nomi di accordo se inserita in un contesto @code{ChordNames} oppure come
2756 diagrammi della tastiera se inserita in un contesto @code{FretBoards}.
2757
2758 La modalità accordo viene attivata anche col comando @code{\chords}.
2759 Anche questo fa sì che l'input che segue sia interpretato con la sintassi
2760 della notazione degli accordi, ma in aggiunta crea implicitamente un nuovo
2761 contesto @code{ChordNames} e elabora l'input al suo interno come nomi di
2762 accordo, vedi @ref{Printing chord names}.
2763
2764 @subsubsubheading Modalità percussioni
2765
2766 Viene attivata col comando @code{\drummode} e fa sì che l'input
2767 sia interpretato con la sintassi della notazione delle percussioni,
2768 vedi @ref{Basic percussion notation}.  La musica in modalità percussioni
2769 è elaborata come note percussive se inserita in un contesto @code{DrumStaff}.
2770
2771 La modalità percussioni viene attivata anche col comando @code{\drums}.
2772 Anche questo fa sì che l'input che segue sia interpretato con la sintassi
2773 della notazione delle percussioni, ma in aggiunta crea implicitamente un
2774 nuovo contesto @code{DrumStaff} e elabora l'input come note percussive,
2775 vedi @ref{Basic percussion notation}.
2776
2777 @subsubsubheading Modalità basso continuo
2778
2779 Viene attivata col comando @code{\figuremode} e fa sì che
2780 l'input che segue sia interpretato con la sintassi del basso
2781 continuo, vedi @ref{Entering figured bass}.  La musica in modalità
2782 basso continuo viene elaborata come basso continuo se inserita in un
2783 contesto @code{FiguredBass} o in un contesto @code{Staff}.
2784
2785 La modalità basso continuo viene attivata anche col comando @code{\figures}.
2786 Anche questo fa sì che l'input che segue sia interpretato con la sintassi
2787 del basso continuo, ma in aggiunta crea implicitamente un nuovo contesto
2788 @code{FiguredBass} e elabora l'input al suo interno come basso figurato,
2789 vedi @ref{Introduction to figured bass}.
2790
2791 @subsubsubheading Modalità tastiera e intavolatura
2792
2793 Non esistono speciali modalità di inserimento per i simboli della tastiera
2794 e dell'intavolatura (o tablatura).
2795
2796 Per creare diagrammi in intavolatura, inserire note o accordi nella modalità
2797 nota e visualizzarli in un contesto @code{TabStaff}, vedi
2798 @ref{Default tablatures}.
2799
2800 Per creare diagrammi della tastiera sopra un rigo, inserire le note o gli
2801 accordi in modalità nota o in modalità accordo e elaborarli in un contesto
2802 @code{FretBoards}, vedi @ref{Automatic fret diagrams}.  Altrimenti i diagrammi
2803 possono essere inseriti come testo (markup) sopra le note usando il comando
2804 @code{\fret-diagram}, vedi @ref{Fret diagram markups}.
2805
2806 @subsubsubheading Modalità testo vocale
2807
2808 Viene attivata col comando @code{\lyricmode} e fa sì che l'input
2809 sia interpretato come sillabe del testo vocale con durate opzionali
2810 e modificatori del testo associato, vedi @ref{Vocal music}.  L'input in
2811 modalità testo vocale viene elaborato come sillabe del testo se inserite
2812 in un contesto @code{Lyrics}.
2813
2814 La modalità testo vocale viene attivata anche col comando @code{\lyrics}.
2815 Anche questo fa sì che l'input che segue sia interpretato come sillabe del
2816 testo ma in aggiunta crea implicitamente un nuovo contesto @code{Lyrics} e
2817 elabora l'input al suo interno come sillabe.
2818
2819 La modalità testo vocale viene attivata anche col comando @code{\addlyrics}.
2820 Anche questo crea implicitamente un nuovo contesto @code{Lyrics} e aggiunge
2821 anche un comando implicito @code{\lyricsto} che associa il testo vocale che
2822 segue con la musica che lo precede, vedi @ref{Durate automatiche delle sillabe}..
2823
2824 @subsubsubheading Modalità testo (markup)
2825
2826 Viene attivata col comando @code{\markup}  e fa sì che l'input
2827 sia interpretato con la sintassi di markup, vedi
2828 @ref{Text markup commands}.
2829
2830 @subsubsubheading Modalità nota
2831
2832 Questa è la modalità predefinita e può essere attivata esplicitamente
2833 col comando @code{\notemode}.  L'input viene interpretato come altezze,
2834 durate, markup, etc. e rappresentato come notazione musicale su un rigo.
2835
2836 Normalmente non è necessario specificare la modalità nota esplicitamente, ma
2837 potrebbe essere utile farlo in alcune situazioni, per esempio se si è in
2838 modalità testo vocale o accordo o qualsiasi altra modalità e si vuole inserire
2839 qualcosa che può essere fatto solo con la sintassi della modalità nota.
2840
2841
2842 @node Direzione e posizionamento
2843 @subsection Direzione e posizionamento
2844 @translationof Direction and placement
2845
2846 Nella composizione tipografica musicale la direzione e il posizionamento di
2847 molti elementi è una questione di gusto.  Per esempio, i gambi delle note
2848 possono essere rivolti in su o in giù; testi, dinamiche e altri segni
2849 espressivi possono essere posti sopra o sotto il rigo; il testo può
2850 essere allineato a sinistra, destra o al centro; etc.  La maggior parte
2851 di queste scelte possono essere lasciate alla decisione di LilyPond, ma in
2852 alcuni casi si può voler forzare una direzione o un posizionamento particolari.
2853
2854 @menu
2855 * Indicatori di direzione delle articolazioni::
2856 * La proprietà direction::
2857 @end menu
2858
2859 @node Indicatori di direzione delle articolazioni
2860 @unnumberedsubsubsec Indicatori di direzione delle articolazioni
2861 @translationof Articulation direction indicators
2862
2863 Per impostazione predefinita alcune direzioni sono sempre in su o sempre in
2864 giù (es: le dinamiche o la corona), mentre altri elementi possono alternare
2865 tra su e giù in base alla direzione del gambo (come le legature di portamento
2866 o gli accenti).
2867
2868 @c TODO Add table showing these
2869
2870 L'azione predefinita può essere modificata anteponendo all'articolazione
2871 un @emph{indicatore di direzione}.  Sono disponbibili tre indicatori
2872 di direzione: @code{^} (ovvero @qq{su}), @code{_} (ovvero @qq{giù})
2873 e @code{-} (ovvero @qq{usa la direzione predefinita}).  L'indicatore di
2874 direzione solitamente può essere omesso, nel qual caso viene supposto @code{-},
2875 ma un indicatore di direzione è @strong{sempre} richiesto prima di
2876
2877 @itemize
2878 @item comandi @code{\tweak}
2879 @item comandi @code{\markup}
2880 @item comandi @code{\tag}
2881 @item stringhe di testo, ovvero -"stringa"
2882 @item istruzioni di diteggiatura, come @w{@code{-1}}
2883 @item scorciatoie delle articolazioni, come @w{@code{-.}}, @w{@code{->}}, @w{@code{--}}
2884 @end itemize
2885
2886 Gli indicatori di direzione hanno effetto soltanto sulla nota vicina:
2887
2888 @lilypond[verbatim,quote]
2889 \relative {
2890   c''2( c)
2891   c2_( c)
2892   c2( c)
2893   c2^( c)
2894 }
2895 @end lilypond
2896
2897 @node La proprietà direction
2898 @unnumberedsubsubsec La proprietà direction
2899 @translationof The direction property
2900
2901 La posizione della direzione di molti oggetti della formattazione è regolata
2902 dalla proprietà @code{direction}.
2903
2904 Il valore della proprietà @code{direction} può essere impostata su @code{1},
2905 ovvero @qq{su} o @qq{sopra}, oppure su @w{@code{-1}}, ovvero @qq{giù} o
2906 @qq{sotto}.  I simboli @code{UP} e @code{DOWN} possono essere usati al
2907 posto di @code{1} e @w{@code{-1}}.  La direzione predefinita può essere
2908 specificata impostando @code{direction} su @code{0} o @code{CENTER}.
2909 Altrimenti, in molti casi esistono comandi predefiniti per specificare la
2910 direzione.  Questo hanno la forma
2911
2912 @example
2913 \xxxUp, \xxxDown o \xxxNeutral
2914 @end example
2915
2916 @noindent
2917 dove @code{\xxxNeutral} significa @qq{usa la direzione predefinita}.
2918 Vedi @rlearning{Oggetti interni al rigo}.
2919
2920 In pochi casi, per esempio l'arpeggio, il valore della proprietà @code{direction}
2921 può specificare se l'oggetto debba essere posizionato a destra o a sinistra
2922 dell'oggetto genitore.  In questo caso @w{@code{-1}} o @code{LEFT} significano
2923 @qq{a sinistra} e @code{1} o @code{RIGHT} significano @qq{a destra}.
2924 @code{0} o @code{CENTER} significano @qq{usa la direzione predefinita}.
2925
2926 @ignore
2927 These all have side-axis set to #X
2928 AmbitusAccidental - direction has no effect
2929 Arpeggio - works
2930 StanzaNumber - not tried
2931 TrillPitchAccidental - not tried
2932 TrillPitchGroup - not tried
2933 @end ignore
2934
2935 Queste indicazioni hanno effetto su tutte le note finché non vengono annullate.
2936
2937 @lilypond[verbatim,quote]
2938 \relative {
2939   c''2( c)
2940   \slurDown
2941   c2( c)
2942   c2( c)
2943   \slurNeutral
2944   c2( c)
2945 }
2946 @end lilypond
2947
2948 Nella musica polifonica, generalmente è meglio specificare una voce esplicita
2949 invece di cambiare la direzione di un oggetto.  Maggiori informazioni
2950 in @ref{Multiple voices}.
2951
2952 @seealso
2953 Manuale di apprendimento:
2954 @rlearning{Oggetti interni al rigo}.
2955
2956 Guida alla notazione:
2957 @ref{Multiple voices}.
2958
2959
2960 @node Distanze e misurazioni
2961 @subsection Distanze e misurazioni
2962 @translationof Distances and measurements
2963
2964 @cindex distances, absolute
2965 @cindex distances, scaled
2966
2967 @funindex \mm
2968 @funindex \cm
2969 @funindex \in
2970 @funindex \pt
2971
2972 Le distanze in LilyPond sono di due tipi: assolute e proporzionali.
2973
2974 Le distanze assolute si usano per specificare i margini, le indentazioni e
2975 altri dettagli della formattazione di pagina; per impostazione predefinita
2976 sono specificate in millimetri.  Le distanze possono essere specificate in
2977 altre unità di misura appendendo alla quantità @code{\mm}, @code{\cm},
2978 @code{\in}@tie{}(inch, ovvero pollici) o @code{\pt}@tie{}(punti, 1/72.27 di
2979 un pollice).  Le distanze della formattazione di pagina possono essere
2980 specificate anche in unità di misura proporzionali (vedi paragrafo seguente)
2981 appendendo @code{\staff-space} alla quantità.  La formattazione di pagina è
2982 trattata dettagliatamente in @ref{Page layout}.
2983
2984 Le distanze proporzionali sono sempre specificate in unità di spazi
2985 rigo o, raramente, mezzo spazio rigo.  Lo spazio rigo è la distanza
2986 tra due linee del rigo adiacenti.  Il valore predfinito può essere
2987 modificato globalmente impostando la dimensione globale del rigo oppure
2988 può essere sovrascritto localmente cambiando la proprietà @code{staff-space}
2989 di @code{StaffSymbol}.  Le distanze proporzionali vengono ridimensionate
2990 automaticamente insieme a qualsiasi cambiamento nella dimensione globale
2991 del rigo o nella proprietà @code{staff-space} di @code{StaffSymbol}, mentre i
2992 tipi di carattere vengono ridimensionati automaticamente soltanto con i
2993 cambiamenti alla dimensione globale del rigo.  Questa permette quindi di
2994 variare facilmente la dimensione complessiva di una partitura.  I metodi
2995 per impostare la dimensione globale del rigo sono descritti in
2996 @ref{Setting the staff size}.
2997
2998 @funindex magstep
2999
3000 Se soltanto una sezione di una partitura deve essere elaborata su una
3001 scala diversa, per esempio una sezione ossia o una nota a piè di pagina,
3002 non si può cambiare la dimensione globale del rigo perché ciò avrebbe
3003 effetto sull'intera partitura.  In questi casi bisogna modificare sia
3004 la proprietà @code{staff-space} di @code{StaffSymbol} sia la dimensione
3005 dei tipi di carattere.  Esiste una funzione Scheme, @code{magstep}, che
3006 permette di convertire una modifica della dimensione del tipo di carattere
3007 nella modifica equivalente in @code{staff-space}.  Questa funzione è spiegata
3008 e esemplificata in @rlearning{Lunghezza e spessore degli oggetti}.
3009
3010 @seealso
3011 Manuale di apprendimento:
3012 @rlearning{Lunghezza e spessore degli oggetti}.
3013
3014 Guida alla notazione:
3015 @ref{Page layout},
3016 @ref{Setting the staff size}.
3017
3018
3019 @node Dimensioni
3020 @subsection Dimensioni
3021 @translationof Dimensions
3022
3023 @cindex dimensioni
3024 @cindex riquadro intorno all'oggetto
3025
3026 Le dimensioni di un oggetto grafico specificano le posizioni delle estremità
3027 sinistra e destra e di quelle inferiore e superiore del riquadro in cui sono
3028 iscritti gli oggetti come distanze dal punto di riferimento degli oggetti in
3029 unità di spazi rigo.  Queste posizioni sono solitamente scritte come due
3030 coppie Scheme.  Per esempio, il comando di testo @code{\with-dimensions} prende
3031 tre argomenti: i primi due sono una coppia Scheme che indica le posizioni
3032 delle estremità sinistra e destra e un'altra coppia Scheme che indica le
3033 posizioni delle estremità inferiore e superiore:
3034
3035 @example
3036 \with-dimensions #'(-5 . 10) #'(-3 . 15) @var{arg}
3037 @end example
3038
3039 Questo comando specifica un riquadro per @var{arg} il cui margine sinistro
3040 si trova a -5, il margine destro a 10, il margine inferiore a -3 e quello
3041 superiore a 15, tutti misurati a partire dal punto di riferimento degli
3042 oggetti in unità di spazi rigo.
3043
3044 @seealso
3045 Guida alla notazione:
3046 @ref{Distanze e misurazioni}.
3047
3048
3049 @node Proprietà del simbolo del rigo
3050 @subsection Proprietà del simbolo del rigo
3051 @translationof Staff symbol properties
3052
3053 @cindex cambiare il simbolo del rigo
3054 @cindex disegnare il simbolo del rigo
3055 @cindex simbolo del rigo, impostazione del
3056
3057 @c TODO Extend or remove this section.  See also NR 1.6.2 Staff symbol
3058 @c      Need to think of uses for these properties.  Eg 'line-positions
3059 @c      is used in a snippet to thicken centre line.
3060 @c      If retained, add @ref to here in 1.6.2  -td
3061
3062 La posizione verticale e il numero delle linee del rigo possono essere
3063 definiti contemporaneamente.  Come mostra l'esempio seguente, le posizioni
3064 delle note non sono influenzate dalle posizioni delle linee del rigo.
3065
3066 @warning{La proprietà @code{'line-positions} sovrascrive la proprietà
3067 @code{'line-count}.  Il numero di linee del rigo è definito implicitamente
3068 dal numero di elementi nella lista di valori per @code{'line-positions}.}
3069
3070 @lilypond[verbatim,quote]
3071 \new Staff \with {
3072   \override StaffSymbol.line-positions = #'(7 3 0 -4 -6 -7)
3073 }
3074 \relative { a4 e' f b | d1 }
3075 @end lilypond
3076
3077 La larghezza di un rigo può essere modificata.  Le unità sono spazi
3078 rigo.  La spaziatura degli oggetti dentro il rigo non è influenzata
3079 da questa impostazione.
3080
3081 @lilypond[verbatim,quote]
3082 \new Staff \with {
3083   \override StaffSymbol.width = #23
3084 }
3085 \relative { a4 e' f b | d1 }
3086 @end lilypond
3087
3088
3089 @node Estensori
3090 @subsection Estensori
3091 @translationof Spanners
3092
3093 Molti oggetti della notazione musicale si estendono per varie note o addirittura
3094 per molte battute.  Ne sono un esempio le legature di portamento, le travature,
3095 le parentesi dei gruppi irregolari, quelle delle volte delle ripetizioni, i
3096 crescendi, i trilli e i glissandi.  Tali oggetti vengono chiamati @qq{estensori}
3097 (o spanner, in inglese) e hanno delle proprietà speciali per regolare il loro
3098 aspetto e comportamento.  Alcune di queste proprietà sono comuni a tutti gli
3099 estensori; altre sono limitate a un sottoinsieme di estensori.
3100
3101 Tutti gli estensori supportano l'interfaccia @code{spanner-interface}.  Ma pochi,
3102 essenzialmente quelli che disegnano una linea dritta tra due oggetti, supportano
3103 anche l'interfaccia @code{line-spanner-interface}.
3104
3105 @menu
3106 * Uso di spanner-interface::
3107 * Uso di line-spanner-interface::
3108 @end menu
3109
3110 @node Uso di spanner-interface
3111 @unnumberedsubsubsec Uso di @code{spanner-interface}
3112 @translationof Using the spanner-interface
3113
3114 Questa interfaccia fornisce due proprietà che si applicano a vari estensori.
3115
3116 @subsubsubheading La proprietà @code{minimum-length}
3117
3118 La lunghezza minima dell'estensore è specificata dalla proprietà
3119 @code{minimum-length}.  Aumentando questa si aumenta necessariamente
3120 anche la spaziatura delle note comprese tra le due estremità.
3121 Tuttavia questa modifica non ha effetto su molti estensori, perché
3122 la loro lunghezza è determinata da altre considerazioni.  Di seguito
3123 vengono mostrati alcuni esempi in cui è in funzione.
3124
3125 @lilypond[verbatim,quote,fragment]
3126 a'~ a'
3127 a'
3128 % aumenta la lunghezza della legatura di valore
3129 -\tweak minimum-length #5
3130 ~ a'
3131 @end lilypond
3132
3133 @lilypond[verbatim,quote]
3134 \relative \compressMMRests {
3135   a'1
3136   R1*23
3137   % aumenta la lunghezza della misura con pausa
3138   \once \override MultiMeasureRest.minimum-length = #20
3139   R1*23
3140   a1
3141 }
3142 @end lilypond
3143
3144 @lilypond[verbatim,quote]
3145 \relative {
3146   a' \< a a a \!
3147   % aumenta la lunghezza della forcella
3148   \override Hairpin.minimum-length = #20
3149   a \< a a a \!
3150 }
3151 @end lilypond
3152
3153 Questa modifica può essere usata anche per aumentare la lunghezza delle
3154 legature di portamento e di frase:
3155
3156 @lilypond[verbatim,quote]
3157 \relative {
3158   a'( g)
3159   a
3160   -\tweak minimum-length #5
3161   ( g)
3162
3163   a\( g\)
3164   a
3165   -\tweak minimum-length #5
3166   \( g\)
3167 }
3168 @end lilypond
3169
3170 Per alcuni oggetti della formattazione, la proprietà @code{minimum-length}
3171 diventa effettiva solo se viene richiamata esplicitamente la procedura
3172 @code{set-spacing-rods}.  Per farlo, la proprietà @code{springs-and-rods}
3173 deve essere impostata su @code{ly:spanner::set-spacing-rods}.  Per esempio,
3174 la lunghezza minima di un glissando cambia solo quando si imposta la
3175 proprietà @code{springs-and-rods}:
3176
3177 @lilypond[verbatim,fragment,quote]
3178 % default
3179 e' \glissando c''
3180
3181 % non funziona da sola
3182 \once \override Glissando.minimum-length = #20
3183 e' \glissando c''
3184
3185 % funziona solo quando entrambe le modifiche sono presenti
3186 \once \override Glissando.minimum-length = #20
3187 \once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
3188 e' \glissando c''
3189 @end lilypond
3190
3191 Lo stesso vale per l'oggetto @code{Beam}:
3192
3193 @lilypond[verbatim,fragment,quote]
3194 % non funziona da sola
3195 \once \override Beam.minimum-length = #20
3196 e'8 e' e' e'
3197
3198 % funziona solo quando entrambe le modifiche sono presenti
3199 \once \override Beam.minimum-length = #20
3200 \once \override Beam.springs-and-rods = #ly:spanner::set-spacing-rods
3201 e'8 e' e' e'
3202 @end lilypond
3203
3204 @subsubsubheading La proprietà @code{to-barline}
3205
3206 La seconda proprietà utile di @code{spanner-interface} è
3207 @code{to-barline}.  Il valore predefinito (vero) fa sì che le forcelle e
3208 gli altri estensori che terminano sulla prima nota di una misura si estendano
3209 invece fino alla stanghetta immediatamente precedente.  Se impostata su falso,
3210 l'estensore andrà oltre la stanghetta e terminerà sulla nota stessa:
3211
3212 @lilypond[verbatim,quote]
3213 \relative {
3214   a' \< a a a a \! a a a \break
3215   \override Hairpin.to-barline = ##f
3216   a \< a a a a \! a a a
3217 }
3218 @end lilypond
3219
3220 Questa proprietà non funziona con tutti gli estensori.  Per esempio,
3221 impostandola su @code{#t} non si produce alcun effetto su legature di
3222 portamento o di frase, o su altri estensori per i quali terminare sulla
3223 stanghetta non avrebbe senso.
3224
3225
3226 @node Uso di line-spanner-interface
3227 @unnumberedsubsubsec Uso di @code{line-spanner-interface}
3228 @translationof Using the line-spanner-interface
3229
3230 Gli oggetti che supportano l'interfaccia @code{line-spanner-interface} comprendono:
3231
3232 @itemize
3233 @item @code{DynamicTextSpanner}
3234 @item @code{Glissando}
3235 @item @code{TextSpanner}
3236 @item @code{TrillSpanner}
3237 @item @code{VoiceFollower}
3238 @end itemize
3239
3240 La routine responsabile del disegno di questi estensori è
3241 @code{ly:line-spanner::print}.  Essa determina la posizione esatta
3242 delle due estremità e disegna una linea tra di esse, nello stile
3243 richiesto.  Le posizioni delle due estremità dell'estensore sono
3244 calcolate al volo, ma è possibile  sovrascrivere le loro coordinate
3245 Y.  Le proprietà da specificare sono annidate di due livelli nella
3246 gerarchia della proprietà, ma la sintassi del comando @code{\override}
3247 è piuttosto semplice:
3248
3249 @lilypond[quote,fragment,verbatim]
3250 e''2 \glissando b'
3251 \once \override Glissando.bound-details.left.Y = #3
3252 \once \override Glissando.bound-details.right.Y = #-2
3253 e''2 \glissando b'
3254 @end lilypond
3255
3256 Le unità di misura della proprietà @code{Y} sono gli spazi rigo
3257 (@code{staff-space}), con la linea centrale del rigo che è il
3258 punto zero.  Per il glissando, questo è il valore per @code{Y} alla
3259 coordinata X che corrisponde al punto centrale della testa di ogni
3260 nota, se si immagina che la linea si estenda fino a là.
3261
3262 Se @code{Y} non è impostato, il valore viene calcolato dalla posizione
3263 verticale del punto di attacco corrispondente dell'estensore.
3264
3265 In caso di un'interruzione di linea, i valori per le estremità sono
3266 specificati dalle sottoliste @code{left-broken} e @code{right-broken}
3267 di @code{bound-details}.  Per esempio:
3268
3269 @lilypond[ragged-right,fragment,verbatim,quote]
3270 \override Glissando.breakable = ##t
3271 \override Glissando.bound-details.right-broken.Y = #-3
3272 c''1 \glissando \break
3273 f''1
3274 @end lilypond
3275
3276
3277 Altre proprietà delle sottoliste @code{left} e @code{right} della proprietà
3278 @code{bound-details} possono essere modificate nello stesso modo di @code{Y}:
3279
3280 @table @code
3281 @item Y
3282 Questa imposta la coordinata Y dell'estremità, che si sposta di un certo
3283 numero di @code{staff-space} dalla linea centrale del rigo.  Per impostazione
3284 predefinita, è il centro dell'oggetto a cui è associato, dunque un glissando
3285 punta al centro verticale della testa di nota.
3286
3287 Nel caso di estensori orizzontali, come quelli del testo e del trillo,
3288 il suo valore è fisso su 0.
3289
3290 @item attach-dir
3291 Questa determina dove la linea inizia e termina nella direzione X,
3292 relativa all'oggetto a cui è associato.  Quindi un valore di @w{@code{-1}} (o
3293 @code{LEFT}) fa sì che la linea inizi/termini sul lato sinistro della testa
3294 della nota a cui è attaccata.
3295
3296 @item X
3297 Questa è la coordinata X assoluta dell'estremità.  Viene solitamente calcolata
3298 al volo e sovrascriverla produce solitamente un effetto poco utile.
3299
3300 @item stencil
3301 Gli estensori della linea possono avere dei simboli all'inizio o alla fine,
3302 contenuti in questa sottoproprietà.  Questa proprietà è per uso interno;
3303 si raccomanda di usare @code{text} al suo posto.
3304
3305 @item text
3306 Questo è un testo markup che viene valutato per produrre lo stampo (stencil,
3307 in inglese).  Viene usato per mettere @i{cresc.}, @i{tr} e altro testo su
3308 estensori orizzontali.
3309
3310 @lilypond[quote,ragged-right,fragment,verbatim]
3311 \override TextSpanner.bound-details.left.text
3312    = \markup { \small \bold Rall. }
3313 \relative { c''2\startTextSpan b c a\stopTextSpan }
3314 @end lilypond
3315
3316 @item stencil-align-dir-y
3317 @item stencil-offset
3318 Se non si imposta una di queste proprietà, lo stampo viene messo semplicemente
3319 all'estremità, centrato sulla linea, come definito nelle sottoproprietà
3320 @code{X} e @code{Y}.  Impostando @code{stencil-align-dir-y} o
3321 @code{stencil-offset} il simbolo si sposterà verticalmente sul margine
3322 rispetto all'estremità della linea:
3323
3324 @lilypond[quote,fragment,verbatim]
3325 \override TextSpanner.bound-details.left.stencil-align-dir-y = #-2
3326 \override TextSpanner.bound-details.right.stencil-align-dir-y = #UP
3327
3328 \override TextSpanner.bound-details.left.text = #"ggg"
3329 \override TextSpanner.bound-details.right.text = #"hhh"
3330
3331 \relative { c'4^\startTextSpan c c c \stopTextSpan }
3332 @end lilypond
3333
3334 Nota bene che valori negativi spostano il testo in @emph{su}, contrariamente
3335 a quanto si potrebbe pensare, perché un valore di @w{@code{-1}} o
3336 @code{DOWN} fa sì che si allinei il margine @emph{inferiore} del testo con
3337 la linea dell'estensore.  Un valore di @code{1} o @code{UP} allinea il margine
3338 superiore del testo con la linea dell'estensore.
3339
3340 @item arrow
3341 Impostando questa sottoproprietà su @code{#t} viene generata la punta di una
3342 freccia a un'estremità della linea.
3343
3344 @item padding
3345 Questa sottoproprietà regola lo spazio tra l'estremità della linea specificata
3346 e la fine reale.  Senza padding, un glissando inizia e termina nel centro della
3347 testa di ogni nota.
3348
3349 @end table
3350
3351 La funzione musicale @code{\endSpanners} termina prematuramente l'estensore
3352 che inizia nella nota immediatamente seguente.  Viene terminato esattamente
3353 dopo una nota o alla stanghetta seguente se @code{to-barline} è impostato
3354 su vero e c'è una stanghetta prima della nota successiva.
3355
3356 @lilypond[verbatim,quote,ragged-right]
3357 \relative c'' {
3358   \endSpanners
3359   c2 \startTextSpan c2 c2
3360   \endSpanners
3361   c2 \< c2 c2
3362 }
3363 @end lilypond
3364
3365 Quando si usa @code{\endSpanners} non è necessario chiudere
3366 \startTextSpan con \stopTextSpan, né è necessario chiudere le
3367 forcelle con @code{\!}.
3368
3369 @seealso
3370 Guida al funzionamento interno:
3371 @rinternals{TextSpanner},
3372 @rinternals{Glissando},
3373 @rinternals{VoiceFollower},
3374 @rinternals{TrillSpanner},
3375 @rinternals{line-spanner-interface}.
3376
3377
3378 @node Visibilità degli oggetti
3379 @subsection Visibilità degli oggetti
3380 @translationof Visibility of objects
3381
3382 @cindex objects, visibility of
3383 @cindex grobs, visibility of
3384 @cindex visibility of objects
3385
3386 Esistono quattro modi principali per regolare la visibilità degli oggetti della
3387 formattazione: si può togliere il loro stampo, possono essere resi trasparenti,
3388 possono essere colorati di bianco o si può sovrascrivere la loro proprietà
3389 @code{break-visibility}.  Le prime tre sono valide per tutti gli oggetti
3390 della formattazione; l'ultimo solo per alcuni, gli oggetti che possono essere
3391 @emph{interrotti}, o spezzati, (break, in inglese).
3392 Il Manuale di apprendimento contiene un'introduzione a queste quattro tecniche
3393 in @rlearning{Visibilità e colore degli oggetti}.
3394
3395 Esistono anche altre tecniche che sono specifiche di alcuni oggetti della
3396 formattazione.  Queste sono trattate in @ref{Special considerations}.
3397
3398 @menu
3399 * Soppressione dello stampo::
3400 * Rendere gli oggetti trasparenti::
3401 * Dipingere gli oggetti di bianco::
3402 * Uso di break-visibility::
3403 * Considerazioni speciali::
3404 @end menu
3405
3406
3407 @node Soppressione dello stampo
3408 @unnumberedsubsubsec Soppressione dello stampo
3409 @translationof Removing the stencil
3410
3411 @cindex stencil, soppressione
3412 @cindex stampo, soppressione
3413 @funindex \omit
3414
3415 Tutti gli oggetti della formattazione hanno una proprietà @code{stencil} (in
3416 italiano, stampo).  Per impostazione predefinita questa è impostata sulla
3417 funzione specifica che disegna quell'oggetto.  Se questa proprietà viene
3418 sovrascritta e impostata su @code{#f}, non verrà richiamata alcuna funzione
3419 e l'oggetto non verrà disegnato.  L'azione predefinita può essere ripristinata
3420 con @code{\revert}.
3421
3422 @lilypond[quote,fragment,verbatim]
3423 a1 a
3424 \override Score.BarLine.stencil = ##f
3425 a a
3426 \revert Score.BarLine.stencil
3427 a a a
3428 @end lilypond
3429
3430 Questa operazione piuttosto comune ha una scorciatoia, @code{\omit}:
3431
3432 @lilypond[quote,fragment,verbatim]
3433 a1 a
3434 \omit Score.BarLine
3435 a a
3436 \undo \omit Score.BarLine
3437 a a a
3438 @end lilypond
3439
3440
3441 @node Rendere gli oggetti trasparenti
3442 @unnumberedsubsubsec Rendere gli oggetti trasparenti
3443 @translationof Making objects transparent
3444
3445 @cindex transparenti, rendere gli oggetti
3446 @funindex \hide
3447
3448 Tutti gli oggetti della formattazione hanno una proprietà @code{transparent}
3449 la cui impostazione predefinita è @code{#f} (falso).  Se impostata su @code{#t}
3450 (vero), l'oggetto occupa sempre lo spazio ma è reso invisibile.
3451
3452 @lilypond[quote,fragment,verbatim]
3453 a'4 a'
3454 \once \override NoteHead.transparent = ##t
3455 a' a'
3456 @end lilypond
3457
3458 Questa operazione piuttosto comune ha una scorciatoia, @code{\hide}:
3459
3460 @lilypond[quote,fragment,verbatim]
3461 a'4 a'
3462 \once \hide NoteHead
3463 a' a'
3464 @end lilypond
3465
3466
3467 @node Dipingere gli oggetti di bianco
3468 @unnumberedsubsubsec Dipingere gli oggetti di bianco
3469 @translationof Painting objects white
3470
3471 @cindex oggetti, colorare
3472 @cindex colorare gli oggetti
3473 @cindex strati
3474 @cindex ordine di stampa
3475 @cindex sovrascrivere gli oggetti
3476 @cindex oggetti, sovrascrivere
3477 @cindex grob, sovrascrivere
3478
3479 Tutti gli oggetti della formattazione hanno una proprietà del colore il cui
3480 valore predefinito è @code{black} (nero).  Se questa viene sovrascritta con
3481 @code{white} (bianco) l'oggetto non sarà più distinguibile dallo sfondo.  Tuttavia
3482 se l'oggetto attraversa altri oggetti, il colore dei punti di contatto saranno
3483 determinati dall'ordine in cui sono disegnati, e ciò potrebbe lasciare
3484 un'immagine @qq{spettrale} dell'oggetto bianco, come mostrato qui:
3485
3486 @lilypond[quote,fragment,verbatim]
3487 \override Staff.Clef.color = #white
3488 a'1
3489 @end lilypond
3490
3491 Ciò può essere evitato cambiando l'ordine di stampa degli oggetti.
3492 Tutti gli oggetti della formattazione hanno una proprietà @code{layer}
3493 (strato) che deve essere impostata su un numero intero.
3494 Gli oggetti col valore più basso di @code{layer} sono disegnati
3495 per primi, poi vengono disegnati quelli con valori via via più
3496 alti, dunque gli oggetti con valori più alti stanno sopra gli
3497 oggetti con valori più bassi.  Per impostazione predefinita alla
3498 maggior parte degli oggetti viene assegnato un valore di @code{layer}
3499 pari a @code{1}, sebbene ad alcuni oggetti, tra cui @code{StaffSymbol} e
3500 @code{BarLine}, sia assegnato un valore di @code{0}.  L'ordine con cui
3501 vengono stampati oggetti con lo stesso valore di @code{layer} è indeterminato.
3502
3503 Nell'esempio precedente la chiave bianca, con un valore predefinito di
3504 @code{layer} di @code{1}, viene disegnato dopo le linee del rigo (il cui
3505 valore predefinito di @code{layer} è @code{0}), dunque sta sopra di esse.
3506 Per cambiare tale comportamento, all'oggetto @code{Clef} deve essere assegnato
3507 un valore di @code{layer} inferiore, per esempio @w{@code{-1}}, in modo che
3508 venga disegnato prima:
3509
3510 @lilypond[quote,fragment,verbatim]
3511 \override Staff.Clef.color = #white
3512 \override Staff.Clef.layer = #-1
3513 a'1
3514 @end lilypond
3515
3516 @node Uso di break-visibility
3517 @unnumberedsubsubsec Uso di break-visibility
3518 @translationof Using break-visibility
3519
3520 @c TODO Add making other objects breakable
3521
3522 @cindex break-visibility
3523
3524 La maggior parte degli oggetti della formattazione sono stampati una
3525 volta sola, ma alcuni come le stanghette, le chiavi, le indicazioni
3526 di tempo e le armature di chiave possono dover essere stampate
3527 due volte quando si verifica un'interruzione di linea -- una volta al
3528 termine della linea e di nuovo all'inizio della linea successiva.
3529 Tali oggetti, chiamati @emph{spezzabili}, (dall'inglese breakable)
3530 hanno una proprietà, @code{break-visibility}, per regolare
3531 la loro visibilità nelle tre posizioni in cui potrebbero apparire:
3532 all'inizio di una linea, in mezzo a una linea se vengono modificati
3533 e al termine di una linea se un cambiamento ha luogo lì.
3534
3535 Per esempio, l'indicazione di tempo viene stampata all'inizio della
3536 prima linea, ma da nessuna altra parte a meno che non cambi e allora
3537 verrà stampata nel punto in cui il cambiamento ha luogo.  Se tale
3538 cambiamento si verifica al termine di una linea, la nuova indicazione
3539 di tempo verrà stampata all'inizio della linea successiva e un'indicazione
3540 di tempo di precauzione verrà stampata anche al termine della linea precedente.
3541
3542 Tale comportamento è regolato dalla proprietà @code{break-visibility}, che
3543 è spiegata in @rlearning{Visibilità e colore degli oggetti}.  Questa proprietà
3544 prende un vettore di tre valori booleani che, in ordine, determinano se
3545 l'oggetto è stampato al termine, in mezzo o all'inizio di una linea.  O, per
3546 essere più precisi, prima di un'interruzione di linea, dove non c'è
3547 un'interruzione di linea oppure dopo un'interruzione di linea.
3548
3549 Altrimenti, queste otto combinazoni possono essere specificate da
3550 funzioni predefinite, definite in @file{scm/output-lib.scm},
3551 dove le ultime tre colonne indicano se gli oggetti della formattazione
3552 saranno visibili nelle posizioni mostrate nell'intestazione delle colonne:
3553
3554 @multitable {@code{begin-of-line-invisible}} {@code{#(#t #t #t)}} {Prima} {Senza} {Dopo}
3555 @headitem Funzione                   @tab Forma                  @tab Prima di      @tab Senza           @tab Dopo
3556 @headitem                            @tab vettoriale             @tab interruzione  @tab interruzione    @tab interruzione
3557
3558 @item @code{all-visible}             @tab @code{#(#t #t #t)}     @tab sì            @tab sì              @tab sì
3559 @item @code{begin-of-line-visible}   @tab @code{#(#f #f #t)}     @tab no            @tab no              @tab sì
3560 @item @code{center-visible}          @tab @code{#(#f #t #f)}     @tab no            @tab sì              @tab no
3561 @item @code{end-of-line-visible}     @tab @code{#(#t #f #f)}     @tab sì            @tab no              @tab no
3562 @item @code{begin-of-line-invisible} @tab @code{#(#t #t #f)}     @tab sì            @tab sì              @tab no
3563 @item @code{center-invisible}        @tab @code{#(#t #f #t)}     @tab sì            @tab no              @tab sì
3564 @item @code{end-of-line-invisible}   @tab @code{#(#f #t #t)}     @tab no            @tab sì              @tab sì
3565 @item @code{all-invisible}           @tab @code{#(#f #f #f)}     @tab no            @tab no              @tab no
3566 @end multitable
3567
3568 Le impostazioni predefinite di @code{break-visibility} dipendono dall'oggetto
3569 della formattazione.  La tabella seguente mostra tutti gli oggetti rilevanti
3570 che sono influenzati da @code{break-visibility} e l'impostazione predefinita
3571 di questa proprietà:
3572
3573 @multitable @columnfractions .3 .3 .4
3574
3575 @headitem Oggetto formattazione   @tab Contesto abituale  @tab Impostazione predefinita
3576
3577 @c omit Ambitus as it appears not to be affected by break-visibility -td
3578 @c @item @code{Ambitus}          @tab as specified   @tab @code{begin-of-line-visible}
3579 @item @code{BarLine}             @tab @code{Score}          @tab calcolato
3580 @item @code{BarNumber}           @tab @code{Score}          @tab @code{begin-of-line-visible}
3581 @c omit the following item until it can be explained -td
3582 @c @item @code{BreakAlignGroup}  @tab @code{Score}          @tab calculated
3583 @item @code{BreathingSign}       @tab @code{Voice}          @tab @code{begin-of-line-invisible}
3584 @item @code{Clef}                @tab @code{Staff}          @tab @code{begin-of-line-visible}
3585 @item @code{Custos}              @tab @code{Staff}          @tab @code{end-of-line-visible}
3586 @item @code{DoublePercentRepeat} @tab @code{Voice}          @tab @code{begin-of-line-invisible}
3587 @item @code{KeyCancellation}     @tab @code{Staff}          @tab @code{begin-of-line-invisible}
3588 @item @code{KeySignature}        @tab @code{Staff}          @tab @code{begin-of-line-visible}
3589 @c omit LeftEdge until it can be explained -td
3590 @c @item @code{LeftEdge}         @tab @code{Score}          @tab @code{center-invisible}
3591 @item @code{ClefModifier}       @tab @code{Staff}          @tab @code{begin-of-line-visible}
3592 @item @code{RehearsalMark}       @tab @code{Score}          @tab @code{end-of-line-invisible}
3593 @item @code{TimeSignature}       @tab @code{Staff}          @tab @code{all-visible}
3594
3595 @end multitable
3596
3597 L'esempio successivo mostra l'uso della forma vettoriale per regolare la
3598 visibilità delle stanghette:
3599
3600 @lilypond[quote,verbatim,ragged-right]
3601 \relative {
3602   f'4 g a b
3603   f4 g a b
3604   % Toglie la stanghetta al termine della linea corrente
3605   \once \override Score.BarLine.break-visibility = ##(#f #t #t)
3606   \break
3607   f4 g a b
3608   f4 g a b
3609 }
3610 @end lilypond
3611
3612 Sebbene tutti i componenti del vettore usati per sovrascrivere
3613 @code{break-visibility} debbano essere presenti, non tutti sono
3614 funzionanti con qualsiasi oggetto della formattazione, e alcune
3615 combinazioni potrebbero perfino dare errore.  Esistono le seguenti
3616 limitazioni:
3617
3618 @itemize @bullet
3619 @item Non è possibile stampare le stanghette all'inizio di una linea.
3620
3621 @item Un numero di battuta non può essere stampato all'inizio della @emph{prima}
3622 linea a meno che non sia impostato per essere diverso da @code{1}.
3623
3624 @item Clef -- vedi la sezione successiva.
3625
3626 @item Le ripetizioni percentuali doppie sono o @emph{tutte stampate} o
3627 @emph{tutte soppresse}.
3628 Usare @code{begin-of-line-invisible} per stampare e @code{all-invisible} per
3629 sopprimere.
3630
3631 @item Key signature -- vedi la sezione successiva.
3632
3633 @item ClefModifier -- vedi la sezione successiva.
3634 @end itemize
3635
3636
3637 @node Considerazioni speciali
3638 @unnumberedsubsubsec Considerazioni speciali
3639 @translationof Special considerations
3640
3641 @subsubsubheading Visibilità dopo un cambio esplicito
3642
3643 @cindex armatura di chiave, visibilità dopo un cambio esplicito
3644 @cindex explicitKeySignatureVisibility
3645 @cindex chiave, visibilità dopo un cambio esplicito
3646 @cindex explicitClefVisibility
3647
3648 La proprietà @code{break-visibility} controlla la visibilità delle
3649 armature di chiave e dei cambi di chiave solo all'inizio delle linee,
3650 ovvero dopo un'interruzione di linea.  Non ha effetto sulla visibilità
3651 dell'armatura di chiave o della chiave che seguono un cambio esplicito
3652 dell'armatura o della chiave all'interno o alla fine di una linea.
3653 Nell'esempio seguente l'armatura di chiave che segue il cambio esplicito
3654 a Si bemolle maggiore è ancora visibile, anche se @code{all-invisible}
3655 è impostata.
3656
3657 @lilypond[quote,verbatim,ragged-right]
3658 \relative {
3659   \key g \major
3660   f'4 g a b
3661   % Tentativo di eliminazione di tutte le armature di chiave
3662   \override Staff.KeySignature.break-visibility = #all-invisible
3663   \key bes \major
3664   f4 g a b
3665   \break
3666   f4 g a b
3667   f4 g a b
3668 }
3669 @end lilypond
3670
3671 La visibilità di questi cambi espliciti di armatura e di chiave è
3672 controllata dalle proprietà @code{explicitKeySignatureVisibility} e
3673 @code{explicitClefVisibility}.  Sono equivalenti alla proprietà
3674 @code{break-visibility} e prendono entrambe come argomento un vettore
3675 di tre booleani o le funzioni predefinite elencate prima, proprio
3676 come @code{break-visibility}.  Entrambe le proprietà appartengono al
3677 contesto Staff, non agli oggetti della formattazione stessi, dunque
3678 si impostano col comando @code{\set}.  La loro impostazione predefinita
3679 è @code{all-visible}.  Queste proprietà regolano solo la visibilità
3680 di armature di chiave e chiavi risultanti da cambi espliciti e non
3681 quelli all'inizio delle linee; per eliminare questi ultimi bisogna
3682 sempre sovrascrivere @code{break-visibility} nell'oggetto appropriato.
3683
3684 @lilypond[quote,verbatim,ragged-right]
3685 \relative {
3686   \key g \major
3687   f'4 g a b
3688   \set Staff.explicitKeySignatureVisibility = #all-invisible
3689   \override Staff.KeySignature.break-visibility = #all-invisible
3690   \key bes \major
3691   f4 g a b \break
3692   f4 g a b
3693   f4 g a b
3694 }
3695 @end lilypond
3696
3697 @subsubsubheading Visibilità dei bequadri
3698
3699 Per eliminare i bequadri stampati su un cambio di chiave esplicito,
3700 impostare la proprietà del contesto Staff @code{printKeyCancellation}
3701 su @code{#f}:
3702
3703 @lilypond[quote,verbatim,ragged-right]
3704 \relative {
3705   \key g \major
3706   f'4 g a b
3707   \set Staff.explicitKeySignatureVisibility = #all-invisible
3708   \set Staff.printKeyCancellation = ##f
3709   \override Staff.KeySignature.break-visibility = #all-invisible
3710   \key bes \major
3711   f4 g a b \break
3712   f4 g a b
3713   f4 g a b
3714 }
3715 @end lilypond
3716
3717 Con queste modifiche restano solo le alterazioni accanto alle note per
3718 indicare il cambio di armatura.
3719
3720 Nota bene che quando si cambia l'armatura su Do@tie{}maggiore o La@tie{}minore
3721 i bequadri sono l'@emph{unica} indicazione del cambio di chiave.  In questo
3722 caso impostando @code{printKeyCancellation} su @code{#f} non si ottiene
3723 alcun effetto:
3724
3725 @lilypond[quote,verbatim,ragged-right]
3726 \relative {
3727   \key g \major
3728   f'4 g a b
3729   \set Staff.explicitKeySignatureVisibility = #all-invisible
3730   \set Staff.printKeyCancellation = ##f
3731   \key c \major
3732   f4 g a b \break
3733   f4 g a b
3734   f4 g a b
3735 }
3736 @end lilypond
3737
3738 Per sopprimere i bequadri anche quando la tonalità passa a
3739 Do@tie{}maggiore o La@tie{}minore, sovrascrivere la
3740 visibilità del grob @code{KeyCancellation}:
3741
3742 @lilypond[quote,verbatim,ragged-right]
3743 \relative {
3744   \key g \major
3745   f'4 g a b
3746   \set Staff.explicitKeySignatureVisibility = #all-invisible
3747   \override Staff.KeyCancellation.break-visibility = #all-invisible
3748   \key c \major
3749   f4 g a b \break
3750   f4 g a b
3751   f4 g a b
3752 }
3753 @end lilypond
3754
3755 @c TODO Add visibility of cautionary accidentals before notes
3756
3757 @subsubsubheading Battute automatiche
3758
3759 @cindex automaticBars
3760 @cindex stanghette, soppressione
3761
3762 In un caso particolare, la stampa delle stanghette può essere disattivata
3763 impostando la proprietà @code{automaticBars} nel contesto Score.  Se impostata
3764 su @code{#f}, le stanghette non verranno stampate automaticamente; devono
3765 invece essere create esplicitamente con un comando @code{\bar}.  Diversamente
3766 dal comando predefinito @code{\cadenzaOn}, le misure vengono comunque contate.
3767 La generazione delle battute riprenderà in base a quel conteggio se questa
3768 proprietà viene poi impostata su @code{#t}.  Se impostata su @code{#f}, le
3769 interruzioni di linea possono trovarsi solo su comandi @code{\bar} espliciti.
3770
3771 @c TODO Add example
3772
3773 @subsubsubheading Chiavi trasposte
3774
3775 @cindex chiavi trasposte, visibilità delle
3776 @cindex visibilità delle chiavi trasposte
3777 @cindex chiavi, visibilità della trasposizione
3778
3779 Il piccolo simbolo di trasposizione sulle chiavi trasposte è prodotto
3780 dall'oggetto di formattazione @code{ClefModifier}.  La sua visibilità
3781 è ereditata automaticamente dall'oggetto @code{Clef}, dunque non è necessario
3782 applicare una modifica di @code{break-visibility} agli oggetti @code{ClefModifier}
3783 per sopprimere i simboli di trasposizione per le chiavi invisibili.
3784
3785 Per cambi di chiave espliciti, la proprietà @code{explicitClefVisibility}
3786 regola sia il simbolo della chiave che qualsiasi simbolo di trasposizione
3787 ad esso associato.
3788
3789 @seealso
3790 Manuale di apprendimento:
3791 @rlearning{Visibilità e colore degli oggetti}.
3792
3793
3794 @node Stili della linea
3795 @subsection Stili della linea
3796 @translationof Line styles
3797
3798 Alcune indicazioni esecutive, come @i{rallentando}, @i{accelerando} e
3799 @i{trilli} sono scritte in forma testuale e sono estese per varie misure
3800 tramite delle linee, talvolta puntate o ondulate.
3801
3802 Queste usano tutte le stesse routine del glissando per disegnare i
3803 testi e le linee, dunque il loro comportamento viene modificato nello
3804 stesso modo.  Viene fatto con un estensore, e la routine responsabile
3805 del disegno degli estensori è @code{ly:line-spanner::print}.  Questa
3806 routine determina la posizione esatta dei due @i{punti di estensione} e
3807 disegna una linea tra loro, nello stile richiesto.
3808
3809 Ecco un esempio che mostra i vari stili di linea disponibili, e come
3810 impostarli..
3811
3812 @lilypond[ragged-right,verbatim,quote]
3813 \relative {
3814   d''2 \glissando d'2
3815   \once \override Glissando.style = #'dashed-line
3816   d,2 \glissando d'2
3817   \override Glissando.style = #'dotted-line
3818   d,2 \glissando d'2
3819   \override Glissando.style = #'zigzag
3820   d,2 \glissando d'2
3821   \override Glissando.style = #'trill
3822   d,2 \glissando d'2
3823 }
3824 @end lilypond
3825
3826 I punti delle estremità dell'estensore sono calcolati al volo per ogni
3827 oggetto grafico, ma è possibile sovrascriverli:
3828
3829 @c TODO Complete
3830 @lilypond[ragged-right,verbatim,quote]
3831 \relative {
3832   e''2 \glissando f
3833   \once \override Glissando.bound-details.right.Y = #-2
3834   e2 \glissando f
3835 }
3836 @end lilypond
3837
3838 Il valore di @code{Y} è impostato su @w{@code{-2}} per l'estremità
3839 destra.  Quella sinistra può essere aggiustata ugualmente specificando
3840 @code{left} invece di @code{right}.
3841
3842 Se @code{Y} non è impostata, il valore è calcolato a partire dalla posizione
3843 verticale dei punti di attacco sinistro e destro dell'estensore.
3844
3845 Sono possibili altre modifiche degli estensori; maggiori dettagli in
3846 @ref{Spanners}.
3847
3848
3849 @node Rotazione degli oggetti
3850 @subsection Rotazione degli oggetti
3851 @translationof Rotating objects
3852
3853 Sia gli oggetti della formattazione che il testo compreso in un blocco markup
3854 possono essere ruotati di qualsiasi angolo in quasi qualsiasi punto, ma il
3855 metodo per farlo cambia.
3856
3857 @menu
3858 * Rotazione degli oggetti della formattazione::
3859 * Rotazione del testo::
3860 @end menu
3861
3862 @node Rotazione degli oggetti della formattazione
3863 @unnumberedsubsubsec Rotazione degli oggetti della formattazione
3864 @translationof Rotating layout objects
3865
3866 @cindex rotazione degli oggetti
3867 @cindex oggetti, rotazione
3868
3869 Tutti gli oggetti della formattazione che supportano l'interfaccia
3870 @code{grob-interface} possono essere ruotati impostando la loro
3871 proprietà @code{rotation}.  Questa prende come argomento una lista
3872 di tre elementi: l'angolo di rotazione in senso antiorario, e le
3873 coordinate x e y del punto relativo al punto di riferimento dell'oggetto
3874 intorno al quale si deve eseguire la rotazione.  L'angolo di rotazione
3875 è specificato in gradi e le coordinate in spazi rigo.
3876
3877 L'angolo di rotazione e le coordinate del punto di rotazione devono essere
3878 determinate per prova e errore.
3879
3880 @cindex forcelle angolate
3881
3882 Esistono solo poche situazioni in cui la rotazione degli oggetti della
3883 formattazione è utile; l'esempio seguente ne mostra uno:
3884
3885 @lilypond[quote,fragment,verbatim]
3886 g4\< e' d'' f''\!
3887 \override Hairpin.rotation = #'(20 -1 0)
3888 g4\< e' d'' f''\!
3889 @end lilypond
3890
3891
3892 @node Rotazione del testo
3893 @unnumberedsubsubsec Rotazione del testo
3894 @translationof Rotating markup
3895
3896 Tutto il testo in un blocco @code{\markup} può essere ruotato di qualsiasi
3897 angolo facendolo precedere dal comando @code{\rotate}.  Il comando prende
3898 due argomenti: l'angolo di rotazione in gradi in senso antiorario e il
3899 testo da ruotare.  Le estensioni del testo non sono ruotate: prendono il
3900 loro valore dagli estremi delle coordinate x e y del testo ruotato.
3901 Nell'esempio seguente la proprietà @code{outside-staff-priority} del testo
3902 è impostata su @code{#f} per disabilitare l'elusione automatica delle collisioni,
3903 che spingerebbe parte del testo troppo in alto.
3904
3905 @lilypond[quote,fragment,verbatim]
3906 \override TextScript.outside-staff-priority = ##f
3907 g4^\markup { \rotate #30 "un Sol" }
3908 b^\markup { \rotate #30 "un Si" }
3909 des'^\markup { \rotate #30 "un Re bemolle" }
3910 fis'^\markup { \rotate #30 "un Fa diesis" }
3911 @end lilypond
3912
3913
3914 @node Ritocchi avanzati
3915 @section Ritocchi avanzati
3916 @translationof Advanced tweaks
3917
3918 Questa sezione discute i vari approcci che permettono di migliorare
3919 l'aspetto delle partiture.
3920
3921 @menu
3922 * Allineamento degli oggetti::
3923 * Raggruppamento verticale dei grob::
3924 * Modifica degli stampi::
3925 * Modifica delle forme::
3926 * Modifica degli estensori spezzati::
3927 * Contenitori unpure-pure::
3928 @end menu
3929
3930 @seealso
3931 Manuale di apprendimento:
3932 @rlearning{Modifica dell'output},
3933 @rlearning{Altre fonti di informazione}.
3934
3935 Guida alla notazione:
3936 @ref{Come funziona la Guida al funzionamento interno},
3937 @ref{Modifying properties}.
3938
3939 Estendere LilyPond:
3940 @rextend{Interfaces for programmers}.
3941
3942 File installati:
3943 @file{scm/define-grobs.scm}.
3944
3945 Frammenti:
3946 @rlsr{Tweaks and overrides}.
3947
3948 Guida al funzionamento interno:
3949 @rinternals{All layout objects}.
3950
3951
3952 @node Allineamento degli oggetti
3953 @subsection Allineamento degli oggetti
3954 @translationof Aligning objects
3955
3956 Gli oggetti grafici che supportano l'interfaccia @code{self-alignment-interface}
3957 e/o l'interfaccia @code{side-position-interface} possono essere allineati a un
3958 oggetto disposto precedentemente in vari modi.  L'elenco di questi oggetti è
3959 consultabile in @rinternals{self-alignment-interface} e
3960 @rinternals{side-position-interface}.
3961
3962 Tutti gli oggetti grafici hanno un punto di riferimento, un'estensione
3963 orizzontale e una verticale.  L'estensione orizzontale è una coppia di
3964 numeri che determina gli spostamenti dal punto di riferimento dei margini
3965 sinistro e destro (gli spostamenti a sinistra sono negativi).  L'estensione
3966 verticale è una coppia di numeri che determina lo spostamento dal punto di
3967 riferimento ai margini inferiore e superiore (gli spostamenti in giù sono
3968 negativi).
3969
3970 La posizione di un oggetto su un rigo è dato dai valori delle proprietà
3971 @code{X-offset} e @code{Y-offset}.  Il valore di @code{X-offset} dà lo
3972 spostamento dalla coordinata X del punto di riferimento dell'oggetto genitore,
3973 mentre il valore di @code{Y-offset} dà lo spostamento dalla linea centrale del
3974 rigo.  I valori di @code{X-offset} e @code{Y-offset} possono essere impostati
3975 direttamente oppure possono essere impostati per essere calcolati dalle
3976 procedure in modo da consentire un allineamento con l'oggetto genitore.
3977
3978 @warning{Molti oggetti hanno speciali questioni di posizionamento che fanno
3979 sì che qualsiasi impostazione di @code{X-offset} o @code{Y-offset} sia
3980 ignorata o modificata, anche se l'oggetto supporta l'interfaccia
3981 @code{self-alignment-interface}.  Sovrascrivendo le proprietà @code{X-offset}
3982 o @code{Y-offset} su un valore fisso la rispettiva proprietà
3983 @code{self-alignment} verrà ignorata.}
3984
3985 Per esempio, un'alterazione può essere riposizionata verticalmente impostando
3986 @code{Y-offset} ma qualsiasi modifica di @code{X-offset} non avrà effetto.
3987
3988 I segni di chiamata possono essere allineati con oggetti spezzabili come
3989 stanghette, simboli di chiave, simboli di indicazione di tempo e armature
3990 di chiave.  Ci sono proprietà speciali elencate nell'interfaccia
3991 @code{break-aligned-interface} per posizionare i segni di chiamata su tali
3992 oggetti.
3993
3994 @seealso
3995 Guida alla notazione:
3996 @ref{Using the break-alignable-interface}.
3997
3998 Estendere LilyPond:
3999 @rextend{Callback functions}.
4000
4001 @menu
4002 * Impostazione diretta di X-offset e Y-offset::
4003 * Uso di side-position-interface::
4004 * Uso di self-alignment-interface::
4005 * Uso di break-alignable-interface::
4006 @end menu
4007
4008 @node Impostazione diretta di X-offset e Y-offset
4009 @unnumberedsubsubsec Impostazione diretta di @code{X-offset} e @code{Y-offset}
4010 @translationof Setting X-offset and Y-offset directly
4011
4012 Si possono assegnare valori numerici alle prietà @code{X-offset} e
4013 @code{Y-offset} di molti oggetti.  L'esempio seguente mostra tre note
4014 con la posizione predefinita della diteggiatura e le posizioni con @code{X-offset}
4015 e @code{Y-offset} modificate.
4016
4017 @lilypond[verbatim,fragment,quote]
4018 a'-3
4019 a'
4020 -\tweak X-offset #0
4021 -\tweak Y-offset #0
4022 -3
4023 a'
4024 -\tweak X-offset #-1
4025 -\tweak Y-offset #1
4026 -3
4027 @end lilypond
4028
4029 @c TODO write more
4030
4031 @node Uso di side-position-interface
4032 @unnumberedsubsubsec Uso di @code{side-position-interface}
4033 @translationof Using the side-position-interface
4034
4035 Un oggetto che supporta l'interfaccia @code{side-position-interface} può
4036 essere posizionato accanto al suo oggetto genitore in modo che i margini
4037 indicati dei due oggetti si tocchino.  L'oggetto può essere posizionato
4038 sopra, sotto, a destra o a sinistra dell'oggetto genitore.  Quest'ultimo
4039 non può essere specificato; è invece determinato dall'ordine degli elementi
4040 nel flusso di input.  La maggior parte degli oggetti ha la testa di nota
4041 associata come oggetto genitore.
4042
4043 I valori delle proprietà @code{side-axis} e @code{direction} determinano
4044 dove l'oggetto deve essere posizionato, in questo modo:
4045
4046 @c TODO add an example of each to the table
4047
4048 @multitable @columnfractions .3 .3 .3
4049 @headitem @code{side-axis}  @tab @code{direction}  @tab
4050 @headitem proprietà         @tab proprietà         @tab Posizionamento
4051
4052 @item     @code{0}          @tab @code{-1}         @tab sinistra
4053 @item     @code{0}          @tab @code{1}          @tab destra
4054 @item     @code{1}          @tab @code{-1}         @tab sotto
4055 @item     @code{1}          @tab @code{1}          @tab sopra
4056
4057 @end multitable
4058
4059 Quando @code{side-axis} è @code{0}, @code{X-offset} deve essere impostato
4060 sulla procedura @code{ly:side-position-interface::x-aligned-side}.
4061 Questa procedura restituirà il valore corretto di @code{X-offset} per
4062 porre l'oggetto al lato sinistro o destro dell'oggetto genitore in base
4063 al valore di @code{direction}.
4064
4065 Quando @code{side-axis} è @code{1}, @code{Y-offset} deve essere impostato
4066 sulla procedura @code{ly:side-position-interface::y-aligned-side}.
4067 Questa procedura restituirà il valore corretto di @code{Y-offset} per
4068 porre l'oggetto sopra o sotto l'oggetto genitore in base al valore di
4069 @code{direction}.
4070
4071 @c TODO Add examples
4072
4073 @node Uso di self-alignment-interface
4074 @unnumberedsubsubsec Uso di @code{self-alignment-interface}
4075 @translationof Using the self-alignment-interface
4076
4077 @subsubsubheading Autoallineamento orizzontale degli oggetti
4078
4079 L'allineamento orizzontale di un oggetto che supporta l'interfaccia
4080 @code{self-alignment-interface} è regolato dal valore della proprietà
4081 @code{self-alignment-X}, purché la proprietà @code{X-offset} dell'oggetto
4082 sia impostata su @code{ly:self-alignment-interface::x-aligned-on-self}.
4083 A @code{self-alignment-X}  può essere assegnato qualsiasi numero reale,
4084 in unità di metà del totale dell'estensione X dell'oggetto.  Valori
4085 negativi spostano l'oggetto a destra, valori positivi lo spostano a
4086 sinistra.  Un valore di @code{0} centra l'oggetto sul punto di riferimento
4087 del suo oggetto genitore, un valore di @w{@code{-1}} allinea il margine
4088 sinistro dell'oggetto al punto di riferimento del suo genitore, e un
4089 valore di @code{1} allinea il margine destro dell'oggetto al punto di
4090 riferimento del suo genitore.  I simboli @code{LEFT}, @code{CENTER} e
4091 @code{RIGHT} possono essere usati al posto dei valori @w{@code{-1}},
4092 @code{0} e @code{1}, rispettivamente.
4093
4094 Normalmente si usa il comando @code{\override} per modificare il valore
4095 di @code{self-alignment-X}, ma il comando @code{\tweak} può essere utile
4096 per allineare separatamente varie annotazioni su una singola nota:
4097
4098 @lilypond[quote,verbatim,fragment]
4099 a'
4100 -\tweak self-alignment-X #-1
4101 ^"allineato a sinistra"
4102 -\tweak self-alignment-X #0
4103 ^"allineato al centro"
4104 -\tweak self-alignment-X #RIGHT
4105 ^"allineato a destra"
4106 -\tweak self-alignment-X #-2.5
4107 ^"allineato ancora più a destra"
4108 @end lilypond
4109
4110 @subsubsubheading Autoallineamento verticale degli oggetti
4111
4112 Gli oggetti possono essere allineati verticalmente in un modo analogo
4113 al loro allineamento orizzontale se la proprietà @code{Y-offset} è
4114 impostata su @code{ly:self-alignment-interface::y-aligned-on-self}.
4115 Tuttavia altri meccanismi sono spesso implicati nell'allineamento
4116 verticale: il valore di @code{Y-offset} è solo una delle variabili
4117 da prendere in considerazione.  Ciò potrebbe rendere complicato
4118 l'aggiustamento del valore di alcuni oggetti.
4119 Le unità sono soltanto la metà dell'estensione verticale dell'oggetto, che
4120 è di solito piuttosto piccola, dunque potrebbero essere necessari grossi
4121 numeri.  Un valore di @w{@code{-1}} allinea il margine inferiore dell'oggetto
4122 al punto di riferimento dell'oggetto genitore, un valore di @code{0}
4123 allinea il centro dell'oggetto al punto di riferimento del genitore,
4124 e un valore di @code{1} allinea il margine superiore dell'oggetto
4125 al punto di riferimento del genitore.  I simboli @code{DOWN},
4126 @code{CENTER} e @code{UP} possono essere usati al posto di @w{@code{-1}},
4127 @code{0} e @code{1}, rispettivamente.
4128
4129 @subsubsubheading Autoallineamento degli oggetti in entrambe le direzioni
4130
4131 Impostando sia @code{X-offset} che @code{Y-offset}, un oggetto può essere
4132 allineato in entrambe le direzioni simultaneamente.
4133
4134 L'esempio seguente mostra come aggiustare un segno di diteggiatura in modo
4135 che stia vicino alla testa di nota.
4136
4137 @lilypond[quote,verbatim,fragment]
4138 a'
4139 -\tweak self-alignment-X #0.5  % sposta orizzontalmente a sinistra
4140 -\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
4141 -\tweak self-alignment-Y #-1  % sposta verticalmente in su
4142 -3  % terzo dito
4143 @end lilypond
4144
4145 @ignore
4146 @unnumberedsubsubsec Using the @code{aligned-on-parent} procedures
4147
4148 @c Cannot document as they do not seem to operate consistently on all objects -td
4149 @c TODO investigate further
4150
4151 The @code{aligned-on-parent} procedures are used in the same way
4152 as the @code{aligned-on-self} procedures, they difference being
4153 that they permit an object to be aligned with the @emph{edges} of
4154 the parent rather than the parent's reference point.  The following
4155 example shows the difference:
4156
4157 @c TODO Add example
4158
4159 @lilypond[verbatim,quote]
4160 @end lilypond
4161
4162 @end ignore
4163
4164 @ignore
4165 @unnumberedsubsubsec Using the @code{centered-on-parent} procedures
4166
4167 @c Cannot document as they do not seem to operate consistently on all objects -td
4168 @c TODO investigate further
4169
4170 @end ignore
4171
4172 @c TODO The align-interface, BassFigureAlignment and VerticalAlignment
4173
4174 @node Uso di break-alignable-interface
4175 @unnumberedsubsubsec Uso di @code{break-alignable-interface}
4176 @translationof Using the break-alignable-interface
4177
4178 @cindex allineamento sugli oggetti
4179 @cindex break-align-symbols
4180
4181 I segni di chiamata e i numeri di battuta possono essere allineati con oggetti
4182 della notazione diversi dalle stanghette.  Questi oggetti comprendono
4183 @code{ambitus}, @code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar},
4184 @code{left-edge}, @code{key-cancellation}, @code{key-signature} e
4185 @code{time-signature}.
4186
4187 Ogni tipo di oggetto ha il suo punto di riferimento predefinito, al quale i
4188 segni di chiamata sono allineati:
4189
4190 @lilypond[verbatim,quote,fragment]
4191 % Il segno di chiamata sarà allineato al margine destro della chiave
4192 \override Score.RehearsalMark.break-align-symbols = #'(clef)
4193 \key a \major
4194 \clef treble
4195 \mark "↓"
4196 e'1
4197 % Il segno di chiamata sarà allineato al margine sinistro dell'indicazione di tempo
4198 \override Score.RehearsalMark.break-align-symbols = #'(time-signature)
4199 \key a \major
4200 \clef treble
4201 \time 3/4
4202 \mark "↓"
4203 e'2.
4204 % Il segno di chiamata sarà centrato sul segno di respiro
4205 \override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
4206 \key a \major
4207 \clef treble
4208 \time 4/4
4209 e'1
4210 \breathe
4211 \mark "↓"
4212 @end lilypond
4213
4214 Si può specificare un elenco dei possibili oggetti a cui allineare.  Se
4215 alcuni oggetti sono invisibili in quel punto a causa dell'impostazione
4216 di @code{break-visibility} o di impostazioni esplicite della visibilità
4217 di tonalità e chiavi, il segno di chiamata o il numero di battuta viene
4218 allineato al primo oggetto dell'elenco che è visibile.  Se nessun oggetto
4219 dell'elenco è visibile, l'oggetto è allineato alla stanghetta.  Se la
4220 stanghetta è invisibile, l'oggetto viene allineato al punto in cui si
4221 dovrebbe trovare la stanghetta.
4222
4223 @lilypond[verbatim,quote,fragment]
4224 % Il segno di chiamata sarà allineato al margine destro dell'armatura di chiave
4225 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
4226 \key a \major
4227 \clef treble
4228 \mark "↓"
4229 e'1
4230 % Il segno di chiamata sarà allineato al margine destro della chiave
4231 \set Staff.explicitKeySignatureVisibility = #all-invisible
4232 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
4233 \key a \major
4234 \clef bass
4235 \mark "↓"
4236 gis,1
4237 % Il segno di chiamata sarà centrato sopra la stanghetta
4238 \set Staff.explicitKeySignatureVisibility = #all-invisible
4239 \set Staff.explicitClefVisibility = #all-invisible
4240 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
4241 \key a \major
4242 \clef treble
4243 \mark "↓"
4244 e'1
4245 @end lilypond
4246
4247 L'allineamento del segno di chiamata relativo all'oggetto della notazione
4248 può essere modificato, come evidenziato nell'esempio seguente.  In una
4249 partitura con molteplici righi, questa impostazione deve essere fatta per
4250 tutti i righi.
4251
4252 @lilypond[verbatim,quote,fragment]
4253 % Il segno di chiamata sarà allineato al margine destro dell'armatura di chiave
4254 \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
4255 \key a \major
4256 \clef treble
4257 \time 4/4
4258 \mark "↓"
4259 e'1
4260 % Il segno di chiamata sarà centrato sopra l'armatura di chiave
4261 \once \override Score.KeySignature.break-align-anchor-alignment = #CENTER
4262 \mark "↓"
4263 \key a \major
4264 e'1
4265 % Il segno di chiamata sarà allineato al margine sinistro dell'armatura di chiave
4266 \once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
4267 \key a \major
4268 \mark "↓"
4269 e'1
4270 @end lilypond
4271
4272 Il segno di chiamata può anche essere spostato a destra o a sinistra del
4273 margine sinistro di una quantità arbitraria.  Le unità sono gli spazi rigo:
4274
4275 @lilypond[verbatim,quote,fragment]
4276 % Il segno di chiamata sarà allineato al margine sinistro dell'armatura di chiave
4277 % e poi spostato a destra di 3.5 spazi rigo
4278 \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
4279 \once \override Score.KeySignature.break-align-anchor = #3.5
4280 \key a \major
4281 \mark "↓"
4282 e'1
4283 % Il segno di chiamata sarà allineato al margine sinistro dell'armatura di chiave
4284 % e poi spostato a sinistra di 2 spazi rigo
4285 \once \override Score.KeySignature.break-align-anchor = #-2
4286 \key a \major
4287 \mark "↓"
4288 e'1
4289 @end lilypond
4290
4291
4292 @node Raggruppamento verticale dei grob
4293 @subsection Raggruppamento verticale dei grob
4294 @translationof Vertical grouping of grobs
4295
4296 @c TODO Expand this section
4297
4298 I grob VerticalAlignment e VerticalAxisGroup lavorano insieme.
4299 VerticalAxisGroup raggruppa insieme diversi grob come Staff, Lyrics,
4300 etc.  VerticalAlignment quindi allinea verticalmente i diversi grob
4301 raggruppati insieme da VerticalAxisGroup.  Di solito è presente un
4302 solo VerticalAlignment per partitura ma ogni Staff, Lyrics, etc. ha
4303 il suo VerticalAxisGroup.
4304
4305
4306 @node Modifica degli stampi
4307 @subsection Modifica degli stampi
4308 @translationof Modifying stencils
4309
4310 Tutti gli oggetti della formattazione hanno una proprietà @code{stencil} che
4311 fa parte dell'interfaccia @code{grob-interface}.  Per impostazione predefinita,
4312 questa proprietà è solitamente impostata su una funzione specifica per l'oggetto
4313 per cui è concepita in modo da creare il simbolo che lo rappresenta nell'output.
4314 Per esempio, l'impostazione standard della proprietà @code{stencil} dell'oggetto
4315 @code{MultiMeasureRest} è @code{ly:multi-measure-rest::print}.
4316
4317 Il simbolo standard di qualsiasi oggetto può essere sostituito modificando la
4318 proprietà @code{stencil} perché faccia riferimento a una procedura diversa
4319 e scritta appositamente.  Ciò richiede una profonda conoscenza del funzionamento
4320 interno di LilyPond, ma esiste un modo più semplice che spesso è in grado di
4321 produrre risultati accettabili.
4322
4323 Si tratta di impostare la proprietà @code{stencil} sulla procedura che stampa
4324 testo -- @code{ly:text-interface::print} -- e aggiungere una proprietà
4325 @code{text} all'oggetto impostato per contenere il testo markup che produce
4326 il simbolo richiesto.  Grazie alla flessibilità di markup, si può ottenere
4327 molto -- vedi in particolare @ref{Graphic notation inside markup}.
4328
4329 L'esempio seguente illustra questa procedura cambiando il simbolo della testa
4330 di nota con una croce iscritta in un cerchio.
4331
4332 @lilypond[verbatim,quote]
4333 XinO = {
4334   \once \override NoteHead.stencil = #ly:text-interface::print
4335   \once \override NoteHead.text = \markup {
4336     \combine
4337       \halign #-0.7 \draw-circle #0.85 #0.2 ##f
4338       \musicglyph #"noteheads.s2cross"
4339   }
4340 }
4341 \relative {
4342   a' a \XinO a a
4343 }
4344 @end lilypond
4345
4346 Qualsiasi glifo @emph{Feta} usato nel font Emmentaler può essere passato al
4347 comando markup @code{\musicglyph} -- vedi @ref{Il font Emmentaler}.
4348
4349 I file @file{EPS} e i comandi Postscript possono essere inseriti entrambi nel
4350 @c traduzione libera di "inline"
4351 corpo del testo con i comandi markup @code{\epsfile} e @code{\postscript} --
4352 vedi @ref{Graphic}.
4353
4354
4355 @seealso
4356 Guida alla notazione:
4357 @ref{Graphic notation inside markup},
4358 @ref{Formattazione del testo},
4359 @ref{Text markup commands},
4360 @ref{Il font Emmentaler},
4361 @ref{Graphic}.
4362
4363
4364 @node Modifica delle forme
4365 @subsection Modifica delle forme
4366 @translationof Modifying shapes
4367
4368 @menu
4369 * Modifica di legature di valore e di portamento::
4370 @end menu
4371
4372 @node Modifica di legature di valore e di portamento
4373 @unnumberedsubsubsec Modifica di legature di valore e di portamento
4374 @translationof Modifying ties and slurs
4375
4376 @cindex legature di portamento, modificare
4377 @cindex legature di valore, modificare
4378 @cindex curve Bézier, punti di controllo
4379 @cindex punti di controllo, curve Bézier
4380 @cindex Bézier, curve, punti di controllo
4381
4382 Le legature, siano esse di valore (@code{Tie}), di portamento (@code{Slur}),
4383 di frase (@code{PhrasingSlur}), di laisser-vibrer (@code{LaissezVibrerTie})
4384 o di valore ripetute (@code{RepeatTie}), sono tutte disegnate come curve Bézier
4385 di terzo ordine.  Se la forma della legatura di valore o di frase che viene
4386 calcolata automaticamente non è ottimale, può essere modificata manualmente
4387 in due modi:
4388
4389 @enumerate a
4390 @item
4391 specificando di quanto spostare i punti di controllo della curva
4392 Bézier calcolata automaticamente, o
4393
4394 @item
4395 specificando esplicitamente le posizioni dei quattro punti di controllo
4396 richiesti per definire la curva desiderata.
4397 @end enumerate
4398
4399 Entrambi i metodi sono spiegati di seguito.  Il primo metodo è più adatto
4400 se sono necessari solo piccoli aggiustamenti alla curva; il secondo può
4401 essere migliore per creare curve che riguardano soltanto una singola nota.
4402
4403 @subsubsubheading Curve Bézier cubiche
4404
4405 Le curve Bézier di terzo ordine o cubiche sono definite da quattro punti
4406 di controllo.  Il primo e il quarto punto di controllo sono esattamente
4407 i punti di inizio e fine della curva.  I due punti intermedi definiscono
4408 la forma.  Sul web si trovano delle animazioni che mostrano come viene
4409 disegnata la curva, ma la seguente descrizione può comunque essere utile.
4410 La curva inizia dal primo punto di controllo e si dirige verso il secondo,
4411 piegandosi gradualmente per arrivare al terzo e poi al quarto, arrivando
4412 lì direttamente dal terzo punto di controllo.  La curva è contenuta
4413 interamente nel quadrilatero definito dai quattro punti di controllo.
4414 Traslazioni, rotazioni e ridimensionamenti dei punti di controllo risultano
4415 tutti esattamente nelle stesse operazioni sulla curva.
4416
4417 @subsubsubheading Specificare gli spostamenti dai punti di controllo correnti
4418
4419 @cindex disegnare legature di valore e di portamento
4420 @funindex \shape
4421
4422 In questo esempio la disposizone automatica della legatura di valore non è
4423 ottimale, e @code{\tieDown} non sarebbe di aiuto.
4424
4425 @lilypond[verbatim,quote]
4426 <<
4427   { e'1~ 1 }
4428 \\
4429   \relative { r4 <g' c,> <g c,> <g c,> }
4430 >>
4431 @end lilypond
4432
4433 Cambiando i punti di controllo della legatura con @code{\shape} consente di
4434 evitare le collisioni.
4435
4436 La sintassi di @code{\shape} è
4437
4438 @example
4439 [-]\shape @var{spostamenti} @var{elemento}
4440 @end example
4441
4442 Questo comando riposiziona i punti di controllo di @var{elemento} di quanto
4443 indicato da @var{spostamenti}.  L'argomento @var{spostamenti} è una lista
4444 di coppie di numeri o una lista di tali liste.  Ogni elemento di una coppia
4445 rappresenta lo spostamento di una delle coordinate di un punto di controllo.
4446 Se @var{elemento} è una stringa, il risultato è @code{\once\override} per il
4447 tipo di grob specificato.  Se @var{elemento} è un'espressione musicale, il
4448 risultato è la stessa espressione musicale con un'appropriata modifica.
4449
4450 In altre parole, la funzione @code{\shape} può comportarsi come un comando
4451 @code{\once\override} o un comando @code{\tweak} a seconda che l'argomento
4452 @var{elemento} sia il nome di un grob, come @qq{Slur}, o un'espressione
4453 musicale, come @qq{(}.  L'argomento @var{spostamenti} specifica gli
4454 sfasamenti dei quattro punti di controllo nella forma di una lista di
4455 quattro coppie di valori (dx . dy) in unità di spazi rigo (o una lista
4456 di tali liste se la curva ha più di un segmento).
4457
4458 Il trattino iniziale è richiesto se e solo se si usa la forma con
4459 @code{\tweak}.
4460
4461 Dunque usando lo stesso esempio precedente e la forma @code{\once\override}
4462 di @code{\shape}, il seguente comando alzerà la legatura di valore di
4463 metà spazio rigo:
4464
4465 @lilypond[verbatim,quote]
4466 <<
4467   {
4468     \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie
4469     e'1~ 1
4470   }
4471 \\
4472   \relative { r4 <g' c,> <g c,> <g c,> }
4473 >>
4474 @end lilypond
4475
4476 Questo posizionamento è migliore, ma forse dovrebbe essere alzato di più
4477 al centro, come viene fatto nel prossimo esempio, dove stavolta si usa
4478 la forma alternativa @code{\tweak}:
4479
4480 @lilypond[verbatim,quote]
4481 <<
4482   {
4483     e'1-\shape #'((0 . 0.5) (0 . 1) (0 . 1) (0 . 0.5)) ~ e'
4484   }
4485 \\
4486   \relative { r4 <g' c,> <g c,> <g c,> }
4487 >>
4488 @end lilypond
4489
4490 Le modifiche alle posizioni orizzontali dei punti di controllo funzionano
4491 nello stesso modo.  Si possono ridefinire anche due curve diverse che
4492 iniziano nello stesso momento musicale:
4493
4494 @lilypond[verbatim,quote,ragged-right]
4495 \relative {
4496   c''8(\( a) a'4 e c\)
4497   \shape #'((0.7 . -0.4) (0.5 . -0.4) (0.3 . -0.3) (0 . -0.2)) Slur
4498   \shape #'((0 . 0) (0 . 0.5) (0 . 0.5) (0 . 0)) PhrasingSlur
4499   c8(\( a) a'4 e c\)
4500 }
4501 @end lilypond
4502
4503 La funzione @code{\shape} può sostituire anche i punti di controllo di
4504 curve che si estendono oltre le interruzioni di linea.  A ogni pezzo
4505 della curva spezzata può essere assegnata la sua lista di spostamenti.
4506 Se non sono necessarie delle modifiche a un segmento in particolare,
4507 la lista vuota può servire come segnaposto.  In questo esempio l'interruzione
4508 di linea fa sembrare doppia la legatura di portamento singola:
4509
4510 @lilypond[verbatim,quote,ragged-right]
4511 \relative {
4512   c'4( f g c
4513   \break
4514   d,4 c' f, c)
4515 }
4516 @end lilypond
4517
4518 Cambiando le forme delle due metà della legatura di portamento diventa più
4519 chiaro che la legatura continua oltre l'interruzione di linea:
4520
4521 @lilypond[verbatim,quote,ragged-right]
4522 % () può essere usato come una scorciatoia per ((0 . 0) (0 . 0) (0 . 0) (0 . 0))
4523 % nel caso in cui uno dei segmenti non necessiti di modifiche
4524 \relative c' {
4525   \shape #'(
4526              (( 0 . 0) (0 . 0) (0 . 0) (0 . 1))
4527              ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5))
4528            ) Slur
4529   c4( f g c
4530   \break
4531   d,4 c' f, c)
4532 }
4533 @end lilypond
4534
4535 Se è richiesta una curva a forma di S, bisogna sempre definire manualmente i
4536 punti di controllo --- LilyPond non sceglierà mai tali forme automaticamente.
4537
4538 @lilypond[verbatim,quote]
4539 \relative c'' {
4540   c8( e b-> f d' a e-> g)
4541   \shape #'((0 . -1) (5.5 . -0.5) (-5.5 . -10.5) (0 . -5.5)) PhrasingSlur
4542   c8\( e b-> f d' a e-> g\)
4543 }
4544 @end lilypond
4545
4546 @subsubsubheading Specificare i punti di controllo esplicitamente
4547
4548 Le coordinate dei punti di controllo della curva di Bézier sono specificate
4549 in unità di spazi rigo.  La coordinata@tie{}X è relativa al punto di
4550 riferimento della nota a cui la legatura si attacca, mentre la
4551 coordinata@tie{}Y è relativa alla linea centrale del rigo.  Le coordinate
4552 sono specificate come una lista di quattro coppie di numeri decimali
4553 (reali).  Un possibile approccio consiste nel valutare prima le coordinate
4554 delle due estremità e poi indovinare i due punti intermedi.  I valori
4555 ottimali vengono quindi trovati per tentativi.  Tenere conto del fatto
4556 che, in caso di ulteriori modifiche alla musica o alla formattazione, questi
4557 valori potrebbero dover essere nuovamente cambiati manualmente.
4558
4559 Una situazione in cui è preferibile specificare i punti di controllo
4560 esplicitamente invece di specificarne gli spostamenti è quella in cui
4561 devono essere indicati per una singola nota.  Il prossimo esempio
4562 mostra un modo in cui rappresentare una legatura di portamento che
4563 si estende nelle sezioni alternative di una volta.
4564
4565 @lilypond[verbatim,quote]
4566 \relative {
4567   c''1
4568   \repeat volta 3 { c4 d( e f }
4569   \alternative {
4570     { g2) d }
4571     {
4572       g2
4573       % crea una legatura di portamento e spostala in una nuova posizione
4574       % il <> è solamente un accordo vuoto che serve a terminare la legatura
4575       -\tweak control-points #'((-2 . 3.8) (-1 . 3.9) (0 . 4) (1 . 3.4)) ( <> )
4576       f,
4577     }
4578     {
4579       e'2
4580       % crea una legatura di portamento e spostala in una nuova posizione
4581       -\tweak control-points #'((-2 . 3) (-1 . 3.1) (0 . 3.2) (1 . 2.4)) ( <> )
4582       f,
4583     }
4584   }
4585 }
4586 @end lilypond
4587
4588 @knownissues
4589 Non è possibile modificare le forme di legature di valore e di portamento
4590 cambiando la proprietà @code{control-points} se ci sono molteplici legature
4591 nello stesso momento musicale -- anche il comando @code{\tweak} non funzionerà
4592 in questo caso.  Tuttavia si può sovrascrivere la proprietà
4593 @code{tie-configuration} di @code{TieColumn} per impostare l'inizio della linea
4594 e la direzione come desiderato.
4595
4596 @seealso
4597 Guida al funzionamento interno:
4598 @rinternals{TieColumn}.
4599
4600
4601 @node Modifica degli estensori spezzati
4602 @subsection Modifica degli estensori spezzati
4603 @translationof Modifying broken spanners
4604
4605 @menu
4606 * Uso di alterBroken::
4607 @end menu
4608
4609 @node Uso di alterBroken
4610 @unnumberedsubsubsec Uso di @code{\alterBroken}
4611 @translationof Using alterBroken
4612
4613 @cindex estensori, modificare gli
4614 @cindex estensori spezzati, modificare gli
4615 @funindex \alterBroken
4616
4617 Quando un estensore va a capo o si spezza, ciascun pezzo eredita gli
4618 attributi dell'estensore originario.  Dunque la normale modifica di
4619 un estensore spezzato applica le stesse modifiche a ciascuno dei
4620 suoi segmenti.  Nell'esempio successivo, la sovrascrittura di
4621 @code{thickness} agisce sulla legatura di portamento su entrambi
4622 i lati rispetto all'interruzione di linea.
4623
4624 @lilypond[verbatim,quote,ragged-right]
4625 \relative c'' {
4626   r2
4627   \once\override Slur.thickness = 10
4628   c8( d e f
4629   \break
4630   g8 f e d) r2
4631 }
4632 @end lilypond
4633
4634 È possibile modificare indipendentemente l'aspetto di singoli pezzi
4635 di un estensore spezzato col comando @code{\alterBroken}.  Questo
4636 può generare sia un @code{\override} che un @code{\tweak} della
4637 proprietà di un estensore.
4638
4639 La sintassi di @code{\alterBroken} è:
4640
4641 @example
4642 [-]\alterBroken @var{proprietà} @var{valori} @var{elemento}
4643 @end example
4644
4645 L'argomento @var{valori} è una lista di valori, uno per ogni pezzo
4646 spezzato.  Se @var{elemento} è il nome di un grob come @code{Slur} o
4647 @code{Staff.PianoPedalBracket}, il risultato è un @code{\override}
4648 del tipo di grob specificato.  Se @var{elemento} è un'espressione
4649 musicale come @qq{(} o @qq{[}, il risultato è la stessa espressione
4650 musicale modificata da un comando @code{\tweak}.
4651
4652 Il trattino iniziale è richiesto nella forma @code{\tweak}.  Non aggiungerlo
4653 se @code{\alterBroken} viene usato come un @code{\override}.
4654
4655 Nel suo uso come @code{\override}, @code{\alterBroken} può essere
4656 preceduto da @code{\once} o @code{\temporary} e ripristinato con
4657 @code{\revert} seguito da @var{proprietà}.
4658
4659 Il codice seguente applica un @code{\override} indipendente a ciascun
4660 segmento della legatura di portamento dell'esempio precedente:
4661
4662 @lilypond[verbatim,quote,ragged-right]
4663 \relative c'' {
4664   r2
4665   \alterBroken thickness #'(10 1) Slur
4666   c8( d e f
4667   \break
4668   g8 f e d) r2
4669 }
4670 @end lilypond
4671
4672 Il comando @code{\alterBroken} può essere usato con qualsiasi oggetto estensore,
4673 inclusi @code{Tie}, @code{PhrasingSlur}, @code{Beam} e @code{TextSpanner}.  Per
4674 esempio, un editor che stia preparando un'edizione colta potrebbe voler indicare
4675 l'assenza di parte di una legatura di frase in un manoscritto tratteggiando
4676 solo il segmento che è stato aggiunto.  L'esempio seguente mostra come farlo,
4677 in questo caso usando la forma @code{\tweak} del comando:
4678
4679 @lilypond[verbatim,quote,ragged-right]
4680 % Si usa per convenienza la lista vuota, perché è l'impostazione
4681 % predefinita di dash-definition, producendo così una curva continua.
4682 \relative {
4683   c''2-\alterBroken dash-definition #'(() ((0 1.0 0.4 0.75))) \(e
4684   \break
4685   g2 e\)
4686 }
4687 @end lilypond
4688
4689 È importante comprendere che @code{\alterBroken} imposterà ogni pezzo di
4690 un estensore spezzato sul valore corrispondente specificato in
4691 @var{valori}.  Quando il numero di valori è inferiore a quello dei pezzi,
4692 a qualsiasi pezzo ulteriore sarà assegnata una lista vuota.  Ciò potrebbe
4693 portare a risultati indesiderati se la proprietà di formattazione non è
4694 impostata su una lista vuota per impostazione predefinita.  In tali casi,
4695 a ogni segmento deve essere assegnato un valore appropriato.
4696
4697 @knownissues
4698 Le interruzioni di linea possono verificarsi in punti diversi in seguito
4699 a modifiche della formattazione.  Le impostazioni scelte per @code{\alterBroken}
4700 potrebbero non essere più adatte per un estensore che non va più a capo o è
4701 diviso in più segmenti di prima.  Per proteggersi da questa situazione
4702 conviene fare un uso esplicito di @code{\break}.
4703
4704 Il comando @code{\alterBroken} non funziona nel caso di proprietà dell'estensore
4705 a cui si accede prima di line-breaking, come @code{direction}.
4706
4707 @seealso
4708 Estendere LilyPond:
4709 @rextend{Difficult tweaks}.
4710
4711
4712 @node Contenitori unpure-pure
4713 @subsection Contenitori unpure-pure
4714 @translationof Unpure-pure containers
4715
4716 @cindex Scheme, contenitori puri
4717 @cindex Scheme, contenitori impuri
4718 @cindex pure-container, Scheme
4719 @cindex unpure-container, Scheme
4720 @cindex spaziatura orizzontale, sovrascrivere la
4721
4722 I contenitori unpure-pure (impuri-puri) sono utili per sovrascrivere i calcoli
4723 di spaziatura dell'@emph{asse Y} - in particolare @code{Y-offset} e
4724 @code{Y-extent} - tramite una funzione Scheme invece che con un numero o una
4725 coppia di numeri.
4726
4727 Per alcuni grob, il cui @code{Y-extent} è basato sulla proprietà @code{stencil},
4728 sovrascrivere tale proprietà renderà necessario un'ulteriore sovrascrittura di
4729 @code{Y-extent} tramite un contenitore unpure-pure.
4730 Quando una funzione sovrascrive @code{Y-offset} e/o @code{Y-extent}, si presume
4731 che ciò innescherà il calcolo delle interruzioni di linea troppo presto durante
4732 la compilazione.  Dunque la funzione non viene affatto calcolata (e di solito
4733 restituirà un valore di @samp{0} o @samp{'(0 . 0)}) e ciò può causare delle
4734 collisioni.  Una funzione @q{pure} (pura) non avrà effetto su proprietà,
4735 oggetti o @qq{suicidi} dei grob e quindi tutto ciò che è collegato al suo
4736 asse@tie{}Y sarà sempre calcolato correttamente.
4737
4738 Attualmente, ci sono circa trenta funzioni che sono già considerate
4739 @q{pure} e i contenitori unpure-pure sono un modo per impostare le
4740 funzioni non ancora presenti in questa lista come @q{pure}.  La funzione
4741 @q{pure} viene calcolata @emph{prima} di qualsiasi interruzione di linea
4742 e quindi la spaziatura orizzontale può essere regolata @qq{in tempo}.  La
4743 funzione @q{unpure} viene invece calcolata @emph{dopo} le interruzioni
4744 di linea.
4745
4746 @warning{Dato che è difficile sapere sempre quali funzioni si trovano in
4747 questa lista, consigliamo a chi crea funzioni @q{pure} di non usare i
4748 grob @code{Beam} o @code{VerticalAlignment}.}
4749
4750 Un contenitore unpure-pure viene costruito nel modo seguente:
4751
4752 @code{(ly:make-unpure-pure-container f0 f1)}
4753
4754 dove @code{f0} è una funzione che prende @var{n} argomenti (@var{n >= 1})
4755 e il primo argomento deve sempre essere il grob.  Questa è la funzione che
4756 restituisce il vero risultato.  @var{f1} è la funzione etichettata come
4757 @q{pure} che prende @var{n + 2} argomenti.  Di nuovo, il primo argomento
4758 deve sempre essere il grob, ma il secondo e il terzo sono il punto di
4759 partenza, @q{start}, e quello di arrivo, @q{end}.
4760
4761 @var{start} e @var{end} sono, per tutti gli intenti e scopi, valori
4762 fittizi che contano solo per gli estensori, o @code{Spanners}, (ovvero
4763 @code{Hairpin} o @code{Beam}), che possono restituire calcoli diversi
4764 dell'altezza in base a una colonna di inizio e di fine.
4765
4766 Il resto sono altri argomenti della prima funzione (che potrebbero essere
4767 nessuno se @var{n = 1}).
4768
4769 I risultati della seconda funzione sono usati come un'approssimazione del
4770 valore necessario che viene poi usato dalla prima funzione per ottenere il
4771 valore reale, che viene infine usato per la messa a punto, molto più tardi
4772 nel corso del processo di spaziatura.
4773
4774 @c TODO: The following example supposedly showing a collision no longer
4775 @c 'works' since 2.18.x. Another example of a collision is needed.
4776 @c Issue #3512
4777
4778 @lilypond[verbatim,quote,ragged-right]
4779 #(define (square-line-circle-space grob)
4780 (let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
4781       (notename (ly:pitch-notename pitch)))
4782  (if (= 0 (modulo notename 2))
4783      (make-circle-stencil 0.5 0.0 #t)
4784      (make-filled-box-stencil '(0 . 1.0)
4785                               '(-0.5 . 0.5)))))
4786
4787 squareLineCircleSpace = {
4788   \override NoteHead.stencil = #square-line-circle-space
4789 }
4790
4791 smartSquareLineCircleSpace = {
4792   \squareLineCircleSpace
4793   \override NoteHead.Y-extent =
4794    #(ly:make-unpure-pure-container
4795       ly:grob::stencil-height
4796       (lambda (grob start end) (ly:grob::stencil-height grob)))
4797 }
4798
4799 \new Voice \with { \remove "Stem_engraver" }
4800 \relative c'' {
4801   \squareLineCircleSpace
4802   cis4 ces disis d
4803   \smartSquareLineCircleSpace
4804   cis4 ces disis d
4805 }
4806 @end lilypond
4807
4808 @c esempio obsoleto: dalla versione 2.18 LilyPond evita le collisioni di default.
4809 Nella prima misura, senza il contenitore unpure-pure, il motore della
4810 spaziatura non conosce la larghezza della testa di nota e lascia che
4811 collida con le alterazioni.  Nella seconda misura, che usa i contenitori
4812 unpure-pure, il motore della spaziatura conosce la larghezza della testa
4813 di nota e evita le collisioni allungando la linea dello spazio necessario.
4814
4815 Di solito per semplici calcoli si possono usare funzioni quasi identiche
4816 per entrambe le parti, @q{unpure} e @q{pure}, cambiando soltanto il numero
4817 di argomenti passati e la portata della funzione.  Questo caso d'uso è così
4818 frequente che @code{ly:make-unpure-pure-container} costruisce tale seconda
4819 funzione automaticamente quando è richiamata con un solo argomento.
4820
4821 @warning{Se una funzione viene etichettata come @q{pure} ma viene fuori che
4822 non lo è, i risultati possono essere imprevedibili.}
4823
4824
4825 @node Uso delle funzioni musicali
4826 @section Uso delle funzioni musicali
4827 @translationof Using music functions
4828
4829 @c TODO -- add @seealso, etc. to these subsections
4830
4831 Quando le modifiche devono essere riusate con diverse espressioni musicali,
4832 è spesso conveniente fare in modo che la modifica faccia parte di una
4833 @emph{funzione musicale}.  In questa sezione, trattiamo soltanto le funzioni
4834 di @emph{sostituzione}, dove l'obiettivo è sostituire una variabile in un
4835 punto del codice di input di LilyPond.  Altre funzioni più complesse sono
4836 descritte in @rextend{Music functions}.
4837
4838 @menu
4839 * Sintassi della funzione di sostituzione::
4840 * Esempi della funzione di sostituzione::
4841 @end menu
4842
4843 @node Sintassi della funzione di sostituzione
4844 @subsection Sintassi della funzione di sostituzione
4845 @translationof Substitution function syntax
4846
4847 Creare una funzione che sostituisca una variabile presente nel codice LilyPond
4848 è semplice.  La forma generica di queste funzioni è:
4849
4850 @example
4851 funzione =
4852 #(define-music-function
4853      (@var{arg1} @var{arg2} @dots{})
4854      (@var{tipo1?} @var{tipo2?} @dots{})
4855    #@{
4856      @var{@dots{}musica@dots{}}
4857    #@})
4858 @end example
4859
4860 @noindent
4861 dove
4862
4863 @multitable @columnfractions .33 .66
4864 @item @code{@var{argN}}
4865 @tab @var{n}esimo argomento
4866
4867 @item @code{@var{tipoN?}}
4868 @tab un @emph{tipo di predicato} scheme per il quale @code{@var{argN}}
4869 deve ritornare @code{#t}.
4870
4871 @item @code{@var{@dots{}musica@dots{}}}
4872 @tab il normale input LilyPond, usando @code{$} (nei punti in cui sono
4873 consentiti solo i costrutti LilyPond) o @code{#} (per usarlo come un valore
4874 Scheme o come argomento di una funzione musicale o come musica all'interno
4875 di liste di musica) per riferirsi agli argomenti (es: @samp{#arg1}).
4876 @end multitable
4877
4878 La lista del tipo di predicati è obbligatoria.  Alcuni dei tipi di predicati
4879 più comuni usati nelle funzioni musicali sono:
4880
4881 @example
4882 boolean?
4883 cheap-list?  @emph{(usarlo al posto di }@q{list?}@emph{ per un'elaborazione più veloce)}
4884 ly:duration?
4885 ly:music?
4886 ly:pitch?
4887 markup?
4888 number?
4889 pair?
4890 string?
4891 symbol?
4892 @end example
4893
4894 @noindent
4895 Un elenco dei tipi di predicati disponibili si trova in
4896 @ref{Predefined type predicates}.  Sono consentiti anche tipi di predicati
4897 definiti dagli utenti.
4898
4899 @seealso
4900 Guida alla notazione:
4901 @ref{Predefined type predicates}.
4902
4903 Estendere LilyPond:
4904 @rextend{Music functions}.
4905
4906 File installati:
4907 @file{lily/music-scheme.cc},
4908 @file{scm/c++.scm},
4909 @file{scm/lily.scm}.
4910
4911
4912 @node Esempi della funzione di sostituzione
4913 @subsection Esempi della funzione di sostituzione
4914 @translationof Substitution function examples
4915
4916 Questa sezione presenta alcuni esempi di funzione di sostituzione.
4917 L'obiettivo non è fornire un elenco esaustivo, ma mostrare soltanto
4918 alcune delle possibilità di semplici funzioni di sostituzione.
4919
4920 Nel primo esempio, viene definita una funzione che semplifica il
4921 padding di un oggetto TextScript:
4922
4923 @lilypond[quote,verbatim,ragged-right]
4924 padText =
4925 #(define-music-function
4926      (padding)
4927      (number?)
4928    #{
4929      \once \override TextScript.padding = #padding
4930    #})
4931
4932 \relative {
4933   c''4^"più mosso" b a b
4934   \padText #1.8
4935   c4^"più mosso" b a b
4936   \padText #2.6
4937   c4^"più mosso" b a b
4938 }
4939 @end lilypond
4940
4941 Oltre ai numeri, si possono usare come argomenti delle funzioni musicali
4942 anche le espressioni musicali, come le note:
4943
4944 @lilypond[quote,verbatim,ragged-right]
4945 custosNote =
4946 #(define-music-function
4947      (note)
4948      (ly:music?)
4949    #{
4950      \tweak NoteHead.stencil #ly:text-interface::print
4951      \tweak NoteHead.text
4952         \markup \musicglyph #"custodes.mensural.u0"
4953      \tweak Stem.stencil ##f
4954      #note
4955    #})
4956
4957 \relative { c'4 d e f \custosNote g }
4958 @end lilypond
4959
4960 @funindex \etc
4961 Entrambe queste funzioni sono semplici espressioni singole dove manca soltanto
4962 l'ultimo elemento di una chiamata di una funzione o di una sovrascrittura.  Per
4963 queste particolari definizioni di funzione, esiste una sintassi alternativa
4964 più semplice, che consiste nello scrivere interamente la parte costante
4965 dell'espressione e sostituire il suo elemento finale mancante con @code{\etc}:
4966
4967 @lilypond[quote,verbatim,ragged-right]
4968 padText =
4969   \once \override TextScript.padding = \etc
4970
4971 \relative {
4972   c''4^"più mosso" b a b
4973   \padText #1.8
4974   c4^"più mosso" b a b
4975   \padText #2.6
4976   c4^"più mosso" b a b
4977 }
4978 @end lilypond
4979
4980 @lilypond[quote,verbatim,ragged-right]
4981 custosNote =
4982   \tweak NoteHead.stencil #ly:text-interface::print
4983   \tweak NoteHead.text
4984      \markup \musicglyph #"custodes.mensural.u0"
4985   \tweak Stem.stencil ##f
4986   \etc
4987
4988 \relative { c'4 d e f \custosNote g }
4989 @end lilypond
4990
4991
4992 Si possono definire funzioni di sostituzione con molteplici argomenti:
4993
4994 @lilypond[quote,verbatim,ragged-right]
4995 tempoPadded =
4996 #(define-music-function
4997      (padding tempotext)
4998      (number? markup?)
4999    #{
5000      \once \override Score.MetronomeMark.padding = #padding
5001      \tempo \markup { \bold #tempotext }
5002    #})
5003
5004 \relative {
5005   \tempo \markup { "Tempo basso" }
5006   c''4 d e f g1
5007   \tempoPadded #4.0 "Tempo alto"
5008   g4 f e d c1
5009 }
5010 @end lilypond
5011
5012 @c TODO: add appropriate @@ref's here.