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