]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/it/learning/tweaks.itely
df0701477265c65708723274e63c7cd821a63ee4
[lilypond.git] / Documentation / it / learning / tweaks.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
2
3 @ignore
4     Translation of GIT committish: b6e323a2f6fdac2266a659acf6da008957f0c936
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 \version "2.19.22"
12
13 @node Modifica dell'output
14 @chapter Modifica dell'output
15 @translationof Tweaking output
16
17 Questo capitolo spiega come modificare l'output.  LilyPond è estremamente
18 configurabile; praticamente si può modificare qualsiasi elemento dell'output.
19
20
21 @menu
22 * Modifiche di base::
23 * Manuale del Funzionamento interno::
24 * Aspetto degli oggetti::
25 * Posizionamento degli oggetti::
26 * Spaziatura verticale::
27 * Collisioni tra oggetti::
28 * Altre modifiche::
29 @end menu
30
31 @node Modifiche di base
32 @section Modifiche di base
33 @translationof Tweaking basics
34
35 @menu
36 * Introduzione alle modifiche::
37 * Oggetti e interfacce::
38 * Convenzioni per i nomi di oggetti e proprietà::
39 * Metodi di modifica::
40 @end menu
41
42 @node Introduzione alle modifiche
43 @subsection Introduzione alle modifiche
44 @translationof Introduction to tweaks
45
46 Nella terminologia di LilyPond un @emph{tweak} (modifica, ritocco) si
47 riferisce ai vari metodi che l'utente ha a disposizione per modificare
48 le azioni intraprese durante l'interpretazione del file di input e per
49 cambiare l'aspetto dell'output.  Alcune modifiche sono molto semplici, altre
50 sono più complesse.  Ma nel loro insieme i metodi disponibili permettono
51 di modificare quasi qualsiasi aspetto della partitura come si desidera.
52
53 In questa sezione vengono trattati i concetti di base necessari per
54 comprendere le modifiche.  Più avanti presenteremo vari comandi già
55 pronti che possono essere semplicemente copiati per ottenere lo stesso
56 effetto nelle proprie partiture; allo stesso tempo mostreremo come
57 costruire questi comandi così da rendere possibile imparare a scrivere
58 le proprie modifiche personali.
59
60 Prima di iniziare questo capitolo si consiglia di rileggere la sezione
61 @ref{Contexts and engravers}, perché i contesti, gli incisori e le proprietà
62 contenute al loro interno sono fondamentali per comprendere e
63 costruire le modifiche.
64
65 @node Oggetti e interfacce
66 @subsection Oggetti e interfacce
67 @translationof Objects and interfaces
68
69 @cindex oggetto
70 @cindex oggetto grafico (grob)
71 @cindex estensore (spanner)
72 @cindex interfaccia
73 @cindex oggetto, proprietà dell'
74 @cindex proprietà dell'oggetto
75 @cindex oggetto di formattazione
76 @cindex formattazione, oggetto di
77
78 I @emph{tweak} implicano la modifica delle operazioni e delle strutture
79 interne del programma LilyPond, dunque per prima cosa bisogna
80 introdurre alcuni termini usati per descriverle.
81
82 Il termine @q{Oggetto} è un termine generico che si riferisce all'insieme
83 di strutture interne create da LilyPond durante l'elaborazione
84 di un file di input.  Quando incontra un comando come @code{\new
85 Staff}, LilyPond crea un nuovo oggetto di tipo @code{Staff} (un rigo).  Questo
86 oggetto @code{Staff} possiede tutte le proprietà associate a
87 quel rigo, come ad esempio il suo nome e la sua armatura di chiave,
88 insieme ai dettagli relativi agli incisori assegnati per operare all'interno
89 del contesto di quel rigo.  Analogalmente, ci sono oggetti che hanno
90 le proprietà di tutti gli altri contesti, come  gli oggetti @code{Voice},
91 gli oggetti @code{Score}, gli oggetti @code{Lyrics} e gli oggetti che
92 rappresentano tutti gli elementi della notazione, come le stanghette,
93 le teste di nota, le legature di valore, le dinamiche, etc.  A ogni
94 oggetto corrisponde un relativo insieme di valori di proprietà.
95
96 Alcuni tipi di oggetto hanno dei nomi speciali.  Gli oggetti che rappresentano
97 elementi della notazione visibili nell'output come le teste di nota, i gambi,
98 le legature di portamento e di valore, le diteggiature, le chiavi, etc. sono
99 chiamati «Oggetti di formattazione» (in inglese @emph{Layout Objects}).  Sono
100 chiamati anche «Oggetti grafici» (in inglese @emph{Graphical Objects} o
101 @emph{Grob} per brevità).  Si tratta sempre di oggetti nel senso generico
102 descritto prima e quindi hanno tutti delle proprietà a loro associate, come la
103 posizione, la dimensione, il colore, etc.
104
105 Alcuni oggetti di formattazione sono ancora più specializzati.  Le legature
106 di frase, le forcelle del crescendo, i segni di ottava e molti altri @q{grob}
107 non sono localizzati in un punto preciso -- hanno invece un punto iniziale,
108 un punto finale e talvolta altre proprietà relative alla loro forma.  Gli
109 oggetti che hanno una forma estesa in questo modo vengono chiamati «Estensori»
110 (in inglese @emph{Spanner}).
111
112 Gli estensori non possono essere modificati dopo la loro creazione.  Tra questi
113 sia @code{StaffSymbol} che @code{LedgerLineSpanner}, che continuano nel corso
114 della partitura (a meno che non siano terminati dal comando @code{\stopStaff} e
115 poi ricreati col comando @code{\startStaff}.
116
117 Esistono anche dei grob @q{astratti} che non stampano niente da soli, bensì
118 raccolgono, posizionano e gestiscono altri grob.  Esempi comuni sono
119 @code{DynamicLineSpanner}, @code{BreakAlignment}, @code{NoteColumn},
120 @code{VerticalAxisGroup}, @code{NonMusicalPaperColumn} e simili.  Vedremo
121 in seguito come si usano alcuni di questi.
122
123 Resta da spiegare cosa sono le «Interfacce».  Molti oggetti, pur essendo
124 piuttosto diversi, condividono delle caratteristiche comuni che devono
125 essere elaborate nello stesso modo.  Ad esempio, tutti i @emph{grob} hanno un
126 colore, una dimensione, una posizione, etc.; tutte queste proprietà vengono
127 elaborate nello stesso modo durante l'interpretazione del file di input.  Per
128 semplificare queste operazioni interne, le azioni e proprietà comuni
129 sono riunite in un oggetto chiamato @code{grob-interface}.
130 Esistono molti altri raggruppamenti di proprietà comuni come queste, ognuno
131 con un nome che finisce con @code{interface}.  In totale ci sono più di
132 100 interfacce.  Vedremo in seguito perché questo sia di interesse
133 e di utilità per l'utente.
134
135 Questi sono dunque i termini principali riguardanti gli oggetti che useremo
136 in questo capitolo.
137
138 @node Convenzioni per i nomi di oggetti e proprietà
139 @subsection Convenzioni per i nomi di oggetti e proprietà
140 @translationof Naming conventions of objects and properties
141
142 @cindex convenzioni per i nomi di oggetti
143 @cindex convenzioni per i nomi di proprietà
144 @cindex oggetti, convenzioni per i nomi di
145 @cindex proprietà, convenzioni per i nomi di
146
147 Abbiamo già visto, in @ref{Contexts and engravers}, le convenzioni per i
148 nomi di oggetti.  Ecco una lista dei più comuni tipi di oggetti e
149 proprietà insieme alle convenzioni usate per nominarli e alcuni
150 esempi di nomi reali.  Abbiamo usato @q{A} per indicare un
151 qualsiasi carattere alfabetico maiuscolo e @q{aaa} per indicare un qualsiasi
152 numero di caratteri alfabetici minuscoli.  Gli altri caratteri sono indicati
153 normalmente.
154
155 @multitable @columnfractions .33 .33 .33
156 @headitem Tipo di oggetto/proprietà
157   @tab Convenzione per il nome
158   @tab Esempi
159 @item Contesti
160   @tab Aaaa o AaaaAaaaAaaa
161   @tab Staff, GrandStaff
162 @item Oggetti di formattazione
163   @tab Aaaa o AaaaAaaaAaaa
164   @tab Slur, NoteHead
165 @item Incisori
166   @tab Aaaa_aaa_engraver
167   @tab Clef_engraver, Note_heads_engraver
168 @item Interfacce
169   @tab aaa-aaa-interface
170   @tab grob-interface, break-aligned-interface
171 @item Proprietà del contesto
172   @tab aaa o aaaAaaaAaaa
173   @tab alignAboveContext, skipBars
174 @item Proprietà degli oggetti di formattazione
175   @tab aaa o aaa-aaa-aaa
176   @tab direction, beam-thickness
177 @end multitable
178
179 Come vedremo tra poco, ogni tipo di oggetto richiede un comando diverso
180 per modificare le sue proprietà, dunque è utile poter riconoscere i tipi
181 di oggetti e proprietà dai loro nomi.
182
183 @seealso
184 Guida alla notazione:
185 @ruser{Modifying properties}.
186
187
188 @node Metodi di modifica
189 @subsection Metodi di modifica
190 @translationof Tweaking methods
191
192 @cindex metodi di modifica
193 @cindex modifica, metodi
194
195 @menu
196 * Il comando override::
197 * Il comando revert::
198 * Il prefisso once::
199 * Il comando overrideProperty::
200 * Il comando tweak::
201 * Il prefisso single::
202 @end menu
203
204 @node Il comando override
205 @unnumberedsubsubsec Il comando @code{@bs{}override}
206 @translationof The override command
207
208 @cindex override, comando
209 @cindex override, sintassi
210
211 @funindex \override
212 @funindex override
213
214 Abbiamo già incontrato i comandi @code{\set} e @code{\with}, che servono
215 a modificare le proprietà dei @strong{contesti} e a togliere o aggiungere
216 gli @strong{incisori}, nei paragrafi @ref{Modifying context properties} e
217 @ref{Adding and removing engravers}.  Ora dobbiamo introdurre alcuni
218 comandi più importanti.
219
220 Il comando che cambia le proprietà degli @strong{oggetti di formattazione} è
221 @code{\override}.  Dato che questo comando ha il compito di modificare
222 le caratteristiche interne fondamentali di LilyPond, la sua sintassi non è
223 semplice come quella dei comandi presentati finora.  Deve sapere esattamente
224 quale proprietà di quale oggetto in quale contesto deve essere
225 modificata e quale deve essere il suo nuovo valore.  Vediamo come
226 funziona.
227
228 La sintassi generale di questo comando è:
229
230 @example
231 \override @var{Contesto}.@var{OggettoDiFormattazione}.@var{proprietà-formattazione} = #@var{valore}
232 @end example
233
234 @noindent
235 Questo comando assegnerà alla proprietà chiamata @var{proprietà-formattazione}
236 dell'oggetto di formattazione chiamato @var{OggettoDiFormattazione}, che fa
237 parte del contesto @var{Contesto}, il valore @var{valore}.
238
239 Il @var{Contesto} può essere omesso (e di solito lo è) quando il
240 contesto richiesto è implicito e si trova a uno dei livelli più
241 bassi dei contesti, come ad esempio @code{Voice}, @code{ChordNames} o
242 @code{Lyrics}.  Lo ometteremo in molti degli esempi seguenti; vedremo
243 poi quando deve essere specificato.
244
245 Le sezioni successive tratteranno in modo dettagliato le proprietà e
246 i loro valori, si veda @ref{Types of properties}; in questa sezione, invece,
247 useremo soltanto alcune proprietà e valori di facile comprensione,
248 in modo da spiegare il formato e l'uso di questo comando.
249
250 Le espressioni fondamentali di LilyPond sono gli elementi musicali come le note,
251 le durate e le annotazioni.  Le espressioni basilari come numeri,
252 stringhe di testo e liste sono elaborate nella @q{modalità Scheme}, che viene
253 invocata inserendo @samp{#} prima del valore.  Sebbene i valori possano
254 avere talvolta una valida rappresentazione nella modalità musicale di LilyPond,
255 per coerenza questo manuale li farà sempre precedere da @samp{#}.  Per maggiori
256 informazioni sulla modalità Scheme, si veda @rextend{LilyPond Scheme syntax}.
257
258 @code{\override} è il comando più usato nelle modifiche e quasi tutto
259 il resto del capitolo ha lo scopo di mostrare alcuni esempi
260 di utilizzo.  Ecco un semplice esempio che mostra come cambiare
261 il colore della testa di nota:
262
263 @cindex proprietà del colore, esempio
264 @cindex colore, proprietà del
265 @cindex NoteHead, esempio di sovrascrittura
266
267 @lilypond[quote,ragged-right,verbatim]
268 \relative {
269   c'4 d
270   \override NoteHead.color = #red
271   e4 f |
272   \override NoteHead.color = #green
273   g4 a b c |
274 }
275 @end lilypond
276
277 @node Il comando revert
278 @unnumberedsubsubsec Il comando @code{@bs{}revert}
279 @translationof The revert command
280
281 @cindex revert, comando
282 @cindex ripristino, comando \revert
283
284 @funindex \revert
285 @funindex revert
286
287 Quando viene sovrascritta, la proprietà mantiene il suo nuovo valore finché
288 non viene sovrascritta di nuovo o non si incontra un comando @code{\revert}.
289 Il comando @code{\revert} fa sì che il valore della proprietà sia ripristinato
290 al suo valore predefinito.  Attenzione: non al suo valore precedente (nel caso
291 siano stati inseriti vari comandi @code{\override}).  Impiega la seguente sintassi:
292
293 @example
294 \revert @var{Contesto}.@var{OggettoDiFormmattazione}.@var{proprietà-formattazione}
295 @end example
296
297 Anche in questo caso, come per il comando @code{\override}, @var{Contesto} di
298 solito non è necessario e verrà omesso in molti degli esempi seguenti.
299 In questo esempio ripristiniamo il colore della testa delle ultime due
300 note al valore predefinito:
301
302 @cindex proprietà del colore, esempio
303 @cindex colore, proprietà del
304 @cindex NoteHead, esempio di sovrascrittura
305
306 @lilypond[quote,ragged-right,verbatim]
307 \relative {
308   c'4 d
309   \override NoteHead.color = #red
310   e4 f |
311   \override NoteHead.color = #green
312   g4 a
313   \revert NoteHead.color
314   b4 c |
315 }
316 @end lilypond
317
318 @node Il prefisso once
319 @unnumberedsubsubsec Il prefisso @code{@bs{}once}
320 @translationof The once prefix
321
322 @funindex \once
323 @funindex once
324
325 I comandi @code{\override}, @code{revert}, @code{\set} e @code{\unset} possono
326 essere preceduti da @code{\once}.  Questo fa sì che tale comando sia operativo
327 solo in quel determinato momento musicale, prima che la proprietà sia
328 ripristinata al suo valore precedente (che può essere diverso da quello
329 predefinito se un altro @code{\override} è ancora attivo).  Usando lo stesso
330 esempio, possiamo cambiare il colore di una singola nota in questo modo:
331
332 @cindex proprietà del colore, esempio
333 @cindex colore, proprietà del
334 @cindex NoteHead, esempio di sovrascrittura
335
336 @lilypond[quote,verbatim]
337 \relative {
338   c'4 d
339   \override NoteHead.color = #red
340   e4 f |
341   \once \override NoteHead.color = #green
342   g4 a
343   \revert NoteHead.color
344   b c |
345 }
346 @end lilypond
347
348 Il prefisso @code{\once} può essere usato anche di fronte a molti
349 comandi predefiniti per limitare il loro effetto a un momento musicale:
350
351 @lilypond[quote,verbatim]
352 \relative {
353   c'4( d)
354   \once \slurDashed
355   e4( f) |
356   g4( a)
357   \once \hideNotes
358   b( c) |
359 }
360 @end lilypond
361
362
363 @node Il comando overrideProperty
364 @unnumberedsubsubsec Il comando @code{@bs{}overrideProperty}
365 @translationof The overrideProperty command
366
367 @cindex overrideProperty, comando
368
369 @funindex \overrideProperty
370 @funindex overrideProperty
371
372 Esiste un'altra forma di comando di sovrascrittura,
373 @code{\overrideProperty}, che si rende necessario raramente.
374 Lo menzioniamo qui per completezza, ma per approfondire l'argomento
375 si veda @rextend{Difficult tweaks}.
376 @c Maybe explain in a later iteration  -td
377
378 @node Il comando tweak
379 @unnumberedsubsubsec Il comando @code{@bs{}tweak}
380 @translationof The tweak command
381
382 @cindex tweak, comando
383
384 @funindex \tweak
385 @funindex tweak
386
387 L'ultimo comando di modifica a disposizione è @code{\tweak}.  Si usa
388 quando vari oggetti compaiono nello stesso momento musicale,
389 ma si vogliono modificare soltanto le proprietà di alcuni oggetti, come
390 ad esempio una singola nota all'interno di un accordo.  Se si usa @code{\override}
391 la modifica ha effetto su tutte le note di un accordo, mentre @code{\tweak} ha
392 effetto solo sul singolo elemento che segue.
393
394 Per esempio, supponiamo di voler modificare la dimensione della
395 testa della nota centrale (il Mi) in un accordo di Do maggiore.  Vediamo prima
396 cosa succede se si usa @code{\once \override}:
397
398 @cindex proprietà font-size, esempio
399 @cindex font-size, esempio
400 @cindex NoteHead, esempio di sovrascrittura
401
402 @lilypond[quote,ragged-right,verbatim]
403 \relative {
404   <c' e g>4
405   \once \override NoteHead.font-size = #-3
406   <c e g>4
407   <c e g>4
408 }
409 @end lilypond
410
411 Come si vede, la sovrascrittura riguarda @emph{tutte} le teste di nota
412 dell'accordo.  Ciò è dovuto al fatto che tutte le note di un accordo
413 si trovano nello stesso @emph{momento musicale} e l'azione di @code{\once}
414 consiste nell'applicare la sovrascrittura a tutti gli oggetti di formattazione
415 del tipo specificato che si trovano nello stesso momento musicale del comando
416 @code{\override} stesso.
417
418 Il comando @code{\tweak} funziona in modo diverso.  Agisce sull'elemento
419 immediatamente successivo nel flusso di codice.  Nella sua forma più
420 semplice funziona solo sugli oggetti creati direttamente dall'elemento
421 seguente, in particolare teste di nota e articolazioni.
422
423 Tornando al nostro esempio, la dimensione della nota centrale
424 di un accordo si cambia in questo modo:
425
426 @cindex proprietà font-size, esempio
427 @cindex font-size, esempio
428 @cindex @code{\tweak}, esempio
429
430 @lilypond[quote,ragged-right,verbatim]
431 \relative {
432   <c' e g>4
433   <c \tweak font-size #-3 e g>4
434 }
435 @end lilypond
436
437 Si noti che la sintassi di @code{\tweak} è diversa da quella di
438 @code{\override}.  Il contesto non deve essere specificato; anzi,
439 se lo fosse verrebbe generato un errore.  Sia il contesto che l'oggetto
440 di formattazione sono sottintesi dall'elemento che segue nel flusso di
441 input.  Nota anche che non ci devono essere segni di uguale (@code{=}).  Dunque la
442 forma semplice del comando @code{\tweak} è
443
444 @example
445 \tweak @var{proprietà-formattazione} #@var{valore}
446 @end example
447
448 Il comando @code{\tweak} serve anche a modificare soltanto una di una serie
449 di articolazioni:
450
451 @cindex proprietà del colore, esempio
452 @cindex colore, proprietà del
453 @cindex @code{\tweak}, esempio
454
455 @lilypond[quote,fragment,ragged-right,verbatim]
456 a'4^"Black"
457   -\tweak color #red ^"Red"
458   -\tweak color #green _"Green"
459 @end lilypond
460
461 @noindent
462 Nota che il comando @code{\tweak} deve essere preceduto da un segno di
463 articolazione, perché la stessa espressione modificata deve essere applicata come articolazione.  In caso di più sovrascritture della
464 direzione (@code{^} o @code{_}), prevale la sovrascrittura posizionata più a sinistra,
465 perché viene applicata per ultima.
466
467 @cindex @code{\tweak}, alterazione
468 @cindex @code{\tweak}, oggetto di formattazione specifico
469
470 Alcuni oggetti, come gambi e alterazioni, vengono creati dopo, non
471 direttamente dall'evento che segue.  È comunque possibile usare
472 @code{\tweak} con questi oggetti creati indirettamente se si indica
473 esplicitamente l'oggetto di formattazione, purché LilyPond riesca a
474 seguire la sua origine fino all'evento originale:
475
476 @lilypond[quote,fragment,ragged-right,verbatim]
477 <\tweak Accidental.color #red   cis''4
478  \tweak Accidental.color #green es''
479  g''>
480 @end lilypond
481
482 Questa forma estesa del comando @code{\tweak} può essere descritta così
483 @example
484 \tweak @var{OggettoFormattazione}.@var{proprietà-formattazione} #@var{valore}
485 @end example
486
487 @cindex gruppi irregolari, annidati
488 @cindex terzine, annidate
489 @cindex parentesi, gruppo irregolare
490 @cindex parentesi, terzina
491 @cindex parentesi del gruppo irregolare
492 @cindex parentesi della terzina
493
494 @funindex TupletBracket
495
496 Il comando @code{\tweak} è necessario anche quando si vuole cambiare
497 l'aspetto di uno di una serie di gruppi irregolari annidati che iniziano
498 nello stesso momento musicale.  Nell'esempio seguente, la prima lunga
499 parentesi del gruppo irregolare e la prima delle tre brevi parentesi
500 iniziano nello stesso momento musicale, quindi qualsiasi comando
501 @code{\override} produrrebbe degli effetti su entrambi.  In questo esempio,
502 si usa @code{\tweak} per distinguerli.  Il primo comando @code{\tweak}
503 indica che la lunga parentesi del gruppo irregolare deve essere posizionata
504 sopra le note e il secondo indica che il numero del primo gruppo irregolare
505 deve essere in rosso.
506
507 @cindex @code{\tweak}, esempio
508 @cindex proprietà della direzione, esempio
509 @cindex direzione, esempio
510 @cindex proprietà del colore, esempio
511 @cindex colore, esempio
512
513 @lilypond[quote,ragged-right,verbatim]
514 \relative c'' {
515   \tweak direction #up
516   \tuplet 3/4 {
517     \tweak color #red
518     \tuplet 3/2 { c8[ c c] }
519     \tuplet 3/2 { c8[ c c] }
520     \tuplet 3/2 { c8[ c c] }
521   }
522 }
523 @end lilypond
524
525 Se i gruppi irregolari annidati non iniziano nello stesso momento, il loro
526 aspetto può essere modificato come di consueto con i comandi @code{\override}:
527
528 @cindex proprietà text, esempio
529 @cindex text, esempio
530 @cindex funzione tuplet-number, esempio
531 @cindex proprietà transparent, esempio
532 @cindex transparent, esempio
533 @cindex TupletNumber, esempio di sovrascrittura
534
535 @c NOTE Tuplet brackets collide if notes are high on staff
536 @c See issue 509
537 @lilypond[quote,ragged-right,verbatim]
538 \relative {
539   \tuplet 3/2 { c'8[ c c] }
540   \once \override TupletNumber.text = #tuplet-number::calc-fraction-text
541   \tuplet 3/2 {
542     c8[ c]
543     c8[ c]
544     \once \override TupletNumber.transparent = ##t
545     \tuplet 3/2 { c8[ c c] }
546     \tuplet 3/2 { c8[ c c] }
547   }
548 }
549 @end lilypond
550
551 @seealso
552 @c need to comment this until the node conflict is fixed - fb
553 Guida alla Notazione:
554 @ruser{The tweak command,,The tweak command}.
555
556
557 @node Il prefisso single
558 @unnumberedsubsubsec Il prefisso @code{@bs{}single}
559 @translationof The single prefix
560
561 @funindex \single
562 @cindex tweak, generato da override
563
564 Immaginiamo di voler enfatizzare alcune teste di nota in particolare
565 colorandole di rosso e aumentandone la dimensione; e immaginiamo anche
566 che per comodità abbiamo definito una funzione per fare ciò:
567
568 @lilypond[quote,verbatim]
569 emphNoteHead = {
570   \override NoteHead.color = #red
571   \override NoteHead.font-size = 2
572 }
573 \relative {
574   c''4 a \once \emphNoteHead f d |
575 }
576 @end lilypond
577
578 Il prefisso @code{\once} funziona bene se si desidera enfatizzare note
579 singole o interi accordi, ma non permette di enfatizzare una singola
580 nota @emph{dentro} un accordo.  Prima abbiamo visto come si possa usare
581 @code{\tweak} per fare ciò, vedi @ref{The tweak command}.
582 Ma non è possibile usare @code{\tweak} in una funzione; è in questo caso che
583 torna utile il comando @code{\single}:
584
585 @lilypond[quote,verbatim]
586 emphNoteHead = {
587   \override NoteHead.color = #red
588   \override NoteHead.font-size = 2
589 }
590 \relative {
591    <c'' a \single \emphNoteHead f d>4
592 }
593 @end lilypond
594
595 In sintesi, @code{\single} converte le modifiche introdotte dal comando
596 @code{\override} in modifiche eseguite dal comando @code{\tweak}.
597 Ciò significa che quando ci sono vari oggetti che si trovano nello stesso
598 momento musicale (come le teste di nota in un accordo), @code{\single} avrà
599 effetto su uno solo, quello generato dall'espressione musicale immediatamente
600 seguente; a differenza di @code{\once}, che ha effetto su tutti questi oggetti.
601
602 Usando @code{\single} in questo modo qualsiasi funzione usata come
603 scorciatoia che contiene soltanto @code{\override} può essere applicata
604 a note individuali in un accordo.  Tuttavia, @code{\single} non converte
605 @code{\revert}, @code{\set} e @code{\unset} in modifiche che hanno le
606 proprietà di @code{\tweak}.
607
608 @seealso
609 Manuale di apprendimento:
610 @ref{The tweak command},
611 @ref{Using variables for layout adjustments}.
612
613
614 @node Manuale del Funzionamento interno
615 @section Manuale del Funzionamento interno
616 @translationof The Internals Reference manual
617
618 @cindex Guida al Funzionamento interno
619
620 @menu
621 * Proprietà degli oggetti di formattazione::
622 * Proprietà presenti nelle interfacce::
623 * Tipi di proprietà::
624 @end menu
625
626 @node Proprietà degli oggetti di formattazione
627 @subsection Proprietà degli oggetti di formattazione
628 @translationof Properties of layout objects
629
630 @cindex proprietà degli oggetti di formattazione
631 @cindex proprietà degli oggetti grafici (grob)
632 @cindex ogggetti grafici, proprietà degli
633 @cindex oggetti di formattazione, proprietà degli
634 @cindex manuale del Funzionamento Interno
635
636 Immagina di avere una legatura di portamento che ai tuoi
637 occhi appare troppo sottile e che vorresti un po' più spessa.
638 Come fare?  Sai che LilyPond è molto flessibile e che quindi
639 dovrebbe essere possibile farlo; e probabilmente immagini
640 che sia necessario un comando @code{\override}.  Ma esiste una
641 proprietà che controlla lo spessore di una legatura? E se esiste
642 come può essere modificata?  Qui entra in gioco il manuale del Funzionamento
643 Interno, che contiene tutte le informazioni necessarie per costruire
644 tutti i comandi @code{\override}.
645
646 Prima di dare un'occhiata alla guida al Funzionamento Interno, vogliamo
647 avvisarti: si tratta di un documento di @strong{riferimento}, che significa
648 che ci sono poche o nessune spiegazioni al suo interno, dato che il suo
649 scopo è presentare le informazioni in modo preciso e conciso.  Dunque potrà
650 sembrare scoraggiante al primo impatto.  Ma non ti preoccupare!  I consigli
651 e le spiegazioni presentate qui, insieme a un po' di pratica, ti permetteranno
652 di estrarre da solo da quella guida le informazioni che cerchi.
653
654 @cindex esempio di sovrascrittura
655 @cindex sovrascrittura, esempio
656 @cindex Guida al Funzionamento Interno, esempio d'uso
657 @cindex @code{\addlyrics}, esempio
658
659 Partiamo da un esempio concreto, un semplice frammento di musica:
660
661 @c Mozart, Die Zauberflöte Nr.7 Duett
662
663 @lilypond[quote,verbatim]
664 {
665   \key es \major
666   \time 6/8
667   \relative {
668     r4 bes'8 bes[( g]) g |
669     g8[( es]) es d[( f]) as |
670     as8 g
671   }
672   \addlyrics {
673     The man who | feels love's sweet e -- | mo -- tion
674   }
675 }
676 @end lilypond
677
678 Supponiamo ora che si vogliano rendere un po' più spesse le
679 legature di portamento.  È possibile?  La legatura di portamento
680 è certamente un oggetto di formattazione, dunque la domanda è: @q{Esiste una
681 proprietà che appartiene a una legatura di portamento in grado di controllare
682 lo spessore?}  Per rispondere a questa domanda dobbiamo guardare
683 nella guida al Funzionamento interno.
684
685 Puoi trovare la guida nella versione di LilyPond che stai usando
686 sul sito di LilyPond: @uref{http://lilypond.org}.  Vai alla
687 pagina della documentazione e clicca sul link alla guida del Funzionamento
688 interno.  Per poter seguire questo manuale dovresti usare la versione HTML standard,
689 non quella in un'unica grande pagina né il PDF.  Nei prossimi paragrafi ti
690 servirà per seguire gli esempi che faremo.
691
692 Sotto il titolo vedrai cinque link.  Seleziona il
693 link al @strong{Backend}, dove si trovano le informazioni
694 sugli oggetti di formattazione (@emph{layout objects}).  Poi sotto il titolo
695 @emph{Backend}, seleziona il link a @strong{All layout objects}.
696 La pagina che compare elenca tutti gli oggetti di formattazione usati
697 nella tua versione di LilyPond, in ordine alfabetico.  Seleziona il link a
698 Slur (legatura di portamento) e verranno elencate le sue proprietà.
699
700 Si può trovare questa pagina anche dalla Guida alla notazione.  In una
701 delle pagine che tratta le legature di portamento potrai trovare un
702 link alla Guida al funzionamento interno.  Il link ti porterà direttamente
703 a questa pagina, ma se hai un'idea di quale sia l'oggetto di formattazione
704 da modificare, è più semplice andare direttamente nella guida del Funzionamento
705 interno e cercare lì.
706
707 La pagina sulla legatura di portamento (@emph{Slur}) ci dice per prima cosa che gli
708 oggetti Slur sono creati dall'incisore Slur_engraver.  Poi elenca le impostazioni
709 standard.  Scorrile cercando la proprietà che potrebbe controllare lo spessore
710 delle legature di portamento; dovresti trovare
711
712 @example
713 @code{thickness} (number)
714      @code{1.2}
715      Line thickness, generally measured in @code{line-thickness}
716 @end example
717
718 Sembra che sia quel che stiamo cercando.  Ci dice che il valore
719 di @code{thickness} (spessore) è un semplice @emph{numero},
720 che il valore predefinito è 1.2 e che le unità si trovano in
721 un'altra proprietà chiamata @code{line-thickness}.
722
723 Come abbiamo detto prima, ci sono poche spiegazioni nella guida al
724 Funzionamento interno, tuttavia abbiamo già informazioni sufficienti
725 per cercare di cambiare lo spessore delle legature di portamento.
726 Vediamo che il nome dell'oggetto di formattazione è @code{Slur}, che
727 il nome della proprietà da modificare è @code{thickness} e che il
728 nuovo valore dovrà essere un numero un po' più grande di 1.2
729 se vogliamo rendere più spesse le legature.
730
731 Ora possiamo costruire il comando @code{\override} sostituendo
732 i valori che abbiamo trovato per i nomi e omettendo il
733 contesto.  Inizialmente usiamo un valore molto grande per lo
734 spessore, per essere sicuri che il comando funzioni:
735
736 @example
737 \override Slur.thickness = #5.0
738 @end example
739
740 Non dimenticare il@tie{}@code{#} che precede il nuovo valore!
741
742 L'ultima domanda è: @q{dove va messo questo comando?}  Finché non sei sicuro
743 e stai ancora imparando, la risposta migliore è: @q{dentro la musica, prima della
744 prima legatura di portamento e accanto ad essa.}  Facciamolo:
745
746 @cindex legatura di portamento, esempio di sovrascrittura
747 @cindex proprietà thickness, esempio
748 @cindex thickness (spessore), esempio
749
750 @lilypond[quote,verbatim]
751 {
752   \key es \major
753   \time 6/8
754   \relative {
755     % Increase thickness of all following slurs from 1.2 to 5.0
756     \override Slur.thickness = #5.0
757     r4 bes'8 bes[( g]) g |
758     g8[( es]) es d[( f]) as |
759     as8 g
760   }
761   \addlyrics {
762     The man who | feels love's sweet e -- | mo -- tion
763   }
764 }
765 @end lilypond
766
767 @noindent
768 e vediamo che la legatura di portamento è davvero più grossa.
769
770 Questi sono i fondamenti per costruire i comandi @code{\override}.  Incontreremo
771 delle situazioni più complesse nelle sezioni successive, ma ora possiedi già
772 tutte le conoscenze di base che ti permetteranno di costruire i tuoi comandi.
773 Ti manca solo un po' di pratica, che potrai fare grazie ai prossimi esempi.
774
775 @subsubheading Trovare il contesto
776
777 @cindex contesto, trovare il
778 @cindex contesto, identificare il corretto
779
780 E se avessimo bisogno di specificare il contesto?
781 Quale dovrebbe essere?  Potremmo immaginare che le legature
782 di portamento si trovino nel contesto Voice, dato che sono ovviamente
783 collegate strettamente alle singole voci, ma possiamo
784 esserne sicuri?  Per scoprirlo, vai in cima alla pagina del Funzionamento
785 Interno relativa a «Slur», dove dice @q{Slur objects are created by: Slur
786 engraver}.  Significa che le legature di portamento sono create nel contesto
787 in cui si trova l'incisore @code{Slur_engraver}.  Segui il link alla pagina
788 @code{Slur_engraver}.  In fondo dice che lo @code{Slur_engraver} fa parte di
789 vari contesti Voice, incluso il contesto standard della voce, @code{Voice}.
790 Dunque la nostra supposizione era corretta.  E dato che @code{Voice} è uno dei
791 contesti che si trovano al livello più basso, come è sottinteso senza ambiguità
792 dal fatto che stiamo inserendo delle note, in questo caso possiamo ometterlo.
793
794 @subsubheading Sovrascrivere una volta sola
795
796 @cindex sovrascrivere una volta sola
797 @cindex \once \override
798
799 @funindex \once
800 @funindex once
801
802 Come puoi vedere, @emph{tutte} le legature di portamento sono più spesse nell'ultimo
803 esempio.  E se volessimo rendere più spessa solo la prima legatura di portamento?
804 Dovremmo usare il comando @code{\once}.  Se posto immediatamente prima
805 di @code{\override} fa sì che questo modifichi soltanto la legatura di portamento
806 che inizia sulla nota @strong{immediatamente seguente}.  Se la nota immediatamente
807 seguente non inizia la legatura, il comando non ha alcun effetto -- non è
808 ricordato finché non si incontra una legatura di portamento, ma
809 viene direttamente scartato.  Quindi il comando con @code{\once} deve essere riposizionato
810 nel modo seguente:
811
812 @cindex Slur, esempio di sovrascrittura
813 @cindex proprietà thickness, esempio
814 @cindex thickness (spessore), esempio
815
816 @lilypond[quote,verbatim]
817 {
818   \key es \major
819   \time 6/8
820   \relative {
821     r4 bes'8
822     % Aumenta lo spessore solo della legatura che segue
823     \once \override Slur.thickness = #5.0
824     bes8[( g]) g |
825     g8[( es]) es d[( f]) as |
826     as8 g
827   }
828   \addlyrics {
829     The man who | feels love's sweet e -- | mo -- tion
830   }
831 }
832 @end lilypond
833
834 @noindent
835 Ora solo la prima legatura è più spessa.
836
837 Il comando @code{\once} può essere usato anche prima del comando @code{\set}.
838
839 @subsubheading Ripristinare
840
841 @cindex revert
842 @cindex ripristinare le proprietà predefinite
843 @cindex proprietà predefinite, ripristinare le
844
845 @funindex \revert
846 @funindex revert
847
848 E se volessimo che soltanto le prime due legature di portamento fossero
849 più spesse?  Potremmo usare due comandi, ciascuno preceduto da
850 @code{\once}, messo immediatamente prima di ognuna delle note da cui
851 iniziano le legature:
852
853 @cindex Slur, esempio di sovrascrittura
854 @cindex proprietà thickness, esempio
855 @cindex thickness (spessore), esempio
856
857 @lilypond[quote,verbatim]
858 {
859   \key es \major
860   \time 6/8
861   \relative {
862     r4 bes'8
863     % Aumenta lo spessore solo della legatura che segue
864     \once \override Slur.thickness = #5.0
865     bes[( g]) g |
866     % Aumenta lo spessore solo della legatura che segue
867     \once \override Slur.thickness = #5.0
868     g8[( es]) es d[( f]) as |
869     as8 g
870   }
871   \addlyrics {
872     The man who | feels love's sweet e -- | mo -- tion
873   }
874 }
875 @end lilypond
876
877 @noindent
878 oppure potremmo omettere il comando @code{\once} e usare il comando @code{\revert}
879 per far sì che la proprietà @code{thickness} ritorni al valore predefinito
880 dopo la seconda legatura:
881
882 @cindex Slur, esempio di sovrascrittura
883 @cindex proprietà thickness, esempio
884 @cindex thickness (spessore), esempio
885
886 @lilypond[quote,verbatim]
887 {
888   \key es \major
889   \time 6/8
890   \relative {
891     r4 bes'8
892     % Aumenta lo spessore di tutte le legature di portamento che seguono da 1.2 a 5.0
893     \override Slur.thickness = #5.0
894     bes[( g]) g |
895     g8[( es]) es
896     % Ripristina lo spessore di tutte le legature di portamento che seguono al valore predefinito 1.2
897     \revert Slur.thickness
898     d8[( f]) as |
899     as8 g
900   }
901   \addlyrics {
902     The man who | feels love's sweet e -- | mo -- tion
903   }
904 }
905 @end lilypond
906
907 @noindent
908 Il comando @code{\revert} serve a riportare qualsiasi proprietà
909 modificata con @code{\override} al suo valore predefinito.
910 Puoi usare qualsiasi metodo si adatti meglio a quello che vuoi fare.
911
912 Si conclude l'introduzione alla guida al Funzionamento interno e ai metodi
913 di base delle modifiche.  Nelle sezioni successive di questo capitolo
914 seguiranno vari esempi, in parte per presentarti ulteriori caratteristiche
915 della guida al Funzionamento interno e in parte per farti esercitare
916 nell'estrarre informazioni da esso.  Questi esempi conterranno sempre meno
917 consigli e spiegazioni.
918
919
920 @node Proprietà presenti nelle interfacce
921 @subsection Proprietà presenti nelle interfacce
922 @translationof Properties found in interfaces
923
924 @cindex interfaccia
925 @cindex proprietà dell'interfaccia
926 @cindex proprietà nelle interfacce
927
928 Supponiamo ora di voler produrre un testo vocale in corsivo.  Che tipo di
929 comando @code{\override} ci serve?  Consultiamo prima la pagina
930 della guida al Funzionamento interno che elenca @q{All layout objects}, come
931 prima, e cerchiamo un oggetto che potrebbe controllare il testo (in inglese
932 @emph{lyrics}).  Troviamo @code{LyricText}, che sembra quello giusto.  Clicchiamo
933 su di esso e troviamo le proprietà del testo.  Queste comprendono @code{font-series}
934 e @code{font-size}, ma niente che possa dare una forma corsiva.  Ciò è dovuto
935 al fatto che la proprietà della forma è comune a tutti gli oggetti di tipi
936 di carattere (@emph{font}).  Quindi, invece di includerla in ogni oggetto di
937 formattazione, viene raggruppata insieme ad altre simili proprietà comuni
938 e inserita in un'@strong{Interfaccia}: @code{font-interface}.
939
940 Ora dobbiamo capire come trovare le proprietà delle interfacce e
941 come scoprire quali oggetti usano queste proprietà.
942
943 Torna a vedere la pagina che descrive LyricText.  In fondo alla
944 pagina c'è una lista di interfacce cliccabili supportate da LyricText.
945 La lista ha molti elementi, incluso @code{font-interface}.  Cliccando
946 su di essa arriviamo alle proprietà associate con questa interfaccia, che
947 sono anche le proprietà di tutti gli oggetti che la supportano, tra cui
948 LyricText.
949
950 Vediamo tutte le proprietà configurabili dall'utente che controllano i
951 tipi di carattere, compresa @code{font-shape(symbol)}, dove @code{symbol} può
952 essere impostato su @code{upright}, @code{italic} o @code{caps}.
953
954 Puoi notare che lì sono elencate anche @code{font-series} e @code{font-size}.
955 Ti potresti chiedere: perché le proprietà comuni dei tipi di carattere
956 @code{font-series} e @code{font-size} fanno parte sia dell'oggetto
957 @code{LyricText} sia dell'interfaccia @code{font-interface} mentre @code{font-shape}
958 è presente solo nell'interfaccia?  Ciò è dovuto al fatto che i valori globali
959 predefiniti di @code{font-series} e @code{font-size} cambiano quando viene
960 creato un oggetto @code{LyricText}, mentre i valori di @code{font-shape} non
961 cambiano.  Gli elementi in @code{LyricText} indicano quali sono i
962 valori per queste due proprietà che si applicano a @code{LyricText}.  Altri
963 oggetti che supportano @code{font-interface} imposteranno queste proprietà
964 in modo diverso quando vengono creati.
965
966 Vediamo se ora riusciamo a costruire il comando @code{\override}
967 per rendere il testo corsivo.  L'oggetto è @code{LyricText},
968 la proprietà è @code{font-shape} e il valore è
969 @code{italic}.  Come in precedenza, ometteremo il contesto.
970
971 Per inciso, è importante notare che alcune proprietà prendono come valori
972 dei simboli, ad esempio @code{italic}; in questo caso i valori devono essere
973 preceduti da un apostrofo, @code{'}.  I simboli vengono letti internamente da
974 LilyPond.  Nota che sono diversi dalle stringhe di testo arbitrarie, che
975 appaiono nella forma @code{"una stringa di testo"}; maggiori informazioni sui
976 simboli e le stringhe si trovano in @rextend{Scheme tutorial}.
977
978 Quindi il comando @code{\override} che rende il testo corsivo è:
979
980 @example
981 \override LyricText.font-shape = #'italic
982 @end example
983
984 @noindent
985 Deve essere posizionato proprio di fronte al testo che vogliamo modificare,
986 in questo modo:
987
988 @cindex proprietà font-shape, esempio
989 @cindex font-shape, esempio
990 @cindex italic, esempio
991 @cindex corsivo, esempio
992 @cindex LyricText, esempio di sovrascrittura
993 @cindex @code{\addlyrics}, esempio
994
995 @lilypond[quote,ragged-right,verbatim]
996 {
997   \key es \major
998   \time 6/8
999   \relative {
1000     r4 bes'8 bes[( g]) g |
1001     g8[( es]) es d[( f]) as |
1002     as8 g
1003   }
1004   \addlyrics {
1005     \override LyricText.font-shape = #'italic
1006     The man who | feels love's sweet e -- | mo -- tion
1007   }
1008 }
1009 @end lilypond
1010
1011 @noindent
1012 e tutto il testo è in corsivo.
1013
1014 @warning{Nel testo bisogna lasciare sempre uno spazio bianco tra l'ultima
1015 sillaba e la parentesi graffa che chiude il blocco.}
1016
1017
1018 @seealso
1019 Estendere: @rextend{Scheme tutorial}.
1020
1021
1022 @node Tipi di proprietà
1023 @subsection Tipi di proprietà
1024 @translationof Types of properties
1025
1026 @cindex tipi di proprietà
1027 @cindex proprietà, tipi di
1028
1029 Finora abbiamo visto due tipi di proprietà: @code{number} e
1030 @code{symbol}.  Per essere valido, il valore dato a una proprietà
1031 deve essere del tipo corretto e obbedire alle regole di quel tipo.
1032 Nella guida al Funzionamento interno il tipo di proprietà è indicato
1033 tra parentesi dopo il nome della proprietà.  Ecco una lista dei tipi
1034 che ti possono servire, corredata dalle regole per ciascun tipo e da alcuni
1035 esempi.  Ovviamente, se inseriti in un comando @code{\override}, devono
1036 essere sempre preceduti dal simbolo di cancelletto,@tie{}@code{#}, anche se
1037 il valore stesso già inizia con@tie{}@code{#}.  In questa sede diamo solo
1038 esempi di costanti: se si desidera elaborare un valore con Scheme, si veda
1039 @rextend{Calculations in Scheme}.
1040
1041 @multitable @columnfractions .2 .45 .35
1042 @headitem Tipo di proprietà
1043   @tab Regole
1044   @tab Esempi
1045 @item Boolean
1046   @tab O Vero (True) o Falso (False), rappresentato da #t o #f
1047   @tab @code{#t}, @code{#f}
1048 @item Dimension (in staff space)
1049   @tab Un numero decimale (nell'unità di misura dello spazio del rigo)
1050   @tab @code{2.5}, @code{0.34}
1051 @item Direction
1052   @tab Una valida direzione costante o il suo equivalente numerico
1053   (@code{0} o @code{CENTER} indicano una direzione neutrale)
1054   @tab @code{LEFT}, @code{CENTER}, @code{UP},
1055        @code{1}, @w{@code{-1}}
1056 @item Integer
1057   @tab Un numero intero
1058   @tab @code{3}, @code{-1}
1059 @item List
1060   @tab Una sequenza di costanti o simboli separata da spazi, racchiusa
1061   tra parentesi e preceduta da un apostrofo
1062   @tab @code{'(left-edge staff-bar)}, @code{'(1)}, @code{'()},
1063        @code{'(1.0 0.25 0.5)}
1064 @item Markup
1065   @tab Qualsiasi valido blocco markup
1066   @tab @code{\markup @{ \italic "cresc." @}}, @code{"bagpipe"}
1067 @item Moment
1068   @tab Una frazione di una nota intera costruita con la
1069 funzione make-moment
1070   @tab @code{(ly:make-moment 1/4)},
1071        @code{(ly:make-moment 3/8)}
1072 @item Number
1073   @tab Qualsiasi valore positivo o negativo, possibilmente decimale
1074   @tab @code{3}, @w{@code{-2.45}}
1075 @item Pair (of numbers)
1076   @tab Due numeri separati da un @q{spazio . spazio} e racchiusi tra
1077 parentesi precedute da un apostrofo
1078   @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)}
1079 @item Symbol
1080   @tab Qualsiasi insieme di simboli ammesso per quella proprietà,
1081 preceduto da un apostrofo
1082   @tab @code{'italic}, @code{'inside}
1083 @item Unknown
1084   @tab Una procedura o un valore @code{#f} che impedisca l'azione
1085   @tab @code{bend::print}, @code{ly:text-interface::print},
1086        @code{#f}
1087 @item Vector
1088   @tab Costanti
1089   racchiuse tra @code{#(}@dots{}@code{)}.
1090   @tab @code{#(#t #t #f)}
1091 @end multitable
1092
1093
1094 @seealso
1095 Estendere: @rextend{Scheme tutorial}.
1096
1097
1098 @node Aspetto degli oggetti
1099 @section Aspetto degli oggetti
1100 @translationof Appearance of objects
1101
1102 Mettiamo in pratica quello che abbiamo imparato con un po' di
1103 esempi che mostrano come modificare l'aspetto degli elementi
1104 di una partitura.
1105
1106 @menu
1107 * Visibilità e colore degli oggetti::
1108 * Dimensione degli oggetti::
1109 * Lunghezza e spessore degli oggetti::
1110 @end menu
1111
1112 @node Visibilità e colore degli oggetti
1113 @subsection Visibilità e colore degli oggetti
1114 @translationof Visibility and color of objects
1115
1116 Potremmo voler creare una partitura priva di alcuni elementi a
1117 scopo didattico, perché lo studente possa esercitarsi
1118 a inserirli.  Vediamo un semplice esempio e immaginiamo che
1119 l'esercizio consista nell'inserire le stanghette mancanti
1120 di un brano.  Ma di norma le stanghette sono inserite
1121 automaticamente: come lo possiamo impedire?
1122
1123 Prima di iniziare, occorre ricordare che le proprietà degli oggetti sono
1124 raggruppate nelle cosiddette @emph{interfacce} -- si veda @ref{Properties
1125 found in interfaces}.  Queste servono semplicemente a raggruppare quelle
1126 proprietà che possono essere usate insieme per modificare un oggetto
1127 grafico -- se una di queste è ammessa per un oggetto, lo sono anche le
1128 altre.  Alcuni oggetti usano le proprietà di alcune interfacce, altri
1129 quelle di altre interfacce.  Le interfacce che contengono le proprietà
1130 usate da un particolare grob (oggetto grafico) sono elencate nella guida al
1131 Funzionamento interno in fondo alla pagina che descrive il grob; queste
1132 proprietà possono essere individuate consultando quelle interfacce.
1133
1134 In @ref{Properties of layout objects} abbiamo spiegato come trovare le
1135 informazioni sui grob.  Usando lo stesso approccio, andiamo nella guida
1136 al Funzionamento interno per trovare l'oggetto grafico relativo alla
1137 stanghetta (@emph{bar line}).  Passando da @emph{Backend} e @emph{All layout objects}
1138 troviamo un oggetto grafico chiamato @code{BarLine}.  Tra le sue proprietà ce ne sono
1139 due che controllano la visibilità: @code{break-visibility} e @code{stencil}.  Anche
1140 Barline supporta varie interfacce, tra cui la @code{grob-interface},
1141 dove troviamo le proprietà @code{transparent} e @code{color}.
1142 Tutte queste proprietà hanno degli effetti sulla visibilità delle stanghette (e,
1143 ovviamente, anche di molti altri oggetti grafici).  Vediamole una per
1144 volta.
1145
1146 @menu
1147 * La proprietà stencil::
1148 * La proprietà break-visibility::
1149 * La proprietà transparent::
1150 * La proprietà color::
1151 @end menu
1152
1153 @node La proprietà stencil
1154 @unnumberedsubsubsec La proprietà @code{stencil}
1155 @translationof The stencil property
1156
1157 @cindex proprietà stencil
1158 @cindex stencil, proprietà
1159
1160 Questa proprietà controlla l'aspetto delle stanghette specificando il
1161 simbolo (glifo) da usare.  Come nel caso di molte altre proprietà,
1162 si può far in modo che non usi nessun simbolo impostando il suo
1163 valore su @code{#f}.  Proviamo, come prima, omettendo il contesto
1164 implicito, @code{Voice}:
1165
1166 @cindex BarLine, esempio di sovrascrittura
1167 @cindex proprietà stencil, esempio
1168 @cindex stencil, esempio
1169
1170 @lilypond[quote,ragged-right,verbatim]
1171 \relative {
1172   \time 12/16
1173   \override BarLine.stencil = ##f
1174   c''4 b8 c d16 c d8 |
1175   g,8 a16 b8 c d4 e16 |
1176   e8
1177 }
1178 @end lilypond
1179
1180 Le stanghette sono ancora visibili.  Cosa abbiamo sbagliato?  Torna alla
1181 guida del Funzionamento interno e scorri di nuovo la pagina che elenca
1182 le proprietà di BarLine.  In cima alla pagina dice @qq{Barline objects are
1183 created by: Bar_engraver}.  Vai alla pagina @code{Bar_engraver}.  In fondo
1184 si trova una lista dei contesti nel quale opera l'incisore della battuta.
1185 Tutti questi sono di tipo @code{Staff}, dunque la ragione per cui il comando
1186 @code{\override} precedente non funziona è che @code{Barline} non si trova
1187 nel contesto predefinito, @code{Voice}.  Se il contesto indicato non è
1188 corretto, il comando non funziona.  Non viene generato alcun messaggio
1189 di errore e non viene registrato niente nel file di log.  Proviamo a
1190 correggerlo specificando il contesto giusto:
1191
1192 @cindex BarLine, esempio di sovrascrittura
1193 @cindex proprietà stencil, esempio
1194 @cindex stencil, esempio
1195
1196 @lilypond[quote,ragged-right,verbatim]
1197 \relative {
1198   \time 12/16
1199   \override Staff.BarLine.stencil = ##f
1200   c''4 b8 c d16 c d8 |
1201   g,8 a16 b8 c d4 e16 |
1202   e8
1203 }
1204 @end lilypond
1205
1206 Ora le stanghette sono sparite.  Impostare la proprietà @code{stencil}
1207 su @code{#f} è un'operazione talmente frequente che è stata creata una
1208 scorciatoia, @code{\omit}:
1209 @funindex \omit
1210
1211 @lilypond[quote,ragged-right,verbatim]
1212 \relative {
1213   \time 12/16
1214   \omit Staff.BarLine
1215   c''4 b8 c d16 c d8 |
1216   g,8 a16 b8 c d4 e16 |
1217   e8
1218 }
1219 @end lilypond
1220
1221 Si noti però che impostare la proprietà @code{stencil} su @code{#f}
1222 causerà degli errori nel caso in cui le dimensioni dell'oggetto
1223 siano necessarie per elaborarlo correttamente.  Ad esempio, si creano
1224 degli errori se la proprietà @code{stencil} dell'oggetto @code{NoteHead} è
1225 impostata su @code{#f}.  In questo caso è possibile usare invece la funzione
1226 @code{point-stencil}, che trasforma lo stencil in un oggetto a dimensione
1227 zero:
1228
1229 @lilypond[quote,verbatim]
1230 \relative {
1231   c''4 c
1232   \once \override NoteHead.stencil = #point-stencil
1233   c4 c
1234 }
1235 @end lilypond
1236
1237 @node La proprietà break-visibility
1238 @unnumberedsubsubsec La proprietà @code{break-visibility}
1239 @translationof The break-visibility property
1240
1241 @cindex proprietà break-visibility
1242 @cindex break-visibility, proprietà
1243
1244 Nella pagina di @code{BarLine} della guida al Funzionamento interno
1245 vediamo che la proprietà @code{break-visibility} richiede un vettore di
1246 tre valori booleani.
1247 Questi valori controllano rispettivamente se le stanghette debbano
1248 comparire alla fine, in mezzo o all'inizio dei righi.  Dato
1249 che nel nostro esempio vogliamo sopprimere tutte le stanghette, il valore
1250 che ci serve è @code{#(#f #f #f)} (equivalente al nome @code{all-invisible}).
1251 Proviamo, ricordando di includere il contesto @code{Staff}.  Si noti che prima
1252 della parentesi di apertura abbiamo @code{##}.  Un @code{#} è necessario
1253 perché introduce un vettore, mentre il primo@tie{}@code{#} deve precedere, come
1254 sempre, il valore del comando @code{\override}.
1255
1256 @cindex BarLine, esempio di sovrascrittura
1257 @cindex proprietà break-visibility, esempio
1258 @cindex break-visibility, esempio
1259
1260 @lilypond[quote,ragged-right,verbatim]
1261 \relative {
1262   \time 12/16
1263   \override Staff.BarLine.break-visibility = ##(#f #f #f)
1264   c''4 b8 c d16 c d8 |
1265   g,8 a16 b8 c d4 e16 |
1266   e8
1267 }
1268 @end lilypond
1269
1270 E vediamo che anche questo comando elimina tutte le stanghette.
1271
1272 @node La proprietà transparent
1273 @unnumberedsubsubsec La proprietà @code{transparent}
1274 @translationof The transparent property
1275
1276 @cindex proprietà transparent
1277 @cindex transparent, proprietà
1278 @cindex trasparenza
1279
1280 Nelle proprietà specificate nella pagina @code{grob-interface} della
1281 guida al Funzionamento interno vediamo che la proprietà @code{transparent} è
1282 un booleano.  Quindi deve essere impostata su @code{#t} («true», 'vero') per
1283 rendere trasparente il grob.  Nel prossimo esempio rendiamo trasparente
1284 il segno di tempo invece delle stanghette.  Per farlo dobbiamo trovare
1285 il nome del grob del segno di tempo (in inglese @emph{time signature}).
1286 Torniamo alla pagina @q{All layout objects} per scoprire quali sono le
1287 proprietà dell'oggetto di formattazione @code{TimeSignature}.  Tale grob
1288 è generato dall'incisore @code{Time_signature_engraver}, che opera
1289 nel contesto @code{Staff} e supporta l'interfaccia @code{grob-interface}.
1290 Quindi il comando che rende trasparente l'indicazione di tempo è:
1291
1292 @cindex TimeSignature, esempio di sovrascrittura
1293 @cindex proprietà transparent, esempio
1294 @cindex transparent, esempio
1295
1296 @lilypond[quote,ragged-right,verbatim]
1297 \relative {
1298   \time 12/16
1299   \override Staff.TimeSignature.transparent = ##t
1300   c''4 b8 c d16 c d8 |
1301   g,8 a16 b8 c d4 e16 |
1302   e8
1303 }
1304 @end lilypond
1305
1306 @noindent
1307 Impostare la proprietà @code{transparent} è un'operazione piuttosto
1308 frequente, perciò è stata creata la scorciatoia @code{\hide}:
1309 @funindex \hide
1310
1311 @lilypond[quote,ragged-right,verbatim]
1312 \relative {
1313   \time 12/16
1314   \hide Staff.TimeSignature
1315   c''4 b8 c d16 c d8 |
1316   g,8 a16 b8 c d4 e16 |
1317   e8
1318 }
1319 @end lilypond
1320
1321 @noindent
1322 L'indicazione di tempo è scomparsa; è rimasto però uno spazio al suo posto.  Magari
1323 questo è quello che si desidera, ad esempio per creare un esercizio in cui uno
1324 studente deve riempire degli spazi vuoti.  Ma in altre circostanze ciò può
1325 non essere gradito.  Per eliminare lo spazio vuoto bisogna impostare la
1326 proprietà stencil su @code{#f}:
1327
1328 @cindex TimeSignature, esempio di sovrascrittura
1329 @cindex proprietà stencil, esempio
1330 @cindex stencil, esempio
1331
1332 @lilypond[quote,ragged-right,verbatim]
1333 \relative {
1334   \time 12/16
1335   \omit Staff.TimeSignature
1336   c''4 b8 c d16 c d8 |
1337   g,8 a16 b8 c d4 e16 |
1338   e8
1339 }
1340 @end lilypond
1341
1342 @noindent
1343 la differenza è ovvia: se si imposta lo stencil su @code{#f} (possibilmente
1344 con @code{\omit}) l'oggetto scompare del tutto; se si rende l'oggetto
1345 @code{trasparente} questo resta dove è, anche se invisibile.
1346
1347 @node La proprietà color
1348 @unnumberedsubsubsec La proprietà @code{color}
1349 @translationof The color property
1350
1351 @cindex proprietà color
1352 @cindex color, proprietà
1353
1354 Infine, proviamo a rendere le stanghette invisibili colorandole
1355 di bianco.  (Si tratta di un metodo problematico perché la
1356 stanghetta bianca può imbiancare o meno le linee del rigo che
1357 incrocia.  Puoi vedere in alcuni degli esempi successivi che questo
1358 accade in modo imprevedibile.  I motivi per cui questo accade e il
1359 modo in cui è possibile controllarlo sono esposti in @ruser{Painting objects white}.
1360 Ma per il momento stiamo imparando la proprietà color, quindi accettiamo questa limitazione.)
1361
1362 L'interfaccia @code{grob-interface} stabilisce che il valore della
1363 proprietà color è una lista, ma non spiega cosa debba essere questa
1364 lista.  La lista di cui ha bisogno è in realtà una lista di valori
1365 in unità interne, ma per evitare di dover imparare quali siano queste
1366 unità vengono forniti vari modi di specificare un colore.  Il primo
1367 modo consiste nell'usare uno dei colori @q{normali} elencati nella
1368 prima tabella in @ruser{List of colors}.  Per rendere bianche le
1369 stanghette scriviamo:
1370
1371 @cindex BarLine, esempio di sovrascrittura
1372 @cindex proprietà color
1373 @cindex color, proprietà
1374
1375 @lilypond[quote,ragged-right,verbatim]
1376 \relative {
1377   \time 12/16
1378   \override Staff.BarLine.color = #white
1379   c''4 b8 c d16 c d8 |
1380   g,8 a16 b8 c d4 e16 |
1381   e8
1382 }
1383 @end lilypond
1384
1385 @noindent
1386 e di nuovo vediamo che le stanghette non sono visibili.  Si noti
1387 che @emph{white} non è preceduto da un apostrofo, perché non
1388 è un simbolo, ma una @emph{variabile}.  Quando viene esaminata, fornisce
1389 la lista di valori interni necessari per impostare il colore su
1390 bianco.  Gli altri colori nella lista normale sono anch'essi
1391 delle variabili.  Per convincerti che funziona potresti provare a
1392 cambiare il colore e usare una delle altre variabili presenti
1393 nella lista.
1394
1395 @cindex color, X11
1396 @cindex colori X11
1397 @cindex X11, colori
1398
1399 @funindex x11-color
1400
1401 Il secondo modo per cambiare il colore è attraverso la lista
1402 di nomi di colori X11 che si trova in @ruser{List of colors}.
1403 Questi colori vengono trasformati in valori reali dalla funzione
1404 @code{x11-color}, che converte i simboli di colore X11 nella lista
1405 di valori interni:
1406
1407 @cindex BarLine, esempio di sovrascrittura
1408 @cindex proprietà color, esempio
1409 @cindex color, esempio
1410
1411 @lilypond[quote,ragged-right,verbatim]
1412 \relative {
1413   \time 12/16
1414   \override Staff.BarLine.color = #(x11-color 'white)
1415   c''4 b8 c d16 c d8 |
1416   g,8 a16 b8 c d4 e16 |
1417   e8
1418 }
1419 @end lilypond
1420
1421 @noindent
1422 Si noti che in questo caso la funzione @code{x11-color} prende
1423 un simbolo come argomento, dunque il simbolo deve essere preceduto
1424 da un apostrofo per impedire che sia considerato una variabile e
1425 l'intera funzione deve essere racchiusa tra parentesi.
1426
1427 @cindex colori rgb
1428 @cindex rgb, colori
1429 @cindex color, rgb
1430
1431 @funindex rgb-color
1432
1433 Esiste un'altra funzione, che converte i valori RGB in colori
1434 interni, la funzione @code{rgb-color}.  Prende tre argomenti
1435 che specificano l'intensità dei colori rosso, verde e blu.
1436 I valori vanno da 0 a 1.  Quindi per avere il colore rosso
1437 il valore sarà @code{(rgb-color 1 0 0)}
1438 e per avere il bianco sarà @code{(rgb-color 1 1 1)}:
1439
1440 @cindex BarLine, esempio di sovrascrittura
1441 @cindex proprietà color, esempio
1442 @cindex color, esempio
1443
1444 @lilypond[quote,ragged-right,verbatim]
1445 \relative {
1446   \time 12/16
1447   \override Staff.BarLine.color = #(rgb-color 1 1 1)
1448   c''4 b8 c d16 c d8 |
1449   g,8 a16 b8 c d4 e16 |
1450   e8
1451 }
1452 @end lilypond
1453
1454 Infine, è disponibile anche una scala di grigi, appartenente all'insieme
1455 di colori X11.  Questi vanno dal nero, @code{'grey0},
1456 al bianco, @code{'grey100}, con cadenza di 1.  Ecco un
1457 esempio in cui tutti gli oggetti di formattazione sono
1458 impostati su diverse tonalità di grigio:
1459
1460 @cindex StaffSymbol, esempio di sovrascrittura
1461 @cindex TimeSignature, esempio di sovrascrittura
1462 @cindex Clef, esempio di sovrascrittura
1463 @cindex NoteHead, esempio di sovrascrittura
1464 @cindex Stem, esempio di sovrascrittura
1465 @cindex BarLine, esempio di sovrascrittura
1466 @cindex proprietà color, esempio
1467 @cindex color, esempio
1468 @cindex x11-color, esempio di utilizzo
1469
1470 @lilypond[quote,ragged-right,verbatim]
1471 \relative {
1472   \time 12/16
1473   \override Staff.StaffSymbol.color = #(x11-color 'grey30)
1474   \override Staff.TimeSignature.color = #(x11-color 'grey60)
1475   \override Staff.Clef.color = #(x11-color 'grey60)
1476   \override Voice.NoteHead.color = #(x11-color 'grey85)
1477   \override Voice.Stem.color = #(x11-color 'grey85)
1478   \override Staff.BarLine.color = #(x11-color 'grey10)
1479   c''4 b8 c d16 c d8 |
1480   g,8 a16 b8 c d4 e16 |
1481   e8
1482 }
1483 @end lilypond
1484
1485 @noindent
1486 Nota i contesti associati a ciascuno degli oggetti di formattazione.
1487 È importante scegliere quelli giusti, altrimenti i comandi non
1488 funzioneranno!  Ricorda, il contesto è quello in cui si trova il
1489 relativo incisore.  Il contesto predefinito per gli incisori si trova
1490 partendo dall'oggetto di formattazione (@emph{layout object}) per poi
1491 andare all'incisore che lo produce: la pagina dell'incisore nella
1492 guida al Funzionamento interno riporterà a quale contesto
1493 appartenga di norma l'incisore.
1494
1495
1496 @node Dimensione degli oggetti
1497 @subsection Dimensione degli oggetti
1498 @translationof Size of objects
1499
1500 @cindex modificare la dimensione degli oggetti
1501 @cindex dimensione degli oggetti
1502 @cindex oggetti, dimensione degli
1503 @cindex oggetti, modificare la dimensione degli
1504
1505 Iniziamo rivedendo l'esempio precedente (vedi
1506 @ref{Nesting music expressions}) che mostrava come
1507 inserire un nuovo rigo temporaneo, come in un @rglos{ossia}.
1508
1509 @cindex proprietà alignAboveContext, esempio
1510 @cindex @code{\with}, esempio
1511
1512 @lilypond[quote,ragged-right,verbatim]
1513 \new Staff ="main" {
1514   \relative {
1515     r4 g'8 g c4 c8 d |
1516     e4 r8
1517     <<
1518       { f8 c c }
1519       \new Staff \with {
1520         alignAboveContext = #"main" }
1521       { f8 f c }
1522     >>
1523     r4 |
1524   }
1525 }
1526 @end lilypond
1527
1528 Gli ossia di norma vengono scritti senza chiave e senza indicazione di
1529 tempo e hanno solitamente una dimensione leggermente inferiore a
1530 quella del rigo principale.  Sappiamo già come togliere la chiave e
1531 il segno di tempo, cioè impostando semplicemente la proprietà stencil di
1532 ciascun oggetto su @code{#f}, così:
1533
1534 @cindex proprietà alignAboveContext, esempio
1535 @cindex @code{\with}, esempio
1536 @funindex \omit
1537 @cindex Clef, esempio di sovrascrittura
1538 @cindex TimeSignature, esempio di sovrascrittura
1539
1540 @lilypond[quote,ragged-right,verbatim]
1541 \new Staff ="main" {
1542   \relative {
1543     r4 g'8 g c4 c8 d |
1544     e4 r8
1545     <<
1546       { f8 c c }
1547       \new Staff \with {
1548         alignAboveContext = #"main"
1549       }
1550       {
1551         \omit Staff.Clef
1552         \omit Staff.TimeSignature
1553         { f8 f c }
1554       }
1555     >>
1556     r4 |
1557   }
1558 }
1559 @end lilypond
1560
1561 @noindent
1562 dove l'ulteriore coppia di parentesi dopo il blocco @code{\with} è
1563 necessaria perché le sovrascritture e la musica racchiusi
1564 siano applicati al rigo dell'ossia.
1565
1566 Ma qual è la differenza tra modificare il contesto del rigo con
1567 @code{\with} e modificare la proprietà stencil della chiave e
1568 del segno di tempo con @code{\override} o in questo caso @code{\omit}?  La
1569 principale differenza è che le modifiche inserite in un blocco @code{\with}
1570 vengono applicate nel momento in cui viene creato il contesto e permangono
1571 come valori @strong{predefiniti} per la durata di quel contesto, mentre i
1572 comandi @code{\set} o @code{\override} incorporati nel blocco
1573 della musica sono dinamici -- le loro modifiche sono sincronizzate
1574 con un punto preciso della musica.  Se le modifiche sono disattivate o
1575 ripristinate con @code{\unset} o @code{\revert} tornano ai valori
1576 stabiliti nel blocco @code{\with} o, in mancanza di impostazioni
1577 al suo interno, a quelli predefiniti.
1578
1579 Alcune proprietà di contesto possono essere modificate solo nei blocchi
1580 @code{\with}.  Si tratta di quelle proprietà che non si possono
1581 modificare in seguito alla creazione del contesto.  @code{alignAboveContext} e
1582 @code{alignBelowContext} sono due di esse: dopo la creazione
1583 del rigo il suo allineamento è fissato, e non ha
1584 senso tentare di cambiarlo successivamente.
1585
1586 I valori predefiniti delle proprietà degli oggetti di formattazione possono
1587 essere definiti anche nei blocchi @code{\with}.  Basta usare il normale comando
1588 @code{\override} senza specificare il nome del contesto, dato che questo è
1589 definito senza ambiguità come il contesto che il blocco @code{\with} sta
1590 modificando.  Anzi, viene generato un errore se si specifica un contesto
1591 in questa situazione.
1592
1593 Dunque possiamo sostituire l'esempio precedente con
1594
1595 @cindex alignAboveContext property, esempio
1596 @cindex @code{\with}, esempio
1597 @cindex Clef, esempio di sovrascrittura
1598 @cindex TimeSignature, esempio di sovrascrittura
1599
1600 @lilypond[quote,ragged-right,verbatim]
1601 \new Staff ="main" {
1602   \relative {
1603     r4 g'8 g c4 c8 d |
1604     e4 r8
1605     <<
1606       { f8 c c }
1607       \new Staff \with {
1608         alignAboveContext = #"main"
1609         % Nasconde le chiavi di questo rigo
1610         \override Clef.stencil = ##f
1611         % Nasconde le indicazioni di tempo di questo rigo
1612         \override TimeSignature.stencil = ##f
1613       }
1614       { f8 f c }
1615     >>
1616     r4 |
1617   }
1618 }
1619 @end lilypond
1620
1621 Si possono usare anche le scorciatoie @code{\hide} e @code{\omit} per
1622 impostare la proprietà @code{transparent} e togliere lo @code{stencil}
1623
1624 @lilypond[quote,ragged-right,verbatim]
1625 \new Staff ="main" {
1626   \relative {
1627     r4 g'8 g c4 c8 d |
1628     e4 r8
1629     <<
1630       { f8 c c }
1631       \new Staff \with {
1632         alignAboveContext = #"main"
1633         % Nasconde le chiavi di questo rigo
1634         \omit Clef
1635         % Nasconde le indicazioni di tempo di questo rigo
1636         \omit TimeSignature
1637       }
1638       { f8 f c }
1639     >>
1640     r4 |
1641   }
1642 }
1643 @end lilypond
1644
1645 Infine arriviamo a modificare la dimensione degli oggetti di formattazione.
1646
1647 Alcuni oggetti di formattazione sono dei glifi scelti da un tipo di
1648 carattere.  Ad esempio le teste di nota, le alterazioni, le annotazioni,
1649 le chiavi, le indicazioni di tempo, le dinamiche, il testo vocale.  La loro dimensione
1650 varia se si modifica la proprietà @code{font-size}, come vedremo a
1651 breve.  Altri oggetti di formattazione come le legature di portamento e
1652 di valore -- in generale, tutti gli oggetti estensori (@emph{spanner}) -- vengono
1653 disegnati individualmente, dunque non esiste un @code{font-size} a loro
1654 associato.  Questi oggetti generalmente derivano la loro dimensione dagli
1655 oggetti a cui sono connessi, quindi di solito non è necessario modificare
1656 la loro dimensione a mano.  Altre proprietà, come la lunghezza dei gambi
1657 e delle stanghette, lo spessore delle travature e di altre linee e la
1658 separazione delle linee del rigo, devono essere modificate in modi speciali.
1659
1660 Tornando all'esempio dell'ossia, proviamo prima a cambiare font-size.
1661 Possiamo farlo in due modi.  Possiamo modificare la dimensione dei
1662 tipi di carattere di ogni tipo di oggetto, come le teste di nota
1663 (@code{NoteHead}) con un comando di questo tipo
1664
1665 @example
1666 \override NoteHead.font-size = #-2
1667 @end example
1668
1669 oppure possiamo modificare la dimensione di tutti i tipi di carattere usando
1670 una proprietà speciale, @code{fontSize}, con @code{\set} oppure includendola
1671 in un blocco @code{\with} (ma senza @code{\set}).
1672
1673 @example
1674 \set fontSize = #-2
1675 @end example
1676
1677 Entrambe queste dichiarazioni fanno sì che la dimensione del tipo di carattere
1678 sia ridotta di due unità rispetto al valore precedente, dove ogni unità
1679 riduce o aumenta la dimensione di circa il 12%.
1680
1681 Proviamolo nel nostro esempio dell'ossia:
1682
1683 @cindex alignAboveContext property, esempio
1684 @cindex @code{\with}, esempio
1685 @cindex Clef, esempio di sovrascrittura
1686 @cindex TimeSignature, esempio di sovrascrittura
1687 @cindex proprietà fontSize, esempio
1688 @cindex fontSize, esempio
1689
1690 @lilypond[quote,ragged-right,verbatim]
1691 \new Staff ="main" {
1692   \relative {
1693     r4 g'8 g c4 c8 d |
1694     e4 r8
1695     <<
1696       { f8 c c }
1697       \new Staff \with {
1698         alignAboveContext = #"main"
1699         \omit Clef
1700         \omit TimeSignature
1701         % Riduce la dimensione di tutti i tipi di carattere di circa il 24%
1702         fontSize = #-2
1703       }
1704       { f8 f c }
1705     >>
1706     r4 |
1707   }
1708 }
1709 @end lilypond
1710
1711 L'esempio non è ancora a posto.  Le teste di nota e  le code sono
1712 più piccole, ma in proporzione i gambi sono troppo lunghi e le linee
1713 del rigo sono troppo separate.  Dovrebbero essere scalati in proporzione
1714 alla riduzione del tipo di carattere.  La prossima sezione spiega come
1715 farlo.
1716
1717 @node Lunghezza e spessore degli oggetti
1718 @subsection Lunghezza e spessore degli oggetti
1719 @translationof Length and thickness of objects
1720
1721 @cindex distanze
1722 @cindex thickness, proprietà
1723 @cindex spessore
1724 @cindex lunghezza
1725 @cindex magstep
1726 @cindex dimensione, modificare la
1727 @cindex lunghezza del gambo, modificare la
1728 @cindex spaziatura delle linee del rigo, modificare la
1729
1730 Distanze e lunghezze in LilyPond sono misurate generalmente in @code{staff-space},
1731 ovvero la distanza tra linee adiacenti del rigo (o talvolta la metà di uno
1732 spazio rigo), mentre gran parte delle proprietà che controllano lo spessore
1733 (@code{thickness}) sono misurate con l'unità di misura di una proprietà
1734 interna chiamata @code{line-thickness.}  Ad esempio, lo spessore predefinito
1735 delle linee delle forcine è di 1 unità di @code{line-thickness},
1736 mentre lo spessore (@code{thickness}) di un gambo di nota è 1.3.  Si noti
1737 che alcune proprietà dello spessore sono diverse; per esempio, lo spessore
1738 delle travature è controllato dal valore della proprietà @code{beam-thickness},
1739 che si misura in @code{staff-space}.
1740
1741 Dunque come si possono scalare le lunghezze in proporzione alla
1742 dimensione del carattere?
1743 È possibile ricorrendo a una funzione speciale chiamata
1744 @code{magstep}, che serve proprio a questo scopo.  Prende un
1745 argomento, la modifica della dimensione del tipo di carattere (#-2
1746 nell'esempio precedente) e restituisce un fattore di ridimensionamento
1747 adatto a ridurre gli altri oggetti proporzionalmente.  Si usa in
1748 questo modo:
1749
1750 @cindex proprietà alignAboveContext, esempio
1751 @cindex alignAboveContext, esempio
1752 @cindex @code{\with}, esempio
1753 @cindex Clef, esempio di sovrascrittura
1754 @cindex TimeSignature, esempio di sovrascrittura
1755 @cindex proprietà fontSize, esempio
1756 @cindex fontSize, esempio
1757 @cindex StaffSymbol, esempio di sovrascrittura
1758 @cindex funzione magstep, esempio di uso
1759 @cindex magstep, esempio di uso
1760 @cindex proprietà staff-space, esempio
1761 @cindex staff-space, esempio
1762 @cindex proprietà stencil, esempio
1763 @cindex stencil, esempio
1764
1765 @lilypond[quote,ragged-right,verbatim]
1766 \new Staff ="main" {
1767   \relative {
1768     r4 g'8 g c4 c8 d |
1769     e4 r8
1770     <<
1771       { f8 c c }
1772       \new Staff \with {
1773         alignAboveContext = #"main"
1774         \omit Clef
1775         \omit TimeSignature
1776         fontSize = #-2
1777         % Riduce proporzionalmente la lunghezza dei gambi e la spaziatura tra le linee
1778         \override StaffSymbol.staff-space = #(magstep -2)
1779       }
1780       { f8 f c }
1781     >>
1782     r4 |
1783   }
1784 }
1785 @end lilypond
1786
1787 @noindent
1788 Dato che la lunghezza dei gambi e molte altre proprietà relative alla
1789 lunghezza sono sempre calcolate in relazione al valore della proprietà
1790 @code{staff-space}, anche queste sono automaticamente ridimensionate
1791 in lunghezza.  Nota che ciò riguarda solo la scala verticale
1792 dell'ossia -- la scala orizzontale è determinata dalla formattazione
1793 della musica principale perché deve restare sincronizzata con quest'ultima,
1794 quindi le modifiche di dimensione non la riguardano.  Ovviamente, se
1795 la scala di tutta la musica principale venisse cambiata allora la
1796 spaziatura orizzontale cambierebbe.  Tratteremo questo argomento più
1797 avanti, nella parte relativa alla formattazione.
1798
1799 Questo completa la creazione dell'ossia.  Le dimensioni e le lunghezze
1800 di tutti gli altri oggetti possono essere modificati in modi analoghi.
1801
1802 Per piccole modifiche della dimensione, come nell'esempio precedente, non
1803 sono necessari solitamente degli aggiustamenti globali dello spessore delle
1804 varie linee disegnate (come stanghette, travature, forcine, legature di
1805 portamento, etc.).  Se si deve aggiustare lo spessore di un
1806 particolare oggetto di formattazione, è meglio sovrascrivere la sua
1807 proprietà @code{thickness}.  Un esempio di come modificare lo spessore
1808 delle legature di portamento è stato mostrato prima in @ref{Properties of layout objects}.
1809 Lo spessore di tutti gli oggetti disegnati (ovvero quelli non prodotti
1810 da un tipo di carattere) può essere cambiato nello stesso modo.
1811
1812
1813 @node Posizionamento degli oggetti
1814 @section Posizionamento degli oggetti
1815 @translationof Placement of objects
1816
1817 @menu
1818 * Comportamento automatico::
1819 * Oggetti interni al rigo::
1820 * Oggetti esterni al rigo::
1821 @end menu
1822
1823
1824 @node Comportamento automatico
1825 @subsection Comportamento automatico
1826 @translationof Automatic behavior
1827
1828 @cindex within-staff, oggetti
1829 @cindex outside-staff, oggetti
1830 @cindex oggetti dentro il rigo
1831 @cindex oggetti fuori dal rigo
1832
1833 Nella notazione musicale, alcuni oggetti appartengono al rigo, altri
1834 devono esserne posizionati al di fuori.  In LilyPond si chiamano rispettivamente oggetti within-staff
1835 (dentro il rigo) e oggetti outside-staff (fuori dal rigo).
1836
1837 Gli oggetti within-staff sono quelli che si trovano nel rigo, come
1838 le teste e i gambi delle note, le alterazioni, etc@dots{}  La loro posizione
1839 è determinata perlopiù dalla musica stessa: in verticale sono collocati
1840 su determinate posizioni del rigo o sono collegati
1841 ad altri oggetti disposti in questo modo. Di norma LilyPond evita
1842 automaticamente le collisioni tra teste di nota, gambi e alterazioni
1843 in accordi con note ravvicinate.  Esistono comunque dei comandi che
1844 permettono di modificare questo comportamento automatico, come
1845 vedremo tra poco.
1846
1847 Gli oggetti che appartengono allo spazio fuori dal rigo comprendono
1848 gli andamenti, i numeri di chiamata, il testo vocale, le indicazioni dinamiche. Il comportamento di
1849 LilyPond per il posizionamento verticale degli oggetti outside-staff
1850 prevede che questi vengano collocati il più vicino possibile al rigo, mantenendo
1851 però una distanza sufficiente da evitare collisioni con gli altri oggetti.  LilyPond
1852 usa la proprietà @code{outside-staff-priority} per determinare in quale ordine
1853 gli oggetti siano posizionati.
1854
1855 Per prima cosa LilyPond posiziona tutti gli oggetti within-staff.
1856 Poi ordina gli oggetti outside-staff in base alla loro proprietà
1857 @code{outside-staff-priority}.  Gli oggetti outside-staff vengono
1858 considerati uno a uno, a partire dall'oggetto che ha il valore più basso
1859 di priorità (@code{outside-staff-priority}), e disposti in modo
1860 da non entrare in collisione con alcun oggetto già posizionato.
1861 Questo significa che se due oggetti outside-staff si contendono lo
1862 stesso spazio, quello col valore più basso di @code{outside-staff-priority}
1863 sarà più vicino al rigo.  Se due oggetti presentano lo stesso valore per
1864 @code{outside-staff-priority}, quello incontrato per primo viene posizionato
1865 più vicino al rigo.
1866
1867 Nell'esempio seguente tutti i testi hanno la stessa priorità (perché
1868 questa non è impostata in modo esplicito).  Come puoi vedere, @q{Testo3}
1869 è di nuovo posto automaticamente in prossimità del rigo, infilato
1870 sotto @q{Testo2}.
1871
1872 @cindex markup, esempio
1873
1874 @lilypond[quote,fragment,ragged-right,verbatim]
1875 c''2^"Testo1"
1876 c''2^"Testo2" |
1877 c''2^"Testo3"
1878 c''2^"Testo4" |
1879 @end lilypond
1880
1881 Di norma, anche i righi sono collocati quanto più possibile ravvicinati
1882 (ma con una distanza minima).  Se delle note si estenderanno molto
1883 al di fuori del rigo, fino a quello adiacente, costringeranno i righi a distanziarsi
1884 solo in caso di sovrapposizione degli elementi della notazione.  L'esempio
1885 seguente mostra questo @q{annidamento} delle note su righi adiacenti:
1886
1887 @lilypond[quote,ragged-right,verbatim]
1888 <<
1889   \new Staff {
1890     \relative { c'4 a, }
1891   }
1892   \new Staff {
1893     \relative { c''''4 a, }
1894   }
1895 >>
1896 @end lilypond
1897
1898
1899 @node Oggetti interni al rigo
1900 @subsection Oggetti interni al rigo
1901 @translationof Within-staff objects
1902
1903 Abbiamo già visto come i comandi @code{\voiceXXX} influenzino
1904 la direzione di legature di portamento e di valore, delle diteggiature e
1905 di qualsiasi altro elemento che dipenda dalla direzione dei gambi (vedi
1906 @ref{Explicitly instantiating voices}).
1907 Questi comandi sono fondamentali quando si scrive musica polifonica,
1908 perché permettono di distinguere le linee melodiche che si intrecciano.
1909 Talvolta, però, capita di voler modificare questo comportamento
1910 automatico.  Si può fare per intere sezioni musicali o anche per
1911 una singola nota.  La proprietà che controlla questo comportamento
1912 è la proprietà @code{direction} di ogni oggetto di formattazione.
1913 Spieghiamo prima che cosa fa e poi presentiamo alcuni comandi
1914 già pronti, che ti eviteranno di dover scrivere sovrascritture
1915 esplicite per le modifiche più comuni.
1916
1917 Alcuni oggetti di formattazione, come le legature di portamento e di
1918 valore, si incurvano, si piegano o puntano verso l'alto o il basso; altri,
1919 come i gambi e le code, a seconda dell'orientamento si dispongono anche sulla
1920 destra o sulla sinistra.  Tutto questo viene controllato automaticamente
1921 quando si imposta la proprietà @code{direction}.
1922
1923 @menu
1924 * La proprietà direction::
1925 * Diteggiatura::
1926 @end menu
1927
1928 @node La proprietà direction
1929 @unnumberedsubsubsec La proprietà @code{direction}
1930 @translationof The direction property
1931
1932 @cindex down
1933 @cindex direzione, giù
1934 @cindex up
1935 @cindex direzione, su
1936 @cindex center
1937 @cindex direzione, centrale
1938 @cindex neutral
1939 @cindex direzione, neutrale
1940
1941 L'esempio seguente mostra il posizionamento predefinito delle legature di
1942 portamento nella prima battuta, con legature che iniziano sulle note
1943 alte poste sopra le note e quelle che iniziano sulle note basse posizionate
1944 sotto, seguita da una battuta con entrambe le legature forzate verso il
1945 basso, un'altra battuta con entrambe le legatura forzate verso l'alto e infine
1946 una battuta con entrambe le legature ripristinate al comportamento predefinito.
1947
1948 @cindex Slur, esempio di sovrascrittura
1949 @cindex legatura di portamento, esempio di sovrascrittura
1950 @cindex proprietà direction, esempio
1951 @cindex direction, esempio
1952
1953 @lilypond[quote,fragment,verbatim]
1954 a'4( g') c''( a') |
1955 \override Slur.direction = #DOWN
1956 a'4( g') c''( a') |
1957 \override Slur.direction = #UP
1958 a'4( g') c''( a') |
1959 \revert Slur.direction
1960 a'4( g') c''( a') |
1961 @end lilypond
1962
1963 Abbiamo usato le costanti @code{DOWN} (giù) e @code{UP} (su).
1964 Queste hanno rispettivamente i valori @w{@code{-1}} e @code{+1}, ed
1965 è possibile usare tali valori numerici al loro posto.  In alcuni casi
1966 si può usare anche il valore @code{0}, che significa @code{UP} per le
1967 legature di portamento, ma per alcuni oggetti significa @q{center} (centro).
1968 Esiste una costante, @code{CENTER} che ha valore @code{0}.
1969
1970 Tuttavia queste sovrascritture esplicite solitamente non vengono usate, perché
1971 ci sono dei comandi predefiniti equivalenti e più semplici.  Ecco una tabella
1972 con quelli più utilizzati; il significato di ognuno è esplicitato laddove
1973 non è ovvio.
1974
1975 @multitable @columnfractions .2 .2 .25 .35
1976 @headitem Giù/Sinistra
1977   @tab Su/Destra
1978   @tab Ripristina
1979   @tab Effetto
1980 @item @code{\arpeggioArrowDown}
1981   @tab @code{\arpeggioArrowUp}
1982   @tab @code{\arpeggioNormal}
1983   @tab Aggiunge una freccia in fondo, in cima o toglie la freccia
1984 @item @code{\dotsDown}
1985   @tab @code{\dotsUp}
1986   @tab @code{\dotsNeutral}
1987   @tab Direzione dello spostamento per evitare le linee del rigo
1988 @item @code{\dynamicDown}
1989   @tab @code{\dynamicUp}
1990   @tab @code{\dynamicNeutral}
1991   @tab
1992 @item @code{\phrasingSlurDown}
1993   @tab @code{\phrasingSlurUp}
1994   @tab @code{\phrasingSlurNeutral}
1995   @tab Nota: è diverso dai comandi slur
1996 @item @code{\slurDown}
1997   @tab @code{\slurUp}
1998   @tab @code{\slurNeutral}
1999   @tab
2000 @item @code{\stemDown}
2001   @tab @code{\stemUp}
2002   @tab @code{\stemNeutral}
2003   @tab
2004 @item @code{\textSpannerDown}
2005   @tab @code{\textSpannerUp}
2006   @tab @code{\textSpannerNeutral}
2007   @tab Il testo inserito come oggetto estensore (spanner) va sotto/sopra il rigo
2008 @item @code{\tieDown}
2009   @tab @code{\tieUp}
2010   @tab @code{\tieNeutral}
2011   @tab
2012 @item @code{\tupletDown}
2013   @tab @code{\tupletUp}
2014   @tab @code{\tupletNeutral}
2015   @tab I gruppi irregolare sono sotto/sopra le note
2016 @end multitable
2017
2018
2019 Le varianti neutral/normal di questi comandi usano @code{\revert} e queste
2020 @strong{non} possono essere precedute da @code{\once}.  Se desideri limitare
2021 l'effetto degli altri comandi (che usano @code{\override}) a un singolo
2022 momento temporale, devi farli precedere da @code{\once} come faresti con
2023 delle sovrascritture esplicite.
2024
2025 Oppure, se solo un oggetto della formattazione deve essere forzato verso
2026 l'alto o verso il basso, si possono usare gli indicatori di
2027 direzione, @code{^} o @code{_}:
2028
2029 @lilypond[quote,fragment,verbatim]
2030 a'4( g') c''( a') |
2031 a'4^( g') c''_( a') |
2032 @end lilypond
2033
2034
2035 @node Diteggiatura
2036 @unnumberedsubsubsec Diteggiatura
2037 @translationof Fingering
2038
2039 @cindex diteggiatura, posizionamento
2040 @cindex diteggiatura, accordi
2041
2042 Anche il posizionamento della diteggiatura sulle singole note può essere
2043 controllato dalla proprietà @code{direction}, ma la modifica di @code{direction}
2044 non produce effetti sugli accordi.  Come vedremo, ci sono comandi specifici
2045 che permettono di controllare la diteggiatura delle singole note degli
2046 accordi, col segno di diteggiatura posizionato sopra, sotto, a sinistra
2047 o a destra di ogni nota.
2048
2049 Vediamo innanzitutto l'effetto di @code{direction} sulla diteggiatura
2050 attaccata alle singole note.  La prima battuta mostra il comportamento
2051 predefinito e le due battute successive mostrano gli effetti dei valori
2052 @code{DOWN} e @code{UP}:
2053
2054 @cindex Fingering, esempio di sovrascrittura
2055 @cindex proprietà direction, esempio
2056 @cindex direction, esempio
2057
2058 @lilypond[quote,verbatim]
2059 \relative {
2060   c''4-5 a-3 f-1 c'-5 |
2061   \override Fingering.direction = #DOWN
2062   c4-5 a-3 f-1 c'-5 |
2063   \override Fingering.direction = #UP
2064   c4-5 a-3 f-1 c'-5 |
2065 }
2066 @end lilypond
2067
2068 Tuttavia sovrascrivere la proprietà @code{direction} non è il modo
2069 più semplice di definire a mano la diteggiatura sopra o sotto
2070 le note; di solito è preferibile usare @code{_} o @code{^} invece di @code{-}
2071 prima del numero della diteggiatura.  Ecco l'esempio precedente riscritto
2072 usando questo metodo:
2073
2074 @cindex fingering, esempio
2075
2076 @lilypond[quote,verbatim]
2077 \relative {
2078   c''4-5 a-3 f-1 c'-5 |
2079   c4_5 a_3 f_1 c'_5 |
2080   c4^5 a^3 f^1 c'^5 |
2081 }
2082 @end lilypond
2083
2084 La proprietà @code{direction} viene ignorata negli accordi, ma i
2085 prefissi direzionali, @code{_} e @code{^} funzionano.  Per impostazione
2086 predefinita, la diteggiatura viene disposta automaticamente sopra e
2087 sotto le note di un accordo:
2088
2089 @cindex fingering, esempio
2090
2091 @lilypond[quote,verbatim]
2092 \relative {
2093   <c''-5 g-3>4
2094   <c-5 g-3 e-2>4
2095   <c-5 g-3 e-2 c-1>4
2096 }
2097 @end lilypond
2098
2099 @noindent
2100 ma può essere sovrascritta per forzare manualmente in su o in giù tutti o
2101 alcuni dei singoli numeri della diteggiatura:
2102
2103 @cindex fingering, esempio
2104
2105 @lilypond[quote,verbatim]
2106 \relative {
2107   <c''-5 g-3 e-2 c-1>4
2108   <c^5 g_3 e_2 c_1>4
2109   <c^5 g^3 e^2 c_1>4
2110 }
2111 @end lilypond
2112
2113 È possibile avere un controllo ancora maggiore sulla disposizione della
2114 diteggiatura delle singole note di un accordo usando il comando
2115 @code{\set fingeringOrientations}.  Il formato di questo comando è:
2116
2117 @example
2118 @code{\set fingeringOrientations = #'([up] [left/right] [down])}
2119 @end example
2120
2121 @noindent
2122 Si usa @code{\set} perché @code{fingeringOrientations} è una
2123 proprietà del contesto @code{Voice}, creato e usato dall'incisore
2124 @code{New_fingering_engraver}.
2125
2126 Questa proprietà accetta come valori una lista comprendente da uno a tre elementi.
2127 Stabilisce se la diteggiatura debba essere posizionata sopra (se nella
2128 lista c'è @code{up}), sotto (se c'è @code{down}), a sinistra (se c'è
2129 @code{left}) o a destra (se c'è @code{right}).  Nel caso vengano inseriti valori
2130 non accettati dalla lista, non sarà invece collocata alcuna diteggiatura.  LilyPond
2131 prende in considerazione questi limiti e trova la migliore disposizione per
2132 la diteggiatura delle note degli accordi che seguono.  Nota che @code{left} e
2133 @code{right} si escludono a vicenda -- la diteggiatura può essere posta
2134 solo da un lato o dall'altro, non da entrambi.
2135
2136 @warning{Per controllare la posizione della diteggiatura di una
2137 singola nota con questo comando bisogna scrivere la nota come un accordo
2138 con una nota sola, ovvero racchiuderla tra parentesi angolari.}
2139
2140 Ecco alcuni esempi:
2141
2142 @cindex fingering, esempio
2143 @cindex @code{\set}, esempio di utilizzo
2144 @cindex proprietà fingeringOrientations, esempio
2145
2146 @lilypond[quote,ragged-right,verbatim]
2147 \relative {
2148   \set fingeringOrientations = #'(left)
2149   <f'-2>4
2150   <c-1 e-2 g-3 b-5>4
2151   \set fingeringOrientations = #'(left)
2152   <f-2>4
2153   <c-1 e-2 g-3 b-5>4 |
2154   \set fingeringOrientations = #'(up left down)
2155   <f-2>4
2156   <c-1 e-2 g-3 b-5>4
2157   \set fingeringOrientations = #'(up left)
2158   <f-2>4
2159   <c-1 e-2 g-3 b-5>4 |
2160   \set fingeringOrientations = #'(right)
2161   <f-2>4
2162   <c-1 e-2 g-3 b-5>4
2163 }
2164 @end lilypond
2165
2166 @noindent
2167 Se la diteggiatura appare eccessivamente fitta, si può ridurre la dimensione del
2168 tipo di carattere modificando la proprietà @code{font-size}.  Si può vedere
2169 nell'oggetto @code{Fingering} della guida al Funzionamento interno che il
2170 valore predefinito di tale proprietà è @w{@code{-5}}, dunque proviamo
2171 con @w{@code{-7}}:
2172
2173 @lilypond[quote,ragged-right,verbatim]
2174 \relative {
2175   \override Fingering.font-size = #-7
2176   \set fingeringOrientations = #'(left)
2177   <f'-2>4
2178   <c-1 e-2 g-3 b-5>4
2179   \set fingeringOrientations = #'(left)
2180   <f-2>4
2181   <c-1 e-2 g-3 b-5>4 |
2182   \set fingeringOrientations = #'(up left down)
2183   <f-2>4
2184   <c-1 e-2 g-3 b-5>4
2185   \set fingeringOrientations = #'(up left)
2186   <f-2>4
2187   <c-1 e-2 g-3 b-5>4 |
2188   \set fingeringOrientations = #'(right)
2189   <f-2>4
2190   <c-1 e-2 g-3 b-5>4
2191 }
2192 @end lilypond
2193
2194 @node Oggetti esterni al rigo
2195 @subsection Oggetti esterni al rigo
2196 @translationof Outside-staff objects
2197
2198 Gli oggetti esterni al rigo sono disposti automaticamente in modo da evitare
2199 collisioni.  Ci sono vari modi per modificare la disposizione automatica
2200 se questa non è ottimale.
2201
2202 @menu
2203 * La proprietà outside-staff-priority::
2204 * Il comando textLengthOn::
2205 * Posizionamento delle dinamiche::
2206 * Dimensione dei grob::
2207 @end menu
2208
2209
2210 @node La proprietà outside-staff-priority
2211 @unnumberedsubsubsec La proprietà @code{outside-staff-priority}
2212 @translationof The outside-staff-priority property
2213
2214 Gli oggetti dai valori più bassi per la proprietà
2215 @code{outside-staff-priority} vengono posizionati più vicino al rigo,
2216 mentre gli altri oggetti esterni al rigo vengono distanziati quanto
2217 basta per evitare collisioni.  La proprietà @code{outside-staff-priority} è
2218 definita nell'interfaccia @code{grob-interface} ed è quindi una proprietà di
2219 tutti gli oggetti di formattazione.  Il valore predefinito è @code{#f} per
2220 tutti gli oggetti interni al rigo e un valore numerico appropriato, determinato
2221 al momento della creazione dell'oggetto, per ogni oggetto esterno al rigo.  La
2222 seguente tabella mostra i valori numerici predefiniti di alcuni dei più comuni
2223 oggetti esterni al rigo.
2224
2225 @cindex estensori (spanner)
2226 @cindex spanner
2227
2228 Si notino i nomi insoliti di alcuni oggetti: gli oggetti estensori (spanner)
2229 sono creati automaticamente per controllare la disposizione verticale dei
2230 grob che (potrebbero) iniziare e finire in diversi momenti musicali, quindi
2231 la modifica della proprietà @code{outside-staff-priority} del grob sottostante
2232 non produrrebbe alcun effetto.  Ad esempio, la modifica di
2233 @code{outside-staff-priority} dell'oggetto @code{Hairpin} non avrà alcun
2234 effetto sulla disposizione verticale delle forcelle.  Occorre invece modificare
2235 la proprietà @code{outside-staff-priority} dell'oggetto associato
2236 @code{DynamicLineSpanner}.  Questa sovrascrittura deve essere posta
2237 all'inizio dell'estensore, che potrebbe includere più forcelle e indicazioni dinamiche
2238 tra loro collegate.
2239
2240 @multitable @columnfractions .3 .3 .3
2241 @headitem Oggetto di formattazione
2242   @tab Priorità
2243   @tab Controlla la posizione di:
2244 @item @code{RehearsalMark}
2245   @tab @code{1500}
2246   @tab Numeri di chiamata (e oggetti di testo analoghi)
2247 @item @code{MetronomeMark}
2248   @tab @code{1000}
2249   @tab Indicazioni metronomiche
2250 @item @code{VoltaBracketSpanner}
2251   @tab @code{600}
2252   @tab Delimitatori dei finali alternativi delle ripetizioni
2253 @item @code{TextScript}
2254   @tab @code{450}
2255   @tab Oggetti di testo
2256 @item @code{MultiMeasureRestText}
2257   @tab @code{450}
2258   @tab Testi sopra pause di più misure
2259 @item @code{OttavaBracket}
2260   @tab @code{400}
2261   @tab Estensioni del segno d'ottava
2262 @item @code{TextSpanner}
2263   @tab @code{350}
2264   @tab Estensori del testo
2265 @item @code{DynamicLineSpanner}
2266   @tab @code{250}
2267   @tab Tutte le indicazioni dinamiche
2268 @item @code{BarNumber}
2269   @tab @code{ 100}
2270   @tab Numeri di battuta
2271 @item @code{TrillSpanner}
2272   @tab @code{50}
2273   @tab Linee ondulate del trillo
2274 @end multitable
2275
2276 Ecco un esempio che mostra il posizionamento predefinito di alcuni di
2277 questi oggetti.
2278
2279 @cindex estensore del testo
2280 @cindex segno del cambio d'ottava
2281
2282 @funindex \startTextSpan
2283 @funindex startTextSpan
2284 @funindex \stopTextSpan
2285 @funindex stopTextSpan
2286
2287 @cindex TextSpanner, esempio di sovrascrittura
2288 @cindex proprietà bound-details, esempio
2289 @cindex bound-details, esempio
2290
2291 @lilypond[quote,fragment,ragged-right,verbatim]
2292 % Set details for later Text Spanner
2293 \override TextSpanner.bound-details.left.text
2294     = \markup { \small \bold Slower }
2295 % Place dynamics above staff
2296 \dynamicUp
2297 % Start Ottava Bracket
2298 \ottava #1
2299 c''4 \startTextSpan
2300 % Add Dynamic Text and hairpin
2301 c''4\pp\<
2302 c''4
2303 % Add Text Script
2304 c''4^Text |
2305 c''4 c''
2306 % Add Dynamic Text and terminate hairpin
2307 c''4\ff c'' \stopTextSpan |
2308 % Stop Ottava Bracket
2309 \ottava #0
2310 c'4 c' c' c' |
2311 @end lilypond
2312
2313 Questo esempio mostra anche come creare gli estensori (spanner) del testo,
2314 ovvero testo con delle linee che si estendono sopra una sezione musicale.
2315 L'estensore si allunga dal comando @code{\startTextSpan} fino al comando
2316 @code{\stopTextSpan} e il formato del testo è definito dal comando
2317 @code{\override TextSpanner}.  Per maggiori dettagli si veda @ruser{Text spanners}.
2318
2319 Mostra anche come si creano le estensioni del segno d'ottava.
2320
2321 @cindex modificare il posizionamento del numero di battuta
2322 @cindex numeri di battuta, modificare il posizionamento
2323 @cindex modificare il posizionamento dell'indicazione metronomica
2324 @cindex indicazione metronomica, modificare il posizionamento
2325 @cindex modificare il posizionamento dei numeri di chiamata
2326 @cindex numeri di chiamata, modificare il posizionamento
2327
2328 Se i valori predefiniti di @code{outside-staff-priority} non producono
2329 il posizionamento desiderato, è possibile sovrascrivere la priorità di
2330 qualsiasi oggetto.  Immaginiamo di voler posizionare l'estensione del segno d'ottava
2331 sotto l'estensore del testo nell'esempio precedente.  Basta controllare la
2332 priorità dell'oggetto @code{OttavaBracket} nella guida al Funzionamento interno
2333 o nelle tabelle precedenti e ridurla a un valore inferiore di quello di un
2334 oggetto @code{TextSpanner}, ricordando che @code{OttavaBracket} è creato
2335 nel contesto @code{Staff}:
2336
2337 @cindex TextSpanner, esempio di sovrascrittura
2338 @cindex proprietà bound-details, esempio
2339 @cindex bound-details, esempio
2340
2341 @lilypond[quote,fragment,ragged-right,verbatim]
2342 % Set details for later Text Spanner
2343 \override TextSpanner.bound-details.left.text
2344     = \markup { \small \bold Slower }
2345 % Place dynamics above staff
2346 \dynamicUp
2347 % Start Ottava Bracket
2348 \ottava #1
2349 c''4 \startTextSpan
2350 % Add Dynamic Text and hairpin
2351 c''4\pp\<
2352 c''4
2353 % Add Text Script
2354 c''4^Text |
2355 c''4 c''
2356 % Add Dynamic Text and terminate hairpin
2357 c''4\ff c'' \stopTextSpan |
2358 % Stop Ottava Bracket
2359 \ottava #0
2360 c'4 c' c' c' |
2361 @end lilypond
2362
2363 Si noti che alcuni di questi oggetti, in particolare i numeri di
2364 battuta, i segni di metronomo e i numeri di chiamata, si trovano nel
2365 contesto @code{Score}; dunque, assicurati di richiamare il contesto
2366 giusto per sovrascriverli.
2367
2368 @cindex legature di portamento e outside-staff-priority
2369 @cindex legature di portamento e articolazioni
2370 @cindex articolazioni e legature di portamento
2371
2372 Le legature di portamento sono classificate come oggetti interni al rigo, anche
2373 se spesso sono poste sopra il rigo, se le note alle quali sono collegate si
2374 trovano nella parte superiore del pentagramma.  Questo può far sì che gli oggetti esterni al rigo,
2375 come le articolazioni, siano spinti troppo in alto, dato che la legatura viene
2376 posizionata prima.  La proprietà @code{avoid-slur} dell'articolazione
2377 può essere impostata su @code{'inside} per portare l'articolazione
2378 dentro la legatura, ma la proprietà @code{avoid-slur} funziona solo se anche
2379 @code{outside-staff-priority} è impostata su @code{#f}.
2380 Altrimenti, si può impostare la proprietà @code{outside-staff-priority} della
2381 legatura di portamento su un valore numerico, in modo che sia posizionata
2382 insieme ad altri oggetti esterni al rigo in base a quel valore.  Ecco un
2383 esempio che mostra l'effetto dei due metodi:
2384
2385 @lilypond[quote,verbatim]
2386 \relative c'' {
2387   c4( c^\markup { \tiny \sharp } d4.) c8 |
2388   c4(
2389     \once \override TextScript.avoid-slur = #'inside
2390     \once \override TextScript.outside-staff-priority = ##f
2391     c4^\markup { \tiny \sharp } d4.) c8 |
2392   \once \override Slur.outside-staff-priority = #500
2393     c4( c^\markup { \tiny \sharp } d4.) c8 |
2394 }
2395 @end lilypond
2396
2397 Attraverso la proprietà @code{outside-staff-priority} si può
2398 regolare anche la disposizone verticale di singoli oggetti;
2399 i risultati potrebbero tuttavia risultare non sempre ottimali.  Supponiamo
2400 di voler posizionare @qq{Testo3} sopra @qq{Testo4} nell'esempio
2401 precedente (si veda @ref{Automatic behavior}).
2402 Basta andare a cercare la priorità di @code{TextScript} nella
2403 guida al Funzionamento interno o nelle tabelle precedenti e
2404 aumentare la priorità di @qq{Testo3} assegnando un valore più alto:
2405
2406 @cindex TextScript, esempio di sovrascrittura
2407 @cindex proprietà outside-staff-priority, esempio
2408 @cindex outside-staff-priority, esempio
2409
2410 @lilypond[quote,fragment,ragged-right,verbatim]
2411 c''2^"Testo1"
2412 c''2^"Testo2" |
2413 \once \override TextScript.outside-staff-priority = #500
2414 c''2^"Testo3"
2415 c''2^"Testo4" |
2416 @end lilypond
2417
2418 Questo ovviamente pone @qq{Testo3} sopra @qq{Testo4}, ma anche
2419 sopra @qq{Testo2}, mentre @qq{Testo4} si sposta più in basso.  Forse questo
2420 risultato non ci soddisfa:  vorremmo piuttosto collocare
2421 tutti i testi alla stessa distanza dal rigo.  Per riuscirci,
2422 naturalmente, dobbiamo creare più spazio orizzontale tra le note per
2423 far posto al testo.  Lo si può ottenere con il comando
2424 @code{textLengthOn}.
2425
2426 @node Il comando textLengthOn
2427 @unnumberedsubsubsec Il comando @code{@bs{}textLengthOn}
2428 @translationof The textLengthOn command
2429
2430 @cindex note, distanziarle insieme al testo
2431
2432 @funindex \textLengthOn
2433 @funindex textLengthOn
2434 @funindex \textLengthOff
2435 @funindex textLengthOff
2436
2437 Per impostazione predefinita, finché si tratta di formattare la musica il
2438 testo prodotto dal comando @code{\markup} non occupa uno spazio orizzontale.
2439 Il comando @code{\textLengthOn} inverte questo comportamento e fa sì che
2440 le note si distanzino quanto basti per introdurre il testo:
2441
2442 @lilypond[quote,fragment,ragged-right,verbatim]
2443 \textLengthOn  % Fa sì che le note si distanzino per introdurre il testo
2444 c''2^"Text1"
2445 c''2^"Text2" |
2446 c''2^"Text3"
2447 c''2^"Text4" |
2448 @end lilypond
2449
2450 Il comando che ripristina il comportamento predefinito è
2451 @code{\textLengthOff}.  Altrimenti si può usare @code{\once}
2452 con @code{\textLengthOn} se l'effetto deve essere limitato
2453 a un singolo momento musicale.
2454 Analogalmente, la spaziatura per i segni di chiamata e le indicazioni
2455 di tempo è regolata in modo indipendente con i comandi @code{\markLengthOn}
2456 e @code{\markLengthOff}.
2457
2458 @cindex testo a margine, permettere le collisioni
2459
2460 Per parte sua, anche il testo a margine eviterà le note che si estendono sopra il
2461 rigo.  Se lo si vuole evitare, la disposizione automatica in alto può
2462 essere disattivata impostando la priorità su @code{#f}.  Ecco un esempio
2463 che mostra come il testo a margine interagisce con tali note.
2464
2465 @cindex TextScript, esempio di sovrascrittura
2466 @cindex proprietà outside-staff-priority, esempio
2467 @cindex outside-staff-priority, esempio
2468
2469 @lilypond[quote,fragment,ragged-right,verbatim]
2470 \relative {
2471   % Questo testo è abbastanza corto per starci senza creare collisioni
2472   c2^"Tes" c'' |
2473   R1 |
2474
2475   % Questo è troppo lungo per starci, quindi è spostato più in alto
2476   c,,2^"Testo" c'' |
2477   R1 |
2478
2479   % Disattiva l'elusione delle collisioni
2480   \once \override TextScript.outside-staff-priority = ##f
2481   c,,2^"Testo Lungo   " c'' |
2482   R1 |
2483
2484   % Disattiva l'elusione delle collisioni
2485   \once \override TextScript.outside-staff-priority = ##f
2486   \textLengthOn        % e attiva textLengthOn
2487   c,,2^"Testo Lungo   "  % Gli spazi finali vengono rispettati
2488   c''2 |
2489 }
2490 @end lilypond
2491
2492
2493 @node Posizionamento delle dinamiche
2494 @unnumberedsubsubsec Posizionamento delle dinamiche
2495 @translationof Dynamics placement
2496
2497 @cindex modificare il posizionamento delle dinamiche
2498 @cindex dinamiche, modificare il posizionamento
2499
2500 Le indicazioni dinamiche sono di norma poste sotto il
2501 rigo, ma possono essere collocati al di sopra del pentagramma col comando @code{\dynamicUp}.
2502 Vengono posizionati verticalmente rispetto alla figura cui
2503 si riferiscono e fluttuano sopra (o sotto) tutti gli oggetti
2504 interni al rigo come le legature di fraseggio e i numeri di battuta.
2505 Si ottengono risultati abbastanza accettabili, come dimostra
2506 questo esempio:
2507
2508 @lilypond[quote,ragged-right,verbatim]
2509 \relative {
2510   \clef "bass"
2511   \key aes \major
2512   \time 9/8
2513   \dynamicUp
2514   bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! |
2515   ees,2.~\)\mf ees4 r8 |
2516 }
2517 @end lilypond
2518
2519 Tuttavia, se le note e le loro dinamiche sono molto vicine,
2520 la disposizione automatica eviterà le collisioni spostando
2521 più all'esterno i segni di dinamica successivi.  Questo
2522 potrebbe non essere però il posizionamento migliore, come mostra
2523 questo esempio piuttosto improbabile:
2524
2525 @lilypond[quote,ragged-right,verbatim,fragment]
2526 \dynamicUp
2527 \relative { a'4\f b\mf a\mp b\p }
2528 @end lilypond
2529
2530 @noindent
2531 Se si dovesse presentare una situazione simile in un @q{vero} brano musicale,
2532 converrebbe distanziare un po' di più le note, in modo che i segni di dinamica
2533 possano essere tutti collocati alla stessa distanza verticale dal rigo.  Abbiamo
2534 potuto farlo per il testo a margine usando il comando @code{\textLengthOn},
2535 ma non esiste un comando equivalente per i segni di dinamica.  Dunque
2536 dovremo scoprire come farlo usando i comandi @code{\override}.
2537
2538 @node Dimensione dei grob
2539 @unnumberedsubsubsec Dimensione dei grob
2540 @translationof Grob sizing
2541
2542 @subheading Estensione dei grob
2543
2544 @cindex estensione dei grob
2545 @cindex grob, estensione
2546
2547 Dobbiamo innanzitutto sapere come i grob occupano lo spazio.  Tutti i grob
2548 hanno al loro interno un punto di riferimento che viene usato
2549 per posizionarli in modo relativo all'oggetto genitore da cui derivano.  Questo
2550 punto nel grob viene poi disposto a una distanza orizzontale,
2551 @code{X-offset}, e a una distanza verticale, @code{Y-offset}, dall'oggetto
2552 genitore.  L'estensione (@emph{extent}) orizzontale dell'oggetto è data da una
2553 coppia di numeri, @code{X-extent}, che indica dove si trovano i margini
2554 sinistro e destro rispetto al punto di riferimento.  L'ampiezza verticale
2555 è ugualmente definita da una coppia di numeri, @code{Y-extent}.
2556 Queste proprietà appartengono a tutti i grob che supportano l'interfaccia
2557 @code{grob-interface}.
2558
2559 @cindex @code{extra-spacing-width}
2560
2561 Per impostazione predefinita, gli oggetti esterni al rigo presentano estensione
2562 pari a zero, in modo da potersi sovrapporre nella direzione orizzontale.
2563 Ciò si ottiene con un trucco, ovvero dando un valore infinito all'estensione
2564 sinistra e infinito negativo a quella destra, impostando la proprietà
2565 @code{extra-spacing-width} su @code{'(+inf.0 . -inf.0)}.  Per
2566 assicurarci che non si sovrappongano nella direzione orizzontale, dobbiamo
2567 sovrascrivere il valore di @code{extra-spacing-width} per dar loro un po' più
2568 di spazio.  Le unità sono lo spazio tra due linee del rigo, dunque spostare
2569 il margine sinistro di mezza unità a sinistra e quello destro di mezza unità
2570 a destra dovrebbe dare il risultato desiderato:
2571
2572 @example
2573 \override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
2574 @end example
2575
2576 @noindent
2577 Vediamo se funziona nell'esempio precedente:
2578
2579 @cindex DynamicText, esempio di sovrascrittura
2580 @cindex proprietà extra-spacing-width, esempio
2581 @cindex extra-spacing-width, esempio
2582
2583 @lilypond[quote,fragment,ragged-right,verbatim]
2584 \dynamicUp
2585 % Aumenta la larghezza di 1 spazio rigo
2586 \override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
2587 \relative { a'4\f b\mf a\mp b\p }
2588 @end lilypond
2589
2590 @noindent
2591 L'aspetto è migliore, ma sarebbe preferibile avere i segni di dinamica
2592 allineati alla stessa linea di base invece di spostarsi su e giù seguendo
2593 la posizione delle note.  La proprietà che permette di ottenere tale
2594 risultato è @code{staff-padding} ed è trattata nella sezione relativa
2595 alle collisioni (vedi @ref{Collisions of objects}).
2596
2597
2598 @node Spaziatura verticale
2599 @section Spaziatura verticale
2600 @translationof Vertical spacing
2601
2602 Di norma, la spaziatura verticale degli oggetti musicali decisa da
2603 LilyPond è molto buona.  Vediamo come si comporta con una semplice
2604 canzone, composta da due voci e un accompagnamento per pianoforte:
2605
2606 @lilypond[quote,fragment,ragged-right]
2607 <<
2608   \new ChoirStaff
2609   <<
2610     \new Staff {
2611       \new Voice = "music" {
2612         b'2 c' c' c'
2613       }
2614     }
2615     \new Lyrics
2616     \lyricsto "music" {
2617       Here are some lyrics
2618     }
2619     \new Staff {
2620       \clef bass e'2 f e c
2621     }
2622   >>
2623   \new PianoStaff
2624   <<
2625     \new Staff {
2626       g''2 c'' c'' a''
2627     }
2628     \new Staff {
2629       \clef bass e2 f c e
2630     }
2631   >>
2632 >>
2633 @end lilypond
2634
2635 Non c'è niente di sbagliato con la spaziatura verticale predefinita.  Tuttavia,
2636 supponiamo che si stia lavorando con un editore che abbia requisiti specifici
2637 per la spaziatura verticale dei righi e del testo vocale, ovvero maggior spazio
2638 tra testo e note, e tra l'accompagnamento del pianoforte e la linea vocale, e
2639 minor spazio tra i righi del pianoforte.  Iniziamo dal testo.
2640
2641 Il testo vocale si trova all'interno di un sistema, dunque i comandi per
2642 modificarne la spaziatura sono descritti in @ruser{Flexible vertical spacing within systems}.
2643 Quel paragrafo ci dice che il testo è costituito da linee che non appartengono
2644 al rigo (@code{non-staff lines}), quindi il comando per cambiarne la spaziatura
2645 sarà riferito alla proprietà @code{nonstaff}.  Per allontanarlo dal rigo a cui
2646 si riferiscono (la linea superiore) si usa la proprietà @code{relatedstaff}.
2647 Per allontanarli dalla linea più bassa si usa la proprietà @code{unrelatedstaff}.
2648 Le parti vocali fanno parte del @code{VerticalAxisGroup}, dunque dobbiamo
2649 aggiustare le sue proprietà.  Proviamo a vedere se funziona.
2650
2651 @lilypond[quote,fragment,ragged-right,verbatim]
2652 <<
2653   \new ChoirStaff
2654   <<
2655     \new Staff {
2656       \new Voice = "music" {
2657         b'2 c' c' c'
2658       }
2659     }
2660     \new Lyrics \with {
2661       \override VerticalAxisGroup.
2662         nonstaff-relatedstaff-spacing.padding = #5
2663       \override VerticalAxisGroup.
2664         nonstaff-unrelatedstaff-spacing.padding = #5
2665     }
2666     \lyricsto "music" {
2667       Here are some lyrics
2668     }
2669     \new Staff {
2670       \clef bass e'2 f e c
2671     }
2672   >>
2673   \new PianoStaff
2674   <<
2675     \new Staff {
2676       g''2 c'' c'' a''
2677     }
2678     \new Staff {
2679       \clef bass e2 f c e
2680     }
2681   >>
2682 >>
2683 @end lilypond
2684
2685 Funziona, ma forse non molto bene.  Quando impostiamo il
2686 @code{padding} su 5, LilyPond aggiunge 5 spazi rigo alla distanza
2687 tra gli oggetti, che è troppo in questo caso.  Useremo 2.
2688
2689 Ora allontaniamo la musica per pianoforte dalle parti vocali.  La musica
2690 vocale si trova nel rigo @code{ChoirStaff}, quindi dobbiamo aumentare lo
2691 spazio tra quel gruppo di righi e il rigo per pianoforte che si trova sotto.
2692 Lo faremo modificando la proprietà @code{basic-distance} del
2693 @code{staffgroup-staff-spacing} di @code{StaffGrouper}.
2694
2695 @lilypond[quote,fragment,ragged-right,verbatim]
2696 <<
2697   \new ChoirStaff \with {
2698     \override StaffGrouper.
2699       staffgroup-staff-spacing.basic-distance = #15
2700   }
2701   <<
2702     \new Staff {
2703       \new Voice = "music" {
2704         b'2 c' c' c'
2705       }
2706     }
2707     \new Lyrics \with {
2708       \override VerticalAxisGroup.
2709         nonstaff-relatedstaff-spacing.padding = #2
2710       \override VerticalAxisGroup.
2711         nonstaff-unrelatedstaff-spacing.padding = #2
2712     }
2713     \lyricsto "music" {
2714       Here are some lyrics
2715     }
2716     \new Staff {
2717       \clef bass e'2 f e c
2718     }
2719   >>
2720   \new PianoStaff
2721   <<
2722     \new Staff {
2723       g''2 c'' c'' a''
2724     }
2725     \new Staff {
2726       \clef bass e2 f c e
2727     }
2728   >>
2729 >>
2730 @end lilypond
2731
2732 Ottimo.  Non ci resta che avvicinare i righi del pianoforte.  Per farlo,
2733 modifichiamo di nuovo le proprietà di @code{StaffGrouper}, ma questa volta
2734 riduciamo sia @code{basic-distance} che @code{padding}.  Ecco come fare:
2735
2736 @lilypond[quote,fragment,ragged-right,verbatim]
2737 <<
2738   \new ChoirStaff \with {
2739     \override StaffGrouper.
2740       staffgroup-staff-spacing.basic-distance = #15
2741   }
2742   <<
2743     \new Staff {
2744       \new Voice = "music" {
2745         b'2 c' c' c'
2746       }
2747     }
2748     \new Lyrics \with {
2749       \override VerticalAxisGroup.
2750         nonstaff-relatedstaff-spacing.padding = #2
2751       \override VerticalAxisGroup.
2752         nonstaff-unrelatedstaff-spacing.padding = #2
2753     }
2754     \lyricsto "music" {
2755       Here are some lyrics
2756     }
2757     \new Staff {
2758       \clef bass e'2 f e c
2759     }
2760   >>
2761   \new PianoStaff \with {
2762     \override StaffGrouper.staff-staff-spacing = #'(
2763                             (basic-distance . 0)
2764                             (padding . 0))
2765   }
2766   <<
2767     \new Staff {
2768       g''2 c'' c'' a''
2769     }
2770     \new Staff {
2771       \clef bass e2 f c e
2772     }
2773   >>
2774 >>
2775 @end lilypond
2776
2777 In questo modo sono molto vicini, ma è quello che vuole l'editore.
2778 Se necessario, possono essere allontanati modificando @code{padding} o
2779 @code{basic-distance}.
2780
2781 Ci sono molti modi per modificare la spaziatura verticale.  Il punto fondamentale
2782 da ricordare è che la spaziatura degli oggetti in un contesto @code{StaffGroup}
2783 (come i gruppi @code{GrandStaff} o @code{PianoStaff}) è controllata dalle
2784 variabili spaziali di @code{StaffGrouper}.  La spaziatura relativa ai righi
2785 non raggruppati (come @code{Lyrics} e @code{Staff}) è regolata dalle variabili
2786 del @code{VerticalAxisGroup}.  Ulteriori dettagli in
2787 @ruser{Flexible vertical spacing paper variables} e
2788 @ruser{Flexible vertical spacing within systems}.
2789
2790
2791 @node Collisioni tra oggetti
2792 @section Collisioni tra oggetti
2793 @translationof Collisions of objects
2794
2795 @menu
2796 * Spostare gli oggetti::
2797 * Correggere la sovrapposizione di elementi della notazione::
2798 * Esempio musicale::
2799 @end menu
2800
2801 @node Spostare gli oggetti
2802 @subsection Spostare gli oggetti
2803 @translationof Moving objects
2804
2805 @cindex spostare gli oggetti che si sovrappongono
2806 @cindex spostare gli oggetti che collidono
2807 @cindex spostare i grob che collidono
2808 @cindex oggetti, spostarli se collidono
2809 @cindex grob, spostarli se collidono
2810
2811 Per quanto possa apparire sorprendente, LilyPond non è perfetto.  Alcuni elementi
2812 della notazione possono sovrapporsi.  Si tratta di un caso spiacevole, anche se in
2813 realtà piuttosto raro.  Di solito l'esigenza di spostare gli
2814 oggetti dipende da motivi di chiarezza o da ragioni estetiche: gli elementi
2815 possono ottenere un aspetto migliore con un po' più o un po' meno
2816 spazio intorno.
2817
2818 Esistono tre principali approcci per risolvere la sovrapposizione
2819 degli elementi della notazione.  Vediamoli nel seguente ordine:
2820
2821 @enumerate
2822 @item
2823 Si può cambiare la @strong{direzione} di uno degli oggetti che si
2824 sovrappongono usando i comandi predefiniti elencati prima, in riferimento agli
2825 oggetti interni al rigo (vedi @ref{Within-staff objects}).
2826 In questo modo si possono riposizionare facilmente gambi, legature di
2827 portamento e di valore, travature, segni di dinamica, testo e gruppi
2828 irregolari.  La limitazione è che si tratta di una scelta circoscritta a due sole
2829 posizioni, nessuna delle quali potrebbe essere appropriata.
2830
2831 @item
2832 Le @strong{proprietà degli oggetti}, che LilyPond usa quando dispone
2833 gli oggetti di formattazione, si possono modificare con @code{\override}.  I
2834 vantaggi dell'intervenire su questo tipo di proprietà sono che (a)
2835 gli altri oggetti saranno spostati automaticamente se è necessario far
2836 spazio, e (b) ogni sovrascrittura può essere applicata a tutte le occorrenze
2837 di oggetti dello stesso tipo.  Tali proprietà sono:
2838
2839 @itemize
2840
2841 @item
2842 @code{direction}
2843
2844 Questa è già stata trattata in dettaglio (vedi
2845 @ref{Within-staff objects}).
2846
2847 @item
2848 @code{padding}, @code{right-padding}, @code{staff-padding}
2849
2850 @cindex distanza
2851 @cindex spaziatura
2852 @cindex proprietà padding
2853 @cindex proprietà right-padding
2854 @cindex proprietà staff-padding
2855 @cindex padding, proprietà
2856 @cindex right-padding, proprietà
2857 @cindex staff-padding, proprietà
2858
2859 Quando un oggetto viene posizionato, il valore della sua proprietà
2860 @code{padding} specifica lo spazio intermedio da lasciare tra l'oggetto stesso
2861 e il bordo più vicino di quello accanto a cui si trova.  Nota che si
2862 tratta del valore di @code{padding} dell'oggetto che @strong{si sta
2863 posizionando}, mentre quello dell'oggetto già posizionato viene
2864 ignorato.  Gli spazi specificati da @code{padding} possono essere
2865 applicati a tutti gli oggetti che supportano l'interfaccia
2866 @code{side-position-interface}.
2867
2868 Invece che da @code{padding}, la disposizione dei gruppi di alterazioni
2869 è regolata da @code{right-padding}.  Questa proprietà appartiene all'oggetto
2870 @code{AccidentalPlacement} che si trova nel contesto @strong{Staff}.  Il
2871 processo di formattazione della partitura crea per prime le teste di
2872 nota e poi, se presenti, aggiunge le alterazioni alla sinistra delle
2873 teste di nota usando la proprietà @code{right-padding} per stabilire
2874 la distanza tra le teste e le singole alterazioni.
2875 Dunque, solo la proprietà @code{right-padding} dell'oggetto @code{AccidentalPlacement}
2876 produce un effetto sul posizionamento delle alterazioni.
2877
2878 La proprietà @code{staff-padding} è strettamente connessa alla proprietà
2879 @code{padding}: @code{padding} regola la quantità minima di spazio tra
2880 qualsiasi oggetto che supporti l'interfaccia @code{side-position-interface} e
2881 quello più vicino (solitamente, la nota o le linee del rigo); @code{staff-padding}
2882 si applica solo a quegli oggetti che stanno sempre fuori dal rigo e regola
2883 la distanza minima tra l'oggetto e il rigo.  Nota che
2884 @code{staff-padding} non ha alcun effetto sugli oggetti disposti relativamente
2885 alla nota invece che al rigo, anche se può essere sovrascritto senza generare
2886 degli errori per tali oggetti; quindi viene semplicemente ignorata.
2887
2888 Per scoprire quale proprietà padding è richiesta per l'oggetto che
2889 desideri riposizionare, devi tornare alla guida del Funzionamento
2890 interno e cercare le proprietà dell'oggetto.  Presta attenzione al fatto
2891 che le proprietà padding potrebbero non trovarsi nell'oggetto più
2892 ovvio; in tal caso devi cercare negli oggetti simili.
2893
2894 I valori delle proprietà padding sono misurati in spazi del rigo.  Il valore
2895 predefinito della maggior parte degli oggetti è circa 1.0 o meno (a seconda
2896 dell'oggetto).  Può essere sovrascritto per ottenere una distanza maggiore
2897 o minore.
2898
2899 @item
2900 @code{self-alignment-X}
2901
2902 @cindex proprietà self-alignment-X
2903 @cindex self-alignment-X, proprietà
2904
2905 Questa proprietà serve ad allineare l'oggetto a sinistra, a destra o
2906 al centro rispetto al punto di riferimento dell'oggetto genitore.
2907 Si può usare con tutti gli oggetti che supportano l'interfaccia
2908 @code{self-alignment-interface}.  Generalmente si tratta di oggetti
2909 che contengono testo.  I valori sono @code{LEFT} (sinistra), @code{RIGHT}
2910 (destra) o @code{CENTER} (centro).  Altrimenti, è possibile definire un valore
2911 numerico compreso tra @w{@code{-1}} e @code{+1}, dove @w{@code{-1}} indica
2912 allineamento a sinistra e @code{+1} allineamento a destra, mentre gli altri
2913 numeri spostano progressivamente il testo dall'allineamento a sinistra
2914 all'allineamento a destra.  È possibile specificare valori numerici maggiori
2915 di @code{1}, per spostare il testo ancora più a sinistra, o valori inferiori
2916 a @w{@code{-1}}, per spostarlo ancora più a destra.  Ogni modifica di @code{1}
2917 nel valore corrisponde a uno spostamento pari alla metà della lunghezza
2918 del testo.
2919
2920 @item
2921 @code{extra-spacing-width}
2922
2923 @cindex proprietà extra-spacing-width
2924 @cindex extra-spacing-width, proprietà
2925
2926 Questa proprietà è disponibile per tutti gli oggetti che supportano
2927 l'interfaccia @code{item-interface}. Accetta due numeri: il primo è
2928 aggiunto all'estensione più a sinistra, il secondo a quella più a
2929 destra.  I numeri negativi spostano il bordo verso sinistra, quelli
2930 positivi verso destra: quindi, per allargare un oggetto il primo
2931 numero deve essere negativo, il secondo deve essere positivo.
2932 Nota che non tutti gli oggetti rispettano entrambi i numeri.  Ad
2933 esempio, l'oggetto @code{Accidental} considera soltanto il primo
2934 numero (bordo sinistro).
2935
2936 @item
2937 @code{staff-position}
2938
2939 @cindex proprietà staff-position
2940 @cindex staff-position, proprietà
2941
2942 @code{staff-position} è una proprietà dell'interfaccia
2943 @code{staff-symbol-referencer-interface}, supportata dagli oggetti
2944 che vengono posizionati in relazione al rigo.  Specifica in unità
2945 di mezzo spazio di rigo la posizione verticale dell'oggetto rispetto
2946 alla linea centrale del rigo stesso.  È utile per risolvere collisioni
2947 tra oggetti come le pause di più misure, le legature di valore e le
2948 note in voci diverse.
2949
2950 @item
2951 @code{horizontal-shift}
2952
2953 @cindex horizontal-shift, proprietà
2954 @cindex proprietà horizontal-shift
2955 @cindex colonna di note
2956 @cindex collisioni di note
2957 @cindex note, collisioni
2958 @cindex shift, comandi
2959 @funindex \shiftOff
2960 @funindex shiftOff
2961 @funindex \shiftOn
2962 @funindex shiftOn
2963 @funindex \shiftOnn
2964 @funindex shiftOnn
2965 @funindex \shiftOnnn
2966 @funindex shiftOnnn
2967
2968 All'interno di una voce, tutte le note che si trovano nello stesso momento
2969 musicale sono raggruppate in una colonna di note, e viene creato un oggetto
2970 @code{NoteColumn} per controllare il posizionamento orizzontale di quel
2971 gruppo di note (vedi @qq{Colonne di note} in @ref{Explicitly instantiating voices}).  Se
2972 @emph{e solo se} due o più colonne di note in un solo contesto Staff, entrambe
2973 con i gambi nella stessa direzione, si trovano sullo stesso momento musicale,
2974 i valori delle loro proprietà @code{horizontal-shift} sono usati per attribuire
2975 un punteggio e le colonne che hanno un punteggio più alto vengono progressivamente spostate
2976 per evitare le collisioni delle teste di nota.  Questa proprietà viene impostata
2977 dai comandi @code{\voiceXXX} e può essere scavalcata direttamente con un
2978 comando @code{\override} o, di solito, dai comandi @code{\shiftOn}.
2979 Attenzione: questa proprietà viene usata per dare un @emph{punteggio} alle
2980 colonne di note per spostarle orizzontalmente; non specifica la grandezza dello
2981 spostamento, che viene aumentata progressivamente per gradi in base alla larghezza della
2982 testa di nota  per ogni punteggio.  I gradi sono solitamente di metà della
2983 larghezza della testa di nota, ma possono essere della larghezza intera della
2984 testa quando c'è un gruppo di note molto ravvicinate.
2985
2986
2987 @item
2988 @code{force-hshift}
2989
2990 @cindex proprietà force-hshift
2991 @cindex force-hshift, proprietà
2992
2993 La proprietà @code{force-hshift} appartiene a @code{NoteColumn}
2994 (più precisamente all'interfaccia @code{note-column-interface}).  Modificandola
2995 è possibile spostare la colonna di note in situazioni in cui le colonne di
2996 note sono sovrapposte.  Non ha effetto su colonne di note non sovrapposte.
2997 Viene specificata in unità appropriate per una colonna di note,  ovvero la
2998 larghezza della testa della nota nella prima voce.  Si usa
2999 in situazioni complesse in cui i normali comandi @code{\shiftOn} (vedi
3000 @ref{Explicitly instantiating voices}) non risolvono adeguatamente le collisioni tra le
3001 note.  Per questo scopo, è preferibile alla proprietà @code{extra-offset}
3002 perché non c'è bisogno di trovare la giusta distanza in spazi di rigo e
3003 lo spostamento delle note dentro o fuori da una @code{NoteColumn}
3004 si ripercuote su altre azioni, come il congiungimento delle teste delle note.
3005
3006 @end itemize
3007
3008 @item
3009 Infine, se i metodi precedenti non funzionano, si possono riposizionare
3010 verticalmente gli oggetti rispetto alla linea centrale del rigo
3011 oppure collocarli a una qualsiasi distanza rispetto a una nuova
3012 posizione.  Gli svantaggi di questo metodo consistono nel fatto che i corretti
3013 valori per il riposizionamento debbano essere trovati per tentativi e per ogni
3014 singolo oggetto; inoltre, dato che lo spostamento avviene dopo che LilyPond
3015 ha posizionato tutti gli altri oggetti, spetta all'utente evitare le
3016 eventuali collisioni.  La principale
3017 difficoltà che questo approccio comporta, però, è che i valori di riposizionamento
3018 potrebbero dover essere ricalcolati se la musica venisse successivamente
3019 modificata.  Le proprietà che si possono usare con questo tipo di
3020 riposizionamento manuale sono:
3021
3022 @table @code
3023 @item extra-offset
3024
3025 @cindex proprietà extra-offset
3026 @cindex extra-offset, proprietà
3027
3028 Questa proprietà si applica a qualsiasi oggetto di formattazione che supporta
3029 l'interfaccia @code{grob-interface}.  Accetta come valore una coppia di numeri
3030 che specificano l'ulteriore spostamento nelle direzioni orizzontale e verticale.
3031 I numeri negativi spostano l'oggetto a sinistra o in basso.  Le unità sono
3032 gli spazi del rigo.  Questo spostamento aggiuntivo è applicato dopo la formattazione
3033 degli oggetti, dunque gli oggetti possono essere riposizionati ovunque senza
3034 incidere sugli altri.
3035
3036 @item positions
3037
3038 @cindex proprietà positions
3039 @cindex positions, proprietà
3040
3041 Questa proprietà è utile specialmente per correggere manualmente l'inclinazione e
3042 l'altezza di travature, legature di portamento e graffette dei gruppi irregolari.  Accetta
3043 come valore una coppia di numeri, che specifica la posizione dei bordi sinistro
3044 e destro della travatura, della legatura, etc., rispetto alla linea centrale
3045 del rigo.  L'unità di misura è lo spazio del rigo.  Considera, però,
3046 che le legature di portamento e di frase non possono essere riposizionate
3047 del tutto arbitrariamente.  LilyPond, infatti, genera prima una lista
3048 delle possibili posizioni per la legatura e poi determina la legatura che
3049 @qq{ritiene migliore}.  Se la proprietà @code{positions} è stata sovrascritta,
3050 viene scelta dalla lista la legatura più vicina alle posizioni richieste.
3051 @end table
3052
3053 @end enumerate
3054
3055 Alcuni oggetti potrebbero non disporre di tutte queste proprietà.
3056 Occorre andare a vedere nella guida al Funzionamento interno
3057 quali proprietà siano disponibili per l'oggetto che si intende
3058 modificare.
3059
3060 Segue una lista degli oggetti che hanno la maggiore probabilità
3061 di essere coinvolti in collisioni, insieme al nome dell'oggetto
3062 che deve essere cercato nella guida al Funzionamento interno per
3063 poter sapere quali proprietà si possono usare per spostarlo.
3064
3065 @multitable @columnfractions .5 .5
3066 @headitem Tipo di oggetto            @tab Nome dell'oggetto
3067 @item Articolazioni                  @tab @code{Script}
3068 @item Travature                      @tab @code{Beam}
3069 @item Dinamiche (verticalmente)      @tab @code{DynamicLineSpanner}
3070 @item Dinamiche (orizzontalmente)    @tab @code{DynamicText}
3071 @item Diteggiature                   @tab @code{Fingering}
3072 @item Numeri di chiamata / Testi     @tab @code{RehearsalMark}
3073 @item Legature di portamento         @tab @code{Slur}
3074 @item Testi, ovvero @code{^"testo"}  @tab @code{TextScript}
3075 @item Legature di valore             @tab @code{Tie}
3076 @item Gruppi irregolari              @tab @code{TupletBracket}
3077 @end multitable
3078
3079
3080 @node Correggere la sovrapposizione di elementi della notazione
3081 @subsection Correggere la sovrapposizione di elementi della notazione
3082 @translationof Fixing overlapping notation
3083
3084 Vediamo ora come le proprietà presentate nella sezione precedente possano
3085 aiutare a risolvere la sovrapposizione degli elementi della notazione.
3086
3087 @menu
3088 * La proprietà padding::
3089 * La proprietà right-padding::
3090 * La proprietà staff-padding::
3091 * La proprietà self-alignment-X::
3092 * La proprietà staff-position::
3093 * La proprietà extra-offset::
3094 * La proprietà positions::
3095 * La proprietà force-hshift::
3096 @end menu
3097
3098 @node La proprietà padding
3099 @unnumberedsubsubsec La proprietà @code{padding}
3100 @translationof The padding property
3101
3102 @cindex padding
3103 @cindex spaziatura
3104 @cindex correggere la sovrapposizione di elementi della notazione
3105 @cindex sovrapposizione degli elementi della notazione
3106
3107 La proprietà @code{padding} serve a aumentare (o diminuire)
3108 la distanza tra i simboli che si trovano sopra o sotto le
3109 note.
3110
3111 @cindex Script, esempio di sovrascrittura
3112 @cindex proprietà padding, esempio
3113 @cindex padding, esempio
3114
3115 @lilypond[quote,fragment,verbatim]
3116 c'2\fermata
3117 \override Script.padding = #3
3118 b2\fermata
3119 @end lilypond
3120
3121 @cindex MetronomeMark, esempio di sovrascrittura
3122 @cindex proprietà padding, esempio
3123 @cindex padding, esempio
3124
3125 @lilypond[quote,fragment,verbatim]
3126 % Questo non funziona, vedi sotto
3127 \override MetronomeMark.padding = #3
3128 \tempo 4 = 120
3129 c'1 |
3130 % Questo funziona
3131 \override Score.MetronomeMark.padding = #3
3132 \tempo 4 = 80
3133 d'1 |
3134 @end lilypond
3135
3136 Nota nel secondo esempio come è importante sapere quale contesto
3137 gestisce un certo oggetto.  Dato che l'oggetto @code{MetronomeMark}
3138 è regolato dal contesto @code{Score}, le modifiche della proprietà
3139 nel contesto @code{Voice} non vengono prese in considerazione.  Per
3140 approfondire l'argomento si veda @ruser{Modifying properties}.
3141
3142 Se la proprietà @code{padding} di un oggetto viene aumentata quando
3143 quell'oggetto si trova insieme ad altri oggetti disposti secondo la
3144 loro proprietà @code{outside-staff-priority}, allora si sposteranno
3145 quell'oggetto e tutti gli oggetti esterni a esso.
3146
3147
3148 @node La proprietà right-padding
3149 @unnumberedsubsubsec La proprietà @code{right-padding}
3150 @translationof The right-padding property
3151
3152 @cindex proprietà right-padding
3153 @cindex right-padding, proprietà
3154
3155 La proprietà @code{right-padding} agisce sullo spazio tra l'alterazione
3156 e la nota corrispondente.  Non è una necessità frequente, ma la
3157 spaziatura predefinita potrebbe risultare errata nei casi di alcuni
3158 speciali glifi delle alterazioni usati nella musica microtonale.
3159 Questi si inseriscono sovrascrivendo lo stampo (stencil) dell'alterazione
3160 con un segno che contenga il simbolo desiderato:
3161
3162 @cindex Accidental, esempio di sovrascrittura
3163 @cindex proprietà text, esempio
3164 @cindex text, esempio
3165 @cindex proprietà stencil, esempio
3166 @cindex stencil, esempio
3167 @cindex AccidentalPlacement, esempio di sovrascrittura
3168 @cindex proprietà right-padding, esempio
3169 @cindex right-padding, esempio
3170
3171 @lilypond[quote,ragged-right,verbatim]
3172 sesquisharp = \markup { \sesquisharp }
3173 \relative {
3174   c''4
3175   % Mostra un triesis (alterazione ascendente di tre quarti di tono) ma lo spazio è troppo stretto
3176   \once \override Accidental.stencil = #ly:text-interface::print
3177   \once \override Accidental.text = #sesquisharp
3178   cis4 c
3179   % Ecco come migliorare lo spazio
3180   \once \override Score.AccidentalPlacement.right-padding = #0.6
3181   \once \override Accidental.stencil = #ly:text-interface::print
3182   \once \override Accidental.text = #sesquisharp
3183   cis4 |
3184 }
3185 @end lilypond
3186
3187 @noindent
3188 Siamo costretti a usare una sovrascrittura dello stampo dell'alterazione che
3189 verrà spiegata successivamente.  Il tipo di stampo deve essere una
3190 procedura e in questo esempio è stato modificato per mostrare i
3191 contenuti della proprietà @code{text} dell'oggetto @code{Accidental}, che
3192 è esso stesso impostato sul segno di triesis.  Poi
3193 questo segno viene distanziato dalla testa di nota grazie alla sovrascrittura
3194 di @code{right-padding}.
3195
3196 @noindent
3197
3198 @node La proprietà staff-padding
3199 @unnumberedsubsubsec La proprietà @code{staff-padding}
3200 @translationof The staff-padding property
3201
3202 @cindex allineare gli oggetti a una base
3203 @cindex oggetti, allinearli a una base
3204
3205 @code{staff-padding} serve ad allineare gli oggetti come i segni di
3206 dinamica lungo una linea di base a una certa distanza dal rigo, quando
3207 nessun altro elemento della notazione li allontana dal rigo.
3208 Non è una proprietà di @code{DynamicText} bensì
3209 di @code{DynamicLineSpanner}, perché la base deve essere applicata
3210 ugualmente a @strong{tutti} i segni dinamica, compresi quelli creati
3211 come estensori.  Ecco come allineare i segni di dinamica nell'esempio
3212 preso dalla sezione precedente:
3213
3214 @cindex DynamicText, esempio di sovrascrittura
3215 @cindex proprietà extra-spacing-width, esempio
3216 @cindex extra-spacing-width, esempio
3217 @cindex DynamicLineSpanner, esempio di sovrascrittura
3218 @cindex proprietà staff-padding, esempio
3219 @cindex staff-padding, esempio
3220
3221 @lilypond[quote,fragment,ragged-right,verbatim]
3222 \override DynamicLineSpanner.staff-padding = #3
3223 \relative { a'4\f b\mf a\p b\mp }
3224 @end lilypond
3225
3226
3227 @node La proprietà self-alignment-X
3228 @unnumberedsubsubsec La proprietà @code{self-alignment-X}
3229 @translationof The self-alignment-X property
3230
3231 L'esempio successivo mostra come aggiustare la posizione di un numero
3232 di corda rispetto a un gambo allineando il bordo destro del numero
3233 al punto di riferimento della nota a cui si riferisce:
3234
3235 @cindex StringNumber, esempio di sovrascrittura
3236 @cindex proprietà self-alignment-X, esempio
3237 @cindex self-alignment-X, esempio
3238
3239 @lilypond[quote,fragment,ragged-right,verbatim]
3240 \voiceOne
3241 <a''\2>
3242 \once \override StringNumber.self-alignment-X = #RIGHT
3243 <a''\2>
3244 @end lilypond
3245
3246
3247 @node La proprietà staff-position
3248 @unnumberedsubsubsec La proprietà @code{staff-position}
3249 @translationof The staff-position property
3250
3251 @cindex collisione tra oggetti all'interno del rigo
3252
3253 Le pause d'intero di una voce possono entrare in collisione con le note
3254 di un'altra.  Dal momento che queste pause sono centrate rispetto
3255 alle stanghette della battuta, calcolare quali altre note potrebbero
3256 sovrapporsi richiederebbe un notevole grado d'elaborazione, dato che l'attuale
3257 gestione delle collisioni tra note e tra note e pause riguarda solo
3258 le note e le pause simultanee.  Ecco un esempio
3259 di collisione di questo tipo:
3260
3261 @lilypond[quote,verbatim,ragged-right]
3262 << \relative { c'4 c c c } \\ { R1 } >>
3263 @end lilypond
3264
3265 In questo caso la soluzione migliore è spostare in basso la pausa d'intero, poiché
3266 si trova nella seconda voce.  In @code{\voiceTwo} (ovvero nella seconda
3267 voce di un costrutto @code{<<@{@dots{}@} \\ @{@dots{}@}>>}) il valore predefinito
3268 di @code{staff-position} è -4 per la pausa multipla (MultiMeasureRest), quindi
3269 dobbiamo spostarla più in basso, ad esempio di altri quattro semispazi del
3270 rigo; il nuovo valore sarà @w{@code{-8}}.
3271
3272 @cindex MultiMeasureRest, esempio di sovrascrittura
3273 @cindex proprietà staff-position, esempio
3274 @cindex staff-position, esempio
3275
3276 @lilypond[quote,verbatim,ragged-right]
3277 <<
3278   \relative { c'4 c c c }
3279   \\
3280   \override MultiMeasureRest.staff-position = #-8
3281   { R1 }
3282 >>
3283 @end lilypond
3284
3285 Questa soluzione è preferibile all'uso di @code{extra-offset}, perché
3286 il taglio addizionale sopra la pausa è inserito automaticamente.
3287
3288 @node La proprietà extra-offset
3289 @unnumberedsubsubsec La proprietà @code{extra-offset}
3290 @translationof The extra-offset property
3291
3292 @cindex posizionare gli oggetti
3293 @cindex posizionare i grob
3294 @cindex oggetti, posizionarli
3295 @cindex grob, posizionarli
3296
3297 La proprietà @code{extra-offset} fornisce un controllo completo
3298 sul posizionamento di un oggetto sia in orizzontale che in verticale.
3299
3300 Nell'esempio seguente, la seconda diteggiatura viene spostata un po' a
3301 sinistra e in basso di 1.8 spazi rigo:
3302
3303 @cindex Fingering, esempio di sovrascrittura
3304 @cindex proprietà extra-offset, esempio
3305 @cindex extra-offset, esempio
3306
3307 @lilypond[quote,fragment,relative=1,verbatim]
3308 \stemUp
3309 f4-5
3310 \once \override Fingering.extra-offset = #'(-0.3 . -1.8)
3311 f4-5
3312 @end lilypond
3313
3314
3315 @node La proprietà positions
3316 @unnumberedsubsubsec La proprietà @code{positions}
3317 @translationof The positions property
3318
3319 @cindex controllo manuale di graffette dei gruppi irregolari, travature, legature di portamento e di frase
3320 @cindex travature dei gruppi irregolari, controllo manuale
3321 @cindex legature di portamento, controllo manuale
3322 @cindex legature di frase, controllo manuale
3323 @cindex travature, controllo manuale
3324
3325 La proprietà @code{positions} permette di controllare manualmente la
3326 posizione verticale e quindi l'inclinazione delle graffette dei
3327 gruppi irregolari, delle legature di portamento e di frase e
3328 delle travature.  Ecco un esempio in cui una legatura di frase
3329 e una legatura di portamento collidono:
3330
3331 @lilypond[quote,verbatim,ragged-right]
3332 \relative { a'8 \( ( a'16 ) a \) }
3333 @end lilypond
3334
3335 @cindex PhrasingSlur, esempio di sovrascrittura
3336 @cindex proprietà positions, esempio
3337 @cindex positions, esempio
3338
3339 @noindent
3340 Si potrebbero spostare più in alto le due estremità della legatura
3341 di frase.  Possiamo provare a impostare quella sinistra su 2.5 spazi
3342 sopra la linea centrale e quella destra a 4.5 spazi; LilyPond
3343 sceglierà la legatura di frase tra quelle candidate che hanno le
3344 estremità più vicine a queste:
3345
3346 @lilypond[quote,verbatim,fragment,ragged-right]
3347 \once \override PhrasingSlur.positions = #'(2.5 . 4.5)
3348 a'8 \( ( a''16 ) a'' \)
3349 @end lilypond
3350
3351 È migliorato, ma perché non abbassare un po' l'estremità destra
3352 della legatura di portamento?  Se provi vedrai che non può essere
3353 fatto in questo modo.  Il motivo è che non ci sono legature di
3354 portamento candidate più basse di quella già selezionata, quindi
3355 in questo caso la proprietà @code{positions} non può produrre
3356 effetti.  Tuttavia, legature di valore, di portamento e di frase
3357 @emph{possono} essere posizionate e disegnate in modo molto preciso
3358 se necessario.  Per sapere come fare si veda @ruser{Modifying ties and slurs}.
3359
3360 Ecco un altro esempio.  Vediamo che le travature collidono
3361 con le legature di valore:
3362
3363 @lilypond[quote,verbatim,fragment,ragged-right]
3364 {
3365   \time 4/2
3366   <<
3367     { c'1 ~ 2. e'8 f' }
3368     \\
3369     { e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g'' }
3370   >>
3371   <<
3372     { c'1 ~ 2. e'8 f' }
3373     \\
3374     { e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g'' }
3375   >>
3376 }
3377 @end lilypond
3378
3379 @noindent
3380 Si può risolvere spostando manualmente in su entrambi gli estremi della
3381 travatura dalla loro posizione di 1.81 spazi rigo sotto la linea
3382 centrale a, per esempio, 1:
3383
3384 @cindex Beam, esempio di sovrascrittura
3385 @cindex proprietà positions, esempio
3386 @cindex positions, esempio
3387
3388 @lilypond[quote,verbatim,fragment,ragged-right]
3389 {
3390   \time 4/2
3391   <<
3392     { c'1 ~ 2. e'8 f' }
3393     \\
3394     {
3395       \override Beam.positions = #'(-1 . -1)
3396       e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g''
3397     }
3398   >>
3399   <<
3400     { c'1 ~ 2. e'8 f' }
3401     \\
3402     { e''8 e'' e'' e''  e'' e'' e'' e''  f''2 g'' }
3403   >>
3404 }
3405 @end lilypond
3406
3407 @noindent
3408 Come vedi, la sovrascrittura si applica anche alla seconda voce della seconda
3409 misura di otto note, ma a nessuna delle travature nella prima voce, nemmeno
3410 in quelle della seconda misura. Appena la sovrascrittura non è più attiva,
3411 deve essere ripristinato, come si vede.
3412
3413 @node La proprietà force-hshift
3414 @unnumberedsubsubsec La proprietà @code{force-hshift}
3415 @translationof The force-hshift property
3416
3417 Possiamo vedere ora come applicare le correzioni finali all'esempio di Chopin
3418 introdotto alla fine del paragrafo @ref{I'm hearing Voices}, che avevamo
3419 lasciato così:
3420
3421 @lilypond[quote,verbatim,fragment,ragged-right]
3422 \new Staff \relative {
3423   \key aes \major
3424   <<
3425     { c''2 aes4. bes8 }
3426     \\
3427     { <ees, c>2 des }
3428     \\
3429     \\
3430     { aes'2 f4 fes }
3431   >> |
3432   <c ees aes c>1 |
3433 }
3434 @end lilypond
3435
3436 @noindent
3437 La nota interna del primo accordo (ovvero il La bemolle della quarta
3438 voce) non deve essere allontanata dalla colonna della nota più
3439 alta, quindi usiamo @code{\shiftOff}.
3440
3441 Nel secondo accordo preferiamo che il Fa sia allineato al La bemolle e che
3442 la nota più grave sia posizionata leggermente più a destra, in modo da
3443 evitare la collisione dei gambi.  Per farlo dobbiamo impostare
3444 @code{force-hshift} nella colonna (@code{NoteColumn}) del Re bemolle
3445 grave in modo che si sposti a destra di mezzo spazio di rigo e  @code{force-hshift}
3446 per il Fa su zero.  Si usa @code{\once} per evitare che tali impostazioni
3447 si propaghino oltre il momento musicale immediato, sebbene in questo
3448 piccolo esempio il @code{\once} e il secondo @code{\override} nella quarta
3449 voce potrebbero essere omessi.  Ma non sarebbe un esempio di buona pratica.
3450
3451 Ecco il risultato finale:
3452
3453 @cindex NoteColumn, esempio di sovrascrittura
3454 @cindex proprietà force-hshift, esempio
3455 @cindex force-hshift, esempio
3456
3457 @lilypond[quote,verbatim,fragment,ragged-right]
3458 \new Staff \relative {
3459   \key aes \major
3460   <<
3461     { c''2 aes4. bes8 }
3462     \\
3463     { <ees, c>2 \once \override NoteColumn.force-hshift = 0.5 des }
3464     \\
3465     \\
3466     { \once \shiftOff aes'2 \once \shiftOff f4 fes }
3467   >> |
3468   <c ees aes c>1 |
3469 }
3470 @end lilypond
3471
3472
3473 @node Esempio musicale
3474 @subsection Esempio musicale
3475 @translationof Real music example
3476
3477 Completiamo questa sezione delle modifiche (@emph{tweak}) mostrando passo passo
3478 come affrontare un esempio complesso che necessita varie modifiche per
3479 poter raggiungere l'aspetto desiderato.  L'esempio è stato scelto
3480 appositamente per mostrare come usare la guida alla Notazione per
3481 risolvere problemi inusuali di notazione.  Non rispecchia l'uso
3482 abituale di LilyPond, quindi non farti scoraggiare da queste difficoltà!
3483 Per fortuna problemi come questi sono molto rari!
3484
3485 L'esempio è tratto dalla Première Ballade op. 23 di Chopin e va
3486 dalla battuta 6 alla 9, la transizione dal Lento iniziale al Moderato.
3487 Vediamo prima come vogliamo che l'output appaia; per evitare di
3488 complicare troppo l'esempio abbiamo però tolto le dinamiche, le diteggiature
3489 e le pedalizzazioni.
3490
3491 @c The following should appear as music without code
3492 @c This example should not be indexed
3493 @c line-width ensures no break
3494 @lilypond[quote,ragged-right,line-width=6\in]
3495 rhMusic = \relative {
3496   \new Voice {
3497     r2 c''4.\( g8 |
3498     \once \override Tie.staff-position = #3.5
3499     bes1~ |
3500     \bar "||"
3501     \time 6/4
3502     \mergeDifferentlyHeadedOn
3503     \mergeDifferentlyDottedOn
3504     bes2.\tempo "Moderato" r8
3505     <<
3506       { c,8 d fis bes a }
3507       \new Voice {
3508         \voiceTwo
3509         c,8~
3510         % Riposiziona il c2 a destra della nota unita
3511         \once \override NoteColumn.force-hshift = #1.0
3512         % Sposta il c2 fuori dalla colonna della nota principale
3513         % in modo che l'unione di note (merge) funzioni
3514         \shiftOnn
3515         c2
3516       }
3517       \new Voice {
3518         \voiceThree
3519         s8
3520         % Il gambo di d2 deve essere in giù per permettere l'unione delle note
3521         \stemDown
3522         % Il gambo di d2 deve essere invisibile
3523         \tweak Stem.transparent ##t
3524         d2
3525       }
3526       \new Voice {
3527         \voiceFour
3528         s4 fis4.
3529       }
3530     >> |
3531     \mergeDifferentlyHeadedOff
3532     \mergeDifferentlyDottedOff
3533     g2.\)
3534   }
3535 }
3536
3537 lhMusic = \relative {
3538   r2 <c' g ees>2( |
3539   <d g, d>1)\arpeggio |
3540   r2. d,,4 r4 r |
3541   r4
3542 }
3543
3544 \score {
3545   \new PianoStaff <<
3546     \new Staff = "RH"  <<
3547       \key g \minor
3548       \rhMusic
3549     >>
3550     \new Staff = "LH" <<
3551       \key g \minor
3552       \clef "bass"
3553       \lhMusic
3554     >>
3555   >>
3556 }
3557 @end lilypond
3558
3559 Vediamo che la parte della mano destra nella terza battuta
3560 richiede quattro voci.  Si tratta delle cinque crome unite da travatura,
3561 il Do legato, la minima di Re che è unita alla croma di
3562 Re, e la semiminima puntata del Fa diesis, anch'essa unita
3563 alla croma della stessa altezza.  Tutto il resto è su una
3564 voce singola, quindi il sistema più semplice è introdurre queste
3565 ulteriori voci temporaneamente, quando sono richieste.  Se ti
3566 sei dimenticato come fare, rileggi i paragrafi @ref{I'm hearing Voices} e
3567 @ref{Explicitly instantiating voices}.  In questo caso scegliamo di
3568 usare per il passaggio polifonico le voci definite esplicitamente, dato
3569 che LilyPond riesce a evitare meglio le collisioni se tutte le voci
3570 sono definite esplicitamente in questo modo.
3571
3572 Dunque iniziamo con l'inserire le note in due variabili, impostare la
3573 struttura del rigo in un blocco \score e vedere che cosa LilyPond
3574 produce senza modifiche manuali:
3575
3576 @c line-width ensures no break
3577 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3578 rhMusic = \relative {
3579   \new Voice {
3580     r2 c''4. g8 |
3581     bes1~ |
3582     \time 6/4
3583     bes2. r8
3584     % Inizia la sezione polifonica a quattro voci
3585     <<
3586       { c,8 d fis bes a }  % continuazione della voce principale
3587       \new Voice {
3588         \voiceTwo
3589         c,8~ 2
3590       }
3591       \new Voice {
3592         \voiceThree
3593         s8 d2
3594       }
3595       \new Voice {
3596         \voiceFour
3597         s4 fis4.
3598       }
3599     >> |
3600     g2.  % continuazione della voce principale
3601   }
3602 }
3603
3604 lhMusic = \relative {
3605   r2 <c' g ees>2 |
3606   <d g, d>1 |
3607   r2. d,,4 r4 r |
3608   r4
3609 }
3610
3611 \score {
3612   \new PianoStaff <<
3613     \new Staff = "RH"  <<
3614       \key g \minor
3615       \rhMusic
3616     >>
3617     \new Staff = "LH" <<
3618       \key g \minor
3619       \clef "bass"
3620       \lhMusic
3621     >>
3622   >>
3623 }
3624 @end lilypond
3625
3626 Le note sono giuste ma l'aspetto è ben lontano dall'essere
3627 soddisfacente.  La legatura collide col nuovo segno di tempo,
3628 alcune note non sono accorpate e mancano vari elementi
3629 della notazione.  Partiamo dalle cose più semplici.  Possiamo
3630 aggiungere la legatura di portamento della mano sinistra e la legatura
3631 di frase della mano destra, dato che queste sono state già trattate
3632 nel Tutorial.  In questo modo abbiamo:
3633
3634 @c line-width ensures no break
3635 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3636 rhMusic = \relative {
3637   \new Voice {
3638     r2 c''4.\( g8 |
3639     bes1~ |
3640     \time 6/4
3641     bes2. r8
3642     % Inizia la sezione polifonica a quattro voci
3643     <<
3644       { c,8 d fis bes a }  % continuazione della voce principale
3645       \new Voice {
3646         \voiceTwo
3647         c,8~ 2
3648       }
3649       \new Voice {
3650         \voiceThree
3651         s8 d2
3652       }
3653       \new Voice {
3654         \voiceFour
3655         s4 fis4.
3656       }
3657     >> |
3658     g2.\)  % continuazione della voce principale
3659   }
3660 }
3661
3662 lhMusic = \relative {
3663   r2 <c' g ees>2( |
3664   <d g, d>1) |
3665   r2. d,,4 r4 r |
3666   r4
3667 }
3668
3669 \score {
3670   \new PianoStaff <<
3671     \new Staff = "RH"  <<
3672       \key g \minor
3673       \rhMusic
3674     >>
3675     \new Staff = "LH" <<
3676       \key g \minor
3677       \clef "bass"
3678       \lhMusic
3679     >>
3680   >>
3681 }
3682 @end lilypond
3683
3684 Ora la prima battuta è corretta.  La seconda battuta contiene un arpeggio e
3685 è terminata da una stanghetta doppia.  Dato che non sono stati menzionati
3686 in questo manuale di Apprendimento, come possiamo ottenerli?  Dobbiamo
3687 andare a vedere nella guida alla Notazione.  Cercando nell'indice
3688 i termini @qq{arpeggio} e @qq{stanghetta}, scopriamo rapidamente che un arpeggio
3689 viene prodotto posponendo @code{\arpeggio} a un accordo e che la stanghetta
3690 doppia si ottiene col comando @code{\bar "||"}.  Questo è stato facile.  Ora
3691 dobbiamo correggere la collisione della legatura di valore con l'indicazione di tempo.
3692 Il modo migliore è spostare la legatura verso l'alto.  Lo spostamento degli oggetti
3693 è stato trattato prima in @ref{Moving objects}, dove si dice che gli oggetti
3694 posizionati relativamente al rigo possono essere spostati verticalmente
3695 sovrascrivendo la proprietà @code{staff-position}, specificata in metà spazi-rigo
3696 rispetto alla linea centrale del rigo.  Dunque la seguente sovrascrittura
3697 posizionata proprio prima della prima nota della legatura sposta la legatura
3698 3.5 mezzi spazi di rigo sopra la linea centrale:
3699
3700 @code{\once \override Tie.staff-position = #3.5}
3701
3702 Questo completa la seconda battuta:
3703
3704 @c line-width ensures no break
3705 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3706 rhMusic = \relative {
3707   \new Voice {
3708     r2 c''4.\( g8 |
3709     \once \override Tie.staff-position = #3.5
3710     bes1~ |
3711     \bar "||"
3712     \time 6/4
3713     bes2. r8
3714     % Inizia la sezione polifonica a quattro voci
3715     <<
3716       { c,8 d fis bes a }  % continuazione della voce principale
3717       \new Voice {
3718         \voiceTwo
3719         c,8~ 2
3720       }
3721       \new Voice {
3722         \voiceThree
3723         s8 d2
3724       }
3725       \new Voice {
3726         \voiceFour
3727         s4 fis4.
3728       }
3729     >> |
3730     g2.\)  % continuazione della voce principale
3731   }
3732 }
3733
3734 lhMusic = \relative {
3735   r2 <c' g ees>2( |
3736   <d g, d>1)\arpeggio |
3737   r2. d,,4 r4 r |
3738   r4
3739 }
3740
3741 \score {
3742   \new PianoStaff <<
3743     \new Staff = "RH"  <<
3744       \key g \minor
3745       \rhMusic
3746     >>
3747     \new Staff = "LH" <<
3748       \key g \minor
3749       \clef "bass"
3750       \lhMusic
3751     >>
3752   >>
3753 }
3754 @end lilypond
3755
3756 Proseguiamo con la terza battuta e l'inizio della sezione del Moderato.  Nel
3757 tutorial abbiamo visto come aggiungere un'indicazione di tempo col comando
3758 @code{\tempo}, quindi aggiungere @qq{Moderato} è facile.  Ma come facciamo
3759 ad accorpare le note appartenenti a voci diverse?  Ancora una volta
3760 dobbiamo rivolgerci alla guida alla Notazione per un aiuto.  Una ricerca
3761 del termine @qq{accorpare} (in inglese @emph{merge}) nell'indice della guida
3762 ci porta rapidamente al paragrafo @ruser{Collision resolution}, dove
3763 troviamo i comandi per allineare le note con teste e punti diversi.  Nel
3764 nostro esempio abbiamo bisogno di accorpare entrambi i tipi di note per la
3765 durata della sezione polifonica della terza battuta.  Dunque, usando le
3766 informazioni trovate nella guida alla Notazione, aggiungiamo
3767
3768 @example
3769 \mergeDifferentlyHeadedOn
3770 \mergeDifferentlyDottedOn
3771 @end example
3772
3773 @noindent
3774 all'inizio di questa sezione e
3775
3776 @example
3777 \mergeDifferentlyHeadedOff
3778 \mergeDifferentlyDottedOff
3779 @end example
3780
3781 @noindent
3782 alla fine, ottenendo:
3783
3784 @c line-width ensures no break
3785 @lilypond[quote,ragged-right,line-width=6\in]
3786 rhMusic = \relative {
3787   \new Voice {
3788     r2 c''4.\( g8 |
3789     \once \override Tie.staff-position = #3.5
3790     bes1~ |
3791     \bar "||"
3792     \time 6/4
3793     bes2.\tempo "Moderato" r8
3794     \mergeDifferentlyHeadedOn
3795     \mergeDifferentlyDottedOn
3796     % Inizia la sezione polifonica a quattro voci
3797     <<
3798       { c,8 d fis bes a }  % continuazione della voce principale
3799       \new Voice {
3800         \voiceTwo
3801         c,8~ 2
3802       }
3803       \new Voice {
3804         \voiceThree
3805         s8 d2
3806       }
3807       \new Voice {
3808         \voiceFour
3809         s4 fis4.
3810       }
3811     >> |
3812     \mergeDifferentlyHeadedOff
3813     \mergeDifferentlyDottedOff
3814     g2.\)  % continuazione della voce principale
3815   }
3816 }
3817
3818 lhMusic = \relative {
3819   r2 <c' g ees>2( |
3820   <d g, d>1)\arpeggio |
3821   r2. d,,4 r4 r |
3822   r4
3823 }
3824
3825 \score {
3826   \new PianoStaff <<
3827     \new Staff = "RH"  <<
3828       \key g \minor
3829       \rhMusic
3830     >>
3831     \new Staff = "LH" <<
3832       \key g \minor
3833       \clef "bass"
3834       \lhMusic
3835     >>
3836   >>
3837 }
3838 @end lilypond
3839
3840 Queste sovrascritture hanno accorpato i due Fa diesis, ma non i due
3841 Re.  Perché?  La risposta si trova nella stessa sezione della
3842 guida alla Notazione: le note da unire devono avere i gambi in
3843 direzioni opposte e due note non possono essere accorpate se c'è
3844 una terza nota nella stessa colonna.  In questo esempio i due Re
3845 hanno entrambi i gambi in su e c'è una terza nota, il Do. Sappiamo
3846 come cambiare la direzione dei gambi con @code{\stemDown} e la
3847 guida alla Notazione ci dice anche come spostare il Do, applicando
3848 uno spostamento con uno dei comandi @code{\shift}.  Ma quale? Il Do
3849 si trova nella seconda voce che ha lo spostamento (@emph{shift}) disattivato,
3850 mentre i due Re sono nella prima e nella terza voce, che ce l'hanno
3851 rispettivamente disattivato e attivato.  Dunque dobbiamo distanziare il
3852 Do di un ulteriore livello usando @code{\shiftOnn} per evitare che
3853 interferisca con i due Re.  Applicando queste modifiche abbiamo:
3854
3855 @cindex Tie, esempio di sovrascrittura
3856 @cindex proprietà staff-position, esempio
3857 @cindex staff-position, esempio
3858
3859 @c line-width ensures no break
3860 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3861 rhMusic = \relative {
3862   \new Voice {
3863     r2 c''4.\( g8 |
3864     \once \override Tie.staff-position = #3.5
3865     bes1~ |
3866     \bar "||"
3867     \time 6/4
3868     bes2.\tempo "Moderato" r8
3869     \mergeDifferentlyHeadedOn
3870     \mergeDifferentlyDottedOn
3871     % Inizia la sezione polifonica a quattro voci
3872     <<
3873       { c,8 d fis bes a }  % continuazione della voce principale
3874       \new Voice {
3875         \voiceTwo
3876         % Sposta il c2 fuori dalla colonna della nota principale
3877         % in modo che l'unione di note funzioni
3878         c,8~ \shiftOnn c2
3879       }
3880       \new Voice {
3881         \voiceThree
3882         % Il gambo di d2 deve essere in giù per permettere l'unione delle note
3883         s8 \stemDown d2
3884       }
3885       \new Voice {
3886         \voiceFour
3887         s4 fis4.
3888       }
3889     >> |
3890     \mergeDifferentlyHeadedOff
3891     \mergeDifferentlyDottedOff
3892     g2.\)  % continuazione della voce principale
3893   }
3894 }
3895
3896 lhMusic = \relative {
3897   r2 <c' g ees>2( |
3898   <d g, d>1)\arpeggio |
3899   r2. d,,4 r4 r |
3900   r4
3901 }
3902
3903 \score {
3904   \new PianoStaff <<
3905     \new Staff = "RH"  <<
3906       \key g \minor
3907       \rhMusic
3908     >>
3909     \new Staff = "LH" <<
3910       \key g \minor
3911       \clef "bass"
3912       \lhMusic
3913     >>
3914   >>
3915 }
3916 @end lilypond
3917
3918 Ci siamo quasi, restano solo due problemi: il gambo in giù del
3919 Re unito non ci dovrebbe essere e il Do dovrebbe essere posizionato
3920 a destra dei Re.  Sappiamo come fare grazie alle modifiche precedenti:
3921 rendiamo il gambo trasparente e spostiamo il Do con la proprietà
3922 @code{force-hshift}.  Ecco il risultato finale:
3923
3924 @cindex NoteColumn, esempio di sovrascrittura
3925 @cindex proprietà force-hshift, esempio
3926 @cindex force-hshift, esempio
3927 @cindex Stem, esempio di sovrascrittura
3928 @cindex proprietà transparent, esempio
3929 @cindex transparent, esempio
3930
3931 @c line-width ensures no break
3932 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3933 rhMusic = \relative {
3934   \new Voice {
3935     r2 c''4.\( g8 |
3936     \once \override Tie.staff-position = #3.5
3937     bes1~ |
3938     \bar "||"
3939     \time 6/4
3940     bes2.^\markup { \bold "Moderato" } r8
3941     \mergeDifferentlyHeadedOn
3942     \mergeDifferentlyDottedOn
3943     % Inizia la sezione polifonica a quattro voci
3944     <<
3945       { c,8 d fis bes a }  % continuazione della voce principale
3946       \new Voice {
3947         \voiceTwo
3948         c,8~
3949         % Riposiziona il c2 a destra della nota unita
3950         \once \override NoteColumn.force-hshift = #1.0
3951         % Sposta il c2 fuori dalla colonna della nota principale
3952         % in modo che l'unione di note funzioni
3953         \shiftOnn
3954         c2
3955       }
3956       \new Voice {
3957         \voiceThree
3958         s8
3959         % Il gambo di d2 deve essere in giù per permettere l'unione delle note
3960         \stemDown
3961         % Il gambo di d2 deve essere invisibile
3962         \tweak Stem.transparent ##t
3963         d2
3964       }
3965       \new Voice {
3966         \voiceFour
3967         s4 fis4.
3968       }
3969     >> |
3970     \mergeDifferentlyHeadedOff
3971     \mergeDifferentlyDottedOff
3972     g2.\)  % continuazione della voce principale
3973   }
3974 }
3975
3976 lhMusic = \relative {
3977   r2 <c' g ees>2( |
3978   <d g, d>1)\arpeggio |
3979   r2. d,,4 r4 r |
3980   r4
3981 }
3982
3983 \score {
3984   \new PianoStaff <<
3985     \new Staff = "RH"  <<
3986       \key g \minor
3987       \rhMusic
3988     >>
3989     \new Staff = "LH" <<
3990       \key g \minor
3991       \clef "bass"
3992       \lhMusic
3993     >>
3994   >>
3995 }
3996 @end lilypond
3997
3998
3999 @node Altre modifiche
4000 @section Altre modifiche
4001 @translationof Further tweaking
4002
4003 @menu
4004 * Altri usi delle modifiche con \tweak::
4005 * Uso delle variabili per modificare la formattazione::
4006 * Fogli di stile::
4007 * Altre fonti di informazione::
4008 * Modifiche avanzate con Scheme::
4009 @end menu
4010
4011 @node Altri usi delle modifiche con \tweak
4012 @subsection Altri usi delle modifiche con @code{\tweak}
4013 @translationof Other uses for tweaks
4014
4015 @menu
4016 * Legature di valore tra note di voci diverse::
4017 * Simulare una corona nel MIDI::
4018 @end menu
4019
4020 @cindex rimuovere gli oggetti
4021 @cindex oggetti, rimuoverli
4022
4023 @node Legature di valore tra note di voci diverse
4024 @unnumberedsubsubsec Legature di valore tra note di voci diverse
4025 @translationof Tying notes across voices
4026
4027 @cindex legature di valore tra note di voci diverse
4028
4029 L'esempio seguente mostra come unire con legature di valore
4030 note appartenenti a voci diverse.  Di norma, solo le note nella
4031 stessa voce possono essere unite da una legatura di valore.
4032 Se si usano due voci con le note legate in una voce
4033
4034 @lilypond[quote]
4035 << { b'8~ 8\noBeam } \\ { b'8[ g'] } >>
4036 @end lilypond
4037
4038 @noindent
4039 e si toglie il primo gambo di quella voce e la sua coda, la legatura sembra
4040 attraversare le voci:
4041
4042 @cindex Stem, esempio di rimozione
4043 @cindex Flag, esempio di rimozione
4044 @cindex @code{\omit}, esempio
4045
4046 @lilypond[quote,verbatim]
4047 <<
4048   {
4049     \once \omit Stem
4050     \once \omit Flag
4051     b'8~ 8\noBeam
4052   }
4053 \\
4054   { b'8[ g'] }
4055 >>
4056 @end lilypond
4057
4058 @seealso
4059 Manuale di apprendimento:
4060 @ref{The once prefix,,Il prefisso @code{@bs{}once}},
4061 @ref{The stencil property}.
4062
4063
4064 @node Simulare una corona nel MIDI
4065 @unnumberedsubsubsec Simulare una corona nel MIDI
4066 @translationof Simulating a fermata in MIDI
4067
4068 @cindex proprietà stencil, uso della
4069 @cindex corona, usarla nel MIDI
4070
4071 Per gli oggetti esterni al rigo è di solito preferibile sovrascrivere
4072 la proprietà @code{stencil} piuttosto che la proprietà @code{transparent}
4073 dell'oggetto se si desidera toglierlo dall'output.  Se si imposta la
4074 proprietà @code{stencil} su @code{#f} l'oggetto verrà completamente
4075 rimosso dall'output e quindi non potrà influenzare la disposizione
4076 di altri oggetti posizionati rispetto a esso.
4077
4078 Ad esempio, se volessimo modificare il segno di metronomo solo per
4079 simulare una corona nel MIDI, non vorremmo che il segno apparisse
4080 nella partitura né vorremmo influenzare la spaziatura tra i due
4081 sistemi o la posizione di annotazioni adiacenti nel rigo.  Dunque,
4082 il modo migliore è impostare la proprietà @code{stencil} su
4083 @code{#f}.  Ecco l'effetto dei due metodi:
4084
4085 @cindex MetronomeMark, esempio di sovrascrittura
4086 @cindex proprietà transparent, esempio
4087 @cindex transparent, esempio
4088
4089 @lilypond[quote,verbatim,ragged-right]
4090 \score {
4091   \relative {
4092     % Indicazione di tempo visibile
4093     \tempo 4=120
4094     a'4 a a
4095     \once \hide Score.MetronomeMark
4096     % Indicazione di tempo invisibile per allungare la fermata nel MIDI
4097     \tempo 4=80
4098     a4\fermata |
4099     % Nuovo tempo per la sezione successiva
4100     \tempo 4=100
4101     a4 a a a |
4102   }
4103   \layout { }
4104   \midi { }
4105 }
4106 @end lilypond
4107
4108 @cindex MetronomeMark, esempio di sovrascrittura
4109 @cindex proprietà stencil, esempio
4110 @cindex stencil, esempio
4111
4112 @lilypond[quote,verbatim,ragged-right]
4113 \score {
4114   \relative {
4115     % Indicazione di tempo visibile
4116     \tempo 4=120
4117     a'4 a a
4118     \once \omit Score.MetronomeMark
4119     % Indicazione di tempo invisibile per allungare la fermata nel MIDI
4120     \tempo 4=80
4121     a4\fermata |
4122     % Nuovo tempo per la sezione successiva
4123     \tempo 4=100
4124     a4 a a a |
4125   }
4126   \layout { }
4127   \midi { }
4128 }
4129 @end lilypond
4130
4131 @noindent
4132 Entrambi i metodi tolgono dalla partitura l'indicazione metronomica
4133 ed entrambi cambiano il tempo del MIDI come volevamo, ma nel primo esempio l'indicazione
4134 metronomica trasparente sposta troppo in alto
4135 l'indicazione di tempo successiva, mentre nel secondo esempio, dove
4136 viene tolto lo stampo (@emph{stencil}), ciò non accade.
4137
4138 @seealso
4139 Glossario musicale:
4140 @rglosnamed{system,sistema}.
4141
4142 @node Uso delle variabili per modificare la formattazione
4143 @subsection Uso delle variabili per modificare la formattazione
4144 @translationof Using variables for layout adjustments
4145
4146 @cindex variabili, usarle per le sovrascritture
4147 @cindex sovrascritture, usare le variabili per
4148 @cindex formattazione, usare le variabili per modificare la
4149
4150 I comandi di sovrascrittura sono spesso lunghi e tediosi da
4151 scrivere, e devono essere assolutamente corretti.  Se si usa
4152 più volte la stessa sovrascrittura conviene definire una
4153 variabile che la contenga.
4154
4155 Immaginiamo di voler enfatizzare certe parole del testo usando
4156 grassetto e corsivo.  I comandi @code{\italic} (corsivo) e @code{\bold}
4157 (grassetto) funzionano all'interno del testo solo se inclusi,
4158 insieme alla parola o alle parole da modificare, in un blocco
4159 @code{\markup}: dunque sono scomodi da inserire.  Dovendo inserire
4160 le parole stesse non si possono usare variabili semplici.  Come
4161 alternativa possiamo usare i comandi @code{\override} e @code{\revert}?
4162
4163 @example
4164 @code{\override Lyrics.LyricText.font-shape = #'italic}
4165 @code{\override Lyrics.LyricText.font-series = #'bold}
4166
4167 @code{\revert Lyrics.LyricText.font-shape}
4168 @code{\revert Lyrics.LyricText.font-series}
4169 @end example
4170
4171 Anche questi sarebbero molto noiosi da inserire se ci fossero
4172 molte parole che richiedono enfasi.  Ma possiamo inserirli
4173 in due variabili e poi usare queste per le parole da enfatizzare.
4174 Un altro vantaggio dell'uso di variabili per queste sovrascritture
4175 è che gli spazi intorno al punto non sono necessari, perché non
4176 sono interpretati direttamente in @code{\lyricmode}.  Ecco un
4177 esempio, anche se nella pratica comune avremmo scelto dei nomi
4178 più brevi per le variabili in modo da poterle inserire più
4179 rapidamente:
4180
4181 @cindex LyricText, esempio di sovrascrittura
4182 @cindex proprietà font-shape, esempio
4183 @cindex font-shape, esempio
4184 @cindex proprietà font-series, esempio
4185 @cindex font-series, esempio
4186
4187 @lilypond[quote,verbatim]
4188 emphasize = {
4189   \override Lyrics.LyricText.font-shape = #'italic
4190   \override Lyrics.LyricText.font-series = #'bold
4191 }
4192
4193 normal = {
4194   \revert Lyrics.LyricText.font-shape
4195   \revert Lyrics.LyricText.font-series
4196 }
4197
4198 global = { \key c \major \time 4/4 \partial 4 }
4199
4200 SopranoMusic = \relative { c'4 | e4. e8 g4 g    | a4   a   g  }
4201 AltoMusic    = \relative { c'4 | c4. c8 e4 e    | f4   f   e  }
4202 TenorMusic   = \relative  { e4 | g4. g8 c4.  b8 | a8 b c d e4 }
4203 BassMusic    = \relative  { c4 | c4. c8 c4 c    | f8 g a b c4 }
4204
4205 VerseOne = \lyrics {
4206   E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save,
4207 }
4208
4209 VerseTwo = \lyricmode {
4210   O | \once \emphasize Christ, whose voice the | wa -- ters heard,
4211 }
4212
4213 VerseThree = \lyricmode {
4214   O | \emphasize Ho -- ly Spi -- rit, | \normal who didst brood
4215 }
4216
4217 VerseFour = \lyricmode {
4218   O | \emphasize Tri -- ni -- ty \normal of | love and pow'r
4219 }
4220
4221 \score {
4222   \new ChoirStaff <<
4223     \new Staff <<
4224       \clef "treble"
4225       \new Voice = "Soprano"  { \voiceOne \global \SopranoMusic }
4226       \new Voice = "Alto" { \voiceTwo \AltoMusic }
4227       \new Lyrics \lyricsto "Soprano" { \VerseOne }
4228       \new Lyrics \lyricsto "Soprano" { \VerseTwo }
4229       \new Lyrics \lyricsto "Soprano" { \VerseThree }
4230       \new Lyrics \lyricsto "Soprano" { \VerseFour }
4231     >>
4232     \new Staff <<
4233       \clef "bass"
4234       \new Voice = "Tenor" { \voiceOne \TenorMusic }
4235       \new Voice = "Bass"  { \voiceTwo \BassMusic }
4236     >>
4237   >>
4238 }
4239 @end lilypond
4240
4241
4242 @node Fogli di stile
4243 @subsection Fogli di stile
4244 @translationof Style sheets
4245
4246 L'output prodotto da LilyPond può essere ampiamente modificato, come
4247 abbiamo visto nel capitolo @ref{Tweaking output}.  Ma se avessi molti
4248 file di input a cui voler applicare delle modifiche?  O se volessi
4249 semplicemente separare le modifiche dalla musica vera e propria?
4250 È molto semplice.
4251
4252 Prendiamo un esempio.  Non ti preoccupare se non capisci le
4253 parti che hanno @code{#()}; verranno spiegate nel capitolo
4254 @ref{Advanced tweaks with Scheme}.
4255
4256 @lilypond[quote,verbatim,ragged-right]
4257 mpdolce =
4258   \tweak self-alignment-X #-0.6
4259   #(make-dynamic-script
4260     #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4261
4262 inst =
4263 #(define-music-function
4264      (string)
4265      (string?)
4266    #{ <>^\markup \bold \box #string #})
4267
4268 \relative {
4269   \tempo 4=50
4270   a'4.\mpdolce d8 cis4--\glissando a |
4271   b4 bes a2 |
4272   \inst "Clarinet"
4273   cis4.\< d8 e4 fis |
4274   g8(\! fis)-. e( d)-. cis2 |
4275 }
4276 @end lilypond
4277
4278 Facciamo qualcosa a proposito delle definizioni di @code{mpdolce} e
4279 @code{inst}.  Producono l'output che desideriamo, ma potremmo volerle
4280 usare in un altro brano.  Potremmo semplicemente copiarle e incollarle
4281 in cima a ogni file, ma sarebbe una seccatura e lascerebbe queste
4282 definizioni nel file di input; personalmente trovo tutti quei @code{#()}
4283 piuttosto brutti, dunque nascondiamoli in un altro file:
4284
4285 @example
4286 %%% salva queste righe in un file chiamato "definitions.ily"
4287 mpdolce =
4288   \tweak self-alignment-X #-0.6
4289   #(make-dynamic-script
4290     #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
4291
4292
4293 inst =
4294 #(define-music-function
4295      (string)
4296      (string?)
4297    #@{ <>^\markup \bold \box #string #@})
4298 @end example
4299
4300 Ci riferiremo a questo file tramite il comando @code{\include} in cima
4301 al file dove c'è la musica.  Si usa l'estensione @file{.ily} per distinguere
4302 il file da includere, che non intendiamo compilare da solo, dal file principale.
4303 Ora modifichiamo la musica (e salviamo questo file come @file{music.ly}).
4304
4305 @c  We have to do this awkward example/lilypond-non-verbatim
4306 @c  because we can't do the \include stuff in the manual.
4307
4308 @example
4309 \include "definitions.ily"
4310
4311 \relative @{
4312   \tempo 4=50
4313   a'4.\mpdolce d8 cis4--\glissando a |
4314   b4 bes a2 |
4315   \inst "Clarinet"
4316   cis4.\< d8 e4 fis |
4317   g8(\! fis)-. e( d)-. cis2 |
4318 @}
4319 @end example
4320
4321 @lilypond[quote,ragged-right]
4322 mpdolce =
4323   \tweak self-alignment-X #-0.6
4324   #(make-dynamic-script
4325     #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4326
4327 inst =
4328 #(define-music-function
4329      (string)
4330      (string?)
4331    #{ <>^\markup \bold \box #string #})
4332
4333 \relative {
4334   \tempo 4=50
4335   a'4.\mpdolce d8 cis4--\glissando a |
4336   b4 bes a2 |
4337   \inst "Clarinet"
4338   cis4.\< d8 e4 fis |
4339   g8(\! fis)-. e( d)-. cis2 |
4340 }
4341 @end lilypond
4342
4343 L'aspetto è migliore, ma facciamo ancora qualche modifica.  Il glissando si
4344 vede appena, rendiamolo quindi più spesso e più vicino alle teste di nota.
4345 Mettiamo l'indicazione metronomica al di sopra della chiave invece che della prima
4346 nota.  E, infine, dato che il mio professore di composizione odia l'indicazione
4347 di tempo @qq{C}, usiamo @qq{4/4} al suo posto.
4348
4349 Ma non devi cambiare @file{music.ly} bensì @file{definitions.ily}, in
4350 questo modo:
4351
4352 @example
4353 %%%  definitions.ily
4354 mpdolce =
4355   \tweak self-alignment-X #-0.6
4356   #(make-dynamic-script
4357     #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
4358
4359 inst =
4360 #(define-music-function
4361      (string)
4362      (string?)
4363    #@{ <>^\markup \bold \box #string #@})
4364
4365 \layout@{
4366   \context @{
4367     \Score
4368     \override MetronomeMark.extra-offset = #'(-5 . 0)
4369     \override MetronomeMark.padding = #'3
4370   @}
4371   \context @{
4372     \Staff
4373     \override TimeSignature.style = #'numbered
4374   @}
4375   \context @{
4376     \Voice
4377     \override Glissando.thickness = #3
4378     \override Glissando.gap = #0.1
4379   @}
4380 @}
4381 @end example
4382
4383 @lilypond[quote,ragged-right]
4384 mpdolce =
4385   \tweak self-alignment-X #-0.6
4386   #(make-dynamic-script
4387     #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4388
4389 inst =
4390 #(define-music-function
4391      (string)
4392      (string?)
4393    #{ <>^\markup \bold \box #string #})
4394
4395 \layout{
4396   \context {
4397     \Score
4398     \override MetronomeMark.extra-offset = #'(-5 . 0)
4399     \override MetronomeMark.padding = #'3
4400   }
4401   \context {
4402     \Staff
4403     \override TimeSignature.style = #'numbered
4404   }
4405   \context {
4406     \Voice
4407     \override Glissando.thickness = #3
4408     \override Glissando.gap = #0.1
4409   }
4410 }
4411
4412 \relative {
4413   \tempo 4=50
4414   a'4.\mpdolce d8 cis4--\glissando a |
4415   b4 bes a2 |
4416   \inst "Clarinet"
4417   cis4.\< d8 e4 fis |
4418   g8(\! fis)-. e( d)-. cis2 |
4419 }
4420 @end lilypond
4421
4422 Ora l'aspetto è decisamente migliore!  Supponiamo ora di voler pubblicare
4423 questo brano.  Il mio professore di composizione non ama il segno di
4424 tempo @qq{C}, mentre a me piace.  Copiamo l'attuale file @file{definitions.ily}
4425 in @file{web-publish.ily} e modifichiamolo.  Dato che questa musica
4426 verrà distribuita su un pdf da leggere a schermo, aumenteremo anche
4427 la dimensione complessiva dell'output.
4428
4429 @example
4430 %%%  web-publish.ily
4431 mpdolce =
4432   \tweak self-alignment-X #-0.6
4433   #(make-dynamic-script
4434     #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
4435
4436 inst =
4437 #(define-music-function
4438      (string)
4439      (string?)
4440    #@{ <>^\markup \bold \box #string #@})
4441
4442 #(set-global-staff-size 23)
4443
4444 \layout@{
4445   \context @{
4446     \Score
4447     \override MetronomeMark.extra-offset = #'(-5 . 0)
4448     \override MetronomeMark.padding = #'3
4449   @}
4450   \context @{
4451     \Staff
4452   @}
4453   \context @{
4454     \Voice
4455     \override Glissando.thickness = #3
4456     \override Glissando.gap = #0.1
4457   @}
4458 @}
4459 @end example
4460
4461 @lilypond[quote,ragged-right]
4462 mpdolce =
4463   \tweak self-alignment-X #-0.6
4464   #(make-dynamic-script
4465     #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4466
4467 inst =
4468 #(define-music-function
4469      (string)
4470      (string?)
4471    #{ <>^\markup \bold \box #string #})
4472
4473 #(set-global-staff-size 23)
4474
4475 \layout{
4476   \context { \Score
4477     \override MetronomeMark.extra-offset = #'(-5 . 0)
4478     \override MetronomeMark.padding = #'3
4479   }
4480   \context { \Voice
4481     \override Glissando.thickness = #3
4482     \override Glissando.gap = #0.1
4483   }
4484 }
4485
4486 \relative {
4487   \tempo 4=50
4488   a'4.\mpdolce d8 cis4--\glissando a |
4489   b4 bes a2 |
4490   \inst "Clarinet"
4491   cis4.\< d8 e4 fis |
4492   g8(\! fis)-. e( d)-. cis2 |
4493 }
4494 @end lilypond
4495
4496 Nel file che contiene la musica non rimane che sostituire
4497 @code{\include "definitions.ily"} con
4498 @code{\include "web-publish.ily"}.  Potremmo usare un sistema
4499 ancora più conveniente: creare un file @file{definitions.ily} che
4500 contenga solo le definizioni di @code{mpdolce} e @code{inst}, un file
4501 @file{web-publish.ily} che contenga solo la sezione @code{\layout}
4502 vista prima, e un file @file{university.ily} che contenga solo le
4503 modifiche necessarie per produrre l'output preferito dal mio
4504 professore.  L'inizio di @file{music.ly} apparirebbe così:
4505
4506 @example
4507 \include "definitions.ily"
4508
4509 %%% Una sola di queste linee deve essere commentata
4510 \include "web-publish.ily"
4511 %\include "university.ily"
4512 @end example
4513
4514 Questo approccio può essere utile anche se si sta creando un
4515 insieme di parti.  Uso una mezza dozzina di diversi
4516 @q{fogli di stile} per i miei progetti.  Faccio iniziare
4517 ogni file musicale con @code{\include "../global.ily"}, che contiene
4518
4519 @example
4520 %%%   global.ily
4521 \version @w{"@version{}"}
4522
4523 #(ly:set-option 'point-and-click #f)
4524
4525 \include "../init/init-defs.ly"
4526 \include "../init/init-layout.ly"
4527 \include "../init/init-headers.ly"
4528 \include "../init/init-paper.ly"
4529 @end example
4530
4531
4532 @node Altre fonti di informazione
4533 @subsection Altre fonti di informazione
4534 @translationof Other sources of information
4535
4536 La guida al Funzionamento interno contiene molte informazioni su
4537 LilyPond, ma si possono trovare ancora più informazioni nei file
4538 interni di LilyPond.  Per studiarli devi prima trovare la giusta
4539 directory nel tuo sistema operativo.  Il percorso di questa
4540 directory dipende da quale sistema operativo si sta usando e da
4541 come si è ottenuto LilyPond, se scaricando un binario precompilato
4542 da lilypond.org oppure installandolo da un gestore di pacchetti
4543 (come nelle distribuzioni GNU/Linux o nelle istallazioni tramite
4544 fink o cygwin) o compilandolo dai sorgenti:
4545
4546 @subsubheading Scaricato da lilypond.org
4547
4548 @itemize @bullet
4549 @item GNU/Linux
4550
4551 Vai in
4552 @example
4553 @file{@var{INSTALLDIR}/lilypond/usr/@/share/lilypond/current/}
4554 @end example
4555
4556 @item MacOS X
4557
4558 Vai in
4559 @example
4560 @file{@var{INSTALLDIR}/LilyPond.app/Contents/@/Resources/share/lilypond/current/}
4561 @end example
4562
4563 usando @code{cd} in un terminale per entrare in questa
4564 directory oppure facendo un Ctrl+click sull'applicazione LilyPond e
4565 scegliendo @qq{Mostra i contenuti dei pacchetti}.
4566
4567 @item Windows
4568
4569 Con Windows Explorer vai in
4570 @example
4571 @file{@var{INSTALLDIR}/LilyPond/usr/@/share/lilypond/current/}
4572 @end example
4573
4574 @end itemize
4575
4576 @subsubheading Istallato da un gestore di pacchetti o compilato da sorgenti
4577
4578 Vai in
4579 @file{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, dove
4580 @var{PREFIX} è definito dal gestore pacchetti o dallo
4581 script @code{configure} e @var{X.Y.Z} è il numero di
4582 versione di LilyPond.
4583
4584 @smallspace
4585
4586 All'interno di questa directory le due sottodirectory interessanti sono
4587
4588 @itemize
4589 @item @file{ly/} - contiene i file nel linguaggio di LilyPond
4590 @item @file{scm/} - contiene i file nel linguaggio Scheme
4591 @end itemize
4592
4593 Iniziamo col vedere alcuni file in @file{ly/}.
4594 Apri @file{ly/property-init.ly} in un editor di testo.  Quello
4595 che usi normalmente per i file @code{.ly} va bene.  Questo file
4596 contiene le definizioni di tutti i comandi predefiniti standard
4597 di LilyPond, come @code{\tieUp} e @code{\slurDotted}.  Vedrai
4598 che questi non sono altro che definizioni di variabili che
4599 contengono uno o più comandi @code{\override}.  Ad esempio,
4600 @code{\tieDotted} è definito così:
4601
4602 @example
4603 tieDotted = @{
4604   \override Tie.dash-period = #0.75
4605   \override Tie.dash-fraction = #0.1
4606 @}
4607 @end example
4608
4609 Se non ti piacciono i valori predefiniti, puoi facilmente
4610 definire nuovamente questi comandi, proprio come qualsiasi
4611 altra variabile, all'inizio del file di input.
4612
4613 Ecco i file più utili che si trovano in @file{ly/}:
4614
4615 @multitable @columnfractions .4 .6
4616 @headitem Nome del file
4617   @tab Contenuti
4618 @item @file{ly/engraver-init.ly}
4619   @tab Definizioni dei contesti degli incisori (@emph{engraver})
4620 @item @file{ly/paper-defaults-init.ly}
4621   @tab Specifiche dei valori predefiniti relativi al foglio
4622 @item @file{ly/performer-init.ly}
4623   @tab Definizioni dei contesti dei @emph{performer}
4624 @item @file{ly/property-init.ly}
4625   @tab Definizioni di tutti i comandi predefiniti più comuni
4626 @item @file{ly/spanner-init.ly}
4627   @tab Definizioni dei comandi predefiniti relativi agli estensori (@emph{spanner})
4628 @end multitable
4629
4630 Altre impostazioni (come le definizioni dei comandi di markup) sono
4631 salvate come file @file{.scm} (Scheme).  Il linguaggio di programmazione
4632 Scheme serve a fornire un'interfaccia di programmazione per modificare
4633 il funzionamento interno di LilyPond.  Una spiegazione dettagliata di
4634 questi file non rientra nell'obiettivo di questo manuale, dal momento che
4635 è necessario conoscere il linguaggio Scheme.  Avvisiamo gli utenti che
4636 è richiesta una notevole quantità di abilità tecnica o di tempo per
4637 comprendere Scheme e questi file (vedi @rextend{Scheme tutorial}).
4638
4639 Nel caso tu conosca Scheme, i file che potrebbero essere di interesse sono:
4640
4641 @multitable @columnfractions .4 .6
4642 @headitem Nome del file
4643   @tab Contenuti
4644 @item @file{scm/auto-beam.scm}
4645   @tab Valori predefiniti della disposizione delle travature
4646 @item @file{scm/define-grobs.scm}
4647   @tab Impostazioni predefinite delle proprietà dei grob
4648 @item @file{scm/define-markup-commands.scm}
4649   @tab Definizione di tutti i comandi di markup
4650 @item @file{scm/midi.scm}
4651   @tab Impostazioni predefinite dell'output MIDI
4652 @item @file{scm/output-lib.scm}
4653   @tab Impostazioni che modificano l'aspetto di tasti, colori,
4654        alterazioni, stanghette, etc.
4655 @item @file{scm/parser-clef.scm}
4656   @tab Definizioni delle chiavi supportate
4657 @item @file{scm/script.scm}
4658   @tab Impostazioni predefinite delle articolazioni
4659 @end multitable
4660
4661
4662 @node Modifiche avanzate con Scheme
4663 @subsection Modifiche avanzate con Scheme
4664 @translationof Advanced tweaks with Scheme
4665
4666 Anche se molte cose sono possibili con i comandi @code{\override} e
4667 @code{\tweak}, un modo ancor più potente di modificare l'azione
4668 di LilyPond è resa possibile da un interfaccia programmabile al
4669 funzionamento interno di LilyPond.  Il codice scritto nel linguaggio
4670 di programmazione Scheme può essere incorporato direttamente nel
4671 funzionamento interno di LilyPond.  Ovviamente, per farlo è necessaria
4672 almeno una conoscenza di base della programmazione in Scheme;
4673 abbiamo scritto un'introduzione in @rextend{Scheme tutorial}.
4674
4675 Come esempio di una delle tante possibilità, invece di impostare
4676 una proprietà su un valore costante, si può impostare su una
4677 procedura Scheme che viene poi chiamata ogni volta che LilyPond
4678 accede a quella proprietà.  La proprietà può essere poi impostata
4679 dinamicamente su un valore determinato dalla procedura nel momento
4680 in cui viene chiamata.  In questo esempio coloriamo le teste delle
4681 note in base alla loro posizione sul rigo.
4682
4683 @cindex funzione x11-color, esempio d'uso
4684 @cindex x11-color, esempio d'uso
4685 @cindex NoteHead, esempio di sovrascrittura
4686 @cindex proprietà color, impostare su procedura Scheme
4687 @cindex color, impostare su procedura Scheme
4688
4689 @lilypond[quote,verbatim,ragged-right]
4690 #(define (color-notehead grob)
4691    "Colora le teste di nota in base alla loro posizione sul rigo."
4692    (let ((mod-position (modulo (ly:grob-property grob 'staff-position)
4693                                7)))
4694      (case mod-position
4695        ;;   Return rainbow colors
4696        ((1) (x11-color 'red    ))  ; for C
4697        ((2) (x11-color 'orange ))  ; for D
4698        ((3) (x11-color 'yellow ))  ; for E
4699        ((4) (x11-color 'green  ))  ; for F
4700        ((5) (x11-color 'blue   ))  ; for G
4701        ((6) (x11-color 'purple ))  ; for A
4702        ((0) (x11-color 'violet ))  ; for B
4703        )))
4704
4705 \relative {
4706   % Fa sì che il colore sia preso dalla procedura color-notehead
4707   \override NoteHead.color = #color-notehead
4708   a2 b | c2 d | e2 f | g2 a |
4709 }
4710 @end lilypond
4711
4712 Altri esempi che mostrano l'uso di queste interfacce programmabili
4713 si trovano in @rextend{Callback functions}.