]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/it/notation/changing-defaults.itely
Doc - NR + CG: Clarify Emmentaler is the 'font' and Feta/Parmesan are glyphs
[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: 8c1840ca28a05b3dad8d595e04d03779ba0a286a
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{Automatic part combining}) 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{Automatic syllable durations}.  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{Automatic syllable durations}.
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{Changing just one specific context}.
505
506 @seealso
507 Manuale di apprendimento:
508 @rlearning{Organizzare i brani con le variabili}.
509
510 Guida alla notazione:
511 @ref{Changing just one specific context},
512 @ref{Automatic syllable durations}.
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{Changing just one specific context}.
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{Bottom-level contexts - voices}.  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 Dato che questa @q{modifca di contesto} è specificata all'interno della
1008 musica, avrà effetto su @emph{tutti} gli output (quello grafico @emph{e} il
1009 Midi), diversamente da quanto avviene per le modifiche inserite in una
1010 definizione di output.
1011
1012 Si possono specificare i seguenti tipi di impostazioni:
1013
1014 @itemize
1015 @item
1016 Un comando @code{\override}, ma col nome di contesto omesso
1017
1018 @lilypond[quote,verbatim]
1019 \score {
1020   \new Staff {
1021     \new Voice \with { \override Stem.thickness = #4.0 }
1022     {
1023       \relative {
1024         a'4^"Gambi spessi" a a a
1025         a4 a a a
1026       }
1027     }
1028   }
1029 }
1030 @end lilypond
1031
1032 @item
1033 Impostando direttamente una proprietà di contesto
1034
1035 @lilypond[quote,verbatim]
1036 \score {
1037   <<
1038     \new Staff {
1039       \relative {
1040         a'4^"Tipo di carattere predefinito" a a a
1041         a4 a a a
1042       }
1043     }
1044     \new Staff \with { fontSize = #-4 }
1045     {
1046       \relative {
1047         a'4^"Tipo di carattere più piccolo" a a a
1048         a4 a a a
1049       }
1050     }
1051   >>
1052 }
1053 @end lilypond
1054
1055 @item
1056 Un comando predefinito come @code{\dynamicUp}
1057
1058 @lilypond[quote,verbatim]
1059 \score {
1060   <<
1061     \new Staff {
1062       \new Voice {
1063         \relative {
1064           a'4^"Dinamiche sotto" a a a
1065           a4 a a\ff a
1066         }
1067       }
1068     }
1069     \new Staff \with { \accidentalStyle dodecaphonic }
1070     {
1071       \new Voice \with { \dynamicUp }
1072       {
1073         \relative {
1074           a'4^"Dinamiche sopra" a a a
1075           a4 a a\ff a
1076         }
1077       }
1078     }
1079   >>
1080 }
1081 @end lilypond
1082
1083 @end itemize
1084
1085 @node Ordine di precedenza
1086 @unnumberedsubsubsec Ordine di precedenza
1087 @translationof Order of precedence
1088
1089 Il valore di una proprietà da applicare in un certo momento viene determinato
1090 nel modo seguente:
1091
1092 @itemize
1093 @item
1094 se un comando @code{\override} o @code{\set} nel flusso dell'input (le note) è
1095 attivo viene usato quel valore,
1096
1097 @item
1098 altrimenti viene usato il valore predefinito preso da una dichiarazione
1099 @code{\with} nella dichiarazione di iniziazione del contesto,
1100
1101 @item
1102 altrimenti viene usato il valore predefinito preso dal blocco @code{\context}
1103 appropriato più recente nei blocchi @code{\layout} o @code{\midi},
1104
1105 @item
1106 altrimenti viene usato il valore predefinito in LilyPond.
1107 @end itemize
1108
1109 @seealso
1110 Manuale di apprendimento:
1111 @rlearning{Modificare le proprietà di contesto}.
1112
1113 Guida alla notazione:
1114 @ref{Contexts explained},
1115 @ref{Bottom-level contexts - voices},
1116 @ref{The set command},
1117 @ref{The override command},
1118 @ref{The layout block,,Il blocco @code{@bs{}layout}}.
1119
1120
1121 @node Definizione di nuovi contesti
1122 @subsection Definizione di nuovi contesti
1123 @translationof Defining new contexts
1124
1125 @cindex contesti, definire nuovi
1126 @cindex incisori, includere nei contesti
1127
1128 @funindex \alias
1129 @funindex \name
1130 @funindex \type
1131 @funindex \consists
1132 @funindex \accepts
1133 @funindex \denies
1134
1135 Contesti specifici, come @code{Staff} e @code{Voice}, sono creati a partire
1136 da semplici mattoncini.  È possibile creare nuovi tipi di contesto con
1137 diverse combinazioni di incisori.
1138
1139 Il prossimo esempio mostra come costruire un diverso tipo di contesto
1140 @code{Voice} da zero.  Sarà simile a @code{Voice}, ma stamperà soltanto
1141 teste di nota a forma di barra posizionate al centro.  Può essere usato
1142 per indicare l'improvvisazione nei brani jazz:
1143
1144 @lilypond[quote,ragged-right]
1145 \layout { \context {
1146   \name ImproVoice
1147   \type "Engraver_group"
1148   \consists "Note_heads_engraver"
1149   \consists "Rhythmic_column_engraver"
1150   \consists "Text_engraver"
1151   \consists "Pitch_squash_engraver"
1152   squashedPosition = #0
1153   \override NoteHead.style = #'slash
1154   \hide Stem
1155   \alias Voice
1156 }
1157 \context { \Staff
1158   \accepts "ImproVoice"
1159 }}
1160
1161 \relative {
1162   a'4 d8 bes8 \new ImproVoice { c4^"ad lib" c
1163    c4 c^"undress" c_"while playing :)" c }
1164   a1
1165 }
1166 @end lilypond
1167
1168
1169 Queste impostazioni sono definite in un blocco @code{\context} compreso in
1170 un blocco @code{\layout}:
1171
1172 @example
1173 \layout @{
1174   \context @{
1175     @dots{}
1176   @}
1177 @}
1178 @end example
1179
1180 L'input di esempio che segue sostituisce i @dots{} del frammento precedente.
1181
1182 Per prima cosa occorre definire un nome per il nuovo contesto:
1183
1184 @example
1185 \name ImproVoice
1186 @end example
1187
1188 Essendo simile al contesto @code{Voice}, ci servono comandi che funzionano
1189 in contesti @code{Voice} esistenti per far sì che continuino a funzionare.  Per
1190 farlo si assegna al nuovo contesto un alias di @code{Voice},
1191
1192 @example
1193 \alias Voice
1194 @end example
1195
1196 Il contesto stamperà note e testi di spiegazione, dunque dobbiamo
1197 aggiungere gli incisori che forniscono queste funzionalità, più
1198 l'incisore che raggruppa in colonne le note, i gambi e le pause che
1199 si trovano nello stesso momento musicale:
1200
1201 @example
1202 \consists "Note_heads_engraver"
1203 \consists "Text_engraver"
1204 \consists "Rhythmic_column_engraver"
1205 @end example
1206
1207 Le teste di nota devono essere poste tutte sulla linea centrale:
1208
1209 @example
1210 \consists "Pitch_squash_engraver"
1211 squashedPosition = #0
1212 @end example
1213
1214 L'incisore @code{Pitch_squash_engraver} modifica le teste di nota (create
1215 dall'incisore @code{Note_heads_engraver}) e imposta la loro posizione
1216 verticale sul valore di @code{squashedPosition}, in questo
1217 caso@tie{}@code{0}, la linea centrale.
1218
1219 Le note appaiono come una barra e non hanno gambi:
1220
1221 @example
1222 \override NoteHead.style = #'slash
1223 \hide Stem
1224 @end example
1225
1226 Tutti questi componenti aggiuntivi devono comunicare sotto il controllo
1227 del contesto.  I meccanismi con cui i contesti comunicano sono stabiliti
1228 dichiarando il tipo di contesto con @code{\type}.  In un blocco
1229 @code{\layout}, la maggior parte dei contesti sarà del tipo
1230 @code{Engraver_group}.  Alcuni contesti speciali e i contesti nei
1231 blocchi @code{\midi} usano altri tipi di contesto.  Copiare e modificare
1232 una definizione di contesto esistente comprenderà anche la definizione
1233 del tipo.  Poiché questo esempio crea una definizione da zero, deve essere
1234 specificato in modo esplicito.
1235
1236 @example
1237 \type "Engraver_group"
1238 @end example
1239
1240 Mettendo tutte queste parti insieme otteniamo:
1241
1242 @example
1243 \context @{
1244   \name ImproVoice
1245   \type "Engraver_group"
1246   \consists "Note_heads_engraver"
1247   \consists "Text_engraver"
1248   \consists "Rhythmic_column_engraver"
1249   \consists "Pitch_squash_engraver"
1250   squashedPosition = #0
1251   \override NoteHead.style = #'slash
1252   \hide Stem
1253   \alias Voice
1254 @}
1255 @end example
1256
1257 @funindex \accepts
1258 I contesti formano gerarchie.  Vogliamo posizionare il contesto @code{ImproVoice}
1259 all'interno del contesto @code{Staff}, proprio come i normali contesti
1260 @code{Voice}.  Cambiamo quindi la definizione di @code{Staff} col comando
1261 @code{\accepts},
1262
1263 @example
1264 \context @{
1265   \Staff
1266   \accepts ImproVoice
1267 @}
1268 @end example
1269
1270 @funindex \inherit-acceptability
1271 Spesso quando si riutilizza una definizione di contesto esistente, il contesto
1272 risultante può essere usato in qualsiasi situazione in cui il contesto originale
1273 sarebbe stato utile.
1274
1275 @example
1276 \layout @{
1277   @dots{}
1278   \inherit-acceptability @var{a} @var{da}
1279 @}
1280 @end example
1281
1282 @noindent
1283 farà sì che i contesti del tipo @var{a} siano accettati da tutti i
1284 contesti che accettano anche @var{da}.  Per esempio, usando
1285
1286 @example
1287 \layout @{
1288   @dots{}
1289   \inherit-acceptability "ImproVoice" "Voice"
1290 @}
1291 @end example
1292
1293 @noindent
1294 verrà aggiunto un @code{\accepts} per @code{ImproVoice} a entrambe le
1295 definizioni di @code{Staff} e @code{RhythmicStaff}.
1296
1297 @funindex \denies
1298 L'opposto di @code{\accepts} è @code{\denies},
1299 che è talvolta necessario se si riusano definizioni di contesto esistenti.
1300
1301 Sistemando i pezzi necessari in un blocco @code{\layout} ci porta a:
1302
1303 @example
1304 \layout @{
1305   \context @{
1306     \name ImproVoice
1307     @dots{}
1308   @}
1309   \inherit-acceptability "ImproVoice" "Voice"
1310 @}
1311 @end example
1312
1313 Quindi l'output all'inizio di questa parte può essere inserito così:
1314
1315 @example
1316 \relative @{
1317   a'4 d8 bes8
1318   \new ImproVoice @{
1319     c4^"ad lib" c
1320     c4 c^"undress"
1321     c c_"while playing :)"
1322   @}
1323   a1
1324 @}
1325 @end example
1326
1327 Per completare questo esempio, le modifiche che alterano la gerarchia dei
1328 contesti devono essere ripetute in un blocco @code{\midi} per far sì che
1329 l'output Midi dipenda dalle stesse relazioni di contesto.
1330
1331 @seealso
1332
1333 Guida al funzionamento interno:
1334 @rinternals{Note_heads_engraver},
1335 @rinternals{Text_engraver},
1336 @rinternals{Rhythmic_column_engraver},
1337 @rinternals{Pitch_squash_engraver}.
1338
1339
1340 @node Ordine di disposizione dei contesti
1341 @subsection Ordine di disposizione dei contesti
1342 @translationof Context layout order
1343
1344 @cindex contesti, ordine di disposizione
1345 @funindex \accepts
1346 @funindex \denies
1347
1348 Normalmente i contesti in un sistema sono posizionati dall'alto verso il
1349 basso nell'ordine in cui sono incontrati nel file di input.  Quando i
1350 contesti sono annidati, il contesto più esterno includerà i contesti
1351 annidati al suo interno come specificato nel file di input solo se i
1352 contesti interni sono inclusi nell'elenco @qq{accepts} del contesto
1353 più esterno; altrimenti saranno riposizionati sotto il contesto più
1354 esterno invece di essere annidati al suo interno.
1355
1356 L'elenco @qq{accepts} di un contesto può essere modificato coi comandi
1357 @code{\accepts} o @code{\denies}.  @code{\accepts} aggiunge un contesto
1358 all'elenco @qq{accepts} mentre @code{\denies} lo rimuove dall'elenco.
1359
1360 Per esempio, un gruppo di righi racchiusi da una parentesi quadra non si
1361 trova solitamente all'interno di un gruppo di righi con stanghette
1362 connesse e racchiusi da una graffa, e @code{GrandStaff} non accetta al suo
1363 interno @code{StaffGroup} per impostazione predefinita.
1364
1365 @lilypond[verbatim,quote]
1366 \score {
1367   \new GrandStaff <<
1368     \new StaffGroup <<
1369       \new Staff { c'1 }
1370       \new Staff { d'1 }
1371     >>
1372     \new Staff { \set Staff.instrumentName = ultimo f'1 }
1373   >>
1374 }
1375 @end lilypond
1376
1377 Tuttavia col comando @code{\accepts} si può aggiungere @code{StaffGroup}
1378 al contesto @code{GrandStaff}:
1379
1380 @lilypond[verbatim,quote]
1381 \score {
1382   \new GrandStaff <<
1383     \new StaffGroup <<
1384       \new Staff { c'1 }
1385       \new Staff { d'1 }
1386     >>
1387     \new Staff { \set Staff.instrumentName = ultimo f'1 }
1388   >>
1389   \layout {
1390     \context {
1391       \GrandStaff
1392       \accepts "StaffGroup"
1393     }
1394   }
1395 }
1396 @end lilypond
1397
1398 @code{\denies} si usa soprattutto quando un nuovo contesto è basato su
1399 un altro, ma l'annidamento richiesto differisce.  Per esempio, il contesto
1400 @code{VaticanaStaff} è basato sul contesto @code{Staff}, ma col contesto
1401 @code{VaticanaVoice} che sostituisce il contesto @code{Voice} nell'elenco
1402 @qq{accepts}.
1403
1404 @cindex contesti impliciti
1405 @funindex \defaultchild
1406
1407 Nota bene: un contesto verrà creato implicitamente e senza avviso se
1408 si incontra un comando quando non c'è un contesto adatto disponibile
1409 per contenerlo.
1410
1411 Nella definizione di un contesto, il tipo di sottocontesto da creare
1412 implicitamente viene specificato con @code{\defaultchild}.  Vari eventi
1413 musicali richiedono un contesto @qq{di base}: quando si incontra tale
1414 evento, vengono creati ricorsivamente i sottocontesti finché non si
1415 raggiunge un contesto privo di impostazione @samp{defaultchild}.
1416
1417 La creazione implicita di contesti può talvolta causare nuovi righi o nuove
1418 partiture non attesi.  Per evitare questi problemi è consigliabile usare
1419 @code{\new} per creare i contesti esplicitamente.
1420
1421 @cindex alignAboveContext
1422 @cindex alignBelowContext
1423 @funindex alignAboveContext
1424 @funindex alignBelowContext
1425
1426 Talvolta un contesto deve esistere solo per un breve periodo, come nel
1427 caso esemplare di un contesto rigo per un ossia.  Per ottenere ciò, di
1428 solito si introduce la definizione di contesto nel punto appropriato
1429 in parallelo con la sezione corrispondente della musica principale.
1430 Per impostazione predefinita, il contesto temporaneo verrà posizionato
1431 sotto tutti i contesti esistenti.  Per riposizionarlo sopra il contesto
1432 chiamato @qq{principale}, dovrebbe essere definito in questo modo:
1433
1434 @example
1435 \new Staff \with @{ alignAboveContext = #"principale" @}
1436 @end example
1437
1438 Una situazione simile si pone quando si posiziona un contesto temporaneo
1439 per il testo vocale all'interno di una disposizione multirigo come
1440 @code{ChoirStaff}; per esempio, quando si aggiunge una seconda strofa a
1441 una sezione ripetuta.  Per impostazione predefinita, il contesto temporaneo
1442 per il testo vocale verrà posizionato sotto i righi più bassi.  Definendo il
1443 contesto temporaneo per il testo vocale con @code{alignBelowContext}, questo
1444 può essere posizionato correttamente sotto i contesti della voce (con nome)
1445 che contengono la prima strofa.
1446
1447 Esempi che mostrano questo riposizionamento di contesti temporanei possono
1448 essere trovati altrove --- vedi @rlearning{Annidare le espressioni musicali},
1449 @ref{Modifying single staves} e @ref{Techniques specific to lyrics}.
1450
1451 @seealso
1452 Manuale di apprendimento:
1453 @rlearning{Annidare le espressioni musicali}.
1454
1455 Guida alla notazione:
1456 @ref{Modifying single staves},
1457 @ref{Techniques specific to lyrics}.
1458
1459 Utilizzo:
1460 @rprogram{Appare un rigo in più}.
1461
1462 File installati:
1463 @file{ly/engraver-init.ly}.
1464
1465
1466 @node Come funziona la Guida al funzionamento interno
1467 @section Come funziona la Guida al funzionamento interno
1468 @translationof Explaining the Internals Reference
1469
1470 @menu
1471 * Navigazione nella guida al programma::
1472 * Interfacce di formattazione::
1473 * Determinazione della proprietà del grob::
1474 * Convenzioni sui nomi::
1475 @end menu
1476
1477 @node Navigazione nella guida al programma
1478 @subsection Navigazione nella guida al programma
1479 @translationof Navigating the program reference
1480
1481 @c TODO remove this (it's in the LM)
1482 @c Replace with more factual directions
1483
1484 Supponiamo di voler togliere l'indicazione di diteggiatura nel seguente
1485 frammento:
1486
1487 @lilypond[quote,fragment,verbatim]
1488 c''-2
1489 @end lilypond
1490
1491 Consultando la documentazione sulle istruzioni di diteggiatura (in
1492 @ref{Fingering instructions}), si nota:
1493
1494 @quotation
1495 @strong{Vedi anche}
1496
1497 Guida al funzionamento interno: @rinternals{Fingering}.
1498
1499 @end quotation
1500
1501 @ifnothtml
1502 La guida del programmatore è disponibile come documento HTML.  È caldamente
1503 consigliata la lettura della versione HTML, accessibile online o in locale
1504 scaricando la documentazione HTML.  Questa sezione sarà molto più difficile da
1505 comprendere se si usa il manuale PDF.
1506 @end ifnothtml
1507
1508 Seguire il collegamento a @rinternals{Fingering}.  In cima alla pagina
1509 si vede
1510
1511 @c Non tradurre le parti citate del manuale Internals Reference, che non è tradotto.
1512 @quotation
1513 Fingering objects are created by: @rinternals{Fingering_engraver} and
1514 @rinternals{New_fingering_engraver}.
1515 @end quotation
1516
1517 Seguendo i collegamenti correlati nella guida del programma, possiamo seguire
1518 il flusso di informazione del programma:
1519
1520 @itemize
1521
1522 @item @rinternals{Fingering}:
1523 @rinternals{Fingering} objects are created by:
1524 @rinternals{Fingering_engraver}
1525
1526 @item @rinternals{Fingering_engraver}:
1527 Music types accepted: @rinternals{fingering-event}
1528
1529 @item @rinternals{fingering-event}:
1530 Music event type @code{fingering-event} is in Music expressions named
1531 @rinternals{FingeringEvent}
1532 @end itemize
1533
1534 Questo percorso va in direzione contraria al flusso dell'informazione nel
1535 programma: parte dall'output e termina nell'evento di input.  Si può anche
1536 partire da un evento di input e leggere seguendo il flusso di informazione
1537 arrivando infine all'oggetto di output.
1538
1539 La guida al programma può anche essere sfogliata come un normale
1540 documento.  Contiene capitoli su
1541 @ifhtml
1542 @rinternals{Music definitions},
1543 @end ifhtml
1544 @ifnothtml
1545 @code{Music definitions}
1546 @end ifnothtml
1547 su @rinternals{Translation}, e sul @rinternals{Backend}.  Ogni capitolo
1548 elenca tutte le definizioni usate e tutte le proprietà che possono
1549 essere ritoccate.
1550
1551
1552 @node Interfacce di formattazione
1553 @subsection Interfacce di formattazione
1554 @translationof Layout interfaces
1555
1556 @cindex interface, layout
1557 @cindex layout interface
1558 @cindex grob
1559
1560 La pagina HTML che abbiamo incontrato nella sezione precedente descrive
1561 l'oggetto di formattazione chiamato @rinternals{Fingering}.  Tale oggetto
1562 è un simbolo interno alla partitura.  Ha delle proprietà che contengono
1563 numeri (come gli spessori e le direzioni), ma anche collegamenti a oggetti
1564 correlati.  Un oggetto di formattazione viene chiamato anche @emph{Grob},
1565 che è un diminutivo di Graphical Object (oggetto grafico).  Maggiori dettagli
1566 sui Grob si trovano in @rinternals{grob-interface}.
1567
1568 La pagina relativa al grob @code{Fingering} elenca le definizioni per l'oggetto
1569 @code{Fingering}.  Per esempio, la pagina dice
1570
1571 @quotation
1572 @code{padding} (dimension, in staff space):
1573
1574 @code{0.5}
1575 @end quotation
1576
1577 @noindent
1578 che significa che il numero verrà tenuto a una distanza di almento 0.5 spazi
1579 rigo dalla testa della nota.
1580
1581 Ogni oggetto di formattazione può avere varie funzioni come elemento
1582 della notazione o tipografico.  Per esempio, l'oggetto Fingering ha
1583 i seguenti aspetti
1584
1585 @itemize
1586 @item
1587 La sua dimensione è indipendente dalla spaziatura orizzontale, diversamente
1588 da legature di portamento o travature.
1589
1590 @item
1591 È un frammento testuale, solitamente molto breve.
1592
1593 @item
1594 Questo frammento di testo viene rappresentato con un tipo di carattere,
1595 diversamente da legature di portamento o travature.
1596
1597 @item
1598 Orizzontalmente, il centro del simbolo deve essere allineato al centro della
1599 testa della nota.
1600
1601 @item
1602 Verticalmente, il simbolo viene posto accanto alla nota e sul rigo.
1603
1604 @item
1605 La posizione verticale viene coordinata anche con altri simboli di apici
1606 o pedici.
1607 @end itemize
1608
1609 Ognuno di questi aspetti viene registrato nelle cosiddette interfacce
1610 (@emph{interface}), che sono elencate in fondo alla
1611 pagina @rinternals{Fingering}:
1612
1613 @c non tradurre
1614 @quotation
1615 This object supports the following interfaces:
1616 @rinternals{item-interface},
1617 @rinternals{self-alignment-interface},
1618 @rinternals{side-position-interface}, @rinternals{text-interface},
1619 @rinternals{text-script-interface}, @rinternals{font-interface},
1620 @rinternals{finger-interface}, and @rinternals{grob-interface}.
1621 @end quotation
1622
1623 Facendo clic su uno di questo collegamenti si arriva alla pagina dell'interfaccia
1624 del rispettivo oggetto.  Ogni interfaccia ha una serie di proprietà.  Alcune
1625 non sono a disposizione dell'utente (@q{Internal properties}), ma altre
1626 possono essere modificate.
1627
1628 Abbiamo parlato dell'oggetto @code{Fingering}, ma in realtà non si tratta
1629 di niente di troppo complesso.  Il file di inizializzazione (vedi
1630 @rlearning{Altre fonti di informazione})
1631 @file{scm/define-grobs.scm} mostra l'anima di questo @qq{oggetto},
1632
1633 @example
1634 (Fingering
1635   . ((padding . 0.5)
1636      (avoid-slur . around)
1637      (slur-padding . 0.2)
1638      (staff-padding . 0.5)
1639      (self-alignment-X . 0)
1640      (self-alignment-Y . 0)
1641      (script-priority . 100)
1642      (stencil . ,ly:text-interface::print)
1643      (direction . ,ly:script-interface::calc-direction)
1644      (font-encoding . fetaText)
1645      (font-size . -5)           ; don't overlap when next to heads.
1646      (meta . ((class . Item)
1647      (interfaces . (finger-interface
1648                     font-interface
1649                     text-script-interface
1650                     text-interface
1651                     side-position-interface
1652                     self-alignment-interface
1653                     item-interface))))))
1654 @end example
1655
1656 @noindent
1657 Come si può vedere, l'oggetto @code{Fingering} non è niente più di un insieme
1658 di impostazioni di variabili e la pagina web nella Guida al funzionamento interno
1659 è generata direttamente da questa definizione.
1660
1661
1662 @node Determinazione della proprietà del grob
1663 @subsection Determinazione della proprietà del grob
1664 @translationof Determining the grob property
1665
1666 @c TODO remove this (it's in the LM)
1667 @c Replace with more factual directions
1668
1669 Volevamo cambiare la posizione del @b{2} in
1670
1671 @lilypond[quote,fragment,verbatim]
1672 c''-2
1673 @end lilypond
1674
1675 Dato che il @b{2} è posizionato verticalmente vicino alla sua nota, dobbiamo
1676 fare delle prove con l'interfaccia associata a questo posizionamento, ovvero
1677 @code{side-position-interface}.  La pagina relativa a questa interfaccia
1678 dice
1679
1680 @c non tradurre
1681 @quotation
1682 @code{side-position-interface}
1683
1684 Position a victim object (this one) next to other objects (the
1685 support).  The property @code{direction} signifies where to put the
1686 victim object relative to the support (left or right, up or down?)
1687 @end quotation
1688
1689 @cindex padding
1690 @noindent
1691 Sotto questa descrizione, la variabile @code{padding} viene descritta come
1692
1693 @c non tradurre
1694 @quotation
1695 @table @code
1696 @item padding
1697 (dimension, in staff space)
1698
1699 Add this much extra space between objects that are next to each other.
1700 @end table
1701 @end quotation
1702
1703 Aumentando il valore di @code{padding}, possiamo spostare la diteggiatura
1704 lontana dalla testa di nota.  Il seguente comando inserisce @qq{tre spazi rigo}
1705 di distanza tra la nota e un segno di diteggiatura:
1706 @example
1707 \once \override Voice.Fingering.padding = #3
1708 @end example
1709
1710 L'inserimento di spazio prima che l'oggetto della diteggiatura venga
1711 creato produce il seguente risultato:
1712
1713 @lilypond[quote,fragment,verbatim]
1714 \once \override Voice.Fingering.padding = #3
1715 c''-2
1716 @end lilypond
1717
1718 In questo caso, il contesto per questa modifica è @code{Voice}.  Come è
1719 scritto nella pagina sull'incisore @rinternals{Fingering_engraver}:
1720
1721 @quotation
1722 Fingering_engraver is part of contexts: @dots{} @rinternals{Voice}
1723 @end quotation
1724
1725
1726 @node Convenzioni sui nomi
1727 @subsection Convenzioni sui nomi
1728 @translationof Naming conventions
1729
1730 È importante conoscere le convenzioni sui nomi.  Ecco una panoramica:
1731
1732 @itemize
1733 @item funzioni scheme: minuscolo-con-trattini (inclusi i nomi di una-parola)
1734 @item funzioni scheme specifiche di LilyPond: ly:plus-scheme-style
1735 @item eventi, classi e proprietà musicali:
1736 come-le-funzioni-scheme
1737 @item interfacce Grob: stile-scheme
1738 @item proprietà del backend: stile-scheme (ma ammette X e Y!)
1739 @item contesti (e EspressioniMusicali e grob): Maiuscolo o CamelCase
1740 @item proprietà di contesto: minuscoloSeguitoDaCamelCase
1741 @item incisori:
1742 Maiuscolo_seguito_da_minuscolo_e_con_trattini_bassi
1743 @end itemize
1744
1745 Domande che aspettano una risposta:
1746 @itemize
1747 @item Quali di queste sono convenzioni e quali sono regole?
1748 @item Quali sono regole del linguaggio sottostante e quali sono specifiche
1749 di LilyPond?
1750 @end itemize
1751
1752 @node Modifica delle proprietà
1753 @section Modifica delle proprietà
1754 @translationof Modifying properties
1755
1756 @c TODO change the menu and subsection node names to use
1757 @c backslash once the new macro to handle the refs
1758 @c is available.  Need to find and change all refs at
1759 @c the same time. -td
1760
1761 @menu
1762 * Panoramica sulla modifica delle proprietà::
1763 * Il comando set::
1764 * Il comando override::
1765 * Il comando tweak::
1766 * set vs override::
1767 * Modifica delle liste associative::
1768 @end menu
1769
1770
1771 @node Panoramica sulla modifica delle proprietà
1772 @subsection Panoramica sulla modifica delle proprietà
1773 @translationof Overview of modifying properties
1774
1775 Ogni contesto è responsabile della creazione di certi tipi di oggetti
1776 grafici.  Le impostazioni usate per la rappresentazione grafica di
1777 questi oggetti sono anch'esse salvate dal contesto.  Cambiando queste
1778 impostazioni, si può alterare l'aspetto degli oggetti.
1779
1780 Ci sono due tipi diversi di proprietà salvate nei contesti: le proprietà
1781 del contesto e quelle del grob.  Le proprietà del contesto sono proprietà
1782 che si applicano al contesto nel suo complesso e regolano il modo in cui
1783 il contesto stesso viene mostrato.  Al contrario, le proprietà del grob
1784 si applicano a tipi di grob specifici che verranno mostrati nel contesto.
1785
1786 I comandi @code{\set} e @code{\unset} vengono usati per cambiare i valori
1787 delle proprietà di contesto.  I comandi @code{\override} e @code{\revert}
1788 servono a cambiare i valori delle proprietà dei grob.
1789
1790
1791 @seealso
1792 Guida al funzionamento interno:
1793 @rinternals{Backend},
1794 @rinternals{All layout objects},
1795 @rinternals{OverrideProperty},
1796 @rinternals{RevertProperty},
1797 @rinternals{PropertySet}.
1798
1799 @knownissues
1800 Il backend non è molto stretto nel controllo del tipo delle proprietà di un
1801 oggetto.  Riferimenti ciclici nei valori Scheme delle proprietà possono
1802 causare attese o crash, o entrambi.
1803
1804
1805
1806 @node Il comando set
1807 @subsection Il comando @code{@bs{}set}
1808 @translationof The set command
1809
1810 @cindex proprietà
1811 @funindex \set
1812 @cindex modifica delle proprietà
1813
1814 Ogni contesto ha un insieme di @emph{proprietà}, variabili contenute in
1815 quel contesto.  Le proprietà di contesto si cambiano col comando @code{\set},
1816 che ha la seguente sintassi:
1817
1818 @example
1819 \set @var{contesto}.@var{proprietà} = #@var{valore}
1820 @end example
1821
1822 @var{valore} è un oggetto Scheme, ecco perché deve essere preceduto dal
1823 carattere @tie{}@code{#}.
1824
1825 Le proprietà dei contesti sono solitamente nominate in
1826 @code{studlyCaps}.  Perlopiù regolano la traduzione dalla musica
1827 alla notazione, per esempio @code{localAlterations} (per determinare
1828 se stampare le alterazioni), o @code{measurePosition} (per determinare
1829 quando stampare una stanghetta).  Le proprietà di contesto possono
1830 cambiare nel tempo nel corso dell'interpretazione di un brano musicale;
1831 @code{measurePosition} ne è un ovvio esempio.  Le proprietà di contesto
1832 si modificano con @code{\set}.
1833
1834 Per esempio, le pause multiple sono combinate in una singola battuta
1835 se la proprietà di contesto @code{skipBars} viene impostata su @code{#t}:
1836
1837 @lilypond[quote,fragment,verbatim]
1838 R1*2
1839 \set Score.skipBars = ##t
1840 R1*2
1841 @end lilypond
1842
1843 Se l'argomento @var{contesto} non viene specificato, la proprietà sarà
1844 impostata nel contesto di base corrente (solitamente @code{ChordNames},
1845 @code{Voice}, @code{TabVoice} o @code{Lyrics}).
1846
1847 @lilypond[quote,fragment,verbatim]
1848 \set Score.autoBeaming = ##f
1849 \relative {
1850   e''8 e e e
1851   \set autoBeaming = ##t
1852   e8 e e e
1853 } \\
1854 \relative {
1855   c''8 c c c c8 c c c
1856 }
1857 @end lilypond
1858
1859 La modifica viene applicata @q{al volo}, durante l'interpretazione della
1860 musica, in modo che l'impostazione abbia effetto soltanto sul secondo
1861 gruppo di note da un ottavo.
1862
1863 Nota che il contesto più inferiore non contiene sempre la proprietà che si
1864 desidera cambiare.  Per esempio, il tentativo di impostare la proprietà
1865 @code{skipBars} del contesto di base predefinito, in questo caso
1866 @code{Voice}, non produrrà alcun risultato, perché skipBars è una
1867 proprietà del contesto @code{Score}.
1868
1869 @lilypond[quote,fragment,verbatim]
1870 R1*2
1871 \set skipBars = ##t
1872 R1*2
1873 @end lilypond
1874
1875 I contesti sono gerarchici, per cui se viene specificato un contesto che ne
1876 racchiude altri, per esempio @code{Staff}, il cambiamento viene applicato
1877 anche a tutti i contesti @code{Voice} del rigo corrente.
1878
1879 @funindex \unset
1880
1881 Il comando @code{\unset}:
1882
1883 @example
1884 \unset @var{contesto}.@var{proprietà}
1885 @end example
1886
1887 @noindent
1888 viene usato per togliere la definizione di @var{proprietà} dal
1889 @var{contesto}.  Questo comando rimuove la definizione solo se
1890 impostata nel @var{contesto}.  Le proprietà impostate nei contesti
1891 più esterni non saranno modificate da un @code{\unset} in un contesto
1892 più interno:
1893
1894 @lilypond[quote,fragment,verbatim]
1895 \set Score.autoBeaming = ##t
1896 \relative {
1897   \unset autoBeaming
1898   e''8 e e e
1899   \unset Score.autoBeaming
1900   e8 e e e
1901 } \\
1902 \relative {
1903   c''8 c c c c8 c c c
1904 }
1905 @end lilypond
1906
1907 Come in @code{\set}, non è necessario specificare l'argomento @var{contesto}
1908 per un contesto di fondo, quindi le due dichiarazioni
1909
1910 @example
1911 \set Voice.autoBeaming = ##t
1912 \set autoBeaming = ##t
1913 @end example
1914
1915 @noindent
1916 sono equivalenti se l'attuale contesto di fondo è @code{Voice}.
1917
1918
1919 @cindex \once
1920 Anteponendo @code{\once} ai comandi @code{\set} o @code{\unset} l'impostazione
1921 verrà applicata soltanto a un singolo momento temporale:
1922
1923 @lilypond[quote,fragment,verbatim]
1924 c''4
1925 \once \set fontSize = #4.7
1926 c''4
1927 c''4
1928 @end lilypond
1929
1930 Una descrizione completa di tutte le proprietà di contesto disponibili si
1931 trova nella Guida al funzionamento interno, vedi
1932 @ifhtml
1933 @rinternals{Tunable context properties}.
1934 @end ifhtml
1935 @ifnothtml
1936 Translation @expansion{} Tunable context properties.
1937 @end ifnothtml
1938
1939 @seealso
1940 Guida al funzionamento interno:
1941 @rinternals{Tunable context properties}.
1942
1943
1944 @node Il comando override
1945 @subsection Il comando @code{\override}
1946 @translationof The override command
1947
1948 @cindex grob, proprietà
1949 @cindex proprietà dei grob
1950 @funindex \override
1951
1952 Esiste un tipo particolare di proprietà di contesto: la descrizione del
1953 grob.  Le descrizioni dei grob vengono nomimate in @code{StudlyCaps}
1954 (iniziando con lettere maiuscole).  Contengono le
1955 @qq{impostazioni predefinite} per un certo tipo di grob, come una
1956 lista associativa.  Consultare @file{scm/define-grobs.scm}
1957 per vedere le impostazioni per ogni descrizione di grob.  Le descrizioni
1958 di grob si modificano con @code{\override}.
1959
1960 La sintassi del comando @code{\override} è
1961
1962 @example
1963 \override [@var{contesto}.]@var{NomeGrob}.@var{proprietà} = #@var{valore}
1964 @end example
1965
1966 Per esempio, possiamo aumentare lo spessore del gambo di una nota
1967 modificando la proprietà @code{thickness} dell'oggetto @code{Stem}:
1968
1969 @lilypond[quote,fragment,verbatim]
1970 c''4 c''
1971 \override Voice.Stem.thickness = #3.0
1972 c''4 c''
1973 @end lilypond
1974
1975 Se non viene specificato il contesto in un @code{\override}, viene usato
1976 il contesto di base:
1977
1978 @lilypond[quote,fragment,verbatim]
1979 \override Staff.Stem.thickness = #3.0
1980 <<
1981   \relative {
1982     e''4 e
1983     \override Stem.thickness = #0.5
1984     e4 e
1985   } \\
1986   \relative {
1987     c''4 c c c
1988   }
1989 >>
1990 @end lilypond
1991
1992 Alcune opzioni modificabili vengono chiamate @q{sottoproprietà} e stanno
1993 dentro le proprietà.  Per cambiarle, usare i comandi nella forma
1994
1995 @example
1996 \override Stem.details.beamed-lengths = #'(4 4 3)
1997 @end example
1998
1999 o, per modificare le estremità degli estensori, usare una forma simile
2000 alle seguenti
2001
2002 @example
2003 \override TextSpanner.bound-details.left.text = #"left text"
2004 \override TextSpanner.bound-details.right.text = #"right text"
2005 @end example
2006
2007 @funindex \revert
2008 @cindex ripristinare le modifiche
2009 @cindex modifiche, ripristinare
2010
2011 Gli effetti di @code{\override} possono essere annullati con @code{\revert}.
2012
2013 La sintassi del comando @code{\revert} è
2014
2015 @example
2016 \revert [@var{contesto}.]@var{NomeGrob}.@var{proprietà}
2017 @end example
2018
2019 Per esempio,
2020
2021 @lilypond[quote,verbatim]
2022 \relative {
2023   c''4
2024   \override Voice.Stem.thickness = #3.0
2025   c4 c
2026   \revert Voice.Stem.thickness
2027   c4
2028 }
2029 @end lilypond
2030
2031 Gli effetti di @code{\override} e @code{\revert} si applicano a tutti i
2032 grob nel contesto interessato da quel momento in poi:
2033
2034 @lilypond[quote,verbatim]
2035 <<
2036   \relative {
2037     e''4
2038     \override Staff.Stem.thickness = #3.0
2039     e4 e e
2040   } \\
2041   \relative {
2042     c''4 c c
2043     \revert Staff.Stem.thickness
2044     c4
2045   }
2046 >>
2047 @end lilypond
2048
2049 @funindex \once
2050 @cindex modificare in un solo istante
2051
2052 Si può usare @code{\once} insieme a @code{\override} o @code{\revert}
2053 per agire solo sul momento corrente:
2054
2055 @lilypond[quote,verbatim]
2056 <<
2057   \relative c {
2058     \override Stem.thickness = #3.0
2059     e''4 e e e
2060   } \\
2061   \relative {
2062     c''4
2063     \once \override Stem.thickness = #3.0
2064     c4 c c
2065   }
2066 >>
2067 @end lilypond
2068
2069 @seealso
2070 Guida al funzionamento interno:
2071 @rinternals{Backend}
2072
2073
2074 @node Il comando tweak
2075 @subsection Il comando @code{\tweak}
2076 @translationof The tweak command
2077
2078 @funindex \tweak
2079 @cindex tweak
2080
2081 Modificare le proprietà dei grob con @code{\override} fa sì che i
2082 cambiamenti siano applicati a tutti i grob in questione in quel
2083 contesto nel momento in cui la modifica viene applicata.  Talvolta,
2084 tuttavia, si può voler applicare le modifiche a un solo grob invece
2085 che a tutti i grob del contesto interessato.  Per farlo si usa il
2086 comando @code{\tweak}, che ha la seguente sintassi:
2087
2088 @example
2089 \tweak [@var{oggetto-formattazione}.]@var{proprietà-grob} @var{valore}
2090 @end example
2091
2092 @var{oggetto-formattazione} è opzionale.
2093 Il comando @code{\tweak} viene applicato all'oggetto musicale che segue
2094 immediatamente @var{valore} nel flusso musicale.
2095
2096 Per un'introduzione alla sintassi e agli usi del comando tweak leggere
2097 @rlearning{Metodi di modifica}.
2098
2099 Quando molti elementi simili sono disposti nello stesso momento musicale,
2100 non è possibile usare il comando @code{\override} per modificarne soltanto
2101 uno.  È in casi come questi che occorre usare il comando @code{\tweak}.
2102 Ecco alcuni elementi che possono apparire più di una volta nello stesso
2103 momento musicale:
2104
2105 @itemize
2106 @item teste di note di un accordo
2107 @item segni di articolazione su una singola nota
2108 @item legature di valore tra note di un accordo
2109 @item parentesi di gruppi irregolari che iniziano nello stesso momento
2110 @end itemize
2111
2112 @cindex accordo, modificare una nota dell'
2113
2114 In questo esempio, il colore di una testa di nota e il tipo di testa di
2115 un'altra nota sono modificati all'interno di un accordo:
2116
2117 @lilypond[verbatim,fragment,quote]
2118 < c''
2119   \tweak color #red
2120   d''
2121   g''
2122   \tweak duration-log #1
2123   a''
2124 > 4
2125 @end lilypond
2126
2127 @code{\tweak} può essere usato per modificare le legature di portamento:
2128
2129 @lilypond[verbatim,quote]
2130 \relative { c'-\tweak thickness #5 ( d e f) }
2131 @end lilypond
2132
2133
2134 Perché il comando @code{\tweak} funzioni, deve trovarsi proprio accanto
2135 all'oggetto al quale deve essere applicato dopo che il file di input è
2136 stato convertito in un flusso musicale.  Modificare un intero accordo
2137 non cambia niente perché il suo evento musicale agisce solo come
2138 contenitore, mentre tutti gli oggetti della formattazione sono creati
2139 dagli eventi interni all'@tie{}@code{EventChord}:
2140
2141 @lilypond[verbatim,fragment,quote]
2142 \tweak color #red c''4
2143 \tweak color #red <c'' e''>4
2144 <\tweak color #red c'' e''>4
2145 @end lilypond
2146
2147 Il semplice comando @code{\tweak} non può essere usato per modificare un
2148 oggetto che non sia creato direttamente dall'input.  In particolare, non
2149 agirà su gambi, travature automatiche o alterazioni, dato che questi sono
2150 generati successivamente dagli oggetti della formattazione di @code{NoteHead}
2151 invece che da elementi musicali nel flusso dell'input.
2152
2153 Tali oggetti della formattazione creati indirettamente possono essere tuttavia
2154 modificati usando una forma del comando @code{\tweak} in cui il nome del grob
2155 è indicato esplicitamente:
2156
2157 @lilypond[fragment,verbatim,quote]
2158 \tweak Stem.color #red
2159 \tweak Beam.color #green c''8 e''
2160 <c'' e'' \tweak Accidental.font-size #-3 ges''>4
2161 @end lilypond
2162
2163 @code{\tweak} non può essere usato per modificare le chiavi o le indicazioni
2164 di tempo, perché queste vengono separate da qualsiasi comando @code{\tweak}
2165 precedente nel flusso dell'input a causa dell'inserimento automatico di ulteriori
2166 elementi richiesti per specificare il contesto.
2167
2168 Si possono usare vari comandi @code{\tweak} prima di un elemento della
2169 notazione e tutti avranno effetto su di esso:
2170
2171 @lilypond[verbatim,fragment,quote]
2172 c'
2173   -\tweak style #'dashed-line
2174   -\tweak dash-fraction #0.2
2175   -\tweak thickness #3
2176   -\tweak color #red
2177   \glissando
2178 f''
2179 @end lilypond
2180
2181 Il flusso musicale generato da una sezione di un file di input, compresi
2182 gli elementi inseriti automaticamente, può essere esaminato, vedi
2183 @rextend{Displaying music expressions}.  Ciò può essere utile nel determinare
2184 cosa può essere modificato da un comando @code{\tweak} o nel valutare come
2185 aggiustare l'input per far sì che un @code{\tweak} sia applicato.
2186
2187 @seealso
2188 Manuale di apprendimento:
2189 @rlearning{Metodi di modifica}.
2190
2191 Estendere LilyPond:
2192 @rextend{Displaying music expressions}.
2193
2194 @knownissues
2195
2196 @cindex \tweak e punti di controllo
2197 @cindex punti di controllo e \tweak
2198
2199 Il comando @code{\tweak} non può essere usato per modificare i punti di
2200 controllo di una sola legatura di valore tra tante in un accordo, se non
2201 quelli della prima legatura incontrata nel file di input.
2202
2203
2204 @node set vs override
2205 @subsection @code{\set} vs. @code{\override}
2206 @translationof set versus override
2207
2208 @funindex \set
2209 @funindex \override
2210 I comandi @code{\set} e @code{\override} manipolano le proprietà
2211 associate ai contesti.  In entrambi i casi, le proprietà
2212 seguono una @emph{gerarchia dei contesti}; proprietà non impostate in
2213 un contesto mostreranno i valori del rispettivo contesto padre.
2214
2215 La durata e il valore di una proprietà di contesto sono dinamici e
2216 disponibili soltanto mentre la musica viene interpretata (ovvero @q{reiterata}).
2217 Nel momento della creazione del contesto, le proprietà sono inizializzate
2218 a partire dalle definizioni corrispondenti (insieme a altre modifiche) di
2219 quel contesto.  Qualsiasi modifica successiva viene fatta con dei comandi
2220 di impostazione della proprietà presenti nella musica stessa.
2221
2222 Le definizioni degli oggetti grafici (o @qq{grob}) sono una categoria
2223 @emph{speciale} di proprietà di contesto, perché la loro struttura e uso
2224 sono diversi da quelli delle normali proprietà di contesto.  Diversamente
2225 da quest'ultime, le definizioni dei grob sono suddivise
2226 in @emph{proprietà dei grob}.
2227
2228 Inoltre, diversamente dalle normali proprietà di contesto, le definizioni dei
2229 grob hanno una loro @q{contabilità} interna usata per tenere traccia delle
2230 loro individuali proprietà e sottoproprietà.  Ciò significa che è possibile
2231 definire queste parti in contesti diversi e avere sempre a disposizione la
2232 definizione complessiva del grob nel momento della sua creazione, assemblata
2233 da tutti i pezzi compresi tra il contesto corrente e i suoi contesti superiori.
2234
2235 Un grob viene solitamente creato da un incisore nel momento in cui l'espressione
2236 musicale viene interpretata e riceve le sue proprietà iniziali dalla definizione
2237 del grob corrente del contesto dell'incisore.  L'incisore (o altre parti del
2238 @q{backend} di LilyPond) può successivamente cambiare (o aggiungere) le
2239 proprietà iniziali del grob, ma ciò non ha effetto sulla definizione di
2240 grob del contesto.
2241
2242 Ciò che LilyPond chiama @q{proprietà del grob} nel contesto delle modifiche a
2243 livello di utente sono in realtà le proprietà della definizione di grob di
2244 un @emph{contesto}.
2245
2246 Le definizioni di grob sono manipolate con @code{\override} e
2247 @code{\revert} e hanno un nome che inizia con una lettera maiuscola
2248 (come @samp{NoteHead}), mentre le normali proprietà di contesto sono
2249 manipolate con @code{\set} e @code{\unset} e il loro nome inizia con
2250 una lettera minuscola.
2251
2252 @cindex tweak, relazione con @code{\override}
2253 @funindex \tweak
2254 @funindex \overrideProperty
2255 I comandi @code{\tweak} e @code{\overrideProperty} modificano le proprietà
2256 dei grob bypassando completamente tutte le proprietà di contesto.
2257 Catturano i grob mentre vengono creati, impostando le loro proprietà per un
2258 evento musicale (@code{\tweak}) o, nel caso di @code{\overrideProperty}, per
2259 una sovrascrittura specifica.
2260
2261
2262 @node Modifica delle liste associative
2263 @subsection Modifica delle liste associative
2264 @translationof Modifying alists
2265
2266 Alcune proprietà configurabili dall'utente sono rappresentate internamente
2267 come @emph{alist} (liste associative), che contengono coppie di
2268 @emph{chiavi} e @emph{valori}.  La struttura di una lista associativa è:
2269
2270 @example
2271 '((@var{chiave1} . @var{valore1})
2272   (@var{chiave2} . @var{valore2})
2273   (@var{chiave3} . @var{valore3})
2274   @dots{})
2275 @end example
2276
2277 Se una lista associativa è una proprietà di un grob o una variabile
2278 @code{\paper}, le sue chiavi possono essere modificate individualmente
2279 senza influenzare altre chiavi.
2280
2281 Per esempio, per ridurre lo spazio tra righi adiacenti in un gruppo di
2282 righi, si usa la proprietà @code{staff-staff-spacing} del grob
2283 @code{StaffGrouper}.  La proprietà è una lista associativa con quattro
2284 chiavi: @code{basic-distance}, @code{minimum-distance},
2285 @code{padding} e @code{stretchability}.  Le impostazioni predefinite
2286 per questa proprietà sono elencate nella sezione @qq{Backend} della
2287 Guida al funzionamento interno (vedi @rinternals{StaffGrouper}):
2288
2289 @example
2290 '((basic-distance . 9)
2291   (minimum-distance . 7)
2292   (padding . 1)
2293   (stretchability . 5))
2294 @end example
2295
2296 Un modo per avvicinare i righi è ridurre il valore della chiave
2297 @code{basic-distance} (@code{9}) perché corrisponda al valore
2298 di @code{minimum-distance} (@code{7}).  Per modificare una chiave
2299 singola individualmente, usare una @emph{dichiarazione annidata}:
2300
2301 @lilypond[quote,verbatim]
2302 % spazio predefinito tra i righi
2303 \new PianoStaff <<
2304   \new Staff { \clef treble c''1 }
2305   \new Staff { \clef bass   c1   }
2306 >>
2307
2308 % spazio ridotto tra i righi
2309 \new PianoStaff \with {
2310   % questa è la dichiarazione annidata
2311   \override StaffGrouper.staff-staff-spacing.basic-distance = #7
2312 } <<
2313   \new Staff { \clef treble c''1 }
2314   \new Staff { \clef bass   c1   }
2315 >>
2316 @end lilypond
2317
2318 Con una dichiarazione annidata si aggiornerà la chiave specificata (come
2319 @code{basic-distance} nell'esempio precedente) senza modificare alcuna
2320 altra chiave già impostata per la stessa proprietà.
2321
2322 Ora immaginiamo di volere che i righi siano più vicini possibile ma senza
2323 sovrapporsi.  Il modo più semplice per fare ciò è impostare tutte e quattro
2324 le chiavi della lista su zero.  Tuttavia, non è necessario inserire quattro
2325 dichiarazioni annidate, una per ogni chiave.  Si può invece ridefinire
2326 completamente la proprietà con una sola dichiarazione, attraverso una
2327 lista associativa:
2328
2329 @lilypond[quote,verbatim]
2330 \new PianoStaff \with {
2331   \override StaffGrouper.staff-staff-spacing =
2332     #'((basic-distance . 0)
2333        (minimum-distance . 0)
2334        (padding . 0)
2335        (stretchability . 0))
2336 } <<
2337   \new Staff { \clef treble c''1 }
2338   \new Staff { \clef bass   c1   }
2339 >>
2340 @end lilypond
2341
2342 Nota bene che qualsiasi chiave non elencata esplicitamente nella
2343 definizione della lista associativa sarà ripristinata al suo valore
2344 @emph{predefinito-quando-non-impostato}.  Nel caso di
2345 @code{staff-staff-spacing}, qualsiasi chiave-valore non impostata
2346 viene ripristinata su zero (eccetto @code{stretchability}, che
2347 prende il valore di @code{basic-distance} quando non è impostata).  Dunque
2348 le due seguenti dichiarazioni sono equivalenti:
2349
2350 @example
2351 \override StaffGrouper.staff-staff-spacing =
2352   #'((basic-distance . 7))
2353
2354 \override StaffGrouper.staff-staff-spacing =
2355   #'((basic-distance . 7)
2356      (minimum-distance . 0)
2357      (padding . 0)
2358      (stretchability . 7))
2359 @end example
2360
2361 Una conseguenza (possibilmente non voluta) di questo approccio è
2362 l'eliminazione di eventuali impostazioni predefinite impostate in
2363 un file di inizializzazione e caricate ogni volta che un file di
2364 input viene compilato.  Nell'esempio precedente le impostazioni
2365 predefinite per @code{padding} e @code{minimum-distance} (definite
2366 in @file{scm/define-grobs.scm}) sono ripristinate ai loro valori
2367 predefiniti-quando-non-impostati (zero per entrambe le chiavi).
2368 La definizione di una proprietà o di una variabile come una lista
2369 associativa (di qualsiasi dimensione) ripristinerà sempre tutte
2370 le chiavi-valori ai loro valori predefiniti-quando-non-impostati.
2371 A meno che questo non sia il risultato voluto, è più sicuro
2372 aggiornare le chiavi-valori individualmente con una dichiarazione
2373 annidata.
2374
2375 @warning{Le dichiarazioni annidate non funzionano per le liste
2376 associative delle proprietà di contesto (come @code{beamExceptions},
2377 @code{keyAlterations}, @code{timeSignatureSettings}, etc.).  Queste
2378 proprietà possono essere modificate soltanto ridefinendole completamente
2379 come liste associative.}
2380
2381
2382 @node Proprietà e concetti utili
2383 @section Proprietà e concetti utili
2384 @translationof Useful concepts and properties
2385
2386
2387 @menu
2388 * Modalità di inserimento::
2389 * Direzione e posizionamento::
2390 * Distanze e misurazioni::
2391 * Dimensioni::
2392 * Proprietà del simbolo del rigo::
2393 * Estensori::
2394 * Visibilità degli oggetti::
2395 * Stili della linea::
2396 * Rotazione degli oggetti::
2397 @end menu
2398
2399 @node Modalità di inserimento
2400 @subsection Modalità di inserimento
2401 @translationof Input modes
2402
2403 Il modo in cui la notazione contenuta in un file di input è interpretata è
2404 determinato dalla modalità di inserimento corrente.
2405
2406 @subsubsubheading Modalità accordo
2407
2408 Viene attivata col comando @code{\chordmode} e fa sì che l'input
2409 sia interpretato con la sintassi della notazione degli accordi, vedi
2410 @ref{Chord notation}.  Gli accordi sono visualizzati come note su
2411 un rigo.
2412
2413 La modalità accordo viene attivata anche col comando @code{\chords}.
2414 Questo crea anche un nuovo contesto @code{ChordNames} e fa sì che
2415 l'input che segue sia interpretato con la sintassi della notazione
2416 degli accordi e visualizzato come nomi di accordo nel contesto
2417 @code{ChordNames}, vedi @ref{Printing chord names}.
2418
2419 @subsubsubheading Modalità percussioni
2420
2421 Viene attivata col comando @code{\drummode} e fa sì che l'input
2422 sia interpretato con la sintassi della notazione delle percussioni,
2423 vedi @ref{Basic percussion notation}.
2424
2425 La modalità percussioni viene attivata anche col comando @code{\drums}.
2426 Questo crea anche un nuovo contesto @code{DrumStaff} e fa sì che
2427 l'input che segue sia interpretato con la sintassi della notazione
2428 delle percussioni e visualizzato come simboli di percussione su un
2429 rigo ritmico, vedi @ref{Basic percussion notation}.
2430
2431 @subsubsubheading Modalità basso continuo
2432
2433 Viene attivata col comando @code{\figuremode} e fa sì che
2434 l'input che segue sia interpretato con la sintassi del basso
2435 continuo, vedi @ref{Entering figured bass}.
2436
2437 La modalità basso continuo viene attivata anche col comando @code{\figures}.
2438 Questo crea anche un nuovo contesto @code{FiguredBass} e fa sì che
2439 l'input che segue sia interpretato con la sintassi del basso continuo
2440 e visualizzato come numeri di basso nel contesto @code{FiguredBass},
2441 vedi @ref{Introduction to figured bass}.
2442
2443 @subsubsubheading Modalità tastiera e intavolatura
2444
2445 Non esistono speciali modalità di inserimento per i simboli della tastiera
2446 e dell'intavolatura (o tablatura).
2447
2448 Per creare diagrammi in intavolatura, inserire note o accordi nella modalità
2449 nota e visualizzarli in un contesto @code{TabStaff}, vedi
2450 @ref{Default tablatures}.
2451
2452 Per creare diagrammi della tastiera sopra un rigo, ci sono due opzioni.
2453 Si può usare il contesto @code{FretBoards} (vedi
2454 @ref{Automatic fret diagrams}) oppure inserirli come testo (markup)
2455 sopra le note usando il comando @code{\fret-diagram} (vedi
2456 @ref{Fret diagram markups}).
2457
2458 @subsubsubheading Modalità testo vocale
2459
2460 Viene attivata col comando @code{\lyricmode} e fa sì che l'input
2461 sia interpretato come sillabe del testo vocale con durate opzionali
2462 e modificatori del testo associato, vedi @ref{Vocal music}.
2463
2464 La modalità testo vocale viene attivata anche col comando @code{\addlyrics}.
2465 Questo crea anche un nuovo contesto @code{Lyrics} e un comando implicito
2466 @code{\lyricsto} che associa il testo vocale che segue con la musica che
2467 lo precede.
2468
2469 @subsubsubheading Modalità testo (markup)
2470
2471 Viene attivata col comando @code{\markup}  e fa sì che l'input
2472 sia interpretato con la sintassi di markup, vedi
2473 @ref{Text markup commands}.
2474
2475 @subsubsubheading Modalità nota
2476
2477 Questa è la modalità predefinita e può essere attivata esplicitamente
2478 col comando @code{\notemode}.  L'input viene interpretato come altezze,
2479 durate, markup, etc. e rappresentato come notazione musicale su un rigo.
2480
2481 Normalmente non è necessario specificare la modalità nota esplicitamente, ma
2482 potrebbe essere utile farlo in alcune situazioni, per esempio se si è in
2483 modalità testo vocale o accordo o qualsiasi altra modalità e si vuole inserire
2484 qualcosa che può essere fatto solo con la sintassi della modalità nota.
2485
2486
2487 @node Direzione e posizionamento
2488 @subsection Direzione e posizionamento
2489 @translationof Direction and placement
2490
2491 Nella composizione tipografica musicale la direzione e il posizionamento di
2492 molti elementi è una questione di gusto.  Per esempio, i gambi delle note
2493 possono essere rivolti in su o in giù; testi, dinamiche e altri segni
2494 espressivi possono essere posti sopra o sotto il rigo; il testo può
2495 essere allineato a sinistra, destra o al centro; etc.  La maggior parte
2496 di queste scelte possono essere lasciate alla decisione di LilyPond, ma in
2497 alcuni casi si può voler forzare una direzione o un posizionamento particolari.
2498
2499 @menu
2500 * Indicatori di direzione delle articolazioni::
2501 * La proprietà direction::
2502 @end menu
2503
2504 @node Indicatori di direzione delle articolazioni
2505 @unnumberedsubsubsec Indicatori di direzione delle articolazioni
2506 @translationof Articulation direction indicators
2507
2508 Per impostazione predefinita alcune direzioni sono sempre in su o sempre in
2509 giù (es: le dinamiche o la corona), mentre altri elementi possono alternare
2510 tra su e giù in base alla direzione del gambo (come le legature di portamento
2511 o gli accenti).
2512
2513 @c TODO Add table showing these
2514
2515 L'azione predefinita può essere modificata anteponendo all'articolazione
2516 un @emph{indicatore di direzione}.  Sono disponbibili tre indicatori
2517 di direzione: @code{^} (ovvero @qq{su}), @code{_} (ovvero @qq{giù})
2518 e @code{-} (ovvero @qq{usa la direzione predefinita}).  L'indicatore di
2519 direzione solitamente può essere omesso, nel qual caso viene supposto @code{-},
2520 ma un indicatore di direzione è @strong{sempre} richiesto prima di
2521
2522 @itemize
2523 @item comandi @code{\tweak}
2524 @item comandi @code{\markup}
2525 @item comandi @code{\tag}
2526 @item stringhe di testo, ovvero -"stringa"
2527 @item istruzioni di diteggiatura, come @w{@code{-1}}
2528 @item scorciatoie delle articolazioni, come @w{@code{-.}}, @w{@code{->}}, @w{@code{--}}
2529 @end itemize
2530
2531 Gli indicatori di direzione hanno effetto soltanto sulla nota vicina:
2532
2533 @lilypond[verbatim,quote]
2534 \relative {
2535   c''2( c)
2536   c2_( c)
2537   c2( c)
2538   c2^( c)
2539 }
2540 @end lilypond
2541
2542 @node La proprietà direction
2543 @unnumberedsubsubsec La proprietà direction
2544 @translationof The direction property
2545
2546 La posizione della direzione di molti oggetti della formattazione è regolata
2547 dalla proprietà @code{direction}.
2548
2549 Il valore della proprietà @code{direction} può essere impostata su @code{1},
2550 ovvero @qq{su} o @qq{sopra}, oppure su @w{@code{-1}}, ovvero @qq{giù} o
2551 @qq{sotto}.  I simboli @code{UP} e @code{DOWN} possono essere usati al
2552 posto di @code{1} e @w{@code{-1}}.  La direzione predefinita può essere
2553 specificata impostando @code{direction} su @code{0} o @code{CENTER}.
2554 Altrimenti, in molti casi esistono comandi predefiniti per specificare la
2555 direzione.  Questo hanno la forma
2556
2557 @example
2558 \xxxUp, \xxxDown o \xxxNeutral
2559 @end example
2560
2561 @noindent
2562 dove @code{\xxxNeutral} significa @qq{usa la direzione predefinita}.
2563 Vedi @rlearning{Oggetti interni al rigo}.
2564
2565 In pochi casi, per esempio l'arpeggio, il valore della proprietà @code{direction}
2566 può specificare se l'oggetto debba essere posizionato a destra o a sinistra
2567 dell'oggetto genitore.  In questo caso @w{@code{-1}} o @code{LEFT} significano
2568 @qq{a sinistra} e @code{1} o @code{RIGHT} significano @qq{a destra}.
2569 @code{0} o @code{CENTER} significano @qq{usa la direzione predefinita}.
2570
2571 @ignore
2572 These all have side-axis set to #X
2573 AmbitusAccidental - direction has no effect
2574 Arpeggio - works
2575 StanzaNumber - not tried
2576 TrillPitchAccidental - not tried
2577 TrillPitchGroup - not tried
2578 @end ignore
2579
2580 Queste indicazioni hanno effetto su tutte le note finché non vengono annullate.
2581
2582 @lilypond[verbatim,quote]
2583 \relative {
2584   c''2( c)
2585   \slurDown
2586   c2( c)
2587   c2( c)
2588   \slurNeutral
2589   c2( c)
2590 }
2591 @end lilypond
2592
2593 Nella musica polifonica, generalmente è meglio specificare una voce esplicita
2594 invece di cambiare la direzione di un oggetto.  Maggiori informazioni
2595 in @ref{Multiple voices}.
2596
2597 @seealso
2598 Manuale di apprendimento:
2599 @rlearning{Oggetti interni al rigo}.
2600
2601 Guida alla notazione:
2602 @ref{Multiple voices}.
2603
2604
2605 @node Distanze e misurazioni
2606 @subsection Distanze e misurazioni
2607 @translationof Distances and measurements
2608
2609 @cindex distances, absolute
2610 @cindex distances, scaled
2611
2612 @funindex \mm
2613 @funindex \cm
2614 @funindex \in
2615 @funindex \pt
2616
2617 Le distanze in LilyPond sono di due tipi: assolute e proporzionali.
2618
2619 Le distanze assolute si usano per specificare i margini, le indentazioni e
2620 altri dettagli della formattazione di pagina; per impostazione predefinita
2621 sono specificate in millimetri.  Le distanze possono essere specificate in
2622 altre unità di misura appendendo alla quantità @code{\mm}, @code{\cm},
2623 @code{\in}@tie{}(inch, ovvero pollici) o @code{\pt}@tie{}(punti, 1/72.27 di
2624 un pollice).  Le distanze della formattazione di pagina possono essere
2625 specificate anche in unità di misura proporzionali (vedi paragrafo seguente)
2626 appendendo @code{\staff-space} alla quantità.  La formattazione di pagina è
2627 trattata dettagliatamente in @ref{Page layout}.
2628
2629 Le distanze proporzionali sono sempre specificate in unità di spazi
2630 rigo o, raramente, mezzo spazio rigo.  Lo spazio rigo è la distanza
2631 tra due linee del rigo adiacenti.  Il valore predfinito può essere
2632 modificato globalmente impostando la dimensione globale del rigo oppure
2633 può essere sovrascritto localmente cambiando la proprietà @code{staff-space}
2634 di @code{StaffSymbol}.  Le distanze proporzionali vengono ridimensionate
2635 automaticamente insieme a qualsiasi cambiamento nella dimensione globale
2636 del rigo o nella proprietà @code{staff-space} di @code{StaffSymbol}, mentre i
2637 tipi di carattere vengono ridimensionati automaticamente soltanto con i
2638 cambiamenti alla dimensione globale del rigo.  Questa permette quindi di
2639 variare facilmente la dimensione complessiva di una partitura.  I metodi
2640 per impostare la dimensione globale del rigo sono descritti in
2641 @ref{Setting the staff size}.
2642
2643 @funindex magstep
2644
2645 Se soltanto una sezione di una partitura deve essere elaborata su una
2646 scala diversa, per esempio una sezione ossia o una nota a piè di pagina,
2647 non si può cambiare la dimensione globale del rigo perché ciò avrebbe
2648 effetto sull'intera partitura.  In questi casi bisogna modificare sia
2649 la proprietà @code{staff-space} di @code{StaffSymbol} sia la dimensione
2650 dei tipi di carattere.  Esiste una funzione Scheme, @code{magstep}, che
2651 permette di convertire una modifica della dimensione del tipo di carattere
2652 nella modifica equivalente in @code{staff-space}.  Questa funzione è spiegata
2653 e esemplificata in @rlearning{Lunghezza e spessore degli oggetti}.
2654
2655 @seealso
2656 Manuale di apprendimento:
2657 @rlearning{Lunghezza e spessore degli oggetti}.
2658
2659 Guida alla notazione:
2660 @ref{Page layout},
2661 @ref{Setting the staff size}.
2662
2663
2664 @node Dimensioni
2665 @subsection Dimensioni
2666 @translationof Dimensions
2667
2668 @cindex dimensioni
2669 @cindex riquadro intorno all'oggetto
2670
2671 Le dimensioni di un oggetto grafico specificano le posizioni delle estremità
2672 sinistra e destra e di quelle inferiore e superiore del riquadro in cui sono
2673 iscritti gli oggetti come distanze dal punto di riferimento degli oggetti in
2674 unità di spazi rigo.  Queste posizioni sono solitamente scritte come due
2675 coppie Scheme.  Per esempio, il comando di testo @code{\with-dimensions} prende
2676 tre argomenti: i primi due sono una coppia Scheme che indica le posizioni
2677 delle estremità sinistra e destra e un'altra coppia Scheme che indica le
2678 posizioni delle estremità inferiore e superiore:
2679
2680 @example
2681 \with-dimensions #'(-5 . 10) #'(-3 . 15) @var{arg}
2682 @end example
2683
2684 Questo comando specifica un riquadro per @var{arg} il cui margine sinistro
2685 si trova a -5, il margine destro a 10, il margine inferiore a -3 e quello
2686 superiore a 15, tutti misurati a partire dal punto di riferimento degli
2687 oggetti in unità di spazi rigo.
2688
2689 @seealso
2690 Guida alla notazione:
2691 @ref{Distances and measurements}.
2692
2693
2694 @node Proprietà del simbolo del rigo
2695 @subsection Proprietà del simbolo del rigo
2696 @translationof Staff symbol properties
2697
2698 @cindex cambiare il simbolo del rigo
2699 @cindex disegnare il simbolo del rigo
2700 @cindex simbolo del rigo, impostazione del
2701
2702 @c TODO Extend or remove this section.  See also NR 1.6.2 Staff symbol
2703 @c      Need to think of uses for these properties.  Eg 'line-positions
2704 @c      is used in a snippet to thicken centre line.
2705 @c      If retained, add @ref to here in 1.6.2  -td
2706
2707 La posizione verticale e il numero delle linee del rigo possono essere
2708 definiti contemporaneamente.  Come mostra l'esempio seguente, le posizioni
2709 delle note non sono influenzate dalle posizioni delle linee del rigo.
2710
2711 @warning{La proprietà @code{'line-positions} sovrascrive la proprietà
2712 @code{'line-count}.  Il numero di linee del rigo è definito implicitamente
2713 dal numero di elementi nella lista di valori per @code{'line-positions}.}
2714
2715 @lilypond[verbatim,quote]
2716 \new Staff \with {
2717   \override StaffSymbol.line-positions = #'(7 3 0 -4 -6 -7)
2718 }
2719 \relative { a4 e' f b | d1 }
2720 @end lilypond
2721
2722 La larghezza di un rigo può essere modificata.  Le unità sono spazi
2723 rigo.  La spaziatura degli oggetti dentro il rigo non è influenzata
2724 da questa impostazione.
2725
2726 @lilypond[verbatim,quote]
2727 \new Staff \with {
2728   \override StaffSymbol.width = #23
2729 }
2730 \relative { a4 e' f b | d1 }
2731 @end lilypond
2732
2733
2734 @node Estensori
2735 @subsection Estensori
2736 @translationof Spanners
2737
2738 Molti oggetti della notazione musicale si estendono per varie note o addirittura
2739 per molte battute.  Ne sono un esempio le legature di portamento, le travature,
2740 le parentesi dei gruppi irregolari, quelle delle volte delle ripetizioni, i
2741 crescendi, i trilli e i glissandi.  Tali oggetti vengono chiamati @qq{estensori}
2742 (o spanner, in inglese) e hanno delle proprietà speciali per regolare il loro
2743 aspetto e comportamento.  Alcune di queste proprietà sono comuni a tutti gli
2744 estensori; altre sono limitate a un sottoinsieme di estensori.
2745
2746 Tutti gli estensori supportano l'interfaccia @code{spanner-interface}.  Ma pochi,
2747 essenzialmente quelli che disegnano una linea dritta tra due oggetti, supportano
2748 anche l'interfaccia @code{line-spanner-interface}.
2749
2750 @menu
2751 * Uso di spanner-interface::
2752 * Uso di line-spanner-interface::
2753 @end menu
2754
2755 @node Uso di spanner-interface
2756 @unnumberedsubsubsec Uso di @code{spanner-interface}
2757 @translationof Using the spanner-interface
2758
2759 Questa interfaccia fornisce due proprietà che si applicano a vari estensori.
2760
2761 @subsubsubheading La proprietà @code{minimum-length}
2762
2763 La lunghezza minima dell'estensore è specificata dalla proprietà
2764 @code{minimum-length}.  Aumentando questa si aumenta necessariamente
2765 anche la spaziatura delle note comprese tra le due estremità.
2766 Tuttavia questa modifica non ha effetto su molti estensori, perché
2767 la loro lunghezza è determinata da altre considerazioni.  Di seguito
2768 vengono mostrati alcuni esempi in cui è in funzione.
2769
2770 @lilypond[verbatim,quote,fragment]
2771 a'~ a'
2772 a'
2773 % aumenta la lunghezza della legatura di valore
2774 -\tweak minimum-length #5
2775 ~ a'
2776 @end lilypond
2777
2778 @lilypond[verbatim,quote]
2779 \relative \compressMMRests {
2780   a'1
2781   R1*23
2782   % aumenta la lunghezza della misura con pausa
2783   \once \override MultiMeasureRest.minimum-length = #20
2784   R1*23
2785   a1
2786 }
2787 @end lilypond
2788
2789 @lilypond[verbatim,quote]
2790 \relative {
2791   a' \< a a a \!
2792   % aumenta la lunghezza della forcella
2793   \override Hairpin.minimum-length = #20
2794   a \< a a a \!
2795 }
2796 @end lilypond
2797
2798 Questa modifica può essere usata anche per aumentare la lunghezza delle
2799 legature di portamento e di frase:
2800
2801 @lilypond[verbatim,quote]
2802 \relative {
2803   a'( g)
2804   a
2805   -\tweak minimum-length #5
2806   ( g)
2807
2808   a\( g\)
2809   a
2810   -\tweak minimum-length #5
2811   \( g\)
2812 }
2813 @end lilypond
2814
2815 Per alcuni oggetti della formattazione, la proprietà @code{minimum-length}
2816 diventa effettiva solo se viene richiamata esplicitamente la procedura
2817 @code{set-spacing-rods}.  Per farlo, la proprietà @code{springs-and-rods}
2818 deve essere impostata su @code{ly:spanner::set-spacing-rods}.  Per esempio,
2819 la lunghezza minima di un glissando cambia solo quando si imposta la
2820 proprietà @code{springs-and-rods}:
2821
2822 @lilypond[verbatim,fragment,quote]
2823 % default
2824 e' \glissando c''
2825
2826 % non funziona da sola
2827 \once \override Glissando.minimum-length = #20
2828 e' \glissando c''
2829
2830 % funziona solo quando entrambe le modifiche sono presenti
2831 \once \override Glissando.minimum-length = #20
2832 \once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
2833 e' \glissando c''
2834 @end lilypond
2835
2836 Lo stesso vale per l'oggetto @code{Beam}:
2837
2838 @lilypond[verbatim,fragment,quote]
2839 % non funziona da sola
2840 \once \override Beam.minimum-length = #20
2841 e'8 e' e' e'
2842
2843 % funziona solo quando entrambe le modifiche sono presenti
2844 \once \override Beam.minimum-length = #20
2845 \once \override Beam.springs-and-rods = #ly:spanner::set-spacing-rods
2846 e'8 e' e' e'
2847 @end lilypond
2848
2849 @subsubsubheading La proprietà @code{to-barline}
2850
2851 La seconda proprietà utile di @code{spanner-interface} è
2852 @code{to-barline}.  Il valore predefinito (vero) fa sì che le forcelle e
2853 gli altri estensori che terminano sulla prima nota di una misura si estendano
2854 invece fino alla stanghetta immediatamente precedente.  Se impostata su falso,
2855 l'estensore andrà oltre la stanghetta e terminerà sulla nota stessa:
2856
2857 @lilypond[verbatim,quote]
2858 \relative {
2859   a' \< a a a a \! a a a \break
2860   \override Hairpin.to-barline = ##f
2861   a \< a a a a \! a a a
2862 }
2863 @end lilypond
2864
2865 Questa proprietà non funziona con tutti gli estensori.  Per esempio,
2866 impostandola su @code{#t} non si produce alcun effetto su legature di
2867 portamento o di frase, o su altri estensori per i quali terminare sulla
2868 stanghetta non avrebbe senso.
2869
2870
2871 @node Uso di line-spanner-interface
2872 @unnumberedsubsubsec Uso di @code{line-spanner-interface}
2873 @translationof Using the line-spanner-interface
2874
2875 Gli oggetti che supportano l'interfaccia @code{line-spanner-interface} comprendono:
2876
2877 @itemize
2878 @item @code{DynamicTextSpanner}
2879 @item @code{Glissando}
2880 @item @code{TextSpanner}
2881 @item @code{TrillSpanner}
2882 @item @code{VoiceFollower}
2883 @end itemize
2884
2885 La routine responsabile del disegno di questi estensori è
2886 @code{ly:line-spanner::print}.  Essa determina la posizione esatta
2887 delle due estremità e disegna una linea tra di esse, nello stile
2888 richiesto.  Le posizioni delle due estremità dell'estensore sono
2889 calcolate al volo, ma è possibile  sovrascrivere le loro coordinate
2890 Y.  Le proprietà da specificare sono annidate di due livelli nella
2891 gerarchia della proprietà, ma la sintassi del comando @code{\override}
2892 è piuttosto semplice:
2893
2894 @lilypond[quote,fragment,verbatim]
2895 e''2 \glissando b'
2896 \once \override Glissando.bound-details.left.Y = #3
2897 \once \override Glissando.bound-details.right.Y = #-2
2898 e''2 \glissando b'
2899 @end lilypond
2900
2901 Le unità di misura della proprietà @code{Y} sono gli spazi rigo
2902 (@code{staff-space}), con la linea centrale del rigo che è il
2903 punto zero.  Per il glissando, questo è il valore per @code{Y} alla
2904 coordinata X che corrisponde al punto centrale della testa di ogni
2905 nota, se si immagina che la linea si estenda fino a là.
2906
2907 Se @code{Y} non è impostato, il valore viene calcolato dalla posizione
2908 verticale del punto di attacco corrispondente dell'estensore.
2909
2910 In caso di un'interruzione di linea, i valori per le estremità sono
2911 specificati dalle sottoliste @code{left-broken} e @code{right-broken}
2912 di @code{bound-details}.  Per esempio:
2913
2914 @lilypond[ragged-right,fragment,verbatim,quote]
2915 \override Glissando.breakable = ##t
2916 \override Glissando.bound-details.right-broken.Y = #-3
2917 c''1 \glissando \break
2918 f''1
2919 @end lilypond
2920
2921
2922 Altre proprietà delle sottoliste @code{left} e @code{right} della proprietà
2923 @code{bound-details} possono essere modificate nello stesso modo di @code{Y}:
2924
2925 @table @code
2926 @item Y
2927 Questa imposta la coordinata Y dell'estremità, che si sposta di un certo
2928 numero di @code{staff-space} dalla linea centrale del rigo.  Per impostazione
2929 predefinita, è il centro dell'oggetto a cui è associato, dunque un glissando
2930 punta al centro verticale della testa di nota.
2931
2932 Nel caso di estensori orizzontali, come quelli del testo e del trillo,
2933 il suo valore è fisso su 0.
2934
2935 @item attach-dir
2936 Questa determina dove la linea inizia e termina nella direzione X,
2937 relativa all'oggetto a cui è associato.  Quindi un valore di @w{@code{-1}} (o
2938 @code{LEFT}) fa sì che la linea inizi/termini sul lato sinistro della testa
2939 della nota a cui è attaccata.
2940
2941 @item X
2942 Questa è la coordinata X assoluta dell'estremità.  Viene solitamente calcolata
2943 al volo e sovrascriverla produce solitamente un effetto poco utile.
2944
2945 @item stencil
2946 Gli estensori della linea possono avere dei simboli all'inizio o alla fine,
2947 contenuti in questa sottoproprietà.  Questa proprietà è per uso interno;
2948 si raccomanda di usare @code{text} al suo posto.
2949
2950 @item text
2951 Questo è un testo markup che viene valutato per produrre lo stampo (stencil,
2952 in inglese).  Viene usato per mettere @i{cresc.}, @i{tr} e altro testo su
2953 estensori orizzontali.
2954
2955 @lilypond[quote,ragged-right,fragment,verbatim]
2956 \override TextSpanner.bound-details.left.text
2957    = \markup { \small \bold Rall. }
2958 \relative { c''2\startTextSpan b c a\stopTextSpan }
2959 @end lilypond
2960
2961 @item stencil-align-dir-y
2962 @item stencil-offset
2963 Se non si imposta una di queste proprietà, lo stampo viene messo semplicemente
2964 all'estremità, centrato sulla linea, come definito nelle sottoproprietà
2965 @code{X} e @code{Y}.  Impostando @code{stencil-align-dir-y} o
2966 @code{stencil-offset} il simbolo si sposterà verticalmente sul margine
2967 rispetto all'estremità della linea:
2968
2969 @lilypond[quote,fragment,verbatim]
2970 \override TextSpanner.bound-details.left.stencil-align-dir-y = #-2
2971 \override TextSpanner.bound-details.right.stencil-align-dir-y = #UP
2972
2973 \override TextSpanner.bound-details.left.text = #"ggg"
2974 \override TextSpanner.bound-details.right.text = #"hhh"
2975
2976 \relative { c'4^\startTextSpan c c c \stopTextSpan }
2977 @end lilypond
2978
2979 Nota bene che valori negativi spostano il testo in @emph{su}, contrariamente
2980 a quanto si potrebbe pensare, perché un valore di @w{@code{-1}} o
2981 @code{DOWN} fa sì che si allinei il margine @emph{inferiore} del testo con
2982 la linea dell'estensore.  Un valore di @code{1} o @code{UP} allinea il margine
2983 superiore del testo con la linea dell'estensore.
2984
2985 @item arrow
2986 Impostando questa sottoproprietà su @code{#t} viene generata la punta di una
2987 freccia a un'estremità della linea.
2988
2989 @item padding
2990 Questa sottoproprietà regola lo spazio tra l'estremità della linea specificata
2991 e la fine reale.  Senza padding, un glissando inizia e termina nel centro della
2992 testa di ogni nota.
2993
2994 @end table
2995
2996 La funzione musicale @code{\endSpanners} termina prematuramente l'estensore
2997 che inizia nella nota immediatamente seguente.  Viene terminato esattamente
2998 dopo una nota o alla stanghetta seguente se @code{to-barline} è impostato
2999 su vero e c'è una stanghetta prima della nota successiva.
3000
3001 @lilypond[verbatim,quote,ragged-right]
3002 \relative c'' {
3003   \endSpanners
3004   c2 \startTextSpan c2 c2
3005   \endSpanners
3006   c2 \< c2 c2
3007 }
3008 @end lilypond
3009
3010 Quando si usa @code{\endSpanners} non è necessario chiudere
3011 \startTextSpan con \stopTextSpan, né è necessario chiudere le
3012 forcelle con @code{\!}.
3013
3014 @seealso
3015 Guida al funzionamento interno:
3016 @rinternals{TextSpanner},
3017 @rinternals{Glissando},
3018 @rinternals{VoiceFollower},
3019 @rinternals{TrillSpanner},
3020 @rinternals{line-spanner-interface}.
3021
3022
3023 @node Visibilità degli oggetti
3024 @subsection Visibilità degli oggetti
3025 @translationof Visibility of objects
3026
3027 @cindex objects, visibility of
3028 @cindex grobs, visibility of
3029 @cindex visibility of objects
3030
3031 Esistono quattro modi principali per regolare la visibilità degli oggetti della
3032 formattazione: si può togliere il loro stampo, possono essere resi trasparenti,
3033 possono essere colorati di bianco o si può sovrascrivere la loro proprietà
3034 @code{break-visibility}.  Le prime tre sono valide per tutti gli oggetti
3035 della formattazione; l'ultimo solo per alcuni, gli oggetti che possono essere
3036 @emph{interrotti}, o spezzati, (break, in inglese).
3037 Il Manuale di apprendimento contiene un'introduzione a queste quattro tecniche
3038 in @rlearning{Visibilità e colore degli oggetti}.
3039
3040 Esistono anche altre tecniche che sono specifiche di alcuni oggetti della
3041 formattazione.  Queste sono trattate in @ref{Special considerations}.
3042
3043 @menu
3044 * Soppressione dello stampo::
3045 * Rendere gli oggetti trasparenti::
3046 * Dipingere gli oggetti di bianco::
3047 * Uso di break-visibility::
3048 * Considerazioni speciali::
3049 @end menu
3050
3051
3052 @node Soppressione dello stampo
3053 @unnumberedsubsubsec Soppressione dello stampo
3054 @translationof Removing the stencil
3055
3056 @cindex stencil, soppressione
3057 @cindex stampo, soppressione
3058 @funindex \omit
3059
3060 Tutti gli oggetti della formattazione hanno una proprietà @code{stencil} (in
3061 italiano, stampo).  Per impostazione predefinita questa è impostata sulla
3062 funzione specifica che disegna quell'oggetto.  Se questa proprietà viene
3063 sovrascritta e impostata su @code{#f}, non verrà richiamata alcuna funzione
3064 e l'oggetto non verrà disegnato.  L'azione predefinita può essere ripristinata
3065 con @code{\revert}.
3066
3067 @lilypond[quote,fragment,verbatim]
3068 a1 a
3069 \override Score.BarLine.stencil = ##f
3070 a a
3071 \revert Score.BarLine.stencil
3072 a a a
3073 @end lilypond
3074
3075 Questa operazione piuttosto comune ha una scorciatoia, @code{\omit}:
3076
3077 @lilypond[quote,fragment,verbatim]
3078 a1 a
3079 \omit Score.BarLine
3080 a a
3081 \undo \omit Score.BarLine
3082 a a a
3083 @end lilypond
3084
3085
3086 @node Rendere gli oggetti trasparenti
3087 @unnumberedsubsubsec Rendere gli oggetti trasparenti
3088 @translationof Making objects transparent
3089
3090 @cindex transparenti, rendere gli oggetti
3091 @funindex \hide
3092
3093 Tutti gli oggetti della formattazione hanno una proprietà @code{transparent}
3094 la cui impostazione predefinita è @code{#f} (falso).  Se impostata su @code{#t}
3095 (vero), l'oggetto occupa sempre lo spazio ma è reso invisibile.
3096
3097 @lilypond[quote,fragment,verbatim]
3098 a'4 a'
3099 \once \override NoteHead.transparent = ##t
3100 a' a'
3101 @end lilypond
3102
3103 Questa operazione piuttosto comune ha una scorciatoia, @code{\hide}:
3104
3105 @lilypond[quote,fragment,verbatim]
3106 a'4 a'
3107 \once \hide NoteHead
3108 a' a'
3109 @end lilypond
3110
3111
3112 @node Dipingere gli oggetti di bianco
3113 @unnumberedsubsubsec Dipingere gli oggetti di bianco
3114 @translationof Painting objects white
3115
3116 @cindex oggetti, colorare
3117 @cindex colorare gli oggetti
3118 @cindex strati
3119 @cindex ordine di stampa
3120 @cindex sovrascrivere gli oggetti
3121 @cindex oggetti, sovrascrivere
3122 @cindex grob, sovrascrivere
3123
3124 Tutti gli oggetti della formattazione hanno una proprietà del colore il cui
3125 valore predefinito è @code{black} (nero).  Se questa viene sovrascritta con
3126 @code{white} (bianco) l'oggetto non sarà più distinguibile dallo sfondo.  Tuttavia
3127 se l'oggetto attraversa altri oggetti, il colore dei punti di contatto saranno
3128 determinati dall'ordine in cui sono disegnati, e ciò potrebbe lasciare
3129 un'immagine @qq{spettrale} dell'oggetto bianco, come mostrato qui:
3130
3131 @lilypond[quote,fragment,verbatim]
3132 \override Staff.Clef.color = #white
3133 a'1
3134 @end lilypond
3135
3136 Ciò può essere evitato cambiando l'ordine di stampa degli oggetti.
3137 Tutti gli oggetti della formattazione hanno una proprietà @code{layer}
3138 (strato) che deve essere impostata su un numero intero.
3139 Gli oggetti col valore più basso di @code{layer} sono disegnati
3140 per primi, poi vengono disegnati quelli con valori via via più
3141 alti, dunque gli oggetti con valori più alti stanno sopra gli
3142 oggetti con valori più bassi.  Per impostazione predefinita alla
3143 maggior parte degli oggetti viene assegnato un valore di @code{layer}
3144 pari a @code{1}, sebbene ad alcuni oggetti, tra cui @code{StaffSymbol} e
3145 @code{BarLine}, sia assegnato un valore di @code{0}.  L'ordine con cui
3146 vengono stampati oggetti con lo stesso valore di @code{layer} è indeterminato.
3147
3148 Nell'esempio precedente la chiave bianca, con un valore predefinito di
3149 @code{layer} di @code{1}, viene disegnato dopo le linee del rigo (il cui
3150 valore predefinito di @code{layer} è @code{0}), dunque sta sopra di esse.
3151 Per cambiare tale comportamento, all'oggetto @code{Clef} deve essere assegnato
3152 un valore di @code{layer} inferiore, per esempio @w{@code{-1}}, in modo che
3153 venga disegnato prima:
3154
3155 @lilypond[quote,fragment,verbatim]
3156 \override Staff.Clef.color = #white
3157 \override Staff.Clef.layer = #-1
3158 a'1
3159 @end lilypond
3160
3161 @node Uso di break-visibility
3162 @unnumberedsubsubsec Uso di break-visibility
3163 @translationof Using break-visibility
3164
3165 @c TODO Add making other objects breakable
3166
3167 @cindex break-visibility
3168
3169 La maggior parte degli oggetti della formattazione sono stampati una
3170 volta sola, ma alcuni come le stanghette, le chiavi, le indicazioni
3171 di tempo e le armature di chiave possono dover essere stampate
3172 due volte quando si verifica un'interruzione di linea -- una volta al
3173 termine della linea e di nuovo all'inizio della linea successiva.
3174 Tali oggetti, chiamati @emph{spezzabili}, (dall'inglese breakable)
3175 hanno una proprietà, @code{break-visibility}, per regolare
3176 la loro visibilità nelle tre posizioni in cui potrebbero apparire:
3177 all'inizio di una linea, in mezzo a una linea se vengono modificati
3178 e al termine di una linea se un cambiamento ha luogo lì.
3179
3180 Per esempio, l'indicazione di tempo viene stampata all'inizio della
3181 prima linea, ma da nessuna altra parte a meno che non cambi e allora
3182 verrà stampata nel punto in cui il cambiamento ha luogo.  Se tale
3183 cambiamento si verifica al termine di una linea, la nuova indicazione
3184 di tempo verrà stampata all'inizio della linea successiva e un'indicazione
3185 di tempo di precauzione verrà stampata anche al termine della linea precedente.
3186
3187 Tale comportamento è regolato dalla proprietà @code{break-visibility}, che
3188 è spiegata in @rlearning{Visibilità e colore degli oggetti}.  Questa proprietà
3189 prende un vettore di tre valori booleani che, in ordine, determinano se
3190 l'oggetto è stampato al termine, in mezzo o all'inizio di una linea.  O, per
3191 essere più precisi, prima di un'interruzione di linea, dove non c'è
3192 un'interruzione di linea oppure dopo un'interruzione di linea.
3193
3194 Altrimenti, queste otto combinazoni possono essere specificate da
3195 funzioni predefinite, definite in @file{scm/output-lib.scm},
3196 dove le ultime tre colonne indicano se gli oggetti della formattazione
3197 saranno visibili nelle posizioni mostrate nell'intestazione delle colonne:
3198
3199 @multitable {@code{begin-of-line-invisible}} {@code{#(#t #t #t)}} {Prima} {Senza} {Dopo}
3200 @headitem Funzione                   @tab Forma                  @tab Prima di      @tab Senza           @tab Dopo
3201 @headitem                            @tab vettoriale             @tab interruzione  @tab interruzione    @tab interruzione
3202
3203 @item @code{all-visible}             @tab @code{#(#t #t #t)}     @tab sì            @tab sì              @tab sì
3204 @item @code{begin-of-line-visible}   @tab @code{#(#f #f #t)}     @tab no            @tab no              @tab sì
3205 @item @code{center-visible}          @tab @code{#(#f #t #f)}     @tab no            @tab sì              @tab no
3206 @item @code{end-of-line-visible}     @tab @code{#(#t #f #f)}     @tab sì            @tab no              @tab no
3207 @item @code{begin-of-line-invisible} @tab @code{#(#t #t #f)}     @tab sì            @tab sì              @tab no
3208 @item @code{center-invisible}        @tab @code{#(#t #f #t)}     @tab sì            @tab no              @tab sì
3209 @item @code{end-of-line-invisible}   @tab @code{#(#f #t #t)}     @tab no            @tab sì              @tab sì
3210 @item @code{all-invisible}           @tab @code{#(#f #f #f)}     @tab no            @tab no              @tab no
3211 @end multitable
3212
3213 Le impostazioni predefinite di @code{break-visibility} dipendono dall'oggetto
3214 della formattazione.  La tabella seguente mostra tutti gli oggetti rilevanti
3215 che sono influenzati da @code{break-visibility} e l'impostazione predefinita
3216 di questa proprietà:
3217
3218 @multitable @columnfractions .3 .3 .4
3219
3220 @headitem Oggetto formattazione   @tab Contesto abituale  @tab Impostazione predefinita
3221
3222 @c omit Ambitus as it appears not to be affected by break-visibility -td
3223 @c @item @code{Ambitus}          @tab as specified   @tab @code{begin-of-line-visible}
3224 @item @code{BarLine}             @tab @code{Score}          @tab calcolato
3225 @item @code{BarNumber}           @tab @code{Score}          @tab @code{begin-of-line-visible}
3226 @c omit the following item until it can be explained -td
3227 @c @item @code{BreakAlignGroup}  @tab @code{Score}          @tab calculated
3228 @item @code{BreathingSign}       @tab @code{Voice}          @tab @code{begin-of-line-invisible}
3229 @item @code{Clef}                @tab @code{Staff}          @tab @code{begin-of-line-visible}
3230 @item @code{Custos}              @tab @code{Staff}          @tab @code{end-of-line-visible}
3231 @item @code{DoublePercentRepeat} @tab @code{Voice}          @tab @code{begin-of-line-invisible}
3232 @item @code{KeyCancellation}     @tab @code{Staff}          @tab @code{begin-of-line-invisible}
3233 @item @code{KeySignature}        @tab @code{Staff}          @tab @code{begin-of-line-visible}
3234 @c omit LeftEdge until it can be explained -td
3235 @c @item @code{LeftEdge}         @tab @code{Score}          @tab @code{center-invisible}
3236 @item @code{ClefModifier}       @tab @code{Staff}          @tab @code{begin-of-line-visible}
3237 @item @code{RehearsalMark}       @tab @code{Score}          @tab @code{end-of-line-invisible}
3238 @item @code{TimeSignature}       @tab @code{Staff}          @tab @code{all-visible}
3239
3240 @end multitable
3241
3242 L'esempio successivo mostra l'uso della forma vettoriale per regolare la
3243 visibilità delle stanghette:
3244
3245 @lilypond[quote,verbatim,ragged-right]
3246 \relative {
3247   f'4 g a b
3248   f4 g a b
3249   % Toglie la stanghetta al termine della linea corrente
3250   \once \override Score.BarLine.break-visibility = ##(#f #t #t)
3251   \break
3252   f4 g a b
3253   f4 g a b
3254 }
3255 @end lilypond
3256
3257 Sebbene tutti i componenti del vettore usati per sovrascrivere
3258 @code{break-visibility} debbano essere presenti, non tutti sono
3259 funzionanti con qualsiasi oggetto della formattazione, e alcune
3260 combinazioni potrebbero perfino dare errore.  Esistono le seguenti
3261 limitazioni:
3262
3263 @itemize @bullet
3264 @item Non è possibile stampare le stanghette all'inizio di una linea.
3265
3266 @item Un numero di battuta non può essere stampato all'inizio della @emph{prima}
3267 linea a meno che non sia impostato per essere diverso da @code{1}.
3268
3269 @item Clef -- vedi la sezione successiva.
3270
3271 @item Le ripetizioni percentuali doppie sono o @emph{tutte stampate} o
3272 @emph{tutte soppresse}.
3273 Usare @code{begin-of-line-invisible} per stampare e @code{all-invisible} per
3274 sopprimere.
3275
3276 @item Key signature -- vedi la sezione successiva.
3277
3278 @item ClefModifier -- vedi la sezione successiva.
3279 @end itemize
3280
3281
3282 @node Considerazioni speciali
3283 @unnumberedsubsubsec Considerazioni speciali
3284 @translationof Special considerations
3285
3286 @subsubsubheading Visibilità dopo un cambio esplicito
3287
3288 @cindex armatura di chiave, visibilità dopo un cambio esplicito
3289 @cindex explicitKeySignatureVisibility
3290 @cindex chiave, visibilità dopo un cambio esplicito
3291 @cindex explicitClefVisibility
3292
3293 La proprietà @code{break-visibility} controlla la visibilità delle
3294 armature di chiave e dei cambi di chiave solo all'inizio delle linee,
3295 ovvero dopo un'interruzione di linea.  Non ha effetto sulla visibilità
3296 dell'armatura di chiave o della chiave che seguono un cambio esplicito
3297 dell'armatura o della chiave all'interno o alla fine di una linea.
3298 Nell'esempio seguente l'armatura di chiave che segue il cambio esplicito
3299 a Si bemolle maggiore è ancora visibile, anche se @code{all-invisible}
3300 è impostata.
3301
3302 @lilypond[quote,verbatim,ragged-right]
3303 \relative {
3304   \key g \major
3305   f'4 g a b
3306   % Tentativo di eliminazione di tutte le armature di chiave
3307   \override Staff.KeySignature.break-visibility = #all-invisible
3308   \key bes \major
3309   f4 g a b
3310   \break
3311   f4 g a b
3312   f4 g a b
3313 }
3314 @end lilypond
3315
3316 La visibilità di questi cambi espliciti di armatura e di chiave è
3317 controllata dalle proprietà @code{explicitKeySignatureVisibility} e
3318 @code{explicitClefVisibility}.  Sono equivalenti alla proprietà
3319 @code{break-visibility} e prendono entrambe come argomento un vettore
3320 di tre booleani o le funzioni predefinite elencate prima, proprio
3321 come @code{break-visibility}.  Entrambe le proprietà appartengono al
3322 contesto Staff, non agli oggetti della formattazione stessi, dunque
3323 si impostano col comando @code{\set}.  La loro impostazione predefinita
3324 è @code{all-visible}.  Queste proprietà regolano solo la visibilità
3325 di armature di chiave e chiavi risultanti da cambi espliciti e non
3326 quelli all'inizio delle linee; per eliminare questi ultimi bisogna
3327 sempre sovrascrivere @code{break-visibility} nell'oggetto appropriato.
3328
3329 @lilypond[quote,verbatim,ragged-right]
3330 \relative {
3331   \key g \major
3332   f'4 g a b
3333   \set Staff.explicitKeySignatureVisibility = #all-invisible
3334   \override Staff.KeySignature.break-visibility = #all-invisible
3335   \key bes \major
3336   f4 g a b \break
3337   f4 g a b
3338   f4 g a b
3339 }
3340 @end lilypond
3341
3342 @subsubsubheading Visibilità dei bequadri
3343
3344 Per eliminare i bequadri stampati su un cambio di chiave esplicito,
3345 impostare la proprietà del contesto Staff @code{printKeyCancellation}
3346 su @code{#f}:
3347
3348 @lilypond[quote,verbatim,ragged-right]
3349 \relative {
3350   \key g \major
3351   f'4 g a b
3352   \set Staff.explicitKeySignatureVisibility = #all-invisible
3353   \set Staff.printKeyCancellation = ##f
3354   \override Staff.KeySignature.break-visibility = #all-invisible
3355   \key bes \major
3356   f4 g a b \break
3357   f4 g a b
3358   f4 g a b
3359 }
3360 @end lilypond
3361
3362 Con queste modifiche restano solo le alterazioni accanto alle note per
3363 indicare il cambio di armatura.
3364
3365 Nota bene che quando si cambia l'armatura su Do@tie{}maggiore o La@tie{}minore
3366 i bequadri sono l'@emph{unica} indicazione del cambio di chiave.  In questo
3367 caso impostando @code{printKeyCancellation} su @code{#f} non si ottiene
3368 alcun effetto:
3369
3370 @lilypond[quote,verbatim,ragged-right]
3371 \relative {
3372   \key g \major
3373   f'4 g a b
3374   \set Staff.explicitKeySignatureVisibility = #all-invisible
3375   \set Staff.printKeyCancellation = ##f
3376   \key c \major
3377   f4 g a b \break
3378   f4 g a b
3379   f4 g a b
3380 }
3381 @end lilypond
3382
3383 Per sopprimere i bequadri anche quando la tonalità passa a
3384 Do@tie{}maggiore o La@tie{}minore, sovrascrivere la
3385 visibilità del grob @code{KeyCancellation}:
3386
3387 @lilypond[quote,verbatim,ragged-right]
3388 \relative {
3389   \key g \major
3390   f'4 g a b
3391   \set Staff.explicitKeySignatureVisibility = #all-invisible
3392   \override Staff.KeyCancellation.break-visibility = #all-invisible
3393   \key c \major
3394   f4 g a b \break
3395   f4 g a b
3396   f4 g a b
3397 }
3398 @end lilypond
3399
3400 @c TODO Add visibility of cautionary accidentals before notes
3401
3402 @subsubsubheading Battute automatiche
3403
3404 @cindex automaticBars
3405 @cindex stanghette, soppressione
3406
3407 In un caso particolare, la stampa delle stanghette può essere disattivata
3408 impostando la proprietà @code{automaticBars} nel contesto Score.  Se impostata
3409 su @code{#f}, le stanghette non verranno stampate automaticamente; devono
3410 invece essere create esplicitamente con un comando @code{\bar}.  Diversamente
3411 dal comando predefinito @code{\cadenzaOn}, le misure vengono comunque contate.
3412 La generazione delle battute riprenderà in base a quel conteggio se questa
3413 proprietà viene poi impostata su @code{#t}.  Se impostata su @code{#f}, le
3414 interruzioni di linea possono trovarsi solo su comandi @code{\bar} espliciti.
3415
3416 @c TODO Add example
3417
3418 @subsubsubheading Chiavi trasposte
3419
3420 @cindex chiavi trasposte, visibilità delle
3421 @cindex visibilità delle chiavi trasposte
3422 @cindex chiavi, visibilità della trasposizione
3423
3424 Il piccolo simbolo di trasposizione sulle chiavi trasposte è prodotto
3425 dall'oggetto di formattazione @code{ClefModifier}.  La sua visibilità
3426 è ereditata automaticamente dall'oggetto @code{Clef}, dunque non è necessario
3427 applicare una modifica di @code{break-visibility} agli oggetti @code{ClefModifier}
3428 per sopprimere i simboli di trasposizione per le chiavi invisibili.
3429
3430 Per cambi di chiave espliciti, la proprietà @code{explicitClefVisibility}
3431 regola sia il simbolo della chiave che qualsiasi simbolo di trasposizione
3432 ad esso associato.
3433
3434 @seealso
3435 Manuale di apprendimento:
3436 @rlearning{Visibilità e colore degli oggetti}.
3437
3438
3439 @node Stili della linea
3440 @subsection Stili della linea
3441 @translationof Line styles
3442
3443 Alcune indicazioni esecutive, come @i{rallentando}, @i{accelerando} e
3444 @i{trilli} sono scritte in forma testuale e sono estese per varie misure
3445 tramite delle linee, talvolta puntate o ondulate.
3446
3447 Queste usano tutte le stesse routine del glissando per disegnare i
3448 testi e le linee, dunque il loro comportamento viene modificato nello
3449 stesso modo.  Viene fatto con un estensore, e la routine responsabile
3450 del disegno degli estensori è @code{ly:line-spanner::print}.  Questa
3451 routine determina la posizione esatta dei due @i{punti di estensione} e
3452 disegna una linea tra loro, nello stile richiesto.
3453
3454 Ecco un esempio che mostra i vari stili di linea disponibili, e come
3455 impostarli..
3456
3457 @lilypond[ragged-right,verbatim,quote]
3458 \relative {
3459   d''2 \glissando d'2
3460   \once \override Glissando.style = #'dashed-line
3461   d,2 \glissando d'2
3462   \override Glissando.style = #'dotted-line
3463   d,2 \glissando d'2
3464   \override Glissando.style = #'zigzag
3465   d,2 \glissando d'2
3466   \override Glissando.style = #'trill
3467   d,2 \glissando d'2
3468 }
3469 @end lilypond
3470
3471 I punti delle estremità dell'estensore sono calcolati al volo per ogni
3472 oggetto grafico, ma è possibile sovrascriverli:
3473
3474 @c TODO Complete
3475 @lilypond[ragged-right,verbatim,quote]
3476 \relative {
3477   e''2 \glissando f
3478   \once \override Glissando.bound-details.right.Y = #-2
3479   e2 \glissando f
3480 }
3481 @end lilypond
3482
3483 Il valore di @code{Y} è impostato su @w{@code{-2}} per l'estremità
3484 destra.  Quella sinistra può essere aggiustata ugualmente specificando
3485 @code{left} invece di @code{right}.
3486
3487 Se @code{Y} non è impostata, il valore è calcolato a partire dalla posizione
3488 verticale dei punti di attacco sinistro e destro dell'estensore.
3489
3490 Sono possibili altre modifiche degli estensori; maggiori dettagli in
3491 @ref{Spanners}.
3492
3493
3494 @node Rotazione degli oggetti
3495 @subsection Rotazione degli oggetti
3496 @translationof Rotating objects
3497
3498 Sia gli oggetti della formattazione che il testo compreso in un blocco markup
3499 possono essere ruotati di qualsiasi angolo in quasi qualsiasi punto, ma il
3500 metodo per farlo cambia.
3501
3502 @menu
3503 * Rotazione degli oggetti della formattazione::
3504 * Rotazione del testo::
3505 @end menu
3506
3507 @node Rotazione degli oggetti della formattazione
3508 @unnumberedsubsubsec Rotazione degli oggetti della formattazione
3509 @translationof Rotating layout objects
3510
3511 @cindex rotazione degli oggetti
3512 @cindex oggetti, rotazione
3513
3514 Tutti gli oggetti della formattazione che supportano l'interfaccia
3515 @code{grob-interface} possono essere ruotati impostando la loro
3516 proprietà @code{rotation}.  Questa prende come argomento una lista
3517 di tre elementi: l'angolo di rotazione in senso antiorario, e le
3518 coordinate x e y del punto relativo al punto di riferimento dell'oggetto
3519 intorno al quale si deve eseguire la rotazione.  L'angolo di rotazione
3520 è specificato in gradi e le coordinate in spazi rigo.
3521
3522 L'angolo di rotazione e le coordinate del punto di rotazione devono essere
3523 determinate per prova e errore.
3524
3525 @cindex forcelle angolate
3526
3527 Esistono solo poche situazioni in cui la rotazione degli oggetti della
3528 formattazione è utile; l'esempio seguente ne mostra uno:
3529
3530 @lilypond[quote,fragment,verbatim]
3531 g4\< e' d'' f''\!
3532 \override Hairpin.rotation = #'(20 -1 0)
3533 g4\< e' d'' f''\!
3534 @end lilypond
3535
3536
3537 @node Rotazione del testo
3538 @unnumberedsubsubsec Rotazione del testo
3539 @translationof Rotating markup
3540
3541 Tutto il testo in un blocco @code{\markup} può essere ruotato di qualsiasi
3542 angolo facendolo precedere dal comando @code{\rotate}.  Il comando prende
3543 due argomenti: l'angolo di rotazione in gradi in senso antiorario e il
3544 testo da ruotare.  Le estensioni del testo non sono ruotate: prendono il
3545 loro valore dagli estremi delle coordinate x e y del testo ruotato.
3546 Nell'esempio seguente la proprietà @code{outside-staff-priority} del testo
3547 è impostata su @code{#f} per disabilitare l'elusione automatica delle collisioni,
3548 che spingerebbe parte del testo troppo in alto.
3549
3550 @lilypond[quote,fragment,verbatim]
3551 \override TextScript.outside-staff-priority = ##f
3552 g4^\markup { \rotate #30 "un Sol" }
3553 b^\markup { \rotate #30 "un Si" }
3554 des'^\markup { \rotate #30 "un Re bemolle" }
3555 fis'^\markup { \rotate #30 "un Fa diesis" }
3556 @end lilypond
3557
3558
3559 @node Ritocchi avanzati
3560 @section Ritocchi avanzati
3561 @translationof Advanced tweaks
3562
3563 Questa sezione discute i vari approcci che permettono di migliorare
3564 l'aspetto delle partiture.
3565
3566 @menu
3567 * Allineamento degli oggetti::
3568 * Raggruppamento verticale dei grob::
3569 * Modifica degli stampi::
3570 * Modifica delle forme::
3571 * Modifica degli estensori spezzati::
3572 * Contenitori unpure-pure::
3573 @end menu
3574
3575 @seealso
3576 Manuale di apprendimento:
3577 @rlearning{Modifica dell'output},
3578 @rlearning{Altre fonti di informazione}.
3579
3580 Guida alla notazione:
3581 @ref{Explaining the Internals Reference},
3582 @ref{Modifying properties}.
3583
3584 Estendere LilyPond:
3585 @rextend{Interfaces for programmers}.
3586
3587 File installati:
3588 @file{scm/define-grobs.scm}.
3589
3590 Frammenti:
3591 @rlsr{Tweaks and overrides}.
3592
3593 Guida al funzionamento interno:
3594 @rinternals{All layout objects}.
3595
3596
3597 @node Allineamento degli oggetti
3598 @subsection Allineamento degli oggetti
3599 @translationof Aligning objects
3600
3601 Gli oggetti grafici che supportano l'interfaccia @code{self-alignment-interface}
3602 e/o l'interfaccia @code{side-position-interface} possono essere allineati a un
3603 oggetto disposto precedentemente in vari modi.  L'elenco di questi oggetti è
3604 consultabile in @rinternals{self-alignment-interface} e
3605 @rinternals{side-position-interface}.
3606
3607 Tutti gli oggetti grafici hanno un punto di riferimento, un'estensione
3608 orizzontale e una verticale.  L'estensione orizzontale è una coppia di
3609 numeri che determina gli spostamenti dal punto di riferimento dei margini
3610 sinistro e destro (gli spostamenti a sinistra sono negativi).  L'estensione
3611 verticale è una coppia di numeri che determina lo spostamento dal punto di
3612 riferimento ai margini inferiore e superiore (gli spostamenti in giù sono
3613 negativi).
3614
3615 La posizione di un oggetto su un rigo è dato dai valori delle proprietà
3616 @code{X-offset} e @code{Y-offset}.  Il valore di @code{X-offset} dà lo
3617 spostamento dalla coordinata X del punto di riferimento dell'oggetto genitore,
3618 mentre il valore di @code{Y-offset} dà lo spostamento dalla linea centrale del
3619 rigo.  I valori di @code{X-offset} e @code{Y-offset} possono essere impostati
3620 direttamente oppure possono essere impostati per essere calcolati dalle
3621 procedure in modo da consentire un allineamento con l'oggetto genitore.
3622
3623 @warning{Molti oggetti hanno speciali questioni di posizionamento che fanno
3624 sì che qualsiasi impostazione di @code{X-offset} o @code{Y-offset} sia
3625 ignorata o modificata, anche se l'oggetto supporta l'interfaccia
3626 @code{self-alignment-interface}.  Sovrascrivendo le proprietà @code{X-offset}
3627 o @code{Y-offset} su un valore fisso la rispettiva proprietà
3628 @code{self-alignment} verrà ignorata.}
3629
3630 Per esempio, un'alterazione può essere riposizionata verticalmente impostando
3631 @code{Y-offset} ma qualsiasi modifica di @code{X-offset} non avrà effetto.
3632
3633 I segni di chiamata possono essere allineati con oggetti spezzabili come
3634 stanghette, simboli di chiave, simboli di indicazione di tempo e armature
3635 di chiave.  Ci sono proprietà speciali elencate nell'interfaccia
3636 @code{break-aligned-interface} per posizionare i segni di chiamata su tali
3637 oggetti.
3638
3639 @seealso
3640 Guida alla notazione:
3641 @ref{Using the break-alignable-interface}.
3642
3643 Estendere LilyPond:
3644 @rextend{Callback functions}.
3645
3646 @menu
3647 * Impostazione diretta di X-offset e Y-offset::
3648 * Uso di side-position-interface::
3649 * Uso di self-alignment-interface::
3650 * Uso di break-alignable-interface::
3651 @end menu
3652
3653 @node Impostazione diretta di X-offset e Y-offset
3654 @unnumberedsubsubsec Impostazione diretta di @code{X-offset} e @code{Y-offset}
3655 @translationof Setting X-offset and Y-offset directly
3656
3657 Si possono assegnare valori numerici alle prietà @code{X-offset} e
3658 @code{Y-offset} di molti oggetti.  L'esempio seguente mostra tre note
3659 con la posizione predefinita della diteggiatura e le posizioni con @code{X-offset}
3660 e @code{Y-offset} modificate.
3661
3662 @lilypond[verbatim,fragment,quote]
3663 a'-3
3664 a'
3665 -\tweak X-offset #0
3666 -\tweak Y-offset #0
3667 -3
3668 a'
3669 -\tweak X-offset #-1
3670 -\tweak Y-offset #1
3671 -3
3672 @end lilypond
3673
3674 @c TODO write more
3675
3676 @node Uso di side-position-interface
3677 @unnumberedsubsubsec Uso di @code{side-position-interface}
3678 @translationof Using the side-position-interface
3679
3680 Un oggetto che supporta l'interfaccia @code{side-position-interface} può
3681 essere posizionato accanto al suo oggetto genitore in modo che i margini
3682 indicati dei due oggetti si tocchino.  L'oggetto può essere posizionato
3683 sopra, sotto, a destra o a sinistra dell'oggetto genitore.  Quest'ultimo
3684 non può essere specificato; è invece determinato dall'ordine degli elementi
3685 nel flusso di input.  La maggior parte degli oggetti ha la testa di nota
3686 associata come oggetto genitore.
3687
3688 I valori delle proprietà @code{side-axis} e @code{direction} determinano
3689 dove l'oggetto deve essere posizionato, in questo modo:
3690
3691 @c TODO add an example of each to the table
3692
3693 @multitable @columnfractions .3 .3 .3
3694 @headitem @code{side-axis}  @tab @code{direction}  @tab
3695 @headitem proprietà         @tab proprietà         @tab Posizionamento
3696
3697 @item     @code{0}          @tab @code{-1}         @tab sinistra
3698 @item     @code{0}          @tab @code{1}          @tab destra
3699 @item     @code{1}          @tab @code{-1}         @tab sotto
3700 @item     @code{1}          @tab @code{1}          @tab sopra
3701
3702 @end multitable
3703
3704 Quando @code{side-axis} è @code{0}, @code{X-offset} deve essere impostato
3705 sulla procedura @code{ly:side-position-interface::x-aligned-side}.
3706 Questa procedura restituirà il valore corretto di @code{X-offset} per
3707 porre l'oggetto al lato sinistro o destro dell'oggetto genitore in base
3708 al valore di @code{direction}.
3709
3710 Quando @code{side-axis} è @code{1}, @code{Y-offset} deve essere impostato
3711 sulla procedura @code{ly:side-position-interface::y-aligned-side}.
3712 Questa procedura restituirà il valore corretto di @code{Y-offset} per
3713 porre l'oggetto sopra o sotto l'oggetto genitore in base al valore di
3714 @code{direction}.
3715
3716 @c TODO Add examples
3717
3718 @node Uso di self-alignment-interface
3719 @unnumberedsubsubsec Uso di @code{self-alignment-interface}
3720 @translationof Using the self-alignment-interface
3721
3722 @subsubsubheading Autoallineamento orizzontale degli oggetti
3723
3724 L'allineamento orizzontale di un oggetto che supporta l'interfaccia
3725 @code{self-alignment-interface} è regolato dal valore della proprietà
3726 @code{self-alignment-X}, purché la proprietà @code{X-offset} dell'oggetto
3727 sia impostata su @code{ly:self-alignment-interface::x-aligned-on-self}.
3728 A @code{self-alignment-X}  può essere assegnato qualsiasi numero reale,
3729 in unità di metà del totale dell'estensione X dell'oggetto.  Valori
3730 negativi spostano l'oggetto a destra, valori positivi lo spostano a
3731 sinistra.  Un valore di @code{0} centra l'oggetto sul punto di riferimento
3732 del suo oggetto genitore, un valore di @w{@code{-1}} allinea il margine
3733 sinistro dell'oggetto al punto di riferimento del suo genitore, e un
3734 valore di @code{1} allinea il margine destro dell'oggetto al punto di
3735 riferimento del suo genitore.  I simboli @code{LEFT}, @code{CENTER} e
3736 @code{RIGHT} possono essere usati al posto dei valori @w{@code{-1}},
3737 @code{0} e @code{1}, rispettivamente.
3738
3739 Normalmente si usa il comando @code{\override} per modificare il valore
3740 di @code{self-alignment-X}, ma il comando @code{\tweak} può essere utile
3741 per allineare separatamente varie annotazioni su una singola nota:
3742
3743 @lilypond[quote,verbatim,fragment]
3744 a'
3745 -\tweak self-alignment-X #-1
3746 ^"allineato a sinistra"
3747 -\tweak self-alignment-X #0
3748 ^"allineato al centro"
3749 -\tweak self-alignment-X #RIGHT
3750 ^"allineato a destra"
3751 -\tweak self-alignment-X #-2.5
3752 ^"allineato ancora più a destra"
3753 @end lilypond
3754
3755 @subsubsubheading Autoallineamento verticale degli oggetti
3756
3757 Gli oggetti possono essere allineati verticalmente in un modo analogo
3758 al loro allineamento orizzontale se la proprietà @code{Y-offset} è
3759 impostata su @code{ly:self-alignment-interface::y-aligned-on-self}.
3760 Tuttavia altri meccanismi sono spesso implicati nell'allineamento
3761 verticale: il valore di @code{Y-offset} è solo una delle variabili
3762 da prendere in considerazione.  Ciò potrebbe rendere complicato
3763 l'aggiustamento del valore di alcuni oggetti.
3764 Le unità sono soltanto la metà dell'estensione verticale dell'oggetto, che
3765 è di solito piuttosto piccola, dunque potrebbero essere necessari grossi
3766 numeri.  Un valore di @w{@code{-1}} allinea il margine inferiore dell'oggetto
3767 al punto di riferimento dell'oggetto genitore, un valore di @code{0}
3768 allinea il centro dell'oggetto al punto di riferimento del genitore,
3769 e un valore di @code{1} allinea il margine superiore dell'oggetto
3770 al punto di riferimento del genitore.  I simboli @code{DOWN},
3771 @code{CENTER} e @code{UP} possono essere usati al posto di @w{@code{-1}},
3772 @code{0} e @code{1}, rispettivamente.
3773
3774 @subsubsubheading Autoallineamento degli oggetti in entrambe le direzioni
3775
3776 Impostando sia @code{X-offset} che @code{Y-offset}, un oggetto può essere
3777 allineato in entrambe le direzioni simultaneamente.
3778
3779 L'esempio seguente mostra come aggiustare un segno di diteggiatura in modo
3780 che stia vicino alla testa di nota.
3781
3782 @lilypond[quote,verbatim,fragment]
3783 a'
3784 -\tweak self-alignment-X #0.5  % sposta orizzontalmente a sinistra
3785 -\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
3786 -\tweak self-alignment-Y #-1  % sposta verticalmente in su
3787 -3  % terzo dito
3788 @end lilypond
3789
3790 @ignore
3791 @unnumberedsubsubsec Using the @code{aligned-on-parent} procedures
3792
3793 @c Cannot document as they do not seem to operate consistently on all objects -td
3794 @c TODO investigate further
3795
3796 The @code{aligned-on-parent} procedures are used in the same way
3797 as the @code{aligned-on-self} procedures, they difference being
3798 that they permit an object to be aligned with the @emph{edges} of
3799 the parent rather than the parent's reference point.  The following
3800 example shows the difference:
3801
3802 @c TODO Add example
3803
3804 @lilypond[verbatim,quote]
3805 @end lilypond
3806
3807 @end ignore
3808
3809 @ignore
3810 @unnumberedsubsubsec Using the @code{centered-on-parent} procedures
3811
3812 @c Cannot document as they do not seem to operate consistently on all objects -td
3813 @c TODO investigate further
3814
3815 @end ignore
3816
3817 @c TODO The align-interface, BassFigureAlignment and VerticalAlignment
3818
3819 @node Uso di break-alignable-interface
3820 @unnumberedsubsubsec Uso di @code{break-alignable-interface}
3821 @translationof Using the break-alignable-interface
3822
3823 @cindex allineamento sugli oggetti
3824 @cindex break-align-symbols
3825
3826 I segni di chiamata e i numeri di battuta possono essere allineati con oggetti
3827 della notazione diversi dalle stanghette.  Questi oggetti comprendono
3828 @code{ambitus}, @code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar},
3829 @code{left-edge}, @code{key-cancellation}, @code{key-signature} e
3830 @code{time-signature}.
3831
3832 Ogni tipo di oggetto ha il suo punto di riferimento predefinito, al quale i
3833 segni di chiamata sono allineati:
3834
3835 @lilypond[verbatim,quote,fragment]
3836 % Il segno di chiamata sarà allineato al margine destro della chiave
3837 \override Score.RehearsalMark.break-align-symbols = #'(clef)
3838 \key a \major
3839 \clef treble
3840 \mark "↓"
3841 e'1
3842 % Il segno di chiamata sarà allineato al margine sinistro dell'indicazione di tempo
3843 \override Score.RehearsalMark.break-align-symbols = #'(time-signature)
3844 \key a \major
3845 \clef treble
3846 \time 3/4
3847 \mark "↓"
3848 e'2.
3849 % Il segno di chiamata sarà centrato sul segno di respiro
3850 \override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
3851 \key a \major
3852 \clef treble
3853 \time 4/4
3854 e'1
3855 \breathe
3856 \mark "↓"
3857 @end lilypond
3858
3859 Si può specificare un elenco dei possibili oggetti a cui allineare.  Se
3860 alcuni oggetti sono invisibili in quel punto a causa dell'impostazione
3861 di @code{break-visibility} o di impostazioni esplicite della visibilità
3862 di tonalità e chiavi, il segno di chiamata o il numero di battuta viene
3863 allineato al primo oggetto dell'elenco che è visibile.  Se nessun oggetto
3864 dell'elenco è visibile, l'oggetto è allineato alla stanghetta.  Se la
3865 stanghetta è invisibile, l'oggetto viene allineato al punto in cui si
3866 dovrebbe trovare la stanghetta.
3867
3868 @lilypond[verbatim,quote,fragment]
3869 % Il segno di chiamata sarà allineato al margine destro dell'armatura di chiave
3870 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
3871 \key a \major
3872 \clef treble
3873 \mark "↓"
3874 e'1
3875 % Il segno di chiamata sarà allineato al margine destro della chiave
3876 \set Staff.explicitKeySignatureVisibility = #all-invisible
3877 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
3878 \key a \major
3879 \clef bass
3880 \mark "↓"
3881 gis,1
3882 % Il segno di chiamata sarà centrato sopra la stanghetta
3883 \set Staff.explicitKeySignatureVisibility = #all-invisible
3884 \set Staff.explicitClefVisibility = #all-invisible
3885 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
3886 \key a \major
3887 \clef treble
3888 \mark "↓"
3889 e'1
3890 @end lilypond
3891
3892 L'allineamento del segno di chiamata relativo all'oggetto della notazione
3893 può essere modificato, come evidenziato nell'esempio seguente.  In una
3894 partitura con molteplici righi, questa impostazione deve essere fatta per
3895 tutti i righi.
3896
3897 @lilypond[verbatim,quote,fragment]
3898 % Il segno di chiamata sarà allineato al margine destro dell'armatura di chiave
3899 \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
3900 \key a \major
3901 \clef treble
3902 \time 4/4
3903 \mark "↓"
3904 e'1
3905 % Il segno di chiamata sarà centrato sopra l'armatura di chiave
3906 \once \override Score.KeySignature.break-align-anchor-alignment = #CENTER
3907 \mark "↓"
3908 \key a \major
3909 e'1
3910 % Il segno di chiamata sarà allineato al margine sinistro dell'armatura di chiave
3911 \once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
3912 \key a \major
3913 \mark "↓"
3914 e'1
3915 @end lilypond
3916
3917 Il segno di chiamata può anche essere spostato a destra o a sinistra del
3918 margine sinistro di una quantità arbitraria.  Le unità sono gli spazi rigo:
3919
3920 @lilypond[verbatim,quote,fragment]
3921 % Il segno di chiamata sarà allineato al margine sinistro dell'armatura di chiave
3922 % e poi spostato a destra di 3.5 spazi rigo
3923 \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
3924 \once \override Score.KeySignature.break-align-anchor = #3.5
3925 \key a \major
3926 \mark "↓"
3927 e'1
3928 % Il segno di chiamata sarà allineato al margine sinistro dell'armatura di chiave
3929 % e poi spostato a sinistra di 2 spazi rigo
3930 \once \override Score.KeySignature.break-align-anchor = #-2
3931 \key a \major
3932 \mark "↓"
3933 e'1
3934 @end lilypond
3935
3936
3937 @node Raggruppamento verticale dei grob
3938 @subsection Raggruppamento verticale dei grob
3939 @translationof Vertical grouping of grobs
3940
3941 @c TODO Expand this section
3942
3943 I grob VerticalAlignment e VerticalAxisGroup lavorano insieme.
3944 VerticalAxisGroup raggruppa insieme diversi grob come Staff, Lyrics,
3945 etc.  VerticalAlignment quindi allinea verticalmente i diversi grob
3946 raggruppati insieme da VerticalAxisGroup.  Di solito è presente un
3947 solo VerticalAlignment per partitura ma ogni Staff, Lyrics, etc. ha
3948 il suo VerticalAxisGroup.
3949
3950
3951 @node Modifica degli stampi
3952 @subsection Modifica degli stampi
3953 @translationof Modifying stencils
3954
3955 Tutti gli oggetti della formattazione hanno una proprietà @code{stencil} che
3956 fa parte dell'interfaccia @code{grob-interface}.  Per impostazione predefinita,
3957 questa proprietà è solitamente impostata su una funzione specifica per l'oggetto
3958 per cui è concepita in modo da creare il simbolo che lo rappresenta nell'output.
3959 Per esempio, l'impostazione standard della proprietà @code{stencil} dell'oggetto
3960 @code{MultiMeasureRest} è @code{ly:multi-measure-rest::print}.
3961
3962 Il simbolo standard di qualsiasi oggetto può essere sostituito modificando la
3963 proprietà @code{stencil} perché faccia riferimento a una procedura diversa
3964 e scritta appositamente.  Ciò richiede una profonda conoscenza del funzionamento
3965 interno di LilyPond, ma esiste un modo più semplice che spesso è in grado di
3966 produrre risultati accettabili.
3967
3968 Si tratta di impostare la proprietà @code{stencil} sulla procedura che stampa
3969 testo -- @code{ly:text-interface::print} -- e aggiungere una proprietà
3970 @code{text} all'oggetto impostato per contenere il testo markup che produce
3971 il simbolo richiesto.  Grazie alla flessibilità di markup, si può ottenere
3972 molto -- vedi in particolare @ref{Graphic notation inside markup}.
3973
3974 L'esempio seguente illustra questa procedura cambiando il simbolo della testa
3975 di nota con una croce iscritta in un cerchio.
3976
3977 @lilypond[verbatim,quote]
3978 XinO = {
3979   \once \override NoteHead.stencil = #ly:text-interface::print
3980   \once \override NoteHead.text = \markup {
3981     \combine
3982       \halign #-0.7 \draw-circle #0.85 #0.2 ##f
3983       \musicglyph #"noteheads.s2cross"
3984   }
3985 }
3986 \relative {
3987   a' a \XinO a a
3988 }
3989 @end lilypond
3990
3991 Qualsiasi glifo del tipo di carattere Feta può essere passato al comando
3992 markup @code{\musicglyph} -- vedi @ref{The Emmentaler font}.
3993
3994 I file @file{EPS} e i comandi Postscript possono essere inseriti entrambi nel
3995 @c traduzione libera di "inline"
3996 corpo del testo con i comandi markup @code{\epsfile} e @code{\postscript} --
3997 vedi @ref{Graphic}.
3998
3999
4000 @seealso
4001 Guida alla notazione:
4002 @ref{Graphic notation inside markup},
4003 @ref{Formatting text},
4004 @ref{Text markup commands},
4005 @ref{The Emmentaler font},
4006 @ref{Graphic}.
4007
4008
4009 @node Modifica delle forme
4010 @subsection Modifica delle forme
4011 @translationof Modifying shapes
4012
4013 @menu
4014 * Modifica di legature di valore e di portamento::
4015 @end menu
4016
4017 @node Modifica di legature di valore e di portamento
4018 @unnumberedsubsubsec Modifica di legature di valore e di portamento
4019 @translationof Modifying ties and slurs
4020
4021 @cindex legature di portamento, modificare
4022 @cindex legature di valore, modificare
4023 @cindex curve Bézier, punti di controllo
4024 @cindex punti di controllo, curve Bézier
4025 @cindex Bézier, curve, punti di controllo
4026
4027 Le legature, siano esse di valore (@code{Tie}), di portamento (@code{Slur}),
4028 di frase (@code{PhrasingSlur}), di laisser-vibrer (@code{LaissezVibrerTie})
4029 o di valore ripetute (@code{RepeatTie}), sono tutte disegnate come curve Bézier
4030 di terzo ordine.  Se la forma della legatura di valore o di frase che viene
4031 calcolata automaticamente non è ottimale, può essere modificata manualmente
4032 in due modi:
4033
4034 @enumerate a
4035 @item
4036 specificando di quanto spostare i punti di controllo della curva
4037 Bézier calcolata automaticamente, o
4038
4039 @item
4040 specificando esplicitamente le posizioni dei quattro punti di controllo
4041 richiesti per definire la curva desiderata.
4042 @end enumerate
4043
4044 Entrambi i metodi sono spiegati di seguito.  Il primo metodo è più adatto
4045 se sono necessari solo piccoli aggiustamenti alla curva; il secondo può
4046 essere migliore per creare curve che riguardano soltanto una singola nota.
4047
4048 @subsubsubheading Curve Bézier cubiche
4049
4050 Le curve Bézier di terzo ordine o cubiche sono definite da quattro punti
4051 di controllo.  Il primo e il quarto punto di controllo sono esattamente
4052 i punti di inizio e fine della curva.  I due punti intermedi definiscono
4053 la forma.  Sul web si trovano delle animazioni che mostrano come viene
4054 disegnata la curva, ma la seguente descrizione può comunque essere utile.
4055 La curva inizia dal primo punto di controllo e si dirige verso il secondo,
4056 piegandosi gradualmente per arrivare al terzo e poi al quarto, arrivando
4057 lì direttamente dal terzo punto di controllo.  La curva è contenuta
4058 interamente nel quadrilatero definito dai quattro punti di controllo.
4059 Traslazioni, rotazioni e ridimensionamenti dei punti di controllo risultano
4060 tutti esattamente nelle stesse operazioni sulla curva.
4061
4062 @subsubsubheading Specificare gli spostamenti dai punti di controllo correnti
4063
4064 @cindex disegnare legature di valore e di portamento
4065 @funindex \shape
4066
4067 In questo esempio la disposizone automatica della legatura di valore non è
4068 ottimale, e @code{\tieDown} non sarebbe di aiuto.
4069
4070 @lilypond[verbatim,quote]
4071 <<
4072   { e'1~ 1 }
4073 \\
4074   \relative { r4 <g' c,> <g c,> <g c,> }
4075 >>
4076 @end lilypond
4077
4078 Cambiando i punti di controllo della legatura con @code{\shape} consente di
4079 evitare le collisioni.
4080
4081 La sintassi di @code{\shape} è
4082
4083 @example
4084 [-]\shape @var{spostamenti} @var{elemento}
4085 @end example
4086
4087 Questo comando riposiziona i punti di controllo di @var{elemento} di quanto
4088 indicato da @var{spostamenti}.  L'argomento @var{spostamenti} è una lista
4089 di coppie di numeri o una lista di tali liste.  Ogni elemento di una coppia
4090 rappresenta lo spostamento di una delle coordinate di un punto di controllo.
4091 Se @var{elemento} è una stringa, il risultato è @code{\once\override} per il
4092 tipo di grob specificato.  Se @var{elemento} è un'espressione musicale, il
4093 risultato è la stessa espressione musicale con un'appropriata modifica.
4094
4095 In altre parole, la funzione @code{\shape} può comportarsi come un comando
4096 @code{\once\override} o un comando @code{\tweak} a seconda che l'argomento
4097 @var{elemento} sia il nome di un grob, come @qq{Slur}, o un'espressione
4098 musicale, come @qq{(}.  L'argomento @var{spostamenti} specifica gli
4099 sfasamenti dei quattro punti di controllo nella forma di una lista di
4100 quattro coppie di valori (dx . dy) in unità di spazi rigo (o una lista
4101 di tali liste se la curva ha più di un segmento).
4102
4103 Il trattino iniziale è richiesto se e solo se si usa la forma con
4104 @code{\tweak}.
4105
4106 Dunque usando lo stesso esempio precedente e la forma @code{\once\override}
4107 di @code{\shape}, il seguente comando alzerà la legatura di valore di
4108 metà spazio rigo:
4109
4110 @lilypond[verbatim,quote]
4111 <<
4112   {
4113     \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie
4114     e'1~ 1
4115   }
4116 \\
4117   \relative { r4 <g' c,> <g c,> <g c,> }
4118 >>
4119 @end lilypond
4120
4121 Questo posizionamento è migliore, ma forse dovrebbe essere alzato di più
4122 al centro, come viene fatto nel prossimo esempio, dove stavolta si usa
4123 la forma alternativa @code{\tweak}:
4124
4125 @lilypond[verbatim,quote]
4126 <<
4127   {
4128     e'1-\shape #'((0 . 0.5) (0 . 1) (0 . 1) (0 . 0.5)) ~ e'
4129   }
4130 \\
4131   \relative { r4 <g' c,> <g c,> <g c,> }
4132 >>
4133 @end lilypond
4134
4135 Le modifiche alle posizioni orizzontali dei punti di controllo funzionano
4136 nello stesso modo.  Si possono ridefinire anche due curve diverse che
4137 iniziano nello stesso momento musicale:
4138
4139 @lilypond[verbatim,quote,ragged-right]
4140 \relative {
4141   c''8(\( a) a'4 e c\)
4142   \shape #'((0.7 . -0.4) (0.5 . -0.4) (0.3 . -0.3) (0 . -0.2)) Slur
4143   \shape #'((0 . 0) (0 . 0.5) (0 . 0.5) (0 . 0)) PhrasingSlur
4144   c8(\( a) a'4 e c\)
4145 }
4146 @end lilypond
4147
4148 La funzione @code{\shape} può sostituire anche i punti di controllo di
4149 curve che si estendono oltre le interruzioni di linea.  A ogni pezzo
4150 della curva spezzata può essere assegnata la sua lista di spostamenti.
4151 Se non sono necessarie delle modifiche a un segmento in particolare,
4152 la lista vuota può servire come segnaposto.  In questo esempio l'interruzione
4153 di linea fa sembrare doppia la legatura di portamento singola:
4154
4155 @lilypond[verbatim,quote,ragged-right]
4156 \relative {
4157   c'4( f g c
4158   \break
4159   d,4 c' f, c)
4160 }
4161 @end lilypond
4162
4163 Cambiando le forme delle due metà della legatura di portamento diventa più
4164 chiaro che la legatura continua oltre l'interruzione di linea:
4165
4166 @lilypond[verbatim,quote,ragged-right]
4167 % () può essere usato come una scorciatoia per ((0 . 0) (0 . 0) (0 . 0) (0 . 0))
4168 % nel caso in cui uno dei segmenti non necessiti di modifiche
4169 \relative c' {
4170   \shape #'(
4171              (( 0 . 0) (0 . 0) (0 . 0) (0 . 1))
4172              ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5))
4173            ) Slur
4174   c4( f g c
4175   \break
4176   d,4 c' f, c)
4177 }
4178 @end lilypond
4179
4180 Se è richiesta una curva a forma di S, bisogna sempre definire manualmente i
4181 punti di controllo --- LilyPond non sceglierà mai tali forme automaticamente.
4182
4183 @lilypond[verbatim,quote]
4184 \relative c'' {
4185   c8( e b-> f d' a e-> g)
4186   \shape #'((0 . -1) (5.5 . -0.5) (-5.5 . -10.5) (0 . -5.5)) PhrasingSlur
4187   c8\( e b-> f d' a e-> g\)
4188 }
4189 @end lilypond
4190
4191 @subsubsubheading Specificare i punti di controllo esplicitamente
4192
4193 Le coordinate dei punti di controllo della curva di Bézier sono specificate
4194 in unità di spazi rigo.  La coordinata@tie{}X è relativa al punto di
4195 riferimento della nota a cui la legatura si attacca, mentre la
4196 coordinata@tie{}Y è relativa alla linea centrale del rigo.  Le coordinate
4197 sono specificate come una lista di quattro coppie di numeri decimali
4198 (reali).  Un possibile approccio consiste nel valutare prima le coordinate
4199 delle due estremità e poi indovinare i due punti intermedi.  I valori
4200 ottimali vengono quindi trovati per tentativi.  Tenere conto del fatto
4201 che, in caso di ulteriori modifiche alla musica o alla formattazione, questi
4202 valori potrebbero dover essere nuovamente cambiati manualmente.
4203
4204 Una situazione in cui è preferibile specificare i punti di controllo
4205 esplicitamente invece di specificarne gli spostamenti è quella in cui
4206 devono essere indicati per una singola nota.  Il prossimo esempio
4207 mostra un modo in cui rappresentare una legatura di portamento che
4208 si estende nelle sezioni alternative di una volta.
4209
4210 @lilypond[verbatim,quote]
4211 \relative {
4212   c''1
4213   \repeat volta 3 { c4 d( e f }
4214   \alternative {
4215     { g2) d }
4216     {
4217       g2
4218       % crea una legatura di portamento e spostala in una nuova posizione
4219       % il <> è solamente un accordo vuoto che serve a terminare la legatura
4220       -\tweak control-points #'((-2 . 3.8) (-1 . 3.9) (0 . 4) (1 . 3.4)) ( <> )
4221       f,
4222     }
4223     {
4224       e'2
4225       % crea una legatura di portamento e spostala in una nuova posizione
4226       -\tweak control-points #'((-2 . 3) (-1 . 3.1) (0 . 3.2) (1 . 2.4)) ( <> )
4227       f,
4228     }
4229   }
4230 }
4231 @end lilypond
4232
4233 @knownissues
4234 Non è possibile modificare le forme di legature di valore e di portamento
4235 cambiando la proprietà @code{control-points} se ci sono molteplici legature
4236 nello stesso momento musicale -- anche il comando @code{\tweak} non funzionerà
4237 in questo caso.  Tuttavia si può sovrascrivere la proprietà
4238 @code{tie-configuration} di @code{TieColumn} per impostare l'inizio della linea
4239 e la direzione come desiderato.
4240
4241 @seealso
4242 Guida al funzionamento interno:
4243 @rinternals{TieColumn}.
4244
4245
4246 @node Modifica degli estensori spezzati
4247 @subsection Modifica degli estensori spezzati
4248 @translationof Modifying broken spanners
4249
4250 @menu
4251 * Uso di alterBroken::
4252 @end menu
4253
4254 @node Uso di alterBroken
4255 @unnumberedsubsubsec Uso di @code{\alterBroken}
4256 @translationof Using alterBroken
4257
4258 @cindex estensori, modificare gli
4259 @cindex estensori spezzati, modificare gli
4260 @funindex \alterBroken
4261
4262 Quando un estensore va a capo o si spezza, ciascun pezzo eredita gli
4263 attributi dell'estensore originario.  Dunque la normale modifica di
4264 un estensore spezzato applica le stesse modifiche a ciascuno dei
4265 suoi segmenti.  Nell'esempio successivo, la sovrascrittura di
4266 @code{thickness} agisce sulla legatura di portamento su entrambi
4267 i lati rispetto all'interruzione di linea.
4268
4269 @lilypond[verbatim,quote,ragged-right]
4270 \relative c'' {
4271   r2
4272   \once\override Slur.thickness = 10
4273   c8( d e f
4274   \break
4275   g8 f e d) r2
4276 }
4277 @end lilypond
4278
4279 È possibile modificare indipendentemente l'aspetto di singoli pezzi
4280 di un estensore spezzato col comando @code{\alterBroken}.  Questo
4281 può generare sia un @code{\override} che un @code{\tweak} della
4282 proprietà di un estensore.
4283
4284 La sintassi di @code{\alterBroken} è:
4285
4286 @example
4287 [-]\alterBroken @var{proprietà} @var{valori} @var{elemento}
4288 @end example
4289
4290 L'argomento @var{valori} è una lista di valori, uno per ogni pezzo
4291 spezzato.  Se @var{elemento} è il nome di un grob come @code{Slur} o
4292 @code{Staff.PianoPedalBracket}, il risultato è un @code{\override}
4293 del tipo di grob specificato.  Se @var{elemento} è un'espressione
4294 musicale come @qq{(} o @qq{[}, il risultato è la stessa espressione
4295 musicale modificata da un comando @code{\tweak}.
4296
4297 Il trattino iniziale è richiesto nella forma @code{\tweak}.  Non aggiungerlo
4298 se @code{\alterBroken} viene usato come un @code{\override}.
4299
4300 Nel suo uso come @code{\override}, @code{\alterBroken} può essere
4301 preceduto da @code{\once} o @code{\temporary} e ripristinato con
4302 @code{\revert} seguito da @var{proprietà}.
4303
4304 Il codice seguente applica un @code{\override} indipendente a ciascun
4305 segmento della legatura di portamento dell'esempio precedente:
4306
4307 @lilypond[verbatim,quote,ragged-right]
4308 \relative c'' {
4309   r2
4310   \alterBroken thickness #'(10 1) Slur
4311   c8( d e f
4312   \break
4313   g8 f e d) r2
4314 }
4315 @end lilypond
4316
4317 Il comando @code{\alterBroken} può essere usato con qualsiasi oggetto estensore,
4318 inclusi @code{Tie}, @code{PhrasingSlur}, @code{Beam} e @code{TextSpanner}.  Per
4319 esempio, un editor che stia preparando un'edizione colta potrebbe voler indicare
4320 l'assenza di parte di una legatura di frase in un manoscritto tratteggiando
4321 solo il segmento che è stato aggiunto.  L'esempio seguente mostra come farlo,
4322 in questo caso usando la forma @code{\tweak} del comando:
4323
4324 @lilypond[verbatim,quote,ragged-right]
4325 % Si usa per convenienza la lista vuota, perché è l'impostazione
4326 % predefinita di dash-definition, producendo così una curva continua.
4327 \relative {
4328   c''2-\alterBroken dash-definition #'(() ((0 1.0 0.4 0.75))) \(e
4329   \break
4330   g2 e\)
4331 }
4332 @end lilypond
4333
4334 È importante comprendere che @code{\alterBroken} imposterà ogni pezzo di
4335 un estensore spezzato sul valore corrispondente specificato in
4336 @var{valori}.  Quando il numero di valori è inferiore a quello dei pezzi,
4337 a qualsiasi pezzo ulteriore sarà assegnata una lista vuota.  Ciò potrebbe
4338 portare a risultati indesiderati se la proprietà di formattazione non è
4339 impostata su una lista vuota per impostazione predefinita.  In tali casi,
4340 a ogni segmento deve essere assegnato un valore appropriato.
4341
4342 @knownissues
4343 Le interruzioni di linea possono verificarsi in punti diversi in seguito
4344 a modifiche della formattazione.  Le impostazioni scelte per @code{\alterBroken}
4345 potrebbero non essere più adatte per un estensore che non va più a capo o è
4346 diviso in più segmenti di prima.  Per proteggersi da questa situazione
4347 conviene fare un uso esplicito di @code{\break}.
4348
4349 Il comando @code{\alterBroken} non funziona nel caso di proprietà dell'estensore
4350 a cui si accede prima di line-breaking, come @code{direction}.
4351
4352 @seealso
4353 Estendere LilyPond:
4354 @rextend{Difficult tweaks}.
4355
4356
4357 @node Contenitori unpure-pure
4358 @subsection Contenitori unpure-pure
4359 @translationof Unpure-pure containers
4360
4361 @cindex Scheme, contenitori puri
4362 @cindex Scheme, contenitori impuri
4363 @cindex pure-container, Scheme
4364 @cindex unpure-container, Scheme
4365 @cindex spaziatura orizzontale, sovrascrivere la
4366
4367 I contenitori unpure-pure (impuri-puri) sono utili per sovrascrivere i calcoli
4368 di spaziatura dell'@emph{asse Y} - in particolare @code{Y-offset} e
4369 @code{Y-extent} - tramite una funzione Scheme invece che con un numero o una
4370 coppia di numeri.
4371
4372 Per alcuni grob, il cui @code{Y-extent} è basato sulla proprietà @code{stencil},
4373 sovrascrivere tale proprietà renderà necessario un'ulteriore sovrascrittura di
4374 @code{Y-extent} tramite un contenitore unpure-pure.
4375 Quando una funzione sovrascrive @code{Y-offset} e/o @code{Y-extent}, si presume
4376 che ciò innescherà il calcolo delle interruzioni di linea troppo presto durante
4377 la compilazione.  Dunque la funzione non viene affatto calcolata (e di solito
4378 restituirà un valore di @samp{0} o @samp{'(0 . 0)}) e ciò può causare delle
4379 collisioni.  Una funzione @q{pure} (pura) non avrà effetto su proprietà,
4380 oggetti o @qq{suicidi} dei grob e quindi tutto ciò che è collegato al suo
4381 asse@tie{}Y sarà sempre calcolato correttamente.
4382
4383 Attualmente, ci sono circa trenta funzioni che sono già considerate
4384 @q{pure} e i contenitori unpure-pure sono un modo per impostare le
4385 funzioni non ancora presenti in questa lista come @q{pure}.  La funzione
4386 @q{pure} viene calcolata @emph{prima} di qualsiasi interruzione di linea
4387 e quindi la spaziatura orizzontale può essere regolata @qq{in tempo}.  La
4388 funzione @q{unpure} viene invece calcolata @emph{dopo} le interruzioni
4389 di linea.
4390
4391 @warning{Dato che è difficile sapere sempre quali funzioni si trovano in
4392 questa lista, consigliamo a chi crea funzioni @q{pure} di non usare i
4393 grob @code{Beam} o @code{VerticalAlignment}.}
4394
4395 Un contenitore unpure-pure viene costruito nel modo seguente:
4396
4397 @code{(ly:make-unpure-pure-container f0 f1)}
4398
4399 dove @code{f0} è una funzione che prende @var{n} argomenti (@var{n >= 1})
4400 e il primo argomento deve sempre essere il grob.  Questa è la funzione che
4401 restituisce il vero risultato.  @var{f1} è la funzione etichettata come
4402 @q{pure} che prende @var{n + 2} argomenti.  Di nuovo, il primo argomento
4403 deve sempre essere il grob, ma il secondo e il terzo sono il punto di
4404 partenza, @q{start}, e quello di arrivo, @q{end}.
4405
4406 @var{start} e @var{end} sono, per tutti gli intenti e scopi, valori
4407 fittizi che contano solo per gli estensori, o @code{Spanners}, (ovvero
4408 @code{Hairpin} o @code{Beam}), che possono restituire calcoli diversi
4409 dell'altezza in base a una colonna di inizio e di fine.
4410
4411 Il resto sono altri argomenti della prima funzione (che potrebbero essere
4412 nessuno se @var{n = 1}).
4413
4414 I risultati della seconda funzione sono usati come un'approssimazione del
4415 valore necessario che viene poi usato dalla prima funzione per ottenere il
4416 valore reale, che viene infine usato per la messa a punto, molto più tardi
4417 nel corso del processo di spaziatura.
4418
4419 @c TODO: The following example supposedly showing a collision no longer
4420 @c 'works' since 2.18.x. Another example of a collision is needed.
4421 @c Issue #3512
4422
4423 @lilypond[verbatim,quote,ragged-right]
4424 #(define (square-line-circle-space grob)
4425 (let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
4426       (notename (ly:pitch-notename pitch)))
4427  (if (= 0 (modulo notename 2))
4428      (make-circle-stencil 0.5 0.0 #t)
4429      (make-filled-box-stencil '(0 . 1.0)
4430                               '(-0.5 . 0.5)))))
4431
4432 squareLineCircleSpace = {
4433   \override NoteHead.stencil = #square-line-circle-space
4434 }
4435
4436 smartSquareLineCircleSpace = {
4437   \squareLineCircleSpace
4438   \override NoteHead.Y-extent =
4439    #(ly:make-unpure-pure-container
4440       ly:grob::stencil-height
4441       (lambda (grob start end) (ly:grob::stencil-height grob)))
4442 }
4443
4444 \new Voice \with { \remove "Stem_engraver" }
4445 \relative c'' {
4446   \squareLineCircleSpace
4447   cis4 ces disis d
4448   \smartSquareLineCircleSpace
4449   cis4 ces disis d
4450 }
4451 @end lilypond
4452
4453 @c esempio obsoleto: dalla versione 2.18 LilyPond evita le collisioni di default.
4454 Nella prima misura, senza il contenitore unpure-pure, il motore della
4455 spaziatura non conosce la larghezza della testa di nota e lascia che
4456 collida con le alterazioni.  Nella seconda misura, che usa i contenitori
4457 unpure-pure, il motore della spaziatura conosce la larghezza della testa
4458 di nota e evita le collisioni allungando la linea dello spazio necessario.
4459
4460 Di solito per semplici calcoli si possono usare funzioni quasi identiche
4461 per entrambe le parti, @q{unpure} e @q{pure}, cambiando soltanto il numero
4462 di argomenti passati e la portata della funzione.  Questo caso d'uso è così
4463 frequente che @code{ly:make-unpure-pure-container} costruisce tale seconda
4464 funzione automaticamente quando è richiamata con un solo argomento.
4465
4466 @warning{Se una funzione viene etichettata come @q{pure} ma viene fuori che
4467 non lo è, i risultati possono essere imprevedibili.}
4468
4469
4470 @node Uso delle funzioni musicali
4471 @section Uso delle funzioni musicali
4472 @translationof Using music functions
4473
4474 @c TODO -- add @seealso, etc. to these subsections
4475
4476 Quando le modifiche devono essere riusate con diverse espressioni musicali,
4477 è spesso conveniente fare in modo che la modifica faccia parte di una
4478 @emph{funzione musicale}.  In questa sezione, trattiamo soltanto le funzioni
4479 di @emph{sostituzione}, dove l'obiettivo è sostituire una variabile in un
4480 punto del codice di input di LilyPond.  Altre funzioni più complesse sono
4481 descritte in @rextend{Music functions}.
4482
4483 @menu
4484 * Sintassi della funzione di sostituzione::
4485 * Esempi della funzione di sostituzione::
4486 @end menu
4487
4488 @node Sintassi della funzione di sostituzione
4489 @subsection Sintassi della funzione di sostituzione
4490 @translationof Substitution function syntax
4491
4492 Creare una funzione che sostituisca una variabile presente nel codice LilyPond
4493 è semplice.  La forma generica di queste funzioni è:
4494
4495 @example
4496 funzione =
4497 #(define-music-function
4498      (@var{arg1} @var{arg2} @dots{})
4499      (@var{tipo1?} @var{tipo2?} @dots{})
4500    #@{
4501      @var{@dots{}musica@dots{}}
4502    #@})
4503 @end example
4504
4505 @noindent
4506 dove
4507
4508 @multitable @columnfractions .33 .66
4509 @item @code{@var{argN}}
4510 @tab @var{n}esimo argomento
4511
4512 @item @code{@var{tipoN?}}
4513 @tab un @emph{tipo di predicato} scheme per il quale @code{@var{argN}}
4514 deve ritornare @code{#t}.
4515
4516 @item @code{@var{@dots{}musica@dots{}}}
4517 @tab il normale input LilyPond, usando @code{$} (nei punti in cui sono
4518 consentiti solo i costrutti LilyPond) o @code{#} (per usarlo come un valore
4519 Scheme o come argomento di una funzione musicale o come musica all'interno
4520 di liste di musica) per riferirsi agli argomenti (es: @samp{#arg1}).
4521 @end multitable
4522
4523 La lista del tipo di predicati è obbligatoria.  Alcuni dei tipi di predicati
4524 più comuni usati nelle funzioni musicali sono:
4525
4526 @example
4527 boolean?
4528 cheap-list?  @emph{(usarlo al posto di }@q{list?}@emph{ per un'elaborazione più veloce)}
4529 ly:duration?
4530 ly:music?
4531 ly:pitch?
4532 markup?
4533 number?
4534 pair?
4535 string?
4536 symbol?
4537 @end example
4538
4539 @noindent
4540 Un elenco dei tipi di predicati disponibili si trova in
4541 @ref{Predefined type predicates}.  Sono consentiti anche tipi di predicati
4542 definiti dagli utenti.
4543
4544 @seealso
4545 Guida alla notazione:
4546 @ref{Predefined type predicates}.
4547
4548 Estendere LilyPond:
4549 @rextend{Music functions}.
4550
4551 File installati:
4552 @file{lily/music-scheme.cc},
4553 @file{scm/c++.scm},
4554 @file{scm/lily.scm}.
4555
4556
4557 @node Esempi della funzione di sostituzione
4558 @subsection Esempi della funzione di sostituzione
4559 @translationof Substitution function examples
4560
4561 Questa sezione presenta alcuni esempi di funzione di sostituzione.
4562 L'obiettivo non è fornire un elenco esaustivo, ma mostrare soltanto
4563 alcune delle possibilità di semplici funzioni di sostituzione.
4564
4565 Nel primo esempio, viene definita una funzione che semplifica il
4566 padding di un oggetto TextScript:
4567
4568 @lilypond[quote,verbatim,ragged-right]
4569 padText =
4570 #(define-music-function
4571      (padding)
4572      (number?)
4573    #{
4574      \once \override TextScript.padding = #padding
4575    #})
4576
4577 \relative {
4578   c''4^"più mosso" b a b
4579   \padText #1.8
4580   c4^"più mosso" b a b
4581   \padText #2.6
4582   c4^"più mosso" b a b
4583 }
4584 @end lilypond
4585
4586 Oltre ai numeri, si possono usare come argomenti delle funzioni musicali
4587 anche le espressioni musicali, come le note:
4588
4589 @lilypond[quote,verbatim,ragged-right]
4590 custosNote =
4591 #(define-music-function
4592      (note)
4593      (ly:music?)
4594    #{
4595      \tweak NoteHead.stencil #ly:text-interface::print
4596      \tweak NoteHead.text
4597         \markup \musicglyph #"custodes.mensural.u0"
4598      \tweak Stem.stencil ##f
4599      #note
4600    #})
4601
4602 \relative { c'4 d e f \custosNote g }
4603 @end lilypond
4604
4605 @funindex \etc
4606 Entrambe queste funzioni sono semplici espressioni singole dove manca soltanto
4607 l'ultimo elemento di una chiamata di una funzione o di una sovrascrittura.  Per
4608 queste particolari definizioni di funzione, esiste una sintassi alternativa
4609 più semplice, che consiste nello scrivere interamente la parte costante
4610 dell'espressione e sostituire il suo elemento finale mancante con @code{\etc}:
4611
4612 @lilypond[quote,verbatim,ragged-right]
4613 padText =
4614   \once \override TextScript.padding = \etc
4615
4616 \relative {
4617   c''4^"più mosso" b a b
4618   \padText #1.8
4619   c4^"più mosso" b a b
4620   \padText #2.6
4621   c4^"più mosso" b a b
4622 }
4623 @end lilypond
4624
4625 @lilypond[quote,verbatim,ragged-right]
4626 custosNote =
4627   \tweak NoteHead.stencil #ly:text-interface::print
4628   \tweak NoteHead.text
4629      \markup \musicglyph #"custodes.mensural.u0"
4630   \tweak Stem.stencil ##f
4631   \etc
4632
4633 \relative { c'4 d e f \custosNote g }
4634 @end lilypond
4635
4636
4637 Si possono definire funzioni di sostituzione con molteplici argomenti:
4638
4639 @lilypond[quote,verbatim,ragged-right]
4640 tempoPadded =
4641 #(define-music-function
4642      (padding tempotext)
4643      (number? markup?)
4644    #{
4645      \once \override Score.MetronomeMark.padding = #padding
4646      \tempo \markup { \bold #tempotext }
4647    #})
4648
4649 \relative {
4650   \tempo \markup { "Tempo basso" }
4651   c''4 d e f g1
4652   \tempoPadded #4.0 "Tempo alto"
4653   g4 f e d c1
4654 }
4655 @end lilypond
4656
4657 @c TODO: add appropriate @@ref's here.
4658