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