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