]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/it/notation/changing-defaults.itely
Web: Add GSoC entry for ScholarLY
[lilypond.git] / Documentation / it / notation / changing-defaults.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: it -*-
2
3 @ignore
4     Translation of GIT committish: 28add695953862ef4a87f9fbeadd1d02dc299244
5
6     When revising a translation, copy the HEAD committish of the
7     version that you are working on.  For details, see the Contributors'
8     Guide, node Updating translation committishes..
9 @end ignore
10
11 @c Translators: Federico Bruni
12 @c Translation checkers:
13
14 @c \version "2.19.22"
15
16 @node Modifica delle impostazioni predefinite
17 @chapter Modifica delle impostazioni predefinite
18 @translationof Changing defaults
19
20 The purpose of LilyPond's design is to provide the finest quality
21 output by default.  Nevertheless, it may happen that you need to
22 change this default layout.  The layout is controlled through a large
23 number of @q{knobs and switches} collectively called @q{properties}.
24 A tutorial introduction to accessing and modifying these properties
25 can be found in the Manuale di apprendimento, see @rlearning{Modifica dell'output}.
26 This should be read first.  This chapter covers similar ground, but
27 in a style more appropriate to a reference manual.
28
29 @cindex Internals Reference
30 @cindex Guida al funzionamento interno
31
32 The definitive description of the controls available for tuning can
33 be found in a separate document: @rinternalsnamed{Top,the Internals
34 Reference}.  That manual lists all the variables, functions and
35 options available in LilyPond.  It is written as a HTML document,
36 which is available
37 @c leave the @uref as one long line.
38 @uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/internals/,on@/-line},
39 and is also included with the LilyPond documentation package.
40
41 Internally, LilyPond uses Scheme (a LISP dialect) to provide
42 infrastructure.  Overriding layout decisions in effect accesses the
43 program internals, which requires Scheme input.  Scheme elements are
44 introduced in a @file{.ly} file with the hash
45 mark@tie{}@code{#}.@footnote{@rextend{Scheme tutorial}, contains a
46 short tutorial on entering numbers, lists, strings, and symbols in
47 Scheme.}
48
49
50 @menu
51 * Contesti di interpretazione::
52 * Come funziona la Guida al funzionamento interno::
53 * Modifica delle proprietà::
54 * Proprietà e concetti utili::
55 * Ritocchi avanzati::
56 * Uso delle funzioni musicali::
57 @end menu
58
59
60 @node Contesti di interpretazione
61 @section Contesti di interpretazione
62 @translationof Interpretation contexts
63
64 This section describes what contexts are, and how to modify them.
65
66 @menu
67 * Contexts explained::
68 * Creating and referencing contexts::
69 * Keeping contexts alive::
70 * Modifying context plug-ins::
71 * Changing context default settings::
72 * Defining new contexts::
73 * Context layout order::
74 @end menu
75
76 @seealso
77 Manuale di apprendimento:
78 @rlearning{Contesti e incisori}.
79
80 File installati:
81 @file{ly/engraver-init.ly},
82 @file{ly/performer-init.ly}.
83
84 Frammenti:
85 @rlsr{Contexts and engravers}.
86
87 Guida al funzionamento interno:
88 @rinternals{Contexts},
89 @rinternals{Engravers and Performers}.
90
91
92 @node Contexts explained
93 @subsection Contexts explained
94
95 @ignore
96 @c TODO Rethink and rewrite
97
98 >> > > - list of contexts: my *danger unmaintainable*
99 >> > > alarm just went off.  I'm
100
101 I knew it would... And leaving out some of them is perfectly fine
102 with me.
103 I do think that a list like this, with the main contexts and a
104 brief
105 description of  what they do (perhaps also with a note about what
106 default
107 behavior is associated with each of them, but this may be
108 unmanageable),
109 should be there, and then we could simply list the remaining ones
110 without
111 further explanation and with links to the IR.
112 @end ignore
113
114 @c TODO Improve layout, order and consistency of wording -td
115
116 @c TODO Add introduction which explains contexts in generality  -td
117
118 @c TODO Describe propagation of property values -td
119
120 Contexts are arranged hierarchically:
121
122 @menu
123 * Output definitions - blueprints for contexts::
124 * Score - the master of all contexts::
125 * Top-level contexts - staff containers::
126 * Intermediate-level contexts - staves::
127 * Bottom-level contexts - voices::
128 @end menu
129
130 @node Output definitions - blueprints for contexts
131 @unnumberedsubsubsec Output definitions - blueprints for contexts
132
133 This section explains the relevance of output definitions when
134 working with contexts.  Examples for actual output definitions are
135 given later (see @ref{Changing all contexts of the same type}).
136
137 @cindex output definitions
138 @funindex \layout
139 While music written in a file may refer to context types and
140 names, contexts are created only when the music is actually being
141 interpreted.  LilyPond interprets music under control of an
142 @q{output definition} and may do so for several different output
143 definitions, resulting in different output.  The output definition
144 relevant for printing music is specified using @code{\layout}.
145
146 @funindex \midi
147 A much simpler output definition used for producing Midi output is
148 specified using @code{\midi}.  Several other output definitions
149 are used by LilyPond internally, like when using the part combiner
150 (@ref{Automatic part combining}) or creating music quotes
151 (@ref{Quoting other voices}).
152
153 Output definitions define the relation between contexts as well as
154 their respective default settings.  While most changes will
155 usually be made inside of a @code{\layout} block, Midi-related
156 settings will only have an effect when made within a @code{\midi}
157 block.
158
159 @funindex autoBeaming
160 Some settings affect several outputs: for example, if
161 @code{autoBeaming} is turned off in some context, beams count as
162 melismata for the purpose of matching music to lyrics as described
163 in @ref{Automatic syllable durations}.  This matching is done both
164 for printed output as well as for Midi.  If changes made to
165 @code{autoBeaming} within a context definition of a @code{\layout}
166 block are not repeated in the corresponding @code{\midi} block,
167 lyrics and music will get out of sync in Midi.
168
169 @seealso
170 File installati:
171 @file{ly/engraver-init.ly}.
172 @file{ly/performer-init.ly}.
173
174 @node Score - the master of all contexts
175 @unnumberedsubsubsec Score - the master of all contexts
176
177 This is the top level notation context.  No other context can
178 contain a Score context.  By default the Score context handles
179 the administration of time signatures and makes sure that items
180 such as clefs, time signatures, and key-signatures are aligned
181 across staves.
182
183 A Score context is instantiated implicitly when a
184 @code{\score @{@dots{}@}} block is processed.
185
186 @node Top-level contexts - staff containers
187 @unnumberedsubsubsec Top-level contexts - staff containers
188
189 @strong{@emph{StaffGroup}}
190
191 Groups staves while adding a bracket on the left side, grouping
192 the staves together.  The bar lines of the contained staves are
193 connected vertically.  @code{StaffGroup} only consists of a collection
194 of staves, with a bracket in front and spanning bar lines.
195
196 @strong{@emph{ChoirStaff}}
197
198 Identical to @code{StaffGroup} except that the bar lines of the
199 contained staves are not connected vertically.
200
201 @strong{@emph{GrandStaff}}
202
203 A group of staves, with a brace on the left side, grouping the
204 staves together.  The bar lines of the contained staves are
205 connected vertically.
206
207 @strong{@emph{PianoStaff}}
208
209 Just like @code{GrandStaff}, but with support for instrument names
210 to the left of each system.
211
212 @node Intermediate-level contexts - staves
213 @unnumberedsubsubsec Intermediate-level contexts - staves
214
215 @strong{@emph{Staff}}
216
217 Handles clefs, bar lines, keys, accidentals.  It can contain
218 @code{Voice} contexts.
219
220 @strong{@emph{RhythmicStaff}}
221
222 Like @code{Staff} but for printing rhythms.  Pitches are ignored
223 when engraving; the notes are printed on one line.  The MIDI
224 rendition retains pitches unchanged.
225
226 @strong{@emph{TabStaff}}
227
228 Context for generating tablature.  By default lays the music
229 expression out as a guitar tablature, printed on six lines.
230
231 @strong{@emph{DrumStaff}}
232
233 Handles typesetting for percussion.  Can contain @code{DrumVoice}
234
235 @strong{@emph{VaticanaStaff}}
236
237 Same as @code{Staff}, except that it is designed for typesetting
238 a piece in gregorian style.
239
240 @strong{@emph{MensuralStaff}}
241
242 Same as @code{Staff}, except that it is designed for typesetting
243 a piece in mensural style.
244
245 @node Bottom-level contexts - voices
246 @unnumberedsubsubsec Bottom-level contexts - voices
247
248 Voice-level contexts initialise certain properties and start
249 appropriate engravers.  A bottom-level context is one without
250 @code{defaultchild}.  While it is possible to let it
251 accept/@/contain subcontexts, they can only be created and entered
252 explicitly.
253
254 @strong{@emph{Voice}}
255
256 Corresponds to a voice on a staff.  This context handles the
257 conversion of dynamic signs, stems, beams, super- and sub-scripts,
258 slurs, ties, and rests.  You have to instantiate this explicitly
259 if you require multiple voices on the same staff.
260
261 @strong{@emph{VaticanaVoice}}
262
263 Same as @code{Voice}, except that it is designed for typesetting
264 a piece in gregorian style.
265
266 @strong{@emph{MensuralVoice}}
267
268 Same as @code{Voice}, with modifications for typesetting a piece in
269 mensural style.
270
271 @strong{@emph{Lyrics}}
272
273 Corresponds to a voice with lyrics.  Handles the printing of a
274 single line of lyrics.
275
276 @strong{@emph{DrumVoice}}
277
278 The voice context used in a percussion staff.
279
280 @strong{@emph{FiguredBass}}
281
282 The context in which @code{BassFigure} objects are created from
283 input entered in @code{\figuremode} mode.
284
285 @strong{@emph{TabVoice}}
286
287 The voice context used within a @code{TabStaff} context.  Usually
288 left to be created implicitly.
289
290 @strong{@emph{CueVoice}}
291
292 A voice context used to render notes of a reduced size, intended
293 primarily for adding cue notes to a staff, see @ref{Formatting
294 cue notes}.  Usually left to be created implicitly.
295
296 @strong{@emph{ChordNames}}
297
298 Typesets chord names.
299
300 @ignore
301 TODO
302
303 Then the following, which I don't know what to do with:
304
305     * GregorianTranscriptionVoice
306     * GregorianTranscriptionStaff
307
308     * FretBoards
309         Engraves fretboards from chords. Not easy... Not
310 documented.
311         There is now some documentation on FretBoards in the NR, under
312          instrument-specific notation -- cds.
313
314     * NoteNames
315
316     * Global
317         Hard coded entry point for LilyPond. Cannot be tuned.
318     * Devnull
319         Silently discards all musical information given to this
320 context.
321
322 @end ignore
323
324 @node Creating and referencing contexts
325 @subsection Creating and referencing contexts
326
327 @funindex \new
328 @funindex \context
329 @cindex new contexts
330 @cindex referencing contexts
331 @cindex Contexts, creating and referencing
332
333 LilyPond will create lower-level contexts automatically if a music
334 expression is encountered before a suitable context exists, but this
335 is usually successful only for simple scores or music fragments like
336 the ones in the documentation.  For more complex scores it is
337 advisable to specify all contexts explicitly with either the
338 @code{\new} or @code{\context} command.  The syntax of
339 these two commands is very similar:
340
341 @example
342 [\new | \context] @var{Context} [ = @var{name}] [@var{music-expression}]
343 @end example
344
345 @noindent
346 where either @code{\new} or @code{\context} may be specified.
347 @var{Context} is the type of context which is to be created,
348 @var{name} is an optional name to be given to the particular context
349 being created and @var{music-expression} is a single music expression
350 that is to be interpreted by the engravers and performers in this
351 context.
352
353 The @code{\new} prefix without a name is commonly used to create
354 scores with many staves:
355
356 @lilypond[quote,verbatim]
357 <<
358   \new Staff \relative {
359     % leave the Voice context to be created implicitly
360     c''4 c
361   }
362   \new Staff \relative {
363     d''4 d
364   }
365 >>
366 @end lilypond
367
368 @noindent
369 and to place several voices into one staff:
370
371 @lilypond[quote,verbatim]
372 \new Staff <<
373   \new Voice \relative {
374     \voiceOne
375     c''8 c c4 c c
376   }
377   \new Voice \relative {
378     \voiceTwo
379     g'4 g g g
380   }
381 >>
382 @end lilypond
383
384 @noindent
385 @code{\new} should always be used to specify unnamed contexts.
386
387 The difference between @code{\new} and @code{\context} is in the
388 action taken:
389
390 @itemize
391 @item
392 @code{\new} with or without a name will always create a fresh,
393 distinct, context, even if one with the same name already exists:
394
395 @lilypond[quote,verbatim]
396 \new Staff <<
397   \new Voice = "A" \relative {
398     \voiceOne
399     c''8 c c4 c c
400   }
401   \new Voice = "A" \relative {
402     \voiceTwo
403     g'4 g g g
404   }
405 >>
406 @end lilypond
407
408 @item
409 @code{\context} with a name specified will create a distinct context
410 only if a context of the same type with the same name in the same
411 context hierarchy does not already exist.  Otherwise it will be taken
412 as a reference to that previously created context, and its music
413 expression will be passed to that context for interpretation.
414
415 One application of named contexts is in separating the score layout
416 from the musical content.  Either of these two forms is valid:
417
418 @lilypond[quote,verbatim]
419 \score {
420   <<
421     % score layout
422     \new Staff <<
423       \new Voice = "one" {
424         \voiceOne
425       }
426       \new Voice = "two" {
427         \voiceTwo
428       }
429     >>
430
431     % musical content
432     \context Voice = "one" {
433       \relative {
434         c''4 c c c
435       }
436     }
437     \context Voice = "two" {
438       \relative {
439         g'8 g g4 g g
440       }
441     }
442   >>
443 }
444 @end lilypond
445
446 @lilypond[quote,verbatim]
447 \score {
448   <<
449     % score layout
450     \new Staff <<
451       \context Voice = "one" {
452         \voiceOne
453       }
454       \context Voice = "two" {
455         \voiceTwo
456       }
457     >>
458
459     % musical content
460     \context Voice = "one" {
461       \relative {
462         c''4 c c c
463       }
464     }
465     \context Voice = "two" {
466       \relative {
467         g'8 g g4 g g
468       }
469     }
470   >>
471 }
472 @end lilypond
473
474 @noindent
475 Alternatively, variables may be employed to similar effect.  See
476 @rlearning{Organizzare i brani con le variabili}.
477
478 @item
479 @code{\context} with no name will match the first of any previously
480 created contexts of the same type in the same context heirarchy,
481 even one that has been given a name, and its music expression will be
482 passed to that context for interpretation.  This form is rarely
483 useful.  However, @code{\context} with no name and no music expression
484 is used to set the context in which a Scheme procedure specified with
485 @code{\applyContext} is executed:
486
487 @example
488 \new Staff \relative @{
489   c'1
490   \context Timing
491   \applyContext #(lambda (ctx)
492                    (newline)
493                    (display (ly:context-current-moment ctx)))
494   c1
495 @}
496 @end example
497
498 @end itemize
499
500 A context must be named if it is to be referenced later, for example
501 when lyrics are associated with music:
502
503 @example
504 \new Voice = "tenor" @var{music}
505 @dots{}
506 \new Lyrics \lyricsto "tenor" @var{lyrics}
507 @end example
508
509 @noindent
510 For details of associating lyrics with music see
511 @ref{Automatic syllable durations}.
512
513 The properties of all contexts of a particular type can be modified
514 in a @code{\layout} block (with a different syntax), see
515 @ref{Changing all contexts of the same type}.  This construct also
516 provides a means of keeping layout instructions separate from the
517 musical content.  If a single context is to be modified, a @code{\with}
518 block must be used, see @ref{Changing just one specific context}.
519
520 @seealso
521 Manuale di apprendimento:
522 @rlearning{Organizzare i brani con le variabili}.
523
524 Guida alla notazione:
525 @ref{Changing just one specific context},
526 @ref{Automatic syllable durations}.
527
528
529 @node Keeping contexts alive
530 @subsection Keeping contexts alive
531
532 @cindex contexts, keeping alive
533 @cindex contexts, lifetime
534
535 Contexts are usually terminated at the first musical moment in
536 which they have nothing to do.  So @code{Voice} contexts die as
537 soon as they contain no events; @code{Staff} contexts die as soon
538 as all the @code{Voice} contexts within them contain no events; etc.
539 This can cause difficulties if earlier contexts which have died
540 have to be referenced, for example, when changing staves with
541 @code{\change} commands, associating lyrics with a voice with
542 @code{\lyricsto} commands, or when adding further musical events to
543 an earlier context.
544
545 There is an exception to this general rule: inside of an
546 @code{@{@dots{}@}} construct (sequential music), the construct's
547 notion of the ``current context'' will descend whenever an element
548 of the sequence ends in a subcontext of the previous current
549 context.  This avoids spurious creation of implicit contexts in a
550 number of situations but means that the first context descended
551 into will be kept alive until the end of the expression.
552
553 In contrast, the contexts of a @code{<<@dots{}>>} construct's
554 (simultaneous music) expression are not carried forth, so
555 enclosing a context creating command in an extra pair of
556 @code{<<@dots{}>>} will keep the context from persisting through
557 all of the enclosing @code{@{@dots{}@}} sequence.
558
559 Any context can be kept alive by ensuring it has something to do at
560 every musical moment.  @code{Staff} contexts are kept alive by
561 ensuring one of their voices is kept alive.  One way of doing this
562 is to add spacer rests to a voice in parallel with the real music.
563 These need to be added to every @code{Voice} context which needs to
564 be kept alive.  If several voices are to be used sporadically it is
565 safest to keep them all alive rather than attempting to rely on the
566 exceptions mentioned above.
567
568 In the following example, both voice A and voice B are kept alive
569 in this way for the duration of the piece:
570
571 @lilypond[quote,verbatim]
572 musicA = \relative { d''4 d d d }
573 musicB = \relative { g'4 g g g }
574 keepVoicesAlive = {
575   <<
576     \new Voice = "A" { s1*5 }  % Keep Voice "A" alive for 5 bars
577     \new Voice = "B" { s1*5 }  % Keep Voice "B" alive for 5 bars
578   >>
579 }
580
581 music = {
582   \context Voice = "A" {
583     \voiceOneStyle
584     \musicA
585   }
586   \context Voice = "B" {
587     \voiceTwoStyle
588     \musicB
589   }
590   \context Voice = "A" { \musicA }
591   \context Voice = "B" { \musicB }
592   \context Voice = "A" { \musicA }
593 }
594
595 \score {
596   \new Staff <<
597     \keepVoicesAlive
598     \music
599   >>
600 }
601 @end lilypond
602
603 @cindex lyrics, aligning with sporadic melody
604
605 The following example shows how a sporadic melody line with lyrics
606 might be written using this approach.  In a real situation the
607 melody and accompaniment would consist of several different
608 sections, of course.
609
610 @lilypond[quote,verbatim]
611 melody = \relative { a'4 a a a }
612 accompaniment = \relative { d'4 d d d }
613 words = \lyricmode { These words fol -- low the mel -- o -- dy }
614 \score {
615   <<
616     \new Staff = "music" {
617       <<
618         \new Voice = "melody" {
619           \voiceOne
620           s1*4  % Keep Voice "melody" alive for 4 bars
621         }
622         {
623           \new Voice = "accompaniment" {
624             \voiceTwo
625             \accompaniment
626           }
627           <<
628             \context Voice = "melody" { \melody }
629             \context Voice = "accompaniment" { \accompaniment }
630           >>
631           \context Voice = "accompaniment" { \accompaniment }
632           <<
633             \context Voice = "melody" { \melody }
634             \context Voice = "accompaniment" { \accompaniment }
635           >>
636         }
637       >>
638     }
639     \new Lyrics \with { alignAboveContext = #"music" }
640     \lyricsto "melody" { \words }
641   >>
642 }
643 @end lilypond
644
645 An alternative way, which may be better in many circumstances, is
646 to keep the melody line alive by simply including spacer notes to
647 line it up correctly with the accompaniment:
648
649 @lilypond[quote,verbatim]
650 melody = \relative {
651   s1  % skip a bar
652   a'4 a a a
653   s1  % skip a bar
654   a4 a a a
655 }
656 accompaniment = \relative {
657   d'4 d d d
658   d4 d d d
659   d4 d d d
660   d4 d d d
661 }
662 words = \lyricmode { These words fol -- low the mel -- o -- dy }
663
664 \score {
665   <<
666     \new Staff = "music" {
667       <<
668         \new Voice = "melody" {
669           \voiceOne
670           \melody
671         }
672         \new Voice = "accompaniment" {
673           \voiceTwo
674           \accompaniment
675         }
676       >>
677     }
678     \new Lyrics \with { alignAboveContext = #"music" }
679     \lyricsto "melody" { \words }
680   >>
681 }
682 @end lilypond
683
684
685 @node Modifying context plug-ins
686 @subsection Modifying context plug-ins
687
688 @c TODO Should this be Modifying engravers or Modifying contexts?
689
690 Notation contexts (like @code{Score} and @code{Staff}) not only store
691 properties, they also contain plug-ins called @q{engravers} that create
692 notation elements.  For example, the @code{Voice} context contains a
693 @code{Note_heads_engraver} and the @code{Staff} context contains a
694 @code{Key_engraver}.
695
696 For a full a description of each plug-in, see
697 @ifhtml
698 @rinternals{Engravers and Performers}.
699 @end ifhtml
700 @ifnothtml
701 Guida al funzionamento interno @expansion{} Translation @expansion{} Engravers.
702 @end ifnothtml
703 Every context described in
704 @ifhtml
705 @rinternals{Contexts}
706 @end ifhtml
707 @ifnothtml
708 Guida al funzionamento interno @expansion{} Translation @expansion{} Context.
709 @end ifnothtml
710 lists the engravers used for that context.
711
712
713 It can be useful to shuffle around these plug-ins.  This is done by
714 starting a new context with @code{\new} or @code{\context}, and
715 modifying it,
716
717 @funindex \with
718
719 @example
720 \new @var{context} \with @{
721   \consists @dots{}
722   \consists @dots{}
723   \remove @dots{}
724   \remove @dots{}
725   @emph{etc.}
726 @}
727 @{
728   @emph{@dots{}music@dots{}}
729 @}
730 @end example
731
732 @noindent
733 where the @dots{} should be the name of an engraver.  Here is a simple
734 example which removes @code{Time_signature_engraver} and
735 @code{Clef_engraver} from a @code{Staff} context,
736
737 @lilypond[quote,verbatim]
738 <<
739   \new Staff \relative {
740     f'2 g
741   }
742   \new Staff \with {
743      \remove "Time_signature_engraver"
744      \remove "Clef_engraver"
745   } \relative {
746     f'2 g2
747   }
748 >>
749 @end lilypond
750
751 In the second staff there are no time signature or clef symbols.  This
752 is a rather crude method of making objects disappear since it will affect
753 the entire staff.  This method also influences the spacing, which may or
754 may not be desirable.  More sophisticated methods of blanking objects
755 are shown in @rlearning{Visibilità e colore degli oggetti}.
756
757 The next example shows a practical application.  Bar lines and time
758 signatures are normally synchronized across the score.  This is done
759 by the @code{Timing_translator} and @code{Default_bar_line_engraver}.
760 This plug-in keeps an administration of time signature, location
761 within the measure, etc.  By moving these engraver from @code{Score} to
762 @code{Staff} context, we can have a score where each staff has its own
763 time signature.
764
765 @cindex polymetric scores
766 @cindex time signature, multiple
767
768 @lilypond[quote,verbatim]
769 \score {
770   <<
771     \new Staff \with {
772       \consists "Timing_translator"
773       \consists "Default_bar_line_engraver"
774     }
775     \relative {
776         \time 3/4
777         c''4 c c c c c
778     }
779   \new Staff \with {
780     \consists "Timing_translator"
781     \consists "Default_bar_line_engraver"
782   }
783   \relative {
784       \time 2/4
785       c''4 c c c c c
786   }
787 >>
788 \layout {
789   \context {
790     \Score
791     \remove "Timing_translator"
792     \remove "Default_bar_line_engraver"
793     }
794   }
795 }
796 @end lilypond
797
798 @knownissues
799
800 The order in which the engravers are specified is the order in
801 which they are called to carry out their processing.  Usually the
802 order in which the engravers are specified does not matter, but in
803 a few special cases the order is important, for example where one
804 engraver writes a property and another reads it, or where one
805 engraver creates a grob and another must process it.
806
807 The following orderings are important:
808
809 @itemize
810 @item
811 the @code{Bar_engraver} must normally be first,
812
813 @item
814 the @code{New_fingering_engraver} must come before the
815 @code{Script_column_engraver},
816
817 @item
818 the @code{Timing_translator} must come before the
819 @code{Bar_number_engraver}.
820
821 @end itemize
822
823 @seealso
824 File installati:
825 @file{ly/engraver-init.ly}.
826
827
828 @node Changing context default settings
829 @subsection Changing context default settings
830
831 @cindex default context properties, changing
832 @cindex context properties, changing defaults
833
834 Context and grob properties can be changed with @code{\set}
835 and @code{\override} commands, as described in
836 @ref{Modifying properties}.  These commands create music events,
837 making the changes take effect at the point in time the music
838 is being processed.
839
840 In contrast, this section explains how to change the @emph{default}
841 values of context and grob properties at the time the context is
842 created.  There are two ways of doing this.  One modifies the default
843 values in all contexts of a particular type, the other modifies the
844 default values in just one particular instance of a context.
845
846 @menu
847 * Changing all contexts of the same type::
848 * Changing just one specific context::
849 * Order of precedence::
850 @end menu
851
852 @node Changing all contexts of the same type
853 @unnumberedsubsubsec Changing all contexts of the same type
854
855 @cindex \context in \layout block
856 @funindex \context
857 @funindex \layout
858
859 The default context settings which are to be used for typesetting in
860 @code{Score}, @code{Staff}, @code{Voice} and other contexts may be
861 specified in a @code{\context} block within any @code{\layout}
862 block.
863
864 Settings for Midi output as opposed to typesetting will have to be
865 separately specified in @code{\midi} blocks (see @ref{Output
866 definitions - blueprints for contexts}).
867
868 The @code{\layout} block should be placed within the @code{\score}
869 block to which it is to apply, after the music.
870
871 @example
872 \layout @{
873   \context @{
874     \Voice
875     [context settings for all Voice contexts]
876   @}
877   \context @{
878     \Staff
879     [context settings for all Staff contexts]
880   @}
881 @}
882 @end example
883
884 The following types of settings may be specified:
885
886 @itemize
887 @item
888 An @code{\override} command, but with the context name omitted
889
890 @lilypond[quote,verbatim]
891 \score {
892   \relative {
893     a'4^"Thicker stems" a a a
894     a4 a a\ff a
895   }
896   \layout {
897     \context {
898       \Staff
899       \override Stem.thickness = #4.0
900     }
901   }
902 }
903 @end lilypond
904
905 @item
906 Directly setting a context property
907
908 @lilypond[quote,verbatim]
909 \score {
910   \relative {
911     a'4^"Smaller font" a a a
912     a4 a a\ff a
913   }
914   \layout {
915     \context {
916       \Staff
917       fontSize = #-4
918     }
919   }
920 }
921 @end lilypond
922
923 @item
924 A predefined command such as @code{\dynamicUp} or a music
925 expression like @code{\accidentalStyle dodecaphonic}
926
927 @lilypond[quote,verbatim]
928 \score {
929   \relative {
930     a'4^"Dynamics above" a a a
931     a4 a a\ff a
932   }
933   \layout {
934     \context {
935       \Voice
936       \dynamicUp
937     }
938     \context {
939       \Staff
940       \accidentalStyle dodecaphonic
941     }
942   }
943 }
944 @end lilypond
945
946 @item
947 A user-defined variable containing a @code{\with} block; for details
948 of the @code{\with} block see
949 @ref{Changing just one specific context}.
950
951 @lilypond[quote,verbatim]
952 StaffDefaults = \with {
953   fontSize = #-4
954 }
955
956 \score {
957   \new Staff {
958     \relative {
959       a'4^"Smaller font" a a a
960       a4 a a a
961     }
962   }
963   \layout {
964     \context {
965       \Staff
966       \StaffDefaults
967     }
968   }
969 }
970 @end lilypond
971
972 @end itemize
973
974 Property-setting commands can be placed in a @code{\layout} block
975 without being enclosed in a @code{\context} block.  Such settings
976 are equivalent to including the same property-setting commands at
977 the start of every context of the type specified.  If no context
978 is specified @emph{every} bottom-level context is affected, see
979 @ref{Bottom-level contexts - voices}.  The syntax of a
980 property-setting command in a @code{\layout} block is the same as
981 the same command written in the music stream.
982
983 @lilypond[quote,verbatim]
984 \score {
985   \new Staff {
986     \relative {
987       a'4^"Smaller font" a a a
988       a4 a a a
989     }
990   }
991   \layout {
992     \accidentalStyle dodecaphonic
993     \set fontSize = #-4
994     \override Voice.Stem.thickness = #4.0
995   }
996 }
997 @end lilypond
998
999
1000 @node Changing just one specific context
1001 @unnumberedsubsubsec Changing just one specific context
1002
1003 @cindex \with
1004 @funindex \with
1005
1006 The context properties of just one specific context instance can be
1007 changed in a @code{\with} block.  All other context instances of the
1008 same type retain the default settings built into LilyPond and modified
1009 by any @code{\layout} block within scope.  The @code{\with} block
1010 must be placed immediately after the @code{\new} @var{context-type}
1011 command:
1012
1013 @example
1014 \new Staff \with @{ [context settings for this context instance only] @}
1015 @{
1016   @dots{}
1017 @}
1018 @end example
1019
1020 Since such a @q{context modification} is specified inside of
1021 music, it will affect @emph{all} outputs (typesetting @emph{and}
1022 Midi) as opposed to changes within an output definition.
1023
1024 The following types of settings may be specified:
1025
1026 @itemize
1027 @item
1028 An @code{\override} command, but with the context name omitted
1029
1030 @lilypond[quote,verbatim]
1031 \score {
1032   \new Staff {
1033     \new Voice \with { \override Stem.thickness = #4.0 }
1034     {
1035       \relative {
1036         a'4^"Thick stems" a a a
1037         a4 a a a
1038       }
1039     }
1040   }
1041 }
1042 @end lilypond
1043
1044 @item
1045 Directly setting a context property
1046
1047 @lilypond[quote,verbatim]
1048 \score {
1049   <<
1050     \new Staff {
1051       \relative {
1052         a'4^"Default font" a a a
1053         a4 a a a
1054       }
1055     }
1056     \new Staff \with { fontSize = #-4 }
1057     {
1058       \relative {
1059         a'4^"Smaller font" a a a
1060         a4 a a a
1061       }
1062     }
1063   >>
1064 }
1065 @end lilypond
1066
1067 @item
1068 A predefined command such as @code{\dynamicUp}
1069
1070 @lilypond[quote,verbatim]
1071 \score {
1072   <<
1073     \new Staff {
1074       \new Voice {
1075         \relative {
1076           a'4^"Dynamics below" a a a
1077           a4 a a\ff a
1078         }
1079       }
1080     }
1081     \new Staff \with { \accidentalStyle dodecaphonic }
1082     {
1083       \new Voice \with { \dynamicUp }
1084       {
1085         \relative {
1086           a'4^"Dynamics above" a a a
1087           a4 a a\ff a
1088         }
1089       }
1090     }
1091   >>
1092 }
1093 @end lilypond
1094
1095 @end itemize
1096
1097 @node Order of precedence
1098 @unnumberedsubsubsec Order of precedence
1099
1100 The value of a property which applies at a particular time is
1101 determined as follows:
1102
1103 @itemize
1104 @item
1105 if an @code{\override} or @code{\set} command in the input stream is
1106 in effect that value is used,
1107
1108 @item
1109 otherwise the default value taken from a @code{\with} statement
1110 on the context initiation statement is used,
1111
1112 @item
1113 otherwise the default value taken from the most recent appropriate
1114 @code{\context} block in the @code{\layout} or @code{\midi} blocks
1115 is used,
1116
1117 @item
1118 otherwise the LilyPond built-in default is used.
1119 @end itemize
1120
1121 @seealso
1122 Manuale di apprendimento:
1123 @rlearning{Modificare le proprietà di contesto}.
1124
1125 Guida alla notazione:
1126 @ref{Contexts explained},
1127 @ref{Bottom-level contexts - voices},
1128 @ref{The set command},
1129 @ref{The override command},
1130 @ref{The layout block,,The @code{@bs{}layout} block}.
1131
1132
1133 @node Defining new contexts
1134 @subsection Defining new contexts
1135
1136 @cindex contexts, defining new
1137 @cindex engravers, including in contexts
1138
1139 @funindex \alias
1140 @funindex alias
1141 @funindex \name
1142 @funindex name
1143 @funindex \type
1144 @funindex type
1145 @funindex \consists
1146 @funindex consists
1147 @funindex \accepts
1148 @funindex accepts
1149 @funindex \denies
1150 @funindex denies
1151
1152 Specific contexts, like @code{Staff} and @code{Voice}, are made from
1153 simple building blocks.  It is possible to create new types of
1154 contexts with different combinations of engraver plug-ins.
1155
1156 The next example shows how to build a different type of
1157 @code{Voice} context from scratch.  It will be similar to
1158 @code{Voice}, but only prints centered slash note heads.  It can be used
1159 to indicate improvisation in jazz pieces,
1160
1161 @lilypond[quote,ragged-right]
1162 \layout { \context {
1163   \name ImproVoice
1164   \type "Engraver_group"
1165   \consists "Note_heads_engraver"
1166   \consists "Rhythmic_column_engraver"
1167   \consists "Text_engraver"
1168   \consists "Pitch_squash_engraver"
1169   squashedPosition = #0
1170   \override NoteHead.style = #'slash
1171   \hide Stem
1172   \alias Voice
1173 }
1174 \context { \Staff
1175   \accepts "ImproVoice"
1176 }}
1177
1178 \relative {
1179   a'4 d8 bes8 \new ImproVoice { c4^"ad lib" c
1180    c4 c^"undress" c_"while playing :)" c }
1181   a1
1182 }
1183 @end lilypond
1184
1185
1186 These settings are defined within a @code{\context} block inside a
1187 @code{\layout} block,
1188
1189 @example
1190 \layout @{
1191   \context @{
1192     @dots{}
1193   @}
1194 @}
1195 @end example
1196
1197 In the following discussion, the example input shown should go in place
1198 of the @dots{} in the previous fragment.
1199
1200 First it is necessary to define a name for the new context:
1201
1202 @example
1203 \name ImproVoice
1204 @end example
1205
1206 Since it is similar to the @code{Voice} context, we want commands that
1207 work in (existing) @code{Voice} contexts to continue working.  This is
1208 achieved by giving the new context an alias of @code{Voice},
1209
1210 @example
1211 \alias Voice
1212 @end example
1213
1214 The context will print notes and instructive texts, so we need to add
1215 the engravers which provide this functionality, plus the engraver which
1216 groups notes, stems and rests which occur at the same musical moment
1217 into columns,
1218
1219 @example
1220 \consists "Note_heads_engraver"
1221 \consists "Text_engraver"
1222 \consists "Rhythmic_column_engraver"
1223 @end example
1224
1225 The note heads should all be placed on the center line,
1226
1227 @example
1228 \consists "Pitch_squash_engraver"
1229 squashedPosition = #0
1230 @end example
1231
1232 The @code{Pitch_squash_engraver} modifies note heads (created
1233 by the @code{Note_heads_engraver}) and sets their vertical
1234 position to the value of @code{squashedPosition}, in this
1235 case@tie{}@code{0}, the center line.
1236
1237 The notes look like a slash, and have no stem,
1238
1239 @example
1240 \override NoteHead.style = #'slash
1241 \hide Stem
1242 @end example
1243
1244 All these plug-ins have to communicate under the control of the
1245 context.  The mechanisms with which contexts communicate are
1246 established by declaring the context @code{\type}.  Within a
1247 @code{\layout} block, most contexts will be of type
1248 @code{Engraver_group}.  Some special contexts and contexts in
1249 @code{\midi} blocks use other context types.  Copying and
1250 modifying an existing context definition will also fill in the
1251 type.  Since this example creates a definition from scratch, it
1252 needs to be specified explicitly.
1253
1254 @example
1255 \type "Engraver_group"
1256 @end example
1257
1258 Put together, we get
1259
1260 @example
1261 \context @{
1262   \name ImproVoice
1263   \type "Engraver_group"
1264   \consists "Note_heads_engraver"
1265   \consists "Text_engraver"
1266   \consists "Rhythmic_column_engraver"
1267   \consists "Pitch_squash_engraver"
1268   squashedPosition = #0
1269   \override NoteHead.style = #'slash
1270   \hide Stem
1271   \alias Voice
1272 @}
1273 @end example
1274
1275 @funindex \accepts
1276 Contexts form hierarchies.  We want to place the @code{ImproVoice}
1277 context within the @code{Staff} context, just like normal @code{Voice}
1278 contexts.  Therefore, we modify the @code{Staff} definition with the
1279 @code{\accepts} command,
1280
1281 @example
1282 \context @{
1283   \Staff
1284   \accepts ImproVoice
1285 @}
1286 @end example
1287
1288 @funindex \inherit-acceptability
1289 Often when reusing an existing context definition, the resulting
1290 context can be used anywhere where the original context would have
1291 been useful.
1292
1293 @example
1294 \layout @{
1295   @dots{}
1296   \inherit-acceptability @var{to} @var{from}
1297 @}
1298 @end example
1299
1300 @noindent
1301 will arrange to have contexts of type @var{to} accepted by all
1302 contexts also accepting @var{from}.  For example, using
1303
1304 @example
1305 \layout @{
1306   @dots{}
1307   \inherit-acceptability "ImproVoice" "Voice"
1308 @}
1309 @end example
1310
1311 @noindent
1312 will add an @code{\accepts} for @code{ImproVoice} to both
1313 @code{Staff} and @code{RhythmicStaff} definitions.
1314
1315 @funindex \denies
1316 The opposite of @code{\accepts} is @code{\denies},
1317 which is sometimes needed when reusing existing context definitions.
1318
1319 Arranging the required pieces into a @code{\layout} block leaves
1320 us with
1321
1322 @example
1323 \layout @{
1324   \context @{
1325     \name ImproVoice
1326     @dots{}
1327   @}
1328   \inherit-acceptability "ImproVoice" "Voice"
1329 @}
1330 @end example
1331
1332 Then the output at the start of this subsection can be entered as
1333
1334 @example
1335 \relative @{
1336   a'4 d8 bes8
1337   \new ImproVoice @{
1338     c4^"ad lib" c
1339     c4 c^"undress"
1340     c c_"while playing :)"
1341   @}
1342   a1
1343 @}
1344 @end example
1345
1346 To complete this example, changes affecting the context hierarchy
1347 should be repeated in a @code{\midi} block so that Midi output
1348 depends on the same context relations.
1349
1350 @seealso
1351
1352 Guida al funzionamento interno:
1353 @rinternals{Note_heads_engraver},
1354 @rinternals{Text_engraver},
1355 @rinternals{Rhythmic_column_engraver},
1356 @rinternals{Pitch_squash_engraver}.
1357
1358
1359 @node Context layout order
1360 @subsection Context layout order
1361
1362 @cindex contexts, layout order
1363 @funindex \accepts
1364 @funindex \denies
1365
1366 Contexts are normally positioned in a system from top to bottom
1367 in the order in which they are encountered in the input file.  When
1368 contexts are nested, the outer context will include inner nested
1369 contexts as specified in the input file, provided the inner contexts
1370 are included in the outer context's @qq{accepts} list.  Nested
1371 contexts which are not included in the outer context's @qq{accepts}
1372 list will be repositioned below the outer context rather than nested
1373 within it.
1374
1375 The @qq{accepts} list of a context can be changed with the
1376 @code{\accepts} or @code{\denies} commands.  @code{\accepts} adds a
1377 context to the @qq{accepts} list and @code{\denies} removes a context
1378 from the list.
1379
1380 For example, a square-braced staff group is not usually found within a
1381 curved-braced staff with connecting staff bars, and a @code{GrandStaff}
1382 does not accept a @code{StaffGroup} inside it by default.
1383
1384 @lilypond[verbatim,quote]
1385 \score {
1386   \new GrandStaff <<
1387     \new StaffGroup <<
1388       \new Staff { c'1 }
1389       \new Staff { d'1 }
1390     >>
1391     \new Staff { \set Staff.instrumentName = bottom f'1 }
1392   >>
1393 }
1394 @end lilypond
1395
1396 However, by using the @code{\accepts} command, @code{StaffGroup} can be
1397 added to the @code{GrandStaff} context:
1398
1399 @lilypond[verbatim,quote]
1400 \score {
1401   \new GrandStaff <<
1402     \new StaffGroup <<
1403       \new Staff { c'1 }
1404       \new Staff { d'1 }
1405     >>
1406     \new Staff { \set Staff.instrumentName = bottom f'1 }
1407   >>
1408   \layout {
1409     \context {
1410       \GrandStaff
1411       \accepts "StaffGroup"
1412     }
1413   }
1414 }
1415 @end lilypond
1416
1417 @code{\denies} is mainly used when a new context is being based on
1418 another, but the required nesting differs.  For example, the
1419 @code{VaticanaStaff} context is based on the @code{Staff} context, but
1420 with the @code{VaticanaVoice} context substituted for the @code{Voice}
1421 context in the @qq{accepts} list.
1422
1423 @cindex contexts, implicit
1424 @cindex implicit contexts
1425 @funindex \defaultchild
1426
1427 Note that a context will be silently created implicitly if a
1428 command is encountered when there is no suitable context available
1429 to contain it.
1430
1431 Within a context definition, the type of subcontext to be
1432 implicitly created is specified using @code{\defaultchild}.  A
1433 number of music events require a @samp{Bottom} context: when such
1434 an event is encountered, subcontexts are created recursively until
1435 reaching a context with no @samp{defaultchild} setting.
1436
1437 Implicit context creation can at times give rise to unexpected new
1438 staves or scores.  Using @code{\new} to create contexts explicitly
1439 avoids those problems.
1440
1441 @cindex alignAboveContext
1442 @cindex alignBelowContext
1443 @funindex alignAboveContext
1444 @funindex alignBelowContext
1445
1446 Sometimes a context is required to exist for just a brief period, a
1447 good example being the staff context for an ossia.  This is usually
1448 achieved by introducing the context definition at the appropriate
1449 place in parallel with corresponding section of the main music.
1450 By default, the temporary context will be placed below all the
1451 existing contexts.  To reposition it above the context called
1452 @qq{main}, it should be defined like this:
1453
1454 @example
1455 @code{\new Staff \with @{ alignAboveContext = #"main" @} }
1456 @end example
1457
1458 A similar situation arises when positioning a temporary lyrics
1459 context within a multi-staved layout such as a @code{ChoirStaff},
1460 for example, when adding a second verse to a repeated section.
1461 By default the temporary lyrics context will be placed beneath the
1462 lower staves.  By defining the temporary lyrics context with
1463 @code{alignBelowContext} it can be positioned correctly beneath
1464 the (named) lyrics context containing the first verse.
1465
1466 Examples showing this repositioning of temporary contexts can be
1467 found elsewhere --- see @rlearning{Annidare le espressioni musicali},
1468 @ref{Modifying single staves} and @ref{Techniques specific to lyrics}.
1469
1470 @seealso
1471 Manuale di apprendimento:
1472 @rlearning{Annidare le espressioni musicali}.
1473
1474 Guida alla notazione:
1475 @ref{Modifying single staves},
1476 @ref{Techniques specific to lyrics}.
1477
1478 Application Usage:
1479 @rprogram{An extra staff appears}.
1480
1481 File installati:
1482 @file{ly/engraver-init.ly}.
1483
1484
1485 @node Come funziona la Guida al funzionamento interno
1486 @section Come funziona la Guida al funzionamento interno
1487 @translationof Explaining the Internals Reference
1488
1489 @menu
1490 * Navigating the program reference::
1491 * Layout interfaces::
1492 * Determining the grob property::
1493 * Naming conventions::
1494 @end menu
1495
1496 @node Navigating the program reference
1497 @subsection Navigating the program reference
1498
1499 @c TODO remove this (it's in the LM)
1500 @c Replace with more factual directions
1501
1502 Suppose we want to move the fingering indication in the fragment
1503 below:
1504
1505 @lilypond[quote,fragment,verbatim]
1506 c''-2
1507 @end lilypond
1508
1509 If you visit the documentation on fingering instructions (in
1510 @ref{Fingering instructions}), you will notice:
1511
1512 @quotation
1513 @strong{See also}
1514
1515 Guida al funzionamento interno: @rinternals{Fingering}.
1516
1517 @end quotation
1518
1519
1520 @c  outdated info; probably will delete.
1521 @ignore
1522 This fragment points to two parts of the program reference: a page
1523 on @code{FingeringEvent} and one on @code{Fingering}.
1524
1525 The page on @code{FingeringEvent} describes the properties of the music
1526 expression for the input @w{@code{-2}}.  The page contains many links
1527 forward.  For example, it says
1528
1529 @quotation
1530 Accepted by: @rinternals{Fingering_engraver},
1531 @end quotation
1532
1533 @noindent
1534 That link brings us to the documentation for the Engraver, the
1535 plug-in, which says
1536
1537 @quotation
1538 This engraver creates the following layout objects: @rinternals{Fingering}.
1539 @end quotation
1540
1541 In other words, once the @code{FingeringEvent}s are interpreted, the
1542 @code{Fingering_engraver} plug-in will process them.
1543 @end ignore
1544
1545 @ignore
1546 @c  I can't figure out what this is supposed to mean.  -gp
1547
1548 The @code{Fingering_engraver} is also listed to create
1549 @rinternals{Fingering} objects,
1550
1551 @c  old info?  it doesn't make any sense to me with our current docs.
1552 This is also the
1553 second bit of information listed under @b{See also} in the Notation
1554 manual.
1555 @end ignore
1556
1557 @ifnothtml
1558 The programmer's reference is available as an HTML document.  It is
1559 highly recommended that you read it in HTML form, either online or
1560 by downloading the HTML documentation.  This section will be much more
1561 difficult to understand if you are using the
1562 PDF manual.
1563 @end ifnothtml
1564
1565 Follow the link to @rinternals{Fingering}.  At the top of the
1566 page, you will see
1567
1568 @quotation
1569 Fingering objects are created by: @rinternals{Fingering_engraver} and
1570 @rinternals{New_fingering_engraver}.
1571 @end quotation
1572
1573 By following related links inside the program reference, we can follow the
1574 flow of information within the program:
1575
1576 @itemize
1577
1578 @item @rinternals{Fingering}:
1579 @rinternals{Fingering} objects are created by:
1580 @rinternals{Fingering_engraver}
1581
1582 @item @rinternals{Fingering_engraver}:
1583 Music types accepted: @rinternals{fingering-event}
1584
1585 @item @rinternals{fingering-event}:
1586 Music event type @code{fingering-event} is in Music expressions named
1587 @rinternals{FingeringEvent}
1588 @end itemize
1589
1590 This path goes against the flow of information in the program: it
1591 starts from the output, and ends at the input event.  You could
1592 also start at an input event, and read with the flow of
1593 information, eventually ending up at the output object(s).
1594
1595 The program reference can also be browsed like a normal document.  It
1596 contains chapters on
1597 @ifhtml
1598 @rinternals{Music definitions},
1599 @end ifhtml
1600 @ifnothtml
1601 @code{Music definitions}
1602 @end ifnothtml
1603 on @rinternals{Translation}, and the @rinternals{Backend}.  Every
1604 chapter lists all the definitions used and all properties that may be
1605 tuned.
1606
1607
1608 @node Layout interfaces
1609 @subsection Layout interfaces
1610
1611 @cindex interface, layout
1612 @cindex layout interface
1613 @cindex grob
1614
1615 The HTML page that we found in the previous section describes the
1616 layout object called @rinternals{Fingering}.  Such an object is a
1617 symbol within the score.  It has properties that store numbers (like
1618 thicknesses and directions), but also pointers to related objects.  A
1619 layout object is also called a @emph{Grob}, which is short for Graphical
1620 Object.  For more details about Grobs, see @rinternals{grob-interface}.
1621
1622 The page for @code{Fingering} lists the definitions for the
1623 @code{Fingering} object.  For example, the page says
1624
1625 @quotation
1626 @code{padding} (dimension, in staff space):
1627
1628 @code{0.5}
1629 @end quotation
1630
1631 @noindent
1632 which means that the number will be kept at a distance of at least 0.5
1633 of the note head.
1634
1635
1636 Each layout object may have several functions as a notational or
1637 typographical element.  For example, the Fingering object
1638 has the following aspects
1639
1640 @itemize
1641 @item
1642 Its size is independent of the horizontal spacing, unlike slurs or beams.
1643
1644 @item
1645 It is a piece of text.  Granted, it is usually a very short text.
1646
1647 @item
1648 That piece of text is typeset with a font, unlike slurs or beams.
1649
1650 @item
1651 Horizontally, the center of the symbol should be aligned to the
1652 center of the note head.
1653
1654 @item
1655 Vertically, the symbol is placed next to the note and the staff.
1656
1657 @item
1658 The vertical position is also coordinated with other superscript
1659 and subscript symbols.
1660 @end itemize
1661
1662 Each of these aspects is captured in so-called @emph{interface}s,
1663 which are listed on the @rinternals{Fingering} page at the bottom
1664
1665 @quotation
1666 This object supports the following interfaces:
1667 @rinternals{item-interface},
1668 @rinternals{self-alignment-interface},
1669 @rinternals{side-position-interface}, @rinternals{text-interface},
1670 @rinternals{text-script-interface}, @rinternals{font-interface},
1671 @rinternals{finger-interface}, and @rinternals{grob-interface}.
1672 @end quotation
1673
1674 Clicking any of the links will take you to the page of the respective
1675 object interface.  Each interface has a number of properties.  Some of
1676 them are not user-serviceable (@q{Internal properties}), but others
1677 can be modified.
1678
1679 We have been talking of @emph{the} @code{Fingering} object, but actually it
1680 does not amount to much.  The initialization file (see
1681 @rlearning{Altre fonti di informazione})
1682 @file{scm/define-grobs.scm} shows the soul of the @q{object},
1683
1684 @example
1685 (Fingering
1686   . ((padding . 0.5)
1687      (avoid-slur . around)
1688      (slur-padding . 0.2)
1689      (staff-padding . 0.5)
1690      (self-alignment-X . 0)
1691      (self-alignment-Y . 0)
1692      (script-priority . 100)
1693      (stencil . ,ly:text-interface::print)
1694      (direction . ,ly:script-interface::calc-direction)
1695      (font-encoding . fetaText)
1696      (font-size . -5)           ; don't overlap when next to heads.
1697      (meta . ((class . Item)
1698      (interfaces . (finger-interface
1699                     font-interface
1700                     text-script-interface
1701                     text-interface
1702                     side-position-interface
1703                     self-alignment-interface
1704                     item-interface))))))
1705 @end example
1706
1707 @noindent
1708 As you can see, the @code{Fingering} object is nothing more than a
1709 bunch of variable settings, and the webpage in the Guida al funzionamento interno
1710 is directly generated from this definition.
1711
1712
1713 @node Determining the grob property
1714 @subsection Determining the grob property
1715
1716 @c TODO remove this (it's in the LM)
1717 @c Replace with more factual directions
1718
1719 Recall that we wanted to change the position of the @b{2} in
1720
1721 @lilypond[quote,fragment,verbatim]
1722 c''-2
1723 @end lilypond
1724
1725 Since the @b{2} is vertically positioned next to its note, we have to
1726 meddle with the interface associated with this positioning.  This is
1727 done using @code{side-position-interface}.  The page for this interface
1728 says
1729
1730 @quotation
1731 @code{side-position-interface}
1732
1733 Position a victim object (this one) next to other objects (the
1734 support).  The property @code{direction} signifies where to put the
1735 victim object relative to the support (left or right, up or down?)
1736 @end quotation
1737
1738 @cindex padding
1739 @noindent
1740 Below this description, the variable @code{padding} is described as
1741
1742 @quotation
1743 @table @code
1744 @item padding
1745 (dimension, in staff space)
1746
1747 Add this much extra space between objects that are next to each other.
1748 @end table
1749 @end quotation
1750
1751 By increasing the value of @code{padding}, we can move the
1752 fingering away from the note head.  The following command inserts
1753 3 staff spaces of white
1754 between the note and the fingering:
1755 @example
1756 \once \override Voice.Fingering.padding = #3
1757 @end example
1758
1759 Inserting this command before the Fingering object is created,
1760 i.e., before @code{c2}, yields the following result:
1761
1762 @lilypond[quote,fragment,verbatim]
1763 \once \override Voice.Fingering.padding = #3
1764 c''-2
1765 @end lilypond
1766
1767
1768 In this case, the context for this tweak is @code{Voice}.  This
1769 fact can also be deduced from the program reference, for the page for
1770 the @rinternals{Fingering_engraver} plug-in says
1771
1772 @quotation
1773 Fingering_engraver is part of contexts: @dots{} @rinternals{Voice}
1774 @end quotation
1775
1776
1777 @node Naming conventions
1778 @subsection Naming conventions
1779
1780 Another thing that is needed, is an overview of the various naming
1781 conventions:
1782
1783 @itemize
1784 @item scheme functions: lowercase-with-hyphens (incl. one-word
1785 names)
1786 @item scheme functions: ly:plus-scheme-style
1787 @item music events, music classes and music properties:
1788 as-scheme-functions
1789 @item Grob interfaces: scheme-style
1790 @item backend properties: scheme-style (but X and Y!)
1791 @item contexts (and MusicExpressions and grobs): Capitalized or
1792 CamelCase
1793 @item context properties: lowercaseFollowedByCamelCase
1794 @item engravers:
1795 Capitalized_followed_by_lowercase_and_with_underscores
1796 @end itemize
1797
1798 Questions to be answered:
1799 @itemize
1800 @item Which of these are conventions and which are rules?
1801 @item Which are rules of the underlying language, and which are
1802 LP-specific?
1803 @end itemize
1804
1805 @node Modifica delle proprietà
1806 @section Modifica delle proprietà
1807 @translationof Modifying properties
1808
1809 @c TODO change the menu and subsection node names to use
1810 @c backslash once the new macro to handle the refs
1811 @c is available.  Need to find and change all refs at
1812 @c the same time. -td
1813
1814 @menu
1815 * Overview of modifying properties::
1816 * The set command::
1817 * The override command::
1818 * Il comando tweak::
1819 * set versus override::
1820 * Modifying alists::
1821 @end menu
1822
1823
1824 @node Overview of modifying properties
1825 @subsection Overview of modifying properties
1826
1827 Each context is responsible for creating certain types of graphical
1828 objects.  The settings used for printing these objects are also stored by
1829 context.  By changing these settings, the appearance of objects can be
1830 altered.
1831
1832 There are two different kinds of properties stored in contexts:
1833 context properties and grob properties.  Context properties are
1834 properties that apply to the context as a whole and control
1835 how the context itself is displayed.  In contrast, grob properties
1836 apply to specific grob types that will be displayed in the context.
1837
1838 The @code{\set} and @code{\unset} commands are used to change values
1839 for context properties.  The @code{\override} and @code{\revert}
1840 commands are used to change values for grob properties.
1841
1842 @ignore
1843 The syntax for this is
1844
1845 @example
1846 \override @var{context}.@var{name} #'@var{property} = #@var{value}
1847 @end example
1848
1849 Here @var{name} is the name of a graphical object, like
1850 @code{Stem} or @code{NoteHead}, and @var{property} is an internal
1851 variable of the formatting system (@q{grob property} or @q{layout
1852 property}).  The latter is a symbol, so it must be quoted.  The
1853 subsection @ref{Modifying properties}, explains what to fill in
1854 for @var{name}, @var{property}, and @var{value}.  Here we only
1855 discuss the functionality of this command.
1856
1857 The command
1858
1859 @verbatim
1860 \override Staff.Stem.thickness = #4.0
1861 @end verbatim
1862
1863 @noindent
1864 makes stems thicker (the default is 1.3, with staff line thickness as a
1865 unit).  Since the command specifies @code{Staff} as context, it only
1866 applies to the current staff.  Other staves will keep their normal
1867 appearance.  Here we see the command in action:
1868
1869 @lilypond[quote,fragment,verbatim]
1870 c''4
1871 \override Staff.Stem.thickness = #4.0
1872 c''4
1873 c''4
1874 c''4
1875 @end lilypond
1876
1877 The @code{\override} command changes the definition of the @code{Stem}
1878 within the current @code{Staff}.  After the command is interpreted
1879 all stems are thickened.
1880
1881 Analogous to @code{\set}, the @var{context} argument may be left out,
1882 causing the default context @code{Voice} to be used.  Adding
1883 @code{\once} applies the change during one timestep only.
1884
1885 @lilypond[quote,fragment,verbatim]
1886 c''4
1887 \once \override Stem.thickness = #4.0
1888 c''4
1889 c''4
1890 @end lilypond
1891
1892 The @code{\override} must be done before the object is
1893 started.  Therefore, when altering @emph{Spanner} objects such as slurs
1894 or beams, the @code{\override} command must be executed at the moment
1895 when the object is created.  In this example,
1896
1897 @lilypond[quote,fragment,verbatim]
1898 \override Slur.thickness = #3.0
1899 c''8[( c''
1900 \override Beam.beam-thickness = #0.6
1901 c''8 c''])
1902 @end lilypond
1903
1904 @noindent
1905 the slur is fatter but the beam is not.  This is because the command for
1906 @code{Beam} comes after the Beam is started, so it has no effect.
1907
1908 Analogous to @code{\unset}, the @code{\revert} command for a context
1909 undoes an @code{\override} command; like with @code{\unset}, it only
1910 affects settings that were made in the same context.  In other words, the
1911 @code{\revert} in the next example does not do anything.
1912
1913 @example
1914 \override Voice.Stem.thickness = #4.0
1915 \revert Staff.Stem.thickness
1916 @end example
1917
1918 Some tweakable options are called @q{subproperties} and reside inside
1919 properties.  To tweak those, use commands of the form
1920
1921 @c leave this as a long long
1922 @example
1923 \override @var{context}.@var{name} #'@var{property} #'@var{subproperty} = #@var{value}
1924 @end example
1925
1926 @noindent
1927 such as
1928
1929 @example
1930 \override Stem.details.beamed-lengths = #'(4 4 3)
1931 @end example
1932
1933 @end ignore
1934
1935 @seealso
1936 Guida al funzionamento interno:
1937 @rinternals{Backend},
1938 @rinternals{All layout objects},
1939 @rinternals{OverrideProperty},
1940 @rinternals{RevertProperty},
1941 @rinternals{PropertySet}.
1942
1943 @knownissues
1944 The back-end is not very strict in type-checking object properties.
1945 Cyclic references in Scheme values for properties can cause hangs
1946 or crashes, or both.
1947
1948
1949 @node The set command
1950 @subsection The @code{@bs{}set} command
1951
1952 @cindex properties
1953 @funindex \set
1954 @cindex changing properties
1955
1956 Each context has a set of @emph{properties}, variables contained
1957 in that context.  Context properties are changed with the @code{\set}
1958 command, which has the following syntax:
1959
1960 @example
1961 \set @var{context}.@var{property} = #@var{value}
1962 @end example
1963
1964 @var{value} is a Scheme object, which is why it must be preceded by
1965 the @code{#}@tie{}character.
1966
1967 Contexts properties are usually named in
1968 @code{studlyCaps}.  They mostly control the translation from
1969 music to notation, e.g. @code{localAlterations} (for determining
1970 whether to print accidentals), or @code{measurePosition} (for
1971 determining when to print a bar line).  Context properties can
1972 change value over time while interpreting a piece of music;
1973 @code{measurePosition} is an obvious example of
1974 this.  Context properties are modified with @code{\set}.
1975
1976 For example, multimeasure rests will be combined into a single bar
1977 if the context property @code{skipBars} is set to @code{#t}:
1978
1979 @lilypond[quote,fragment,verbatim]
1980 R1*2
1981 \set Score.skipBars = ##t
1982 R1*2
1983 @end lilypond
1984
1985 If the @var{context} argument is left out, then the property will be
1986 set in the current bottom context (typically @code{ChordNames},
1987 @code{Voice}, @code{TabVoice}, or @code{Lyrics}).
1988
1989 @lilypond[quote,fragment,verbatim]
1990 \set Score.autoBeaming = ##f
1991 \relative {
1992   e''8 e e e
1993   \set autoBeaming = ##t
1994   e8 e e e
1995 } \\
1996 \relative {
1997   c''8 c c c c8 c c c
1998 }
1999 @end lilypond
2000
2001 The change is applied @q{on-the-fly}, during the music, so that the
2002 setting only affects the second group of eighth notes.
2003
2004 Note that the bottom-most context does not always contain the property
2005 that you wish to change -- for example, attempting to set the
2006 @code{skipBars} property of the default bottom context, in this case
2007 @code{Voice}, will have no effect, because skipBars is a property of
2008 the @code{Score} context.
2009
2010 @lilypond[quote,fragment,verbatim]
2011 R1*2
2012 \set skipBars = ##t
2013 R1*2
2014 @end lilypond
2015
2016 Contexts are hierarchical, so if an enclosing context was specified, for
2017 example @code{Staff}, then the change would also apply to all
2018 @code{Voice}s in the current staff.
2019
2020 @funindex \unset
2021
2022 The @code{\unset} command:
2023
2024 @example
2025 \unset @var{context}.@var{property}
2026 @end example
2027
2028 @noindent
2029 is used to remove the definition of @var{property} from
2030 @var{context}.  This command removes
2031 the definition only if it is set in @var{context}.
2032 Properties that have been set in enclosing contexts will
2033 not be altered by an unset in an enclosed context:
2034
2035 @lilypond[quote,fragment,verbatim]
2036 \set Score.autoBeaming = ##t
2037 \relative {
2038   \unset autoBeaming
2039   e''8 e e e
2040   \unset Score.autoBeaming
2041   e8 e e e
2042 } \\
2043 \relative {
2044   c''8 c c c c8 c c c
2045 }
2046 @end lilypond
2047
2048 Like @code{\set}, the @var{context} argument does not have to be
2049 specified for a bottom context, so the two statements
2050
2051 @example
2052 \set Voice.autoBeaming = ##t
2053 \set autoBeaming = ##t
2054 @end example
2055
2056 @noindent
2057 are equivalent if the current bottom context is @code{Voice}.
2058
2059
2060 @cindex \once
2061 Preceding a @code{\set} or @code{\unset} command by @code{\once}
2062 makes the setting apply to only a single time-step:
2063
2064 @lilypond[quote,fragment,verbatim]
2065 c''4
2066 \once \set fontSize = #4.7
2067 c''4
2068 c''4
2069 @end lilypond
2070
2071 A full description of all available context properties is in the
2072 Guida al funzionamento interno, see
2073 @ifhtml
2074 @rinternals{Tunable context properties}.
2075 @end ifhtml
2076 @ifnothtml
2077 Translation @expansion{} Tunable context properties.
2078 @end ifnothtml
2079
2080 @seealso
2081 Guida al funzionamento interno:
2082 @rinternals{Tunable context properties}.
2083
2084
2085 @node The override command
2086 @subsection The @code{\override} command
2087
2088 @cindex grob properties
2089 @cindex properties, grob
2090 @funindex \override
2091
2092 There is a special type of context property: the grob
2093 description.  Grob descriptions are named in @code{StudlyCaps}
2094 (starting with capital letters).  They contain the
2095 @q{default settings} for a particular kind of grob as an
2096 association list.  See @file{scm/define-grobs.scm}
2097 to see the settings for each grob description.  Grob descriptions
2098 are modified with @code{\override}.
2099
2100 The syntax for the @code{\override} command is
2101
2102 @example
2103 \override [@var{context}.]@var{GrobName}.@var{property} = #@var{value}
2104 @end example
2105
2106 For example, we can increase the thickness of a note stem by
2107 overriding the @code{thickness} property of the @code{Stem}
2108 object:
2109
2110 @lilypond[quote,fragment,verbatim]
2111 c''4 c''
2112 \override Voice.Stem.thickness = #3.0
2113 c''4 c''
2114 @end lilypond
2115
2116 If no context is specified in an @code{\override}, the bottom
2117 context is used:
2118
2119 @lilypond[quote,fragment,verbatim]
2120 \override Staff.Stem.thickness = #3.0
2121 <<
2122   \relative {
2123     e''4 e
2124     \override Stem.thickness = #0.5
2125     e4 e
2126   } \\
2127   \relative {
2128     c''4 c c c
2129   }
2130 >>
2131 @end lilypond
2132
2133 Some tweakable options are called @q{subproperties} and reside inside
2134 properties.  To tweak those, use commands in the form
2135
2136 @example
2137 \override Stem.details.beamed-lengths = #'(4 4 3)
2138 @end example
2139
2140 or to modify the ends of spanners, use a form like these
2141
2142 @example
2143 \override TextSpanner.bound-details.left.text = #"left text"
2144 \override TextSpanner.bound-details.right.text = #"right text"
2145 @end example
2146
2147 @funindex \revert
2148 @cindex reverting overrides
2149 @cindex overrides, reverting
2150
2151 The effects of @code{\override} can be undone by @code{\revert}.
2152
2153 The syntax for the @code{\revert} command is
2154
2155 @example
2156 \revert [@var{context}.]@var{GrobName}.@var{property}
2157 @end example
2158
2159 For example,
2160
2161 @lilypond[quote,verbatim]
2162 \relative {
2163   c''4
2164   \override Voice.Stem.thickness = #3.0
2165   c4 c
2166   \revert Voice.Stem.thickness
2167   c4
2168 }
2169 @end lilypond
2170
2171 The effects of @code{\override} and @code{\revert} apply to all
2172 grobs in the affected context from the current time forward:
2173
2174 @lilypond[quote,verbatim]
2175 <<
2176   \relative {
2177     e''4
2178     \override Staff.Stem.thickness = #3.0
2179     e4 e e
2180   } \\
2181   \relative {
2182     c''4 c c
2183     \revert Staff.Stem.thickness
2184     c4
2185   }
2186 >>
2187 @end lilypond
2188
2189 @funindex \once
2190 @cindex overriding for only one moment
2191
2192 @code{\once} can be used with @code{\override} or @code{\revert}
2193 to affect only the current time step:
2194
2195 @lilypond[quote,verbatim]
2196 <<
2197   \relative c {
2198     \override Stem.thickness = #3.0
2199     e''4 e e e
2200   } \\
2201   \relative {
2202     c''4
2203     \once \override Stem.thickness = #3.0
2204     c4 c c
2205   }
2206 >>
2207 @end lilypond
2208
2209
2210 @ignore
2211 Commands which change output generally look like
2212
2213 @example
2214 \override Voice.Stem.thickness = #3.0
2215 @end example
2216
2217 @noindent
2218 To construct this tweak we must determine these bits of information:
2219
2220 @itemize
2221 @item the context: here @code{Voice}.
2222 @item the layout object: here @code{Stem}.
2223 @item the layout property: here @code{thickness}.
2224 @item a sensible value: here @code{3.0}.
2225 @end itemize
2226
2227 @cindex internal documentation
2228 @cindex finding graphical objects
2229 @cindex graphical object descriptions
2230 @cindex tweaking
2231 @funindex \override
2232 @cindex internal documentation
2233
2234 For many properties, regardless of the data type of the property, setting the
2235 property to false (@code{#f}) will result in turning it off, causing
2236 LilyPond to ignore that property entirely.  This is particularly useful for
2237 turning off grob properties which may otherwise be causing problems.
2238
2239 We demonstrate how to glean this information from the notation manual
2240 and the program reference.
2241 @end ignore
2242
2243 @seealso
2244 Guida al funzionamento interno:
2245 @rinternals{Backend}
2246
2247
2248 @node Il comando tweak
2249 @subsection Il comando @code{\tweak}
2250 @translationof The tweak command
2251
2252 @funindex \tweak
2253 @cindex tweaking
2254
2255 Changing grob properties
2256 with @code{\override} causes the changes to apply to all of the
2257 given grobs in the context at the moment the change applies.
2258 Sometimes, however, it is desirable to have changes apply to just
2259 one grob, rather than to all grobs in the affected context.  This is
2260 accomplished with the @code{\tweak} command, which has the following
2261 syntax:
2262
2263 @example
2264 \tweak [@var{layout-object}.]@var{grob-property} @var{value}
2265 @end example
2266
2267 Specifying @var{layout-object} is optional.
2268 The @code{\tweak} command applies to the music object that immediately
2269 follows @var{value} in the music stream.
2270
2271 @ignore
2272 In some cases, it is possible to take a short-cut for tuning
2273 graphical objects.  For objects that are created directly from
2274 an item in the input file, you can use the @code{\tweak} command.
2275 For example:
2276
2277 @lilypond[verbatim,quote]
2278 \relative {
2279   < c''
2280     \tweak color #red
2281     d
2282     g
2283     \tweak duration-log #1
2284     a
2285   > 4
2286   -\tweak padding #8
2287   -^
2288 }
2289 @end lilypond
2290
2291
2292
2293 The main use of the @code{\tweak} command is to modify just
2294 one of a number of notation elements which start at the same musical
2295 moment, like the notes of a chord, or tuplet brackets which start
2296 at the same time.
2297
2298 The @code{\tweak} command sets a property in the following object
2299 directly, without requiring the grob name or context to be
2300 specified.  For this to work, it is necessary for the @code{\tweak}
2301 command to remain immediately adjacent to the object to which it is
2302 to apply after the input file has been converted to a music stream.
2303 This is often not the case, as many additional elements are inserted
2304 into the music stream implicitly.  For example, when a note which is
2305 not part of a chord is processed, LilyPond implicitly inserts a
2306 @code{ChordEvent} event before the note, so separating the tweak
2307 from the note.  However, if chord symbols are placed round the
2308 tweak and the note, the @code{\tweak} command comes after the
2309 @code{ChordEvent} in the music stream, so remaining adjacent to the
2310 note, and able to modify it.
2311
2312 So, this works:
2313
2314 @lilypond[verbatim,fragment,quote]
2315 <\tweak color #red c''>4
2316 @end lilypond
2317
2318 @noindent
2319 but this does not:
2320
2321 @lilypond[verbatim,fragment,quote]
2322 \tweak color #red c''4
2323 @end lilypond
2324
2325 @end ignore
2326
2327 For an introduction to the syntax and uses of the tweak command
2328 see @rlearning{Metodi di modifica}.
2329
2330 When several similar items are placed at the same musical moment,
2331 the @code{\override} command cannot be used to modify just one of
2332 them -- this is where the @code{\tweak} command must be used.
2333 Items which may appear more than once at the same musical moment
2334 include the following:
2335
2336 @c TODO expand to include any further uses of \tweak
2337 @itemize
2338 @item note heads of notes inside a chord
2339 @item articulation signs on a single note
2340 @item ties between notes in a chord
2341 @item tuplet brackets starting at the same time
2342 @end itemize
2343
2344 @c TODO add examples of these
2345
2346 @cindex chord, modifying one note in
2347
2348 In this example, the color of one note head and the type of another
2349 note head are modified within a single chord:
2350
2351 @lilypond[verbatim,fragment,quote]
2352 < c''
2353   \tweak color #red
2354   d''
2355   g''
2356   \tweak duration-log #1
2357   a''
2358 > 4
2359 @end lilypond
2360
2361 @code{\tweak} can be used to modify slurs:
2362
2363 @lilypond[verbatim,quote]
2364 \relative { c'-\tweak thickness #5 ( d e f) }
2365 @end lilypond
2366
2367
2368 For the @code{\tweak} command to work, it must
2369 remain immediately adjacent to the object to which it is
2370 to apply after the input file has been converted to a music stream.
2371 Tweaking a whole chord does not do anything since its music event
2372 only acts as a container, and all layout objects are created from events
2373 inside of the @code{EventChord}:
2374
2375 @lilypond[verbatim,fragment,quote]
2376 \tweak color #red c''4
2377 \tweak color #red <c'' e''>4
2378 <\tweak color #red c'' e''>4
2379 @end lilypond
2380
2381 The simple @code{\tweak} command cannot be used to modify any object
2382 that is not directly created from the input.  In particular
2383 it will not affect stems, automatic
2384 beams or accidentals, since these are generated later by
2385 @code{NoteHead} layout objects rather than by music elements in the
2386 input stream.
2387
2388 Such indirectly created layout objects can be tweaked using the form
2389 of the @code{\tweak} command in which the grob name is specified
2390 explicitly:
2391
2392 @lilypond[fragment,verbatim,quote]
2393 \tweak Stem.color #red
2394 \tweak Beam.color #green c''8 e''
2395 <c'' e'' \tweak Accidental.font-size #-3 ges''>4
2396 @end lilypond
2397
2398 @code{\tweak} cannot be used to modify clefs or time
2399 signatures, since these become separated from any preceding
2400 @code{\tweak} command in the input stream by the automatic
2401 insertion of extra elements required to specify the context.
2402
2403 Several @code{\tweak} commands may be placed before a
2404 notational element -- all affect it:
2405
2406 @lilypond[verbatim,fragment,quote]
2407 c'
2408   -\tweak style #'dashed-line
2409   -\tweak dash-fraction #0.2
2410   -\tweak thickness #3
2411   -\tweak color #red
2412   \glissando
2413 f''
2414 @end lilypond
2415
2416 The music stream which is generated from a section of an input file,
2417 including any automatically inserted elements, may be examined,
2418 see @rextend{Displaying music expressions}.  This may be helpful in
2419 determining what may be modified by a @code{\tweak} command, or
2420 in determining how to adjust the input to make a @code{\tweak}
2421 apply.
2422
2423 @seealso
2424 Manuale di apprendimento:
2425 @rlearning{Metodi di modifica}.
2426
2427 Estendere LilyPond:
2428 @rextend{Displaying music expressions}.
2429
2430 @knownissues
2431
2432 @cindex tweaking control points
2433 @cindex control points, tweaking
2434
2435 The @code{\tweak} command cannot be used to modify the control
2436 points of just one of several ties in a chord, other than the first
2437 one encountered in the input file.
2438
2439 @node set versus override
2440 @subsection @code{\set} vs. @code{\override}
2441
2442 @c TODO Should't a bunch of that be explained earlier?
2443
2444 @funindex \set
2445 @funindex \override
2446 Both @code{\set} and @code{\override} manipulate properties
2447 associated with contexts.  In either case, properties heed the
2448 hierarchy of contexts: properties not set in a context itself show
2449 the values of the respective parent context.
2450
2451 Values and lifetime of context properties are dynamic and only
2452 available when music is being interpreted, @q{iterated}.  At the
2453 time of context creation, properties are initialized from the
2454 corresponding context definition and possible context
2455 modifications.  Afterwards, changes are achieved with
2456 property-setting commands in the music itself.
2457
2458 Now grob definitions are a special category of context properties.
2459 Since their structure, bookkeeping and use is different from
2460 ordinary context properties, they are accessed with a different
2461 set of commands, and treated separately in the documentation.
2462
2463 As opposed to plain context properties, grob definitions are
2464 subdivided into grob properties.  A @qq{grob} (graphical object)
2465 is usually created by an engraver at the time of interpreting a
2466 music expression and receives its initial properties from the
2467 current grob definition of the engraver's context.  The engraver
2468 (or other @q{backend} parts of LilyPond) may subsequently add or
2469 change properties to the grob, but that does not affect the
2470 context's grob definition.
2471
2472 What we call @q{grob properties} in the context of user-level
2473 tweaking are actually the properties of a context's grob
2474 definition.  In contrast to ordinary context properties, grob
2475 definitions have the bookkeeping required to keep track of its
2476 parts, the individual grob properties (and even subproperties of
2477 them) separately so that it is possible to define those parts in
2478 different contexts and have the overall grob definition at the
2479 time of grob creation be assembled from pieces provided in
2480 different contexts among the current context and its parents.
2481
2482 Grob definitions are manipulated using @code{\override} and
2483 @code{\revert} and have a name starting with a capital letter
2484 (like @samp{NoteHead}) whereas ordinary context properties are
2485 manipulated using @code{\set} and @code{\unset} and are named
2486 starting with a lowercase letter.
2487
2488 @cindex tweak, relation to @code{\override}
2489 @funindex \tweak
2490 @funindex \overrideProperty
2491 The special commands @code{\tweak} and @code{\overrideProperty}
2492 change grob properties bypassing context properties completely.
2493 Instead they catch grobs as they are being created and then
2494 directly set properties on them when they originate from a tweaked
2495 music event or are of a particular kind, respectively.
2496
2497 @node Modifying alists
2498 @subsection Modifying alists
2499
2500 Some user-configurable properties are internally represented as
2501 @emph{alists} (association lists), which store pairs of
2502 @emph{keys} and @emph{values}.  The structure of an alist is:
2503
2504 @example
2505 '((@var{key1} . @var{value1})
2506   (@var{key2} . @var{value2})
2507   (@var{key3} . @var{value3})
2508   @dots{})
2509 @end example
2510
2511 If an alist is a grob property or @code{\paper} variable, its keys
2512 can be modified individually without affecting other keys.
2513
2514 For example, to reduce the space between adjacent staves in a
2515 staff-group, use the @code{staff-staff-spacing} property of the
2516 @code{StaffGrouper} grob.  The property is an alist with four
2517 keys: @code{basic-distance}, @code{minimum-distance},
2518 @code{padding}, and @code{stretchability}.  The standard settings
2519 for this property are listed in the @qq{Backend} section of the
2520 Guida al funzionamento interno (see @rinternals{StaffGrouper}):
2521
2522 @example
2523 '((basic-distance . 9)
2524   (minimum-distance . 7)
2525   (padding . 1)
2526   (stretchability . 5))
2527 @end example
2528
2529 One way to bring the staves closer together is by reducing the
2530 value of the @code{basic-distance} key (@code{9}) to match the
2531 value of @code{minimum-distance} (@code{7}).  To modify a single
2532 key individually, use a @emph{nested declaration}:
2533
2534 @lilypond[quote,verbatim]
2535 % default space between staves
2536 \new PianoStaff <<
2537   \new Staff { \clef treble c''1 }
2538   \new Staff { \clef bass   c1   }
2539 >>
2540
2541 % reduced space between staves
2542 \new PianoStaff \with {
2543   % this is the nested declaration
2544   \override StaffGrouper.staff-staff-spacing.basic-distance = #7
2545 } <<
2546   \new Staff { \clef treble c''1 }
2547   \new Staff { \clef bass   c1   }
2548 >>
2549 @end lilypond
2550
2551 Using a nested declaration will update the specified key (such as
2552 @code{basic-distance} in the above example) without altering any
2553 other keys already set for the same property.
2554
2555 Now suppose we want the staves to be as close as possible without
2556 overlapping.  The simplest way to do this is to set all four alist
2557 keys to zero.  However, it is not necessary to enter four nested
2558 declarations, one for each key.  Instead, the property can be
2559 completely re-defined with one declaration, as an alist:
2560
2561 @lilypond[quote,verbatim]
2562 \new PianoStaff \with {
2563   \override StaffGrouper.staff-staff-spacing =
2564     #'((basic-distance . 0)
2565        (minimum-distance . 0)
2566        (padding . 0)
2567        (stretchability . 0))
2568 } <<
2569   \new Staff { \clef treble c''1 }
2570   \new Staff { \clef bass   c1   }
2571 >>
2572 @end lilypond
2573
2574 Note that any keys not explicitly listed in the alist definition
2575 will be reset to their @emph{default-when-unset} values.  In the
2576 case of @code{staff-staff-spacing}, any unset key-values would be
2577 reset to zero (except @code{stretchability}, which takes the value
2578 of @code{basic-distance} when unset).  Thus the following two
2579 declarations are equivalent:
2580
2581 @example
2582 \override StaffGrouper.staff-staff-spacing =
2583   #'((basic-distance . 7))
2584
2585 \override StaffGrouper.staff-staff-spacing =
2586   #'((basic-distance . 7)
2587      (minimum-distance . 0)
2588      (padding . 0)
2589      (stretchability . 7))
2590 @end example
2591
2592 One (possibly unintended) consequence of this is the removal of
2593 any standard settings that are set in an initialization file and
2594 loaded each time an input file is compiled.  In the above example,
2595 the standard settings for @code{padding} and
2596 @code{minimum-distance} (defined in @file{scm/define-grobs.scm})
2597 are reset to their default-when-unset values (zero for both keys).
2598 Defining a property or variable as an alist (of any size) will
2599 always reset all unset key-values to their default-when-unset
2600 values.  Unless this is the intended result, it is safer to update
2601 key-values individually with a nested declaration.
2602
2603 @warning{Nested declarations will not work for context property
2604 alists (such as @code{beamExceptions}, @code{keyAlterations},
2605 @code{timeSignatureSettings}, etc.).  These properties can only be
2606 modified by completely re-defining them as alists.}
2607
2608
2609 @node Proprietà e concetti utili
2610 @section Proprietà e concetti utili
2611 @translationof Useful concepts and properties
2612
2613
2614 @menu
2615 * Input modes::
2616 * Direction and placement::
2617 * Distances and measurements::
2618 * Dimensions::
2619 * Staff symbol properties::
2620 * Spanners::
2621 * Visibility of objects::
2622 * Line styles::
2623 * Rotating objects::
2624 @end menu
2625
2626 @node Input modes
2627 @subsection Input modes
2628
2629 The way in which the notation contained within an input file is
2630 interpreted is determined by the current input mode.
2631
2632 @subsubsubheading Chord mode
2633
2634 This is activated with the @code{\chordmode} command, and causes
2635 input to be interpreted with the syntax of chord notation, see
2636 @ref{Chord notation}.  Chords are rendered as notes on a staff.
2637
2638 Chord mode is also activated with the @code{\chords} command.
2639 This also creates a new @code{ChordNames} context and
2640 causes the following input to be interpreted with the syntax of
2641 chord notation and rendered as chord names in the @code{ChordNames}
2642 context, see @ref{Printing chord names}.
2643
2644 @subsubsubheading Drum mode
2645
2646 This is activated with the @code{\drummode} command, and causes
2647 input to be interpreted with the syntax of drum notation, see
2648 @ref{Basic percussion notation}.
2649
2650 Drum mode is also activated with the @code{\drums} command.
2651 This also creates a new @code{DrumStaff} context and causes the
2652 following input to be interpreted with the syntax of drum notation
2653 and rendered as drum symbols on a drum staff, see
2654 @ref{Basic percussion notation}.
2655
2656 @subsubsubheading Figure mode
2657
2658 This is activated with the @code{\figuremode} command, and causes
2659 input to be interpreted with the syntax of figured bass, see
2660 @ref{Entering figured bass}.
2661
2662 Figure mode is also activated with the @code{\figures} command.
2663 This also creates a new @code{FiguredBass} context and causes the
2664 following input to be interpreted with the figured bass syntax
2665 and rendered as figured bass symbols in the @code{FiguredBass}
2666 context, see @ref{Introduction to figured bass}.
2667
2668 @subsubsubheading Fret and tab modes
2669
2670 There are no special input modes for entering fret and tab symbols.
2671
2672 To create tab diagrams, enter notes or chords in note mode and
2673 render them in a @code{TabStaff} context, see
2674 @ref{Default tablatures}.
2675
2676 To create fret diagrams above a staff, you have two choices.
2677 You can either use the @code{FretBoards} context (see
2678 @ref{Automatic fret diagrams} or you can enter them as a markup
2679 above the notes using the @code{\fret-diagram} command (see
2680 @ref{Fret diagram markups}).
2681
2682 @subsubsubheading Lyrics mode
2683
2684 This is activated with the @code{\lyricmode} command, and causes
2685 input to be interpreted as lyric syllables with optional durations
2686 and associated lyric modifiers, see @ref{Vocal music}.
2687
2688 Lyric mode is also activated with the @code{\addlyrics} command.
2689 This also creates a new @code{Lyrics} context and an implicit
2690 @code{\lyricsto} command which associates the following lyrics
2691 with the preceding music.
2692
2693 @subsubsubheading Markup mode
2694
2695 This is activated with the @code{\markup} command, and causes
2696 input to be interpreted with the syntax of markup, see
2697 @ref{Text markup commands}.
2698
2699 @subsubsubheading Note mode
2700
2701 This is the default mode or it may be activated with the
2702 @code{\notemode} command.  Input is interpreted as pitches,
2703 durations, markup, etc and typeset as musical notation on a staff.
2704
2705 It is not normally necessary to specify note mode explicitly, but
2706 it may be useful to do so in certain situations, for example if you
2707 are in lyric mode, chord mode or any other mode and want to insert
2708 something that only can be done with note mode syntax.
2709
2710
2711 @node Direction and placement
2712 @subsection Direction and placement
2713
2714 In typesetting music the direction and placement of many items is
2715 a matter of choice.  For example, the stems of notes can
2716 be directed up or down; lyrics, dynamics, and other expressive
2717 marks may be placed above or below the staff; text may be aligned
2718 left, right or center; etc.  Most of these choices may be left to
2719 be determined automatically by LilyPond, but in some cases it may
2720 be desirable to force a particular direction or placement.
2721
2722 @menu
2723 * Articulation direction indicators::
2724 * The direction property::
2725 @end menu
2726
2727 @node Articulation direction indicators
2728 @unnumberedsubsubsec Articulation direction indicators
2729
2730 By default some directions are always up or always down (e.g.
2731 dynamics or fermata), while other things can alternate between
2732 up or down based on the stem direction (like slurs or accents).
2733
2734 @c TODO Add table showing these
2735
2736 The default action may be overridden by prefixing the articulation
2737 by a @emph{direction indicator}.  Three direction indicators are
2738 available: @code{^} (meaning @qq{up}), @code{_} (meaning @qq{down})
2739 and @code{-} (meaning @qq{use default direction}).  The direction
2740 indicator can usually be omitted, in which case @code{-} is assumed,
2741 but a direction indicator is @strong{always} required before
2742
2743 @itemize
2744 @item @code{\tweak} commands
2745 @item @code{\markup} commands
2746 @item @code{\tag} commands
2747 @item string markups, e.g. -"string"
2748 @item fingering instructions, e.g. @w{@code{-1}}
2749 @item articulation shortcuts, e.g. @w{@code{-.}}, @w{@code{->}}, @w{@code{--}}
2750 @end itemize
2751
2752 Direction indicators affect only the next note:
2753
2754 @lilypond[verbatim,quote]
2755 \relative {
2756   c''2( c)
2757   c2_( c)
2758   c2( c)
2759   c2^( c)
2760 }
2761 @end lilypond
2762
2763 @node The direction property
2764 @unnumberedsubsubsec The direction property
2765
2766 The position or direction of many layout objects is controlled by the
2767 @code{direction} property.
2768
2769 The value of the @code{direction} property may be set to @code{1},
2770 meaning @qq{up} or @qq{above}, or to @w{@code{-1}}, meaning @qq{down} or
2771 @qq{below}.  The symbols @code{UP} and @code{DOWN} may be used instead
2772 of @code{1} and @w{@code{-1}} respectively.  The default direction may
2773 be specified by setting @code{direction} to @code{0} or @code{CENTER}.
2774 Alternatively, in many cases predefined commands exist to specify the
2775 direction.  These are of the form
2776
2777 @example
2778 @code{\xxxUp}, @code{\xxxDown} or @code{\xxxNeutral}
2779 @end example
2780
2781 @noindent
2782 where @code{\xxxNeutral} means @qq{use the default} direction.
2783 See @rlearning{Oggetti interni al rigo}.
2784
2785 In a few cases, arpeggio for example, the value of the @code{direction}
2786 property can specify whether the object is to be placed to the right or
2787 left of the parent.  In this case @w{@code{-1}} or @code{LEFT} means
2788 @qq{to the left} and @code{1} or @code{RIGHT} means @qq{to the right}.
2789 @code{0} or @code{CENTER} means @qq{use the default} direction.
2790
2791 @ignore
2792 These all have side-axis set to #X
2793 AmbitusAccidental - direction has no effect
2794 Arpeggio - works
2795 StanzaNumber - not tried
2796 TrillPitchAccidental - not tried
2797 TrillPitchGroup - not tried
2798 @end ignore
2799
2800 These indications affect all notes until they are canceled.
2801
2802 @lilypond[verbatim,quote]
2803 \relative {
2804   c''2( c)
2805   \slurDown
2806   c2( c)
2807   c2( c)
2808   \slurNeutral
2809   c2( c)
2810 }
2811 @end lilypond
2812
2813 In polyphonic music, it is generally better to specify an explicit
2814 @code{voice} than change an object's direction.  For more information.
2815 See @ref{Multiple voices}.
2816
2817 @seealso
2818 Manuale di apprendimento:
2819 @rlearning{Oggetti interni al rigo}.
2820
2821 Guida alla notazione:
2822 @ref{Multiple voices}.
2823
2824
2825 @node Distances and measurements
2826 @subsection Distances and measurements
2827
2828 @cindex distances, absolute
2829 @cindex distances, scaled
2830
2831 @funindex \mm
2832 @funindex \cm
2833 @funindex \in
2834 @funindex \pt
2835
2836 Distances in LilyPond are of two types: absolute and scaled.
2837
2838 Absolute distances are used for specifying margins, indents, and
2839 other page layout details, and are by default specified in
2840 millimeters.  Distances may be specified in other units by
2841 following the quantity by @code{\mm}, @code{\cm},
2842 @code{\in}@tie{}(inches), or @code{\pt}@tie{}(points, 1/72.27 of
2843 an inch).  Page layout distances can also be specified in scalable
2844 units (see the following paragraph) by appending
2845 @code{\staff-space} to the quantity.  Page layout is described in
2846 detail in @ref{Page layout}.
2847
2848 Scaled distances are always specified in units of the staff-space
2849 or, rarely, the half staff-space.  The staff-space is the distance
2850 between two adjacent staff lines.  The default value can be changed
2851 globally by setting the global staff size, or it can be overridden
2852 locally by changing the @code{staff-space} property of
2853 @code{StaffSymbol}.  Scaled distances automatically scale with any
2854 change to the either the global staff size or the
2855 @code{staff-space} property of @code{StaffSymbol}, but fonts scale
2856 automatically only with changes to the global staff size.
2857 The global staff size thus enables the overall size of a rendered
2858 score to be easily varied.  For the methods of setting the global
2859 staff size see @ref{Setting the staff size}.
2860
2861 @funindex magstep
2862
2863 If just a section of a score needs to be rendered to a different
2864 scale, for example an ossia section or a footnote, the global staff
2865 size cannot simply be changed as this would affect the entire score.
2866 In such cases the change in size is made by overriding both the
2867 @code{staff-space} property of @code{StaffSymbol} and the size of
2868 the fonts.  A Scheme function, @code{magstep}, is available to
2869 convert from a font size change to the equivalent change in
2870 @code{staff-space}.  For an explanation and an example of its use,
2871 see @rlearning{Lunghezza e spessore degli oggetti}.
2872
2873 @seealso
2874 Manuale di apprendimento:
2875 @rlearning{Lunghezza e spessore degli oggetti}.
2876
2877 Guida alla notazione:
2878 @ref{Page layout},
2879 @ref{Setting the staff size}.
2880
2881
2882 @node Dimensions
2883 @subsection Dimensions
2884
2885 @cindex dimensions
2886 @cindex bounding box
2887
2888 The dimensions of a graphical object specify the positions of the left
2889 and right edges and the bottom and top edges of the objects' bounding
2890 box as distances from the objects' reference point in units of
2891 staff-spaces.  These positions are usually coded as two Scheme pairs.
2892 For example, the text markup command @code{\with-dimensions} takes
2893 three arguments, the first two of which are a Scheme pair giving the
2894 left and right edge positions and a Scheme pair giving the bottom and
2895 top edge positions:
2896
2897 @example
2898 \with-dimensions #'(-5 . 10) #'(-3 . 15) @var{arg}
2899 @end example
2900
2901 This specifies a bounding box for @var{arg} with its left edge at -5,
2902 its right edge at 10, its bottom edge at -3 and its top edge at 15,
2903 all measured from the objects' reference point in units of
2904 staff-spaces.
2905
2906 @seealso
2907 Guida alla notazione:
2908 @ref{Distances and measurements}.
2909
2910
2911 @node Staff symbol properties
2912 @subsection Staff symbol properties
2913
2914 @cindex adjusting staff symbol
2915 @cindex drawing staff symbol
2916 @cindex staff symbol, setting of
2917
2918 @c TODO Extend or remove this section.  See also NR 1.6.2 Staff symbol
2919 @c      Need to think of uses for these properties.  Eg 'line-positions
2920 @c      is used in a snippet to thicken centre line.
2921 @c      If retained, add @ref to here in 1.6.2  -td
2922
2923 The vertical position of staff lines and the number of staff lines
2924 can be defined at the same time.  As the following example shows,
2925 note positions are not influenced by the staff line positions.
2926
2927 @warning{The @code{'line-positions} property overrides the
2928 @code{'line-count} property.  The number of staff lines is
2929 implicitly defined by the number of elements in the list of values
2930 for @code{'line-positions}.}
2931
2932 @lilypond[verbatim,quote]
2933 \new Staff \with {
2934   \override StaffSymbol.line-positions = #'(7 3 0 -4 -6 -7)
2935 }
2936 \relative { a4 e' f b | d1 }
2937 @end lilypond
2938
2939 The width of a staff can be modified.  The units are staff
2940 spaces.  The spacing of objects inside the staff is not affected by
2941 this setting.
2942
2943 @lilypond[verbatim,quote]
2944 \new Staff \with {
2945   \override StaffSymbol.width = #23
2946 }
2947 \relative { a4 e' f b | d1 }
2948 @end lilypond
2949
2950
2951 @node Spanners
2952 @subsection Spanners
2953
2954 Many objects of musical notation extend over several notes or even
2955 several bars.  Examples are slurs, beams, tuplet brackets, volta
2956 repeat brackets, crescendi, trills, and glissandi.  Such objects
2957 are collectively called @qq{spanners}, and have special properties to control
2958 their appearance and behaviour.  Some of these properties are common
2959 to all spanners; others are restricted to a sub-set of the spanners.
2960
2961 All spanners support the @code{spanner-interface}.  A few, essentially
2962 those that draw a straight line between the two objects, support in
2963 addition the @code{line-spanner-interface}.
2964
2965 @menu
2966 * Using the spanner-interface::
2967 * Using the line-spanner-interface::
2968 @end menu
2969
2970 @node Using the spanner-interface
2971 @unnumberedsubsubsec Using the @code{spanner-interface}
2972
2973 This interface provides two properties that apply to several spanners.
2974
2975 @subsubsubheading The @code{minimum-length} property
2976
2977 The minimum length of the spanner is specified by the
2978 @code{minimum-length} property.  Increasing this usually has the
2979 necessary effect of increasing the spacing of the notes between the
2980 two end points.  However, this override has no effect on
2981 many spanners, as their length is determined by other considerations.
2982 A few examples where it is effective are shown below.
2983
2984 @ignore
2985 Works for:
2986   Tie
2987   MultiMeasureRest
2988   Hairpin
2989   Slur
2990   PhrasingSlur
2991
2992 Works as long as callback is made:
2993   Glissando
2994   Beam
2995
2996 Works not at all for:
2997   LyricSpace
2998   LyricHyphen
2999   LyricExtender
3000   TextSpanner
3001   System
3002
3003 @end ignore
3004
3005 @lilypond[verbatim,quote,fragment]
3006 a'~ a'
3007 a'
3008 % increase the length of the tie
3009 -\tweak minimum-length #5
3010 ~ a'
3011 @end lilypond
3012
3013 @lilypond[verbatim,quote]
3014 \relative \compressMMRests {
3015   a'1
3016   R1*23
3017   % increase the length of the rest bar
3018   \once \override MultiMeasureRest.minimum-length = #20
3019   R1*23
3020   a1
3021 }
3022 @end lilypond
3023
3024 @lilypond[verbatim,quote]
3025 \relative {
3026   a' \< a a a \!
3027   % increase the length of the hairpin
3028   \override Hairpin.minimum-length = #20
3029   a \< a a a \!
3030 }
3031 @end lilypond
3032
3033 This override can also be used to increase the length of slurs and
3034 phrasing slurs:
3035
3036 @lilypond[verbatim,quote]
3037 \relative {
3038   a'( g)
3039   a
3040   -\tweak minimum-length #5
3041   ( g)
3042
3043   a\( g\)
3044   a
3045   -\tweak minimum-length #5
3046   \( g\)
3047 }
3048 @end lilypond
3049
3050 For some layout objects, the @code{minimum-length} property becomes
3051 effective only if the @code{set-spacing-rods} procedure is called
3052 explicitly.  To do this, the @code{springs-and-rods} property should
3053 be set to @code{ly:spanner::set-spacing-rods}.  For example,
3054 the minimum length of a glissando has no effect unless the
3055 @code{springs-and-rods} property is set:
3056
3057 @lilypond[verbatim,fragment,quote]
3058 % default
3059 e' \glissando c''
3060
3061 % not effective alone
3062 \once \override Glissando.minimum-length = #20
3063 e' \glissando c''
3064
3065 % effective only when both overrides are present
3066 \once \override Glissando.minimum-length = #20
3067 \once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
3068 e' \glissando c''
3069 @end lilypond
3070
3071 The same is true of the @code{Beam} object:
3072
3073 @lilypond[verbatim,fragment,quote]
3074 % not effective alone
3075 \once \override Beam.minimum-length = #20
3076 e'8 e' e' e'
3077
3078 % effective only when both overrides are present
3079 \once \override Beam.minimum-length = #20
3080 \once \override Beam.springs-and-rods = #ly:spanner::set-spacing-rods
3081 e'8 e' e' e'
3082 @end lilypond
3083
3084 @subsubsubheading The @code{to-barline} property
3085
3086 The second useful property of the @code{spanner-interface} is
3087 @code{to-barline}.  By default this is true, causing hairpins and
3088 other spanners which are terminated on the first note of a measure to
3089 end instead on the immediately preceding bar line.  If set to false,
3090 the spanner will extend beyond the bar line and end on the note
3091 itself:
3092
3093 @lilypond[verbatim,quote]
3094 \relative {
3095   a' \< a a a a \! a a a \break
3096   \override Hairpin.to-barline = ##f
3097   a \< a a a a \! a a a
3098 }
3099 @end lilypond
3100
3101 This property is not effective for all spanners.  For example,
3102 setting it to @code{#t} has no effect on slurs or phrasing slurs
3103 or on other spanners for which terminating on the bar line would
3104 not be meaningful.
3105
3106 @node Using the line-spanner-interface
3107 @unnumberedsubsubsec Using the @code{line-spanner-interface}
3108
3109 Objects which support the @code{line-spanner-interface} include
3110
3111 @itemize
3112 @item @code{DynamicTextSpanner}
3113 @item @code{Glissando}
3114 @item @code{TextSpanner}
3115 @item @code{TrillSpanner}
3116 @item @code{VoiceFollower}
3117 @end itemize
3118
3119 The routine responsible for drawing the stencils for these spanners is
3120 @code{ly:line-spanner::print}.  This routine determines the
3121 exact location of the two end points and draws a line
3122 between them, in the style requested.  The locations of the two
3123 end points of the spanner are computed on-the-fly, but it is
3124 possible to override their Y-coordinates.  The
3125 properties which need to be specified are nested
3126 two levels down within the property hierarchy, but the syntax of
3127 the @code{\override} command is quite simple:
3128
3129 @lilypond[quote,fragment,verbatim]
3130 e''2 \glissando b'
3131 \once \override Glissando.bound-details.left.Y = #3
3132 \once \override Glissando.bound-details.right.Y = #-2
3133 e''2 \glissando b'
3134 @end lilypond
3135
3136 The units for the @code{Y} property are @code{staff-space}s,
3137 with the center line of the staff being the zero point.
3138 For the glissando, this is the value for @code{Y} at the
3139 X-coordinate corresponding to the center point of each note head,
3140 if the line is imagined to be extended to there.
3141
3142 If @code{Y} is not set, the value is computed from the vertical
3143 position of the corresponding attachment point of the spanner.
3144
3145 In case of a line break, the values for the end points are
3146 specified by the @code{left-broken} and @code{right-broken}
3147 sub-lists of @code{bound-details}.  For example:
3148
3149 @lilypond[ragged-right,fragment,verbatim,quote]
3150 \override Glissando.breakable = ##t
3151 \override Glissando.bound-details.right-broken.Y = #-3
3152 c''1 \glissando \break
3153 f''1
3154 @end lilypond
3155
3156
3157 A number of further properties of the @code{left} and
3158 @code{right} sub-lists of the @code{bound-details} property
3159 may be modified in the same way as @code{Y}:
3160
3161 @table @code
3162 @item Y
3163 This sets the Y-coordinate of the end point, in @code{staff-space}s
3164 offset from the staff center line.  By default, it is the center of
3165 the bound object, so a glissando points to the vertical center of
3166 the note head.
3167
3168 For horizontal spanners, such as text spanners and trill spanners,
3169 it is hardcoded to 0.
3170
3171 @item attach-dir
3172 This determines where the line starts and ends in the X-direction,
3173 relative to the bound object.  So, a value of @w{@code{-1}} (or
3174 @code{LEFT}) makes the line start/end at the left side of the note
3175 head it is attached to.
3176
3177 @item X
3178 This is the absolute X-coordinate of the end point.  It is usually
3179 computed on the fly, and overriding it has little useful effect.
3180
3181 @item stencil
3182 Line spanners may have symbols at the beginning or end, which is
3183 contained in this sub-property.  This is for internal use; it is
3184 recommended that @code{text} be used instead.
3185
3186 @item text
3187 This is a markup that is evaluated to yield the stencil.  It is used
3188 to put @i{cresc.}, @i{tr} and other text on horizontal spanners.
3189
3190 @lilypond[quote,ragged-right,fragment,verbatim]
3191 \override TextSpanner.bound-details.left.text
3192    = \markup { \small \bold Slower }
3193 \relative { c''2\startTextSpan b c a\stopTextSpan }
3194 @end lilypond
3195
3196 @item stencil-align-dir-y
3197 @item stencil-offset
3198 Without setting one of these, the stencil is simply put at the
3199 end-point, centered on the line, as defined by the @code{X} and
3200 @code{Y} sub-properties.  Setting either @code{stencil-align-dir-y}
3201 or @code{stencil-offset} will move the symbol at the edge vertically
3202 relative to the end point of the line:
3203
3204 @lilypond[quote,fragment,verbatim]
3205 \override TextSpanner.bound-details.left.stencil-align-dir-y = #-2
3206 \override TextSpanner.bound-details.right.stencil-align-dir-y = #UP
3207
3208 \override TextSpanner.bound-details.left.text = #"ggg"
3209 \override TextSpanner.bound-details.right.text = #"hhh"
3210
3211 \relative { c'4^\startTextSpan c c c \stopTextSpan }
3212 @end lilypond
3213
3214 Note that negative values move the text @emph{up}, contrary to the
3215 effect that might be expected, as a value of @w{@code{-1}} or
3216 @code{DOWN} means align the @emph{bottom} edge of the text with
3217 the spanner line.  A value of @code{1} or @code{UP} aligns
3218 the top edge of the text with the spanner line.
3219
3220 @item arrow
3221 Setting this sub-property to @code{#t} produces an arrowhead at the
3222 end of the line.
3223
3224 @item padding
3225 This sub-property controls the space between the specified
3226 end point of the line and the actual end.  Without padding, a
3227 glissando would start and end in the center of each note head.
3228
3229 @end table
3230
3231 The music function @code{\endSpanners} terminates the spanner
3232 which starts on the immediately following note prematurely.  It
3233 is terminated after exactly one note, or at the following bar line
3234 if @code{to-barline} is true and a bar line occurs before the next
3235 note.
3236
3237 @lilypond[verbatim,quote,ragged-right]
3238 \relative c'' {
3239   \endSpanners
3240   c2 \startTextSpan c2 c2
3241   \endSpanners
3242   c2 \< c2 c2
3243 }
3244 @end lilypond
3245
3246 When using @code{\endSpanners} it is not necessary to close
3247 \startTextSpan with \stopTextSpan, nor is it necessary to close
3248 hairpins with @code{\!}.
3249
3250 @seealso
3251 Guida al funzionamento interno:
3252 @rinternals{TextSpanner},
3253 @rinternals{Glissando},
3254 @rinternals{VoiceFollower},
3255 @rinternals{TrillSpanner},
3256 @rinternals{line-spanner-interface}.
3257
3258
3259 @node Visibility of objects
3260 @subsection Visibility of objects
3261
3262 @cindex objects, visibility of
3263 @cindex grobs, visibility of
3264 @cindex visibility of objects
3265
3266 There are four main ways in which the visibility of layout objects
3267 can be controlled: their stencil can be removed, they can be made
3268 transparent, they can be colored white, or their
3269 @code{break-visibility} property can be overridden.  The first
3270 three apply to all layout objects; the last to just a few -- the
3271 @emph{breakable} objects.  The Manuale di apprendimento introduces these
3272 four techniques, see @rlearning{Visibilità e colore degli oggetti}.
3273
3274 There are also a few other techniques which are specific to
3275 certain layout objects.  These are covered under Special
3276 considerations.
3277
3278 @menu
3279 * Removing the stencil::
3280 * Making objects transparent::
3281 * Painting objects white::
3282 * Using break-visibility::
3283 * Special considerations::
3284 @end menu
3285
3286
3287 @node Removing the stencil
3288 @unnumberedsubsubsec Removing the stencil
3289
3290 @cindex stencil, removing
3291 @funindex \omit
3292
3293 Every layout object has a stencil property.  By default this is set
3294 to the specific function which draws that object.  If this property
3295 is overridden to @code{#f} no function will be called and the object
3296 will not be drawn.  The default action can be recovered with
3297 @code{\revert}.
3298
3299 @lilypond[quote,fragment,verbatim]
3300 a1 a
3301 \override Score.BarLine.stencil = ##f
3302 a a
3303 \revert Score.BarLine.stencil
3304 a a a
3305 @end lilypond
3306
3307 This rather common operation has a shortcut @code{\omit}:
3308
3309 @lilypond[quote,fragment,verbatim]
3310 a1 a
3311 \omit Score.BarLine
3312 a a
3313 \undo \omit Score.BarLine
3314 a a a
3315 @end lilypond
3316
3317 @node Making objects transparent
3318 @unnumberedsubsubsec Making objects transparent
3319
3320 @cindex transparent, making objects
3321 @funindex \hide
3322
3323 Every layout object has a transparent property which by default is
3324 set to @code{#f}.  If set to @code{#t} the object still occupies
3325 space but is made invisible.
3326
3327 @lilypond[quote,fragment,verbatim]
3328 a'4 a'
3329 \once \override NoteHead.transparent = ##t
3330 a' a'
3331 @end lilypond
3332
3333 This rather common operation has a shortcut @code{\hide}:
3334
3335 @lilypond[quote,fragment,verbatim]
3336 a'4 a'
3337 \once \hide NoteHead
3338 a' a'
3339 @end lilypond
3340
3341 @node Painting objects white
3342 @unnumberedsubsubsec Painting objects white
3343
3344 @cindex objects, coloring
3345 @cindex coloring objects
3346 @cindex layers
3347 @cindex printing order
3348 @cindex overwriting objects
3349 @cindex objects, overwriting
3350 @cindex grobs, overwriting
3351
3352 Every layout object has a color property which by default is set
3353 to @code{black}.  If this is overridden to @code{white} the object
3354 will be indistinguishable from the white background.  However,
3355 if the object crosses other objects the color of the crossing
3356 points will be determined by the order in which they are drawn,
3357 and this may leave a ghostly image of the white object, as shown
3358 here:
3359
3360 @lilypond[quote,fragment,verbatim]
3361 \override Staff.Clef.color = #white
3362 a'1
3363 @end lilypond
3364
3365 This may be avoided by changing the order of printing the objects.
3366 All layout objects have a @code{layer} property which should be set
3367 to an integer.  Objects with the lowest value of @code{layer} are
3368 drawn first, then objects with progressively higher values are drawn,
3369 so objects with higher values overwrite objects with lower values.
3370 By default most objects are assigned a @code{layer} value of
3371 @code{1}, although a few objects, including @code{StaffSymbol} and
3372 @code{BarLine}, are assigned a value of @code{0}.  The order of
3373 printing objects with the same value of @code{layer} is indeterminate.
3374
3375 In the example above the white clef, with a default @code{layer}
3376 value of @code{1}, is drawn after the staff lines (default
3377 @code{layer} value @code{0}), so overwriting them.  To change this,
3378 the @code{Clef} object must be given in a lower value of
3379 @code{layer}, say @w{@code{-1}}, so that it is drawn earlier:
3380
3381 @lilypond[quote,fragment,verbatim]
3382 \override Staff.Clef.color = #white
3383 \override Staff.Clef.layer = #-1
3384 a'1
3385 @end lilypond
3386
3387 @node Using break-visibility
3388 @unnumberedsubsubsec Using break-visibility
3389
3390 @c TODO Add making other objects breakable
3391
3392 @cindex break-visibility
3393
3394 Most layout objects are printed only once, but some like
3395 bar lines, clefs, time signatures and key signatures, may need
3396 to be printed twice when a line break occurs -- once at the end
3397 of the line and again at the start of the next line.  Such
3398 objects are called @emph{breakable}, and have a property, the
3399 @code{break-visibility} property to control their visibility
3400 at the three positions in which they may appear -- at the
3401 start of a line, within a line if they are changed, and at the
3402 end of a line if a change takes place there.
3403
3404 For example, the time signature
3405 by default will be printed at the start of the first line, but
3406 nowhere else unless it changes, when it will be printed at the
3407 point at which the change occurs.  If this change occurs at the
3408 end of a line the new time signature will be printed at the start
3409 of the next line and a cautionary time signature will be printed
3410 at the end of the previous line as well.
3411
3412 This behaviour is controlled by the @code{break-visibility}
3413 property, which is explained in
3414 @c Leave this ref on a newline - formats incorrectly otherwise -td
3415 @rlearning{Visibilità e colore degli oggetti}.  This property takes
3416 a vector of three booleans which, in order, determine whether the
3417 object is printed at the end of, within the body of, or at the
3418 beginning of a line.  Or to be more precise, before a line break,
3419 where there is no line break, or after a line break.
3420
3421 Alternatively, these eight combinations may be specified
3422 by pre-defined functions, defined in @file{scm/output-lib.scm},
3423 where the last three columns indicate whether the layout objects
3424 will be visible in the positions shown at the head of the columns:
3425
3426 @multitable {@code{begin-of-line-invisible}} {@code{#(#t #t #t)}} {Before} {At no} {After}
3427 @headitem Function                   @tab Vector                 @tab Before @tab At no    @tab After
3428 @headitem form                       @tab form                   @tab break  @tab break    @tab break
3429
3430 @item @code{all-visible}             @tab @code{#(#t #t #t)}     @tab yes    @tab yes      @tab yes
3431 @item @code{begin-of-line-visible}   @tab @code{#(#f #f #t)}     @tab no     @tab no       @tab yes
3432 @item @code{center-visible}          @tab @code{#(#f #t #f)}     @tab no     @tab yes      @tab no
3433 @item @code{end-of-line-visible}     @tab @code{#(#t #f #f)}     @tab yes    @tab no       @tab no
3434 @item @code{begin-of-line-invisible} @tab @code{#(#t #t #f)}     @tab yes    @tab yes      @tab no
3435 @item @code{center-invisible}        @tab @code{#(#t #f #t)}     @tab yes    @tab no       @tab yes
3436 @item @code{end-of-line-invisible}   @tab @code{#(#f #t #t)}     @tab no     @tab yes      @tab yes
3437 @item @code{all-invisible}           @tab @code{#(#f #f #f)}     @tab no     @tab no       @tab no
3438 @end multitable
3439
3440 The default settings of @code{break-visibility} depend on the
3441 layout object.  The following table shows all the layout objects
3442 of interest which are affected by @code{break-visibility} and the
3443 default setting of this property:
3444
3445 @multitable @columnfractions .3 .3 .4
3446
3447 @headitem Layout object   @tab Usual context  @tab Default setting
3448
3449 @c omit Ambitus as it appears not to be affected by break-visibility -td
3450 @c @item @code{Ambitus}          @tab as specified   @tab @code{begin-of-line-visible}
3451 @item @code{BarLine}             @tab @code{Score}          @tab calculated
3452 @item @code{BarNumber}           @tab @code{Score}          @tab @code{begin-of-line-visible}
3453 @c omit the following item until it can be explained -td
3454 @c @item @code{BreakAlignGroup}  @tab @code{Score}          @tab calculated
3455 @item @code{BreathingSign}       @tab @code{Voice}          @tab @code{begin-of-line-invisible}
3456 @item @code{Clef}                @tab @code{Staff}          @tab @code{begin-of-line-visible}
3457 @item @code{Custos}              @tab @code{Staff}          @tab @code{end-of-line-visible}
3458 @item @code{DoublePercentRepeat} @tab @code{Voice}          @tab @code{begin-of-line-invisible}
3459 @item @code{KeyCancellation}     @tab @code{Staff}          @tab @code{begin-of-line-invisible}
3460 @item @code{KeySignature}        @tab @code{Staff}          @tab @code{begin-of-line-visible}
3461 @c omit LeftEdge until it can be explained -td
3462 @c @item @code{LeftEdge}         @tab @code{Score}          @tab @code{center-invisible}
3463 @item @code{ClefModifier}       @tab @code{Staff}          @tab @code{begin-of-line-visible}
3464 @item @code{RehearsalMark}       @tab @code{Score}          @tab @code{end-of-line-invisible}
3465 @item @code{TimeSignature}       @tab @code{Staff}          @tab @code{all-visible}
3466
3467 @end multitable
3468
3469 The example below shows the use of the vector form to control the
3470 visibility of bar lines:
3471
3472 @lilypond[quote,verbatim,ragged-right]
3473 \relative {
3474   f'4 g a b
3475   f4 g a b
3476   % Remove bar line at the end of the current line
3477   \once \override Score.BarLine.break-visibility = ##(#f #t #t)
3478   \break
3479   f4 g a b
3480   f4 g a b
3481 }
3482 @end lilypond
3483
3484 Although all three components of the vector used to override
3485 @code{break-visibility} must be present, not all of them are
3486 effective with every layout object, and some combinations may
3487 even give errors.  The following limitations apply:
3488
3489 @itemize @bullet
3490 @item Bar lines cannot be printed at start of line.
3491 @item A bar number cannot be printed at the start of the first
3492 line unless it is set to be different from 1.
3493 @item Clef -- see below
3494 @item Double percent repeats are either all printed or all
3495 suppressed.  Use begin-of line-invisible to print and
3496 all-invisible to suppress.
3497 @item Key signature -- see below
3498 @item ClefModifier -- see below
3499 @end itemize
3500
3501 @node Special considerations
3502 @unnumberedsubsubsec Special considerations
3503
3504 @subsubsubheading Visibility following explicit changes
3505
3506 @cindex key signature, visibility following explicit change
3507 @cindex explicitKeySignatureVisibility
3508 @cindex clef, visibility following explicit change
3509 @cindex explicitClefVisibility
3510
3511 The @code{break-visibility} property controls the visibility of
3512 key signatures and changes of clef only at the start of lines,
3513 i.e. after a break.  It has no effect on the visibility of the
3514 key signature or clef following an explicit key change or an
3515 explicit clef change within or at the end of a line.  In the
3516 following example the key signature following the explicit change
3517 to B-flat major is still visible, even though @code{all-invisible}
3518 is set.
3519
3520 @lilypond[quote,verbatim,ragged-right]
3521 \relative {
3522   \key g \major
3523   f'4 g a b
3524   % Try to remove all key signatures
3525   \override Staff.KeySignature.break-visibility = #all-invisible
3526   \key bes \major
3527   f4 g a b
3528   \break
3529   f4 g a b
3530   f4 g a b
3531 }
3532 @end lilypond
3533
3534 The visibility of such explicit key signature and clef changes is
3535 controlled by the @code{explicitKeySignatureVisibility} and
3536 @code{explicitClefVisibility} properties.  These are the equivalent
3537 of the @code{break-visibility} property and both take a vector of
3538 three booleans or the predefined functions listed above, exactly like
3539 @code{break-visibility}.  Both are properties of the Staff context,
3540 not the layout objects themselves, and so they are set using the
3541 @code{\set} command.  Both are set by default to @code{all-visible}.
3542 These properties control only the visibility of key signatures and
3543 clefs resulting from explicit changes and do not affect key
3544 signatures and clefs at the beginning of lines;
3545 @code{break-visibility} must still be overridden in the appropriate
3546 object to remove these.
3547
3548 @lilypond[quote,verbatim,ragged-right]
3549 \relative {
3550   \key g \major
3551   f'4 g a b
3552   \set Staff.explicitKeySignatureVisibility = #all-invisible
3553   \override Staff.KeySignature.break-visibility = #all-invisible
3554   \key bes \major
3555   f4 g a b \break
3556   f4 g a b
3557   f4 g a b
3558 }
3559 @end lilypond
3560
3561 @subsubsubheading Visibility of cancelling accidentals
3562
3563 To remove the cancelling accidentals printed at an explicit key
3564 change, set the Staff context property @code{printKeyCancellation}
3565 to @code{#f}:
3566
3567 @lilypond[quote,verbatim,ragged-right]
3568 \relative {
3569   \key g \major
3570   f'4 g a b
3571   \set Staff.explicitKeySignatureVisibility = #all-invisible
3572   \set Staff.printKeyCancellation = ##f
3573   \override Staff.KeySignature.break-visibility = #all-invisible
3574   \key bes \major
3575   f4 g a b \break
3576   f4 g a b
3577   f4 g a b
3578 }
3579 @end lilypond
3580
3581 With these overrides only the accidentals before the notes remain
3582 to indicate the change of key.
3583
3584 Note that when changing the key to C@tie{}major or A@tie{}minor
3585 the cancelling accidentals would be the @emph{only} indication of
3586 the key change.  In this case setting @code{printKeyCancellation} to
3587 @code{#f} has no effect:
3588
3589 @lilypond[quote,verbatim,ragged-right]
3590 \relative {
3591   \key g \major
3592   f'4 g a b
3593   \set Staff.explicitKeySignatureVisibility = #all-invisible
3594   \set Staff.printKeyCancellation = ##f
3595   \key c \major
3596   f4 g a b \break
3597   f4 g a b
3598   f4 g a b
3599 }
3600 @end lilypond
3601
3602 To suppress the cancelling accidentals even when the key is
3603 changed to C@tie{}major or A@tie{}minor, override
3604 the visibility of the @code{KeyCancellation} grob instead:
3605
3606 @lilypond[quote,verbatim,ragged-right]
3607 \relative {
3608   \key g \major
3609   f'4 g a b
3610   \set Staff.explicitKeySignatureVisibility = #all-invisible
3611   \override Staff.KeyCancellation.break-visibility = #all-invisible
3612   \key c \major
3613   f4 g a b \break
3614   f4 g a b
3615   f4 g a b
3616 }
3617 @end lilypond
3618
3619 @c TODO Add visibility of cautionary accidentals before notes
3620
3621 @subsubsubheading Automatic bars
3622
3623 @cindex automaticBars
3624 @cindex bar lines, suppressing
3625
3626 As a special case, the printing of bar lines can also be turned off
3627 by setting the @code{automaticBars} property in the Score context.
3628 If set to @code{#f}, bar lines will not be printed automatically;
3629 they must be explicitly created with a @code{\bar} command.  Unlike
3630 the @code{\cadenzaOn} predefined command, measures are still counted.
3631 Bar generation will resume according to that count if this property
3632 is later set to @code{#t}.  When set to @code{#f}, line breaks can
3633 occur only at explicit @code{\bar} commands.
3634
3635 @c TODO Add example
3636
3637 @subsubsubheading Transposed clefs
3638
3639 @cindex transposed clefs, visibility of
3640 @cindex visibility of transposed clefs
3641 @cindex clefs, visibility of transposition
3642
3643 The small transposition symbol on transposed clefs is produced by the
3644 @code{ClefModifier} layout object.  Its visibility is automatically
3645 inherited from the @code{Clef} object, so it is not necessary to apply
3646 any required @code{break-visibility} overrides to the @code{ClefModifier}
3647 layout objects to suppress transposition symbols for invisible clefs.
3648
3649 For explicit clef changes, the @code{explicitClefVisibility}
3650 property controls both the clef symbol and any transposition symbol
3651 associated with it.
3652
3653 @seealso
3654 Manuale di apprendimento:
3655 @rlearning{Visibilità e colore degli oggetti}.
3656
3657
3658 @node Line styles
3659 @subsection Line styles
3660
3661 Some performance indications, e.g., @i{rallentando} and
3662 @i{accelerando} and @i{trills} are written as text and are
3663 extended over many measures with lines, sometimes dotted or wavy.
3664
3665 These all use the same routines as the glissando for drawing the
3666 texts and the lines, and tuning their behavior is therefore also
3667 done in the same way.  It is done with a spanner, and the routine
3668 responsible for drawing the spanners is
3669 @code{ly:line-spanner::print}.  This routine determines the
3670 exact location of the two @i{span points} and draws a line
3671 between them, in the style requested.
3672
3673 Here is an example showing the different line styles available,
3674 and how to tune them.
3675
3676 @lilypond[ragged-right,verbatim,quote]
3677 \relative {
3678   d''2 \glissando d'2
3679   \once \override Glissando.style = #'dashed-line
3680   d,2 \glissando d'2
3681   \override Glissando.style = #'dotted-line
3682   d,2 \glissando d'2
3683   \override Glissando.style = #'zigzag
3684   d,2 \glissando d'2
3685   \override Glissando.style = #'trill
3686   d,2 \glissando d'2
3687 }
3688 @end lilypond
3689
3690 The locations of the end-points of the spanner are computed
3691 on-the-fly for every graphic object, but it is possible to
3692 override these:
3693
3694 @c TODO Complete
3695 @lilypond[ragged-right,verbatim,quote]
3696 \relative {
3697   e''2 \glissando f
3698   \once \override Glissando.bound-details.right.Y = #-2
3699   e2 \glissando f
3700 }
3701 @end lilypond
3702
3703 The value for @code{Y} is set to @w{@code{-2}} for the right end
3704 point.  The left side may be similarly adjusted by specifying
3705 @code{left} instead of @code{right}.
3706
3707 If @code{Y} is not set, the value is computed from the vertical
3708 position of the left and right attachment points of the spanner.
3709
3710 Other adjustments of spanners are possible, for details, see
3711 @ref{Spanners}.
3712
3713 @node Rotating objects
3714 @subsection Rotating objects
3715
3716 Both layout objects and elements of markup text can be rotated by
3717 any angle about any point, but the method of doing so differs.
3718
3719 @menu
3720 * Rotating layout objects::
3721 * Rotating markup::
3722 @end menu
3723
3724 @node Rotating layout objects
3725 @unnumberedsubsubsec Rotating layout objects
3726
3727 @cindex rotating objects
3728 @cindex objects, rotating
3729
3730 All layout objects which support the @code{grob-interface} can be
3731 rotated by setting their @code{rotation} property.  This takes a
3732 list of three items: the angle of rotation counter-clockwise,
3733 and the x and y coordinates of the point relative to the object's
3734 reference point about which the rotation is to be performed.  The
3735 angle of rotation is specified in degrees and the coordinates in
3736 staff-spaces.
3737
3738 The angle of rotation and the coordinates of the rotation point must
3739 be determined by trial and error.
3740
3741 @cindex hairpins, angled
3742 @cindex angled hairpins
3743
3744 There are only a few situations where the rotation of layout
3745 objects is useful; the following example shows one situation where
3746 they may be:
3747
3748 @lilypond[quote,fragment,verbatim]
3749 g4\< e' d'' f''\!
3750 \override Hairpin.rotation = #'(20 -1 0)
3751 g4\< e' d'' f''\!
3752 @end lilypond
3753
3754 @node Rotating markup
3755 @unnumberedsubsubsec Rotating markup
3756
3757 All markup text can be rotated to lie at any angle by prefixing it
3758 with the @code{\rotate} command.  The command takes two arguments:
3759 the angle of rotation in degrees counter-clockwise and the text to
3760 be rotated.  The extents of the text are not rotated: they take
3761 their values from the extremes of the x and y coordinates of the
3762 rotated text.  In the following example the
3763 @code{outside-staff-priority} property for text is set to @code{#f}
3764 to disable the automatic collision avoidance, which would push some
3765 of the text too high.
3766
3767 @lilypond[quote,fragment,verbatim]
3768 \override TextScript.outside-staff-priority = ##f
3769 g4^\markup { \rotate #30 "a G" }
3770 b^\markup { \rotate #30 "a B" }
3771 des'^\markup { \rotate #30 "a D-Flat" }
3772 fis'^\markup { \rotate #30 "an F-Sharp" }
3773 @end lilypond
3774
3775 @node Ritocchi avanzati
3776 @section Ritocchi avanzati
3777 @translationof Advanced tweaks
3778
3779 This section discusses various approaches to fine tuning the
3780 appearance of the printed score.
3781
3782 @menu
3783 * Aligning objects::
3784 * Vertical grouping of grobs::
3785 * Modifying stencils::
3786 * Modifying shapes::
3787 * Modifying broken spanners::
3788 * Unpure-pure containers::
3789 @end menu
3790
3791 @seealso
3792 Manuale di apprendimento:
3793 @rlearning{Modifica dell'output},
3794 @rlearning{Altre fonti di informazione}.
3795
3796 Guida alla notazione:
3797 @ref{Explaining the Internals Reference},
3798 @ref{Modifying properties}.
3799
3800 Estendere LilyPond:
3801 @rextend{Interfaces for programmers}.
3802
3803 File installati:
3804 @file{scm/define-grobs.scm}.
3805
3806 Frammenti:
3807 @rlsr{Tweaks and overrides}.
3808
3809 Guida al funzionamento interno:
3810 @rinternals{All layout objects}.
3811
3812
3813 @node Aligning objects
3814 @subsection Aligning objects
3815
3816 Graphical objects which support the @code{self-alignment-interface}
3817 and/or the @code{side-position-interface} can be aligned to a previously
3818 placed object in a variety of ways.  For a list of these objects, see
3819 @rinternals{self-alignment-interface} and @rinternals{side-position-interface}.
3820
3821 All graphical objects have a reference point, a horizontal extent and a
3822 vertical extent.  The horizontal extent is a pair of numbers
3823 giving the displacements from the reference point of the left and
3824 right edges, displacements to the left being negative.  The vertical
3825 extent is a pair of numbers giving the displacement from the reference
3826 point to the bottom and top edges, displacements down being negative.
3827
3828 An object's position on a staff is given by the values of the
3829 @code{X-offset} and @code{Y-offset} properties.  The value of
3830 @code{X-offset} gives the displacement from the X coordinate of
3831 the reference point of the parent object, and the value of
3832 @code{Y-offset} gives the displacement from the center line of the
3833 staff.  The values of @code{X-offset} and @code{Y-offset} may
3834 be set directly or may be set to be calculated by procedures in order
3835 to achieve alignment with the parent object.
3836
3837 @warning{Many objects have special positioning considerations which
3838 cause any setting of @code{X-offset} or @code{Y-offset} to be
3839 ignored or modified, even though the object supports the
3840 @code{self-alignment-interface}.  Overriding the @code{X-offset}
3841 or @code{Y-offset} properties to a fixed value causes the respective
3842 @code{self-alignment} property to be disregarded.}
3843
3844 For example, an accidental can be repositioned vertically by setting
3845 @code{Y-offset} but any changes to @code{X-offset} have no effect.
3846
3847 Rehearsal marks may be aligned with breakable objects such as bar
3848 lines, clef symbols, time signature symbols and key signatures.  There
3849 are special properties to be found in the @code{break-aligned-interface}
3850 for positioning rehearsal marks on such objects.
3851
3852 @seealso
3853 Guida alla notazione:
3854 @ref{Using the break-alignable-interface}.
3855
3856 Estendere LilyPond:
3857 @rextend{Callback functions}.
3858
3859 @menu
3860 * Setting X-offset and Y-offset directly::
3861 * Using the side-position-interface::
3862 * Using the self-alignment-interface::
3863 * Using the break-alignable-interface::
3864 @end menu
3865
3866 @node Setting X-offset and Y-offset directly
3867 @unnumberedsubsubsec Setting @code{X-offset} and @code{Y-offset} directly
3868
3869 Numerical values may be given to the @code{X-offset} and @code{Y-offset}
3870 properties of many objects.  The following example shows three
3871 notes with the default fingering position and the positions with @code{X-offset}
3872 and @code{Y-offset} modified.
3873
3874 @lilypond[verbatim,fragment,quote]
3875 a'-3
3876 a'
3877 -\tweak X-offset #0
3878 -\tweak Y-offset #0
3879 -3
3880 a'
3881 -\tweak X-offset #-1
3882 -\tweak Y-offset #1
3883 -3
3884 @end lilypond
3885
3886 @c TODO write more
3887
3888 @node Using the side-position-interface
3889 @unnumberedsubsubsec Using the @code{side-position-interface}
3890
3891 An object which supports the @code{side-position-interface} can be
3892 placed next to its parent object so that
3893 the specified edges of the two objects touch.  The object may be
3894 placed above, below, to the right or to the left of the parent.
3895 The parent cannot be specified; it is determined by the order of
3896 elements in the input stream.  Most objects have the associated
3897 note head as their parent.
3898
3899 The values of the @code{side-axis} and @code{direction} properties
3900 determine where the object is to be placed, as follows:
3901
3902 @c TODO add an example of each to the table
3903
3904 @multitable @columnfractions .3 .3 .3
3905 @headitem @code{side-axis}  @tab @code{direction}  @tab
3906 @headitem property          @tab property          @tab Placement
3907
3908 @item     @code{0}          @tab @code{-1}         @tab left
3909 @item     @code{0}          @tab @code{1}          @tab right
3910 @item     @code{1}          @tab @code{-1}         @tab below
3911 @item     @code{1}          @tab @code{1}          @tab above
3912
3913 @end multitable
3914
3915 When @code{side-axis} is @code{0}, @code{X-offset} should be set to
3916 the procedure @code{ly:side-position-interface::x-aligned-side}.
3917 This procedure will return the correct value of @code{X-offset} to
3918 place the object to the left or right side of the parent according
3919 to value of @code{direction}.
3920
3921 When @code{side-axis} is @code{1}, @code{Y-offset} should be set to
3922 the procedure @code{ly:side-position-interface::y-aligned-side}.
3923 This procedure will return the correct value of @code{Y-offset} to
3924 place the object to the top or bottom of the parent according
3925 to value of @code{direction}.
3926
3927 @c TODO Add examples
3928
3929 @node Using the self-alignment-interface
3930 @unnumberedsubsubsec Using the @code{self-alignment-interface}
3931
3932 @subsubsubheading Self-aligning objects horizontally
3933
3934 The horizontal alignment of an object which supports the
3935 @code{self-alignment-interface} is controlled by the value of
3936 the @code{self-alignment-X} property, provided the object's
3937 @code{X-offset} property is set to
3938 @code{ly:self-alignment-interface::x-aligned-on-self}.
3939 @code{self-alignment-X}  may be given any
3940 real value, in units of half the total X extent of the
3941 object.  Negative values move the object to the right, positive
3942 to the left.  A value of @code{0} centers the object on the
3943 reference point of its parent, a value of @w{@code{-1}} aligns the
3944 left edge of the object on the reference point of its parent,
3945 and a value of @code{1} aligns the right edge of the object on the
3946 reference point of its parent.  The symbols @code{LEFT},
3947 @code{CENTER}, and @code{RIGHT} may be used instead of the values
3948 @w{@code{-1}}, @code{0}, and @code{1}, respectively.
3949
3950 Normally the @code{\override} command would be used to modify the
3951 value of @code{self-alignment-X}, but the @code{\tweak} command
3952 can be used to separately align several annotations on a single
3953 note:
3954
3955 @lilypond[quote,verbatim,fragment]
3956 a'
3957 -\tweak self-alignment-X #-1
3958 ^"left-aligned"
3959 -\tweak self-alignment-X #0
3960 ^"center-aligned"
3961 -\tweak self-alignment-X #RIGHT
3962 ^"right-aligned"
3963 -\tweak self-alignment-X #-2.5
3964 ^"aligned further to the right"
3965 @end lilypond
3966
3967 @subsubsubheading Self-aligning objects vertically
3968
3969 Objects may be aligned vertically in an analogous way to aligning
3970 them horizontally if the @code{Y-offset} property is set to
3971 @code{ly:self-alignment-interface::y-aligned-on-self}.  However,
3972 other mechanisms are often involved in vertical alignment: the
3973 value of @code{Y-offset} is just one variable taken into account.
3974 This may make adjusting the value of some objects tricky.
3975 The units are just half the vertical extent of the object, which
3976 is usually quite small, so quite large numbers may be required.
3977 A value of @w{@code{-1}} aligns the lower edge of the object with
3978 the reference point of the parent object, a value of @code{0}
3979 aligns the center of the object with the reference point of the
3980 parent, and a value of @code{1} aligns the top edge of the object
3981 with the reference point of the parent.  The symbols @code{DOWN},
3982 @code{CENTER}, and @code{UP} may be substituted for @w{@code{-1}},
3983 @code{0}, and @code{1}, respectively.
3984
3985 @subsubsubheading Self-aligning objects in both directions
3986
3987 By setting both @code{X-offset} and @code{Y-offset}, an object may
3988 be aligned in both directions simultaneously.
3989
3990 The following example shows how to adjust a fingering mark so
3991 that it nestles close to the note head.
3992
3993 @lilypond[quote,verbatim,fragment]
3994 a'
3995 -\tweak self-alignment-X #0.5  % move horizontally left
3996 -\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
3997 -\tweak self-alignment-Y #-1  % move vertically up
3998 -3  % third finger
3999 @end lilypond
4000
4001 @ignore
4002 @unnumberedsubsubsec Using the @code{aligned-on-parent} procedures
4003
4004 @c Cannot document as they do not seem to operate consistently on all objects -td
4005 @c TODO investigate further
4006
4007 The @code{aligned-on-parent} procedures are used in the same way
4008 as the @code{aligned-on-self} procedures, they difference being
4009 that they permit an object to be aligned with the @emph{edges} of
4010 the parent rather than the parent's reference point.  The following
4011 example shows the difference:
4012
4013 @c TODO Add example
4014
4015 @lilypond[verbatim,quote]
4016 @end lilypond
4017
4018 @end ignore
4019
4020 @ignore
4021 @unnumberedsubsubsec Using the @code{centered-on-parent} procedures
4022
4023 @c Cannot document as they do not seem to operate consistently on all objects -td
4024 @c TODO investigate further
4025
4026 @end ignore
4027
4028 @c TODO The align-interface, BassFigureAlignment and VerticalAlignment
4029
4030 @node Using the break-alignable-interface
4031 @unnumberedsubsubsec Using the @code{break-alignable-interface}
4032
4033 @cindex align to objects
4034 @cindex break-align-symbols
4035
4036 Rehearsal marks and bar numbers may be aligned with notation
4037 objects other than bar lines.  These objects include @code{ambitus},
4038 @code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar},
4039 @code{left-edge}, @code{key-cancellation}, @code{key-signature}, and
4040 @code{time-signature}.
4041
4042 Each type of object has its own default reference point, to which
4043 rehearsal marks are aligned:
4044
4045 @lilypond[verbatim,quote,fragment]
4046 % The rehearsal mark will be aligned to the right edge of the Clef
4047 \override Score.RehearsalMark.break-align-symbols = #'(clef)
4048 \key a \major
4049 \clef treble
4050 \mark "↓"
4051 e'1
4052 % The rehearsal mark will be aligned to the left edge of the Time Signature
4053 \override Score.RehearsalMark.break-align-symbols = #'(time-signature)
4054 \key a \major
4055 \clef treble
4056 \time 3/4
4057 \mark "↓"
4058 e'2.
4059 % The rehearsal mark will be centered above the Breath Mark
4060 \override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
4061 \key a \major
4062 \clef treble
4063 \time 4/4
4064 e'1
4065 \breathe
4066 \mark "↓"
4067 @end lilypond
4068
4069 A list of possible target alignment objects may be specified.  If
4070 some of the objects are invisible at that point due to the setting
4071 of @code{break-visibility} or the explicit visibility settings for
4072 keys and clefs, the rehearsal mark or bar number is aligned to the
4073 first object in the list which is visible.  If no objects in the
4074 list are visible the object is aligned to the bar line.  If the bar
4075 line is invisible the object is aligned to the place where the bar
4076 line would be.
4077
4078 @lilypond[verbatim,quote,fragment]
4079 % The rehearsal mark will be aligned to the right edge of the Key Signature
4080 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
4081 \key a \major
4082 \clef treble
4083 \mark "↓"
4084 e'1
4085 % The rehearsal mark will be aligned to the right edge of the Clef
4086 \set Staff.explicitKeySignatureVisibility = #all-invisible
4087 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
4088 \key a \major
4089 \clef bass
4090 \mark "↓"
4091 gis,1
4092 % The rehearsal mark will be centered above the Bar Line
4093 \set Staff.explicitKeySignatureVisibility = #all-invisible
4094 \set Staff.explicitClefVisibility = #all-invisible
4095 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
4096 \key a \major
4097 \clef treble
4098 \mark "↓"
4099 e'1
4100 @end lilypond
4101
4102 The alignment of the rehearsal mark relative to the notation object
4103 can be changed, as shown in the following example.  In a score with
4104 multiple staves, this setting should be done for all the staves.
4105
4106 @lilypond[verbatim,quote,fragment]
4107 % The RehearsalMark will be aligned with the right edge of the Key Signature
4108 \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
4109 \key a \major
4110 \clef treble
4111 \time 4/4
4112 \mark "↓"
4113 e'1
4114 % The RehearsalMark will be centered above the Key Signature
4115 \once \override Score.KeySignature.break-align-anchor-alignment = #CENTER
4116 \mark "↓"
4117 \key a \major
4118 e'1
4119 % The RehearsalMark will be aligned with the left edge of the Key Signature
4120 \once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
4121 \key a \major
4122 \mark "↓"
4123 e'1
4124 @end lilypond
4125
4126 The rehearsal mark can also be offset to the right or left of the left
4127 edge by an arbitrary amount.  The units are staff-spaces:
4128
4129 @lilypond[verbatim,quote,fragment]
4130 % The RehearsalMark will be aligned with the left edge of the Key Signature
4131 % and then shifted right by 3.5 staff-spaces
4132 \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
4133 \once \override Score.KeySignature.break-align-anchor = #3.5
4134 \key a \major
4135 \mark "↓"
4136 e'1
4137 % The RehearsalMark will be aligned with the left edge of the Key Signature
4138 % and then shifted left by 2 staff-spaces
4139 \once \override Score.KeySignature.break-align-anchor = #-2
4140 \key a \major
4141 \mark "↓"
4142 e'1
4143 @end lilypond
4144
4145
4146 @node Vertical grouping of grobs
4147 @subsection Vertical grouping of grobs
4148
4149 @c TODO Expand this section
4150
4151 The VerticalAlignment and VerticalAxisGroup grobs work together.
4152 VerticalAxisGroup groups together different grobs like Staff, Lyrics,
4153 etc.  VerticalAlignment then vertically aligns the different grobs
4154 grouped together by VerticalAxisGroup.  There is usually only one
4155 VerticalAlignment per score but every Staff, Lyrics, etc. has its own
4156 VerticalAxisGroup.
4157
4158
4159 @node Modifying stencils
4160 @subsection Modifying stencils
4161
4162 All layout objects have a @code{stencil} property which is part of
4163 the @code{grob-interface}.  By default, this property is usually
4164 set to a function specific to the object that is tailor-made to
4165 render the symbol which represents it in the output.  For example,
4166 the standard setting for the @code{stencil} property of the
4167 @code{MultiMeasureRest} object is @code{ly:multi-measure-rest::print}.
4168
4169 The standard symbol for any object can be replaced by modifying the
4170 @code{stencil} property to reference a different, specially-written,
4171 procedure.  This requires a high level of knowledge of the internal
4172 workings of LilyPond, but there is an easier way which can often
4173 produce adequate results.
4174
4175 This is to set the @code{stencil} property to the procedure which
4176 prints text -- @code{ly:text-interface::print} -- and to add a
4177 @code{text} property to the object which is set to contain the
4178 markup text which produces the required symbol.  Due to the
4179 flexibility of markup, much can be achieved -- see in particular
4180 @ref{Graphic notation inside markup}.
4181
4182 The following example demonstrates this by changing the note head
4183 symbol to a cross within a circle.
4184
4185 @lilypond[verbatim,quote]
4186 XinO = {
4187   \once \override NoteHead.stencil = #ly:text-interface::print
4188   \once \override NoteHead.text = \markup {
4189     \combine
4190       \halign #-0.7 \draw-circle #0.85 #0.2 ##f
4191       \musicglyph #"noteheads.s2cross"
4192   }
4193 }
4194 \relative {
4195   a' a \XinO a a
4196 }
4197 @end lilypond
4198
4199 Any of the glyphs in the feta Font can be supplied to the
4200 @code{\musicglyph} markup command -- see @ref{The Feta font}.
4201
4202 @c TODO Add inserting eps files or ref to later
4203
4204 @c TODO Add inserting Postscript or ref to later
4205
4206 @seealso
4207 Guida alla notazione:
4208 @ref{Graphic notation inside markup},
4209 @ref{Formatting text},
4210 @ref{Text markup commands},
4211 @ref{The Feta font}.
4212
4213
4214 @node Modifying shapes
4215 @subsection Modifying shapes
4216
4217 @menu
4218 * Modifying ties and slurs::
4219 @end menu
4220
4221 @node Modifying ties and slurs
4222 @unnumberedsubsubsec Modifying ties and slurs
4223
4224 @cindex slurs, modifying
4225 @cindex ties, modifying
4226 @cindex Bézier curves, control points
4227 @cindex control points, Bézier curves
4228
4229 @code{Tie}s, @code{Slur}s, @code{PhrasingSlur}s,
4230 @code{LaissezVibrerTie}s and @code{RepeatTie}s are all drawn as
4231 third-order Bézier curves.  If the shape of the tie or slur which
4232 is calculated automatically is not optimum, the shape may be
4233 modified manually in two ways:
4234
4235 @enumerate a
4236 @item
4237 by specifying the displacements to be made to the control points
4238 of the automatically calculated Bézier curve, or
4239
4240 @item
4241 by explicitly specifying the positions of the four control points
4242 required to define the wanted curve.
4243 @end enumerate
4244
4245 Both methods are explained below.  The first method is more suitable
4246 if only slight adjustments to the curve are required; the second may
4247 be better for creating curves which are related to just a single
4248 note.
4249
4250 @subsubsubheading Cubic Bézier curves
4251
4252 Third-order or cubic Bézier curves are defined by four control
4253 points.  The first and fourth control points are precisely the
4254 starting and ending points of the curve.  The intermediate two
4255 control points define the shape.  Animations showing how the curve
4256 is drawn can be found on the web, but the following description
4257 may be helpful.  The curve starts from the first control point
4258 heading directly towards the second, gradually bending over to
4259 head towards the third and continuing to bend over to head towards
4260 the fourth, arriving there travelling directly from the third
4261 control point.  The curve is entirely contained in the
4262 quadrilateral defined by the four control points.  Translations,
4263 rotations and scaling of the control points all result in exactly
4264 the same operations on the curve.
4265
4266 @subsubsubheading Specifying displacements from current control points
4267
4268 @cindex shaping slurs and ties
4269 @funindex \shape
4270
4271 In this example the automatic placement of the tie is not optimum,
4272 and @code{\tieDown} would not help.
4273
4274 @lilypond[verbatim,quote]
4275 <<
4276   { e'1~ 1 }
4277 \\
4278   \relative { r4 <g' c,> <g c,> <g c,> }
4279 >>
4280 @end lilypond
4281
4282 Adjusting the control points of the tie with @code{\shape} allows
4283 the collisions to be avoided.
4284
4285 The syntax of @code{\shape} is
4286
4287 @example
4288 [-]@code{\shape} @var{displacements} @var{item}
4289 @end example
4290
4291 This will reposition the control-points of @var{item} by the amounts
4292 given by @var{displacements}.  The @var{displacements} argument is a
4293 list of number pairs or a list of such lists.  Each element of a pair
4294 represents the displacement of one of the coordinates of a
4295 control-point.  If @var{item} is a string, the result is
4296 @code{\once\override} for the specified grob type.  If @var{item} is
4297 a music expression, the result is the same music expression with an
4298 appropriate tweak applied.
4299
4300 In other words, the @code{\shape} function can act as either a
4301 @code{\once\override} command or a @code{\tweak} command depending
4302 on whether the @var{item} argument is a grob name, like @qq{Slur},
4303 or a music expression, like @qq{(}.  The @var{displacements} argument
4304 specifies the displacements of the four control points as a list of
4305 four pairs of (dx . dy) values in units of staff-spaces (or a list
4306 of such lists if the curve has more than one segment).
4307
4308 The leading hyphen is required if and only if the @code{\tweak} form
4309 is being used.
4310
4311 So, using the same example as above and the @code{\once\override}
4312 form of @code{\shape}, this will raise the tie by half a staff-space:
4313
4314 @lilypond[verbatim,quote]
4315 <<
4316   {
4317     \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie
4318     e'1~ 1
4319   }
4320 \\
4321   \relative { r4 <g' c,> <g c,> <g c,> }
4322 >>
4323 @end lilypond
4324
4325 This positioning of the tie is better, but maybe it should be raised
4326 more in the center.  The following example does this, this time using
4327 the alternative @code{\tweak} form:
4328
4329 @lilypond[verbatim,quote]
4330 <<
4331   {
4332     e'1-\shape #'((0 . 0.5) (0 . 1) (0 . 1) (0 . 0.5)) ~ e'
4333   }
4334 \\
4335   \relative { r4 <g' c,> <g c,> <g c,> }
4336 >>
4337 @end lilypond
4338
4339 Changes to the horizontal positions of the control points may be made
4340 in the same way, and two different curves starting at the same
4341 musical moment may also be shaped:
4342
4343 @lilypond[verbatim,quote,ragged-right]
4344 \relative {
4345   c''8(\( a) a'4 e c\)
4346   \shape #'((0.7 . -0.4) (0.5 . -0.4) (0.3 . -0.3) (0 . -0.2)) Slur
4347   \shape #'((0 . 0) (0 . 0.5) (0 . 0.5) (0 . 0)) PhrasingSlur
4348   c8(\( a) a'4 e c\)
4349 }
4350 @end lilypond
4351
4352 The @code{\shape} function can also displace the control points of
4353 curves which stretch across line breaks.  Each piece of the broken
4354 curve can be given its own list of offsets.  If changes to a
4355 particular segment are not needed, the empty list can serve as a
4356 placeholder.  In this example the line break makes the single slur
4357 look like two:
4358
4359 @lilypond[verbatim,quote,ragged-right]
4360 \relative {
4361   c'4( f g c
4362   \break
4363   d,4 c' f, c)
4364 }
4365 @end lilypond
4366
4367 Changing the shapes of the two halves of the slur makes it clearer
4368 that the slur continues over the line break:
4369
4370 @lilypond[verbatim,quote,ragged-right]
4371 % () may be used as a shorthand for ((0 . 0) (0 . 0) (0 . 0) (0 . 0))
4372 % if any of the segments does not need to be changed
4373 \relative c' {
4374   \shape #'(
4375              (( 0 . 0) (0 . 0) (0 . 0) (0 . 1))
4376              ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5))
4377            ) Slur
4378   c4( f g c
4379   \break
4380   d,4 c' f, c)
4381 }
4382 @end lilypond
4383
4384 If an S-shaped curve is required the control points must always be
4385 adjusted manually --- LilyPond will never select such shapes
4386 automatically.
4387
4388 @lilypond[verbatim,quote]
4389 \relative c'' {
4390   c8( e b-> f d' a e-> g)
4391   \shape #'((0 . -1) (5.5 . -0.5) (-5.5 . -10.5) (0 . -5.5)) PhrasingSlur
4392   c8\( e b-> f d' a e-> g\)
4393 }
4394 @end lilypond
4395
4396 @subsubsubheading Specifying control points explicitly
4397
4398 The coordinates of the Bézier control points are specified in units
4399 of staff-spaces.  The X@tie{}coordinate is relative to the reference
4400 point of the note to which the tie or slur is attached, and the
4401 Y@tie{}coordinate is relative to the staff center line.  The
4402 coordinates are specified as a list of four pairs of decimal numbers
4403 (reals).  One approach is to estimate the coordinates of the two
4404 end points, and then guess the two intermediate points.  The optimum
4405 values are then found by trial and error.  Be aware that these values
4406 may need to be manually adjusted if any further changes are made to
4407 the music or the layout.
4408
4409 One situation where specifying the control points explicitly is
4410 preferable to specifying displacements is when they need to be
4411 specified relative to a single note.  Here is an example of this.
4412 It shows one way of indicating a slur extending into alternative
4413 sections of a volta repeat.
4414
4415 @lilypond[verbatim,quote]
4416 \relative {
4417   c''1
4418   \repeat volta 3 { c4 d( e f }
4419   \alternative {
4420     { g2) d }
4421     {
4422       g2
4423       % create a slur and move it to a new position
4424       % the <> is just an empty chord to carry the slur termination
4425       -\tweak control-points #'((-2 . 3.8) (-1 . 3.9) (0 . 4) (1 . 3.4)) ( <> )
4426       f,
4427     }
4428     {
4429       e'2
4430       % create a slur and move it to a new position
4431       -\tweak control-points #'((-2 . 3) (-1 . 3.1) (0 . 3.2) (1 . 2.4)) ( <> )
4432       f,
4433     }
4434   }
4435 }
4436 @end lilypond
4437
4438 @knownissues
4439 It is not possible to modify shapes of ties or slurs by changing
4440 the @code{control-points} property if there are multiple ties or slurs
4441 at the same musical moment -- the @code{\tweak} command will also not
4442 work in this case.  However, the @code{tie-configuration} property of
4443 @code{TieColumn} can be overridden to set start line and direction as
4444 required.
4445
4446 @seealso
4447 Guida al funzionamento interno:
4448 @rinternals{TieColumn}.
4449
4450
4451 @node Modifying broken spanners
4452 @subsection Modifying broken spanners
4453
4454 @menu
4455 * Using alterBroken::
4456 @end menu
4457
4458 @node Using alterBroken
4459 @unnumberedsubsubsec Using @code{\alterBroken}
4460
4461 @cindex spanners, modifying
4462 @cindex broken spanners, modifying
4463 @funindex \alterBroken
4464
4465 When a spanner crosses a line break or breaks, each piece
4466 inherits the attributes of the original spanner.  Thus, ordinary
4467 tweaking of a broken spanner applies the same modifications to
4468 each of its segments.  In the example below, overriding
4469 @code{thickness} affects the slur on either side of the line
4470 break.
4471
4472 @lilypond[verbatim,quote,ragged-right]
4473 \relative c'' {
4474   r2
4475   \once\override Slur.thickness = 10
4476   c8( d e f
4477   \break
4478   g8 f e d) r2
4479 }
4480 @end lilypond
4481
4482 Independently modifying the appearance of individual pieces
4483 of a broken spanner is possible with the @code{\alterBroken}
4484 command.  This command can produce either an @code{\override}
4485 or a @code{\tweak} of a spanner property.
4486
4487 The syntax for @code{\alterBroken} is
4488
4489 @example
4490 [-]@code{\alterBroken} @var{property} @var{values} @var{item}
4491 @end example
4492
4493 The argument @var{values} is a list of values, one for each
4494 broken piece.  If @var{item} is a grob name like @code{Slur} or
4495 @code{Staff.PianoPedalBracket}, the result is an @code{\override}
4496 of the specified grob type.  If @var{item} is a music expression
4497 such as @qq{(} or @qq{[} the result is the same music expression
4498 with an appropriate tweak applied.
4499
4500 The leading hyphen must be used with the @code{\tweak} form.  Do
4501 not add it when @code{\alterBroken} is used as an
4502 @code{\override}.
4503
4504 In its @code{\override} usage, @code{\alterBroken} may be
4505 prefaced by @code{\once} or @code{\temporary} and reverted by
4506 using @code{\revert} with @var{property}.
4507
4508 The following code applies an independent @code{\override} to
4509 each of the slur segments in the previous example:
4510
4511 @lilypond[verbatim,quote,ragged-right]
4512 \relative c'' {
4513   r2
4514   \alterBroken thickness #'(10 1) Slur
4515   c8( d e f
4516   \break
4517   g8 f e d) r2
4518 }
4519 @end lilypond
4520
4521 The @code{\alterBroken} command may be used with any spanner
4522 object, including @code{Tie}, @code{PhrasingSlur}, @code{Beam}
4523 and @code{TextSpanner}.  For example, an editor preparing a
4524 scholarly edition may wish to indicate the absence of part of a
4525 phrasing slur in a source by dashing only the segment which has
4526 been added.  The following example illustrates how this can be
4527 done, in this case using the @code{\tweak} form of the command:
4528
4529 @lilypond[verbatim,quote,ragged-right]
4530 % The empty list is conveniently used below, because it is the
4531 % default setting of dash-definition, resulting in a solid curve.
4532 \relative {
4533   c''2-\alterBroken dash-definition #'(() ((0 1.0 0.4 0.75))) \(e
4534   \break
4535   g2 e\)
4536 }
4537 @end lilypond
4538
4539 It is important to understand that @code{\alterBroken} will set
4540 each piece of a broken spanner to the corresponding value in
4541 @var{values}.  When there are fewer values than pieces, any
4542 additional piece will be assigned the empty list.  This may lead
4543 to undesired results if the layout property is not set to the
4544 empty list by default.  In such cases, each segment should be
4545 assigned an appropriate value.
4546
4547 @knownissues
4548 Line breaks may occur in different places following changes in
4549 layout. Settings chosen for @code{\alterBroken} may be unsuitable
4550 for a spanner that is no longer broken or is split into more
4551 segments than before.  Explicit use of @code{\break} can guard
4552 against this situation.
4553
4554 The @code{\alterBroken} command is ineffective for spanner
4555 properties accessed before line-breaking such as
4556 @code{direction}.
4557
4558 @seealso
4559 Estendere LilyPond:
4560 @rextend{Difficult tweaks}.
4561
4562
4563 @node Unpure-pure containers
4564 @subsection Unpure-pure containers
4565
4566 @cindex Scheme, pure containers
4567 @cindex Scheme, unpure containers
4568 @cindex pure containers, Scheme
4569 @cindex unpure containers, Scheme
4570 @cindex horizontal spacing, overriding
4571
4572 Unpure-pure containers are useful for overriding @emph{Y-axis} spacing
4573 calculations - specifically @code{Y-offset} and @code{Y-extent} - with a
4574 Scheme function instead of a literal (i.e. a number or pair).
4575
4576 For certain grobs, the @code{Y-extent} is based on the @code{stencil}
4577 property, overriding the stencil property of one of these will
4578 require an additional @code{Y-extent} override with an unpure-pure
4579 container.  When a function overrides a @code{Y-offset} and/or
4580 @code{Y-extent} it is assumed that this will trigger line breaking
4581 calculations too early during compilation.  So the function is not
4582 evaluated at all (usually returning a value of @samp{0} or
4583 @samp{'(0 . 0)}) which can result in collisions.  A @q{pure} function
4584 will not affect properties, objects or grob suicides and therefore will
4585 always have its Y-axis-related evaluated correctly.
4586
4587 Currently, there are about thirty functions that are already considered
4588 @q{pure} and Unpure-pure containers are a way to set functions not on
4589 this list as @q{pure}.  The @q{pure} function is evaluated @emph{before}
4590 any line-breaking and so the horizontal spacing can be adjusted
4591 @q{in time}.  The @q{unpure} function is then evaluated @emph{after}
4592 line breaking.
4593
4594 @warning{As it is difficult to always know which functions are on this
4595 list we recommend that any @q{pure} functions you create do not use
4596 @code{Beam} or @code{VerticalAlignment} grobs.}
4597
4598 An unpure-pure container is constructed as follows;
4599
4600 @code{(ly:make-unpure-pure-container f0 f1)}
4601
4602 where @code{f0} is a function taking @var{n} arguments (@var{n >= 1})
4603 and the first argument must always be the grob.  This is the function
4604 that gives the actual result.  @var{f1} is the function being labeled
4605 as @q{pure} that takes @var{n + 2} arguments.  Again, the first argument
4606 must always still be the grob but the second and third are @q{start}
4607 and @q{end} arguments.
4608
4609 @var{start} and @var{end} are, for all intents and purposes, dummy
4610 values that only matter for @code{Spanners} (i.e @code{Hairpin} or
4611 @code{Beam}), that can return different height estimations based on a
4612 starting and ending column.
4613
4614 The rest are the other arguments to the first function (which
4615 may be none if @var{n = 1}).
4616
4617 The results of the second function are used as an approximation of the
4618 value needed which is then used by the first function to get the real
4619 value which is then used for fine-tuning much later during the spacing
4620 process.
4621
4622 @lilypond[verbatim,quote,ragged-right]
4623 #(define (square-line-circle-space grob)
4624 (let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
4625       (notename (ly:pitch-notename pitch)))
4626  (if (= 0 (modulo notename 2))
4627      (make-circle-stencil 0.5 0.0 #t)
4628      (make-filled-box-stencil '(0 . 1.0)
4629                               '(-0.5 . 0.5)))))
4630
4631 squareLineCircleSpace = {
4632   \override NoteHead.stencil = #square-line-circle-space
4633 }
4634
4635 smartSquareLineCircleSpace = {
4636   \squareLineCircleSpace
4637   \override NoteHead.Y-extent =
4638    #(ly:make-unpure-pure-container
4639       ly:grob::stencil-height
4640       (lambda (grob start end) (ly:grob::stencil-height grob)))
4641 }
4642
4643 \new Voice \with { \remove "Stem_engraver" }
4644 \relative c'' {
4645   \squareLineCircleSpace
4646   cis4 ces disis d
4647   \smartSquareLineCircleSpace
4648   cis4 ces disis d
4649 }
4650 @end lilypond
4651
4652 In the first measure, without the unpure-pure container, the spacing
4653 engine does not know the width of the note head and lets it collide with
4654 the accidentals.  In the second measure, with unpure-pure containers,
4655 the spacing engine knows the width of the note heads and avoids the
4656 collision by lengthening the line accordingly.
4657
4658 Usually for simple calculations nearly-identical functions for
4659 both the @q{unpure} and @q{pure} parts can be used, by only
4660 changing the number of arguments passed to, and the scope of, the
4661 function.  This use case is frequent enough that
4662 @code{ly:make-unpure-pure-container} constructs such a second
4663 function by default when called with only one function argument.
4664
4665 @warning{If a function is labeled as @q{pure} and it turns out not to
4666 be, the results can be unexpected.}
4667
4668
4669 @node Uso delle funzioni musicali
4670 @section Uso delle funzioni musicali
4671 @translationof Using music functions
4672
4673 @c TODO -- add @seealso, etc. to these subsections
4674
4675 Where tweaks need to be reused with different music expressions,
4676 it is often convenient to make the tweak part of a @emph{music
4677 function}.  In this section, we discuss only @emph{substitution}
4678 functions, where the object is to substitute a variable into a
4679 piece of LilyPond input code.  Other more complex functions are
4680 described in @rextend{Music functions}.
4681
4682 @menu
4683 * Substitution function syntax::
4684 * Substitution function examples::
4685 @end menu
4686
4687 @node Substitution function syntax
4688 @subsection Substitution function syntax
4689
4690 Making a function that substitutes a variable into LilyPond
4691 code is easy.  The general form of these functions is
4692
4693 @example
4694 function =
4695 #(define-music-function
4696      (@var{arg1} @var{arg2} @dots{})
4697      (@var{type1?} @var{type2?} @dots{})
4698    #@{
4699      @var{@dots{}music@dots{}}
4700    #@})
4701 @end example
4702
4703 @noindent
4704 where
4705
4706 @multitable @columnfractions .33 .66
4707 @item @code{@var{argN}}
4708 @tab @var{n}th argument
4709
4710 @item @code{@var{typeN?}}
4711 @tab a scheme @emph{type predicate} for which @code{@var{argN}}
4712 must return @code{#t}.
4713
4714 @item @code{@var{@dots{}music@dots{}}}
4715 @tab normal LilyPond input, using @code{$} (in places where only
4716 Lilypond constructs are allowed) or @code{#} (to use it as a Scheme
4717 value or music function argument or music inside of music lists) to
4718 reference arguments
4719 (eg. @samp{#arg1}).
4720 @end multitable
4721
4722 The list of type predicates is required.  Some of the most common
4723 type predicates used in music functions are:
4724
4725 @example
4726 boolean?
4727 cheap-list?  @emph{(use instead of }@q{list?}@emph{ for faster processing)}
4728 ly:duration?
4729 ly:music?
4730 ly:pitch?
4731 markup?
4732 number?
4733 pair?
4734 string?
4735 symbol?
4736 @end example
4737
4738 @noindent
4739 For a list of available type predicates, see
4740 @ref{Predefined type predicates}.  User-defined type predicates
4741 are also allowed.
4742
4743 @seealso
4744 Guida alla notazione:
4745 @ref{Predefined type predicates}.
4746
4747 Estendere LilyPond:
4748 @rextend{Music functions}.
4749
4750 File installati:
4751 @file{lily/music-scheme.cc},
4752 @file{scm/c++.scm},
4753 @file{scm/lily.scm}.
4754
4755
4756 @node Substitution function examples
4757 @subsection Substitution function examples
4758
4759 This section introduces some substitution function examples.
4760 These are not intended to be exhaustive, but rather to demonstrate
4761 some of the possibilities of simple substitution functions.
4762
4763 In the first example, a function is defined that simplifies
4764 setting the padding of a TextScript:
4765
4766 @lilypond[quote,verbatim,ragged-right]
4767 padText =
4768 #(define-music-function
4769      (padding)
4770      (number?)
4771    #{
4772      \once \override TextScript.padding = #padding
4773    #})
4774
4775 \relative {
4776   c''4^"piu mosso" b a b
4777   \padText #1.8
4778   c4^"piu mosso" b a b
4779   \padText #2.6
4780   c4^"piu mosso" b a b
4781 }
4782 @end lilypond
4783
4784 In addition to numbers, we can use music expressions such
4785 as notes for arguments to music functions:
4786
4787 @lilypond[quote,verbatim,ragged-right]
4788 custosNote =
4789 #(define-music-function
4790      (note)
4791      (ly:music?)
4792    #{
4793      \tweak NoteHead.stencil #ly:text-interface::print
4794      \tweak NoteHead.text
4795         \markup \musicglyph #"custodes.mensural.u0"
4796      \tweak Stem.stencil ##f
4797      #note
4798    #})
4799
4800 \relative { c'4 d e f \custosNote g }
4801 @end lilypond
4802
4803 @funindex \etc
4804 Both of those functions are simple single expressions where only
4805 the last element of a function call or override is missing.  For
4806 those particular function definitions, there is a simpler
4807 alternative syntax, namely just writing out the constant part of
4808 the expression and replacing its final missing element with
4809 @code{\etc}:
4810
4811 @lilypond[quote,verbatim,ragged-right]
4812 padText =
4813   \once \override TextScript.padding = \etc
4814
4815 \relative {
4816   c''4^"piu mosso" b a b
4817   \padText #1.8
4818   c4^"piu mosso" b a b
4819   \padText #2.6
4820   c4^"piu mosso" b a b
4821 }
4822 @end lilypond
4823
4824 @lilypond[quote,verbatim,ragged-right]
4825 custosNote =
4826   \tweak NoteHead.stencil #ly:text-interface::print
4827   \tweak NoteHead.text
4828      \markup \musicglyph #"custodes.mensural.u0"
4829   \tweak Stem.stencil ##f
4830   \etc
4831
4832 \relative { c'4 d e f \custosNote g }
4833 @end lilypond
4834
4835
4836 Substitution functions with multiple arguments can be defined:
4837
4838 @lilypond[quote,verbatim,ragged-right]
4839 tempoPadded =
4840 #(define-music-function
4841      (padding tempotext)
4842      (number? markup?)
4843    #{
4844      \once \override Score.MetronomeMark.padding = #padding
4845      \tempo \markup { \bold #tempotext }
4846    #})
4847
4848 \relative {
4849   \tempo \markup { "Low tempo" }
4850   c''4 d e f g1
4851   \tempoPadded #4.0 "High tempo"
4852   g4 f e d c1
4853 }
4854 @end lilypond
4855
4856 @c TODO: add appropriate @@ref's here.
4857