]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/notation/changing-defaults.itely
Issue 5141: Fix typos in \offset documentation
[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 bracket piece on the first line is effectively untouched
2787 since @code{0} is added to its default value of @code{staff-padding}.
2788 The segment on the second line is raised three staff-spaces from its
2789 default height.  The default height happens to be @code{2}, though it is
2790 not necessary to know this to achieve the desired positioning.
2791
2792 @lilypond[quote,verbatim]
2793 {
2794   \offset staff-padding #'(0 3) Staff.OttavaBracket
2795   \ottava #1
2796   c'''2 c'''
2797   \break
2798   c'''2 c'''
2799 }
2800 @end lilypond
2801
2802 The following example mimics the effect of the @code{\shape} command by
2803 offsetting the @code{control-points} property of the @code{Slur} object.
2804 Here, @var{offsets} is a list of @code{number-pair-list}s, one for each
2805 slur segment.  This example achieves a result identical to the
2806 corresponding illustration at @ref{Modifying shapes}.
2807
2808 @lilypond[quote,verbatim]
2809 {
2810   c'4-\offset control-points #'(
2811                ((0 . 0) (0 . 0) (0 . 0) (0 . 1))
2812                ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5))
2813               ) ( f'4 g' c''
2814   \break
2815   d'4 c'' f' c')
2816 }
2817 @end lilypond
2818
2819
2820 @node Modifying alists
2821 @subsection Modifying alists
2822
2823 Some user-configurable properties are internally represented as
2824 @emph{alists} (association lists), which store pairs of
2825 @emph{keys} and @emph{values}.  The structure of an alist is:
2826
2827 @example
2828 '((@var{key1} . @var{value1})
2829   (@var{key2} . @var{value2})
2830   (@var{key3} . @var{value3})
2831   @dots{})
2832 @end example
2833
2834 If an alist is a grob property or @code{\paper} variable, its keys
2835 can be modified individually without affecting other keys.
2836
2837 For example, to reduce the space between adjacent staves in a
2838 staff-group, use the @code{staff-staff-spacing} property of the
2839 @code{StaffGrouper} grob.  The property is an alist with four
2840 keys: @code{basic-distance}, @code{minimum-distance},
2841 @code{padding}, and @code{stretchability}.  The standard settings
2842 for this property are listed in the @qq{Backend} section of the
2843 Internals Reference (see @rinternals{StaffGrouper}):
2844
2845 @example
2846 '((basic-distance . 9)
2847   (minimum-distance . 7)
2848   (padding . 1)
2849   (stretchability . 5))
2850 @end example
2851
2852 One way to bring the staves closer together is by reducing the
2853 value of the @code{basic-distance} key (@code{9}) to match the
2854 value of @code{minimum-distance} (@code{7}).  To modify a single
2855 key individually, use a @emph{nested declaration}:
2856
2857 @lilypond[quote,verbatim]
2858 % default space between staves
2859 \new PianoStaff <<
2860   \new Staff { \clef treble c''1 }
2861   \new Staff { \clef bass   c1   }
2862 >>
2863
2864 % reduced space between staves
2865 \new PianoStaff \with {
2866   % this is the nested declaration
2867   \override StaffGrouper.staff-staff-spacing.basic-distance = #7
2868 } <<
2869   \new Staff { \clef treble c''1 }
2870   \new Staff { \clef bass   c1   }
2871 >>
2872 @end lilypond
2873
2874 Using a nested declaration will update the specified key (such as
2875 @code{basic-distance} in the above example) without altering any
2876 other keys already set for the same property.
2877
2878 Now suppose we want the staves to be as close as possible without
2879 overlapping.  The simplest way to do this is to set all four alist
2880 keys to zero.  However, it is not necessary to enter four nested
2881 declarations, one for each key.  Instead, the property can be
2882 completely re-defined with one declaration, as an alist:
2883
2884 @lilypond[quote,verbatim]
2885 \new PianoStaff \with {
2886   \override StaffGrouper.staff-staff-spacing =
2887     #'((basic-distance . 0)
2888        (minimum-distance . 0)
2889        (padding . 0)
2890        (stretchability . 0))
2891 } <<
2892   \new Staff { \clef treble c''1 }
2893   \new Staff { \clef bass   c1   }
2894 >>
2895 @end lilypond
2896
2897 Note that any keys not explicitly listed in the alist definition
2898 will be reset to their @emph{default-when-unset} values.  In the
2899 case of @code{staff-staff-spacing}, any unset key-values would be
2900 reset to zero (except @code{stretchability}, which takes the value
2901 of @code{basic-distance} when unset).  Thus the following two
2902 declarations are equivalent:
2903
2904 @example
2905 \override StaffGrouper.staff-staff-spacing =
2906   #'((basic-distance . 7))
2907
2908 \override StaffGrouper.staff-staff-spacing =
2909   #'((basic-distance . 7)
2910      (minimum-distance . 0)
2911      (padding . 0)
2912      (stretchability . 7))
2913 @end example
2914
2915 One (possibly unintended) consequence of this is the removal of
2916 any standard settings that are set in an initialization file and
2917 loaded each time an input file is compiled.  In the above example,
2918 the standard settings for @code{padding} and
2919 @code{minimum-distance} (defined in @file{scm/define-grobs.scm})
2920 are reset to their default-when-unset values (zero for both keys).
2921 Defining a property or variable as an alist (of any size) will
2922 always reset all unset key-values to their default-when-unset
2923 values.  Unless this is the intended result, it is safer to update
2924 key-values individually with a nested declaration.
2925
2926 @warning{Nested declarations will not work for context property
2927 alists (such as @code{beamExceptions}, @code{keyAlterations},
2928 @code{timeSignatureSettings}, etc.).  These properties can only be
2929 modified by completely re-defining them as alists.}
2930
2931
2932 @node Useful concepts and properties
2933 @section Useful concepts and properties
2934
2935
2936 @menu
2937 * Input modes::
2938 * Direction and placement::
2939 * Distances and measurements::
2940 * Dimensions::
2941 * Staff symbol properties::
2942 * Spanners::
2943 * Visibility of objects::
2944 * Line styles::
2945 * Rotating objects::
2946 @end menu
2947
2948 @node Input modes
2949 @subsection Input modes
2950
2951 The way in which the notation contained within an input file is
2952 interpreted is determined by the current input mode.  In general,
2953 there are two ways of specifying the mode: a long form, e.g.
2954 @code{\chordmode}, and a short form, e.g. @code{\chords}.  The long
2955 form is typically used when supplying input to a variable or when
2956 entering input directly into an explicitly created context.  The short
2957 form implicitly creates a context of the correct type for the input and
2958 passes the input directly to it.  It is useful in simple situations
2959 when there is no requirement to explicitly create the receiving context.
2960
2961 @subsubsubheading Chord mode
2962
2963 This is activated with the @code{\chordmode} command, and causes
2964 input to be interpreted with the syntax of chord notation, see
2965 @ref{Chord notation}.  Music in chord mode is rendered as chords on a staff
2966 when entered into a @code{Staff} context, as chord names when entered
2967 into a @code{ChordNames} context or as fret boards when entered into
2968 a @code{FretBoards} context.
2969
2970 Chord mode is also activated with the @code{\chords} command.  This
2971 also causes the following input to be interpreted with the syntax of
2972 chord notation but in addition it implicitly creates a new
2973 @code{ChordNames} context and renders the input into it as chord names,
2974 see @ref{Printing chord names}.
2975
2976 @subsubsubheading Drum mode
2977
2978 This is activated with the @code{\drummode} command, and causes
2979 input to be interpreted with the syntax of drum notation, see
2980 @ref{Basic percussion notation}.  Music in drum mode is rendered as
2981 percussion notes when entered into a @code{DrumStaff} context.
2982
2983 Drum mode is also activated with the @code{\drums} command.  This
2984 also causes the following input to be interpreted with the syntax of
2985 drum notation but in addition it implicitly creates a new
2986 @code{DrumStaff} context and renders the input into it as percussion
2987 notes, see @ref{Basic percussion notation}.
2988
2989 @subsubsubheading Figure mode
2990
2991 This is activated with the @code{\figuremode} command, and causes
2992 input to be interpreted with the syntax of figured bass, see
2993 @ref{Entering figured bass}.  Music in figure mode is rendered as
2994 figured bass when entered into a @code{FiguredBass} context or a
2995 @code{Staff} context.
2996
2997 Figure mode is also activated with the @code{\figures} command.
2998 This also causes the following input to be interpreted with the
2999 figured bass syntax but in addition it implicitly creates a new
3000 @code{FiguredBass} context and renders the input into it as figured
3001 bass, see @ref{Introduction to figured bass}.
3002
3003 @subsubsubheading Fret and tab modes
3004
3005 There are no special input modes for entering fret and tab symbols.
3006
3007 To create tab diagrams, enter notes or chords in note mode and
3008 render them in a @code{TabStaff} context, see
3009 @ref{Default tablatures}.
3010
3011 To create fret diagrams above a staff, enter notes or chords in either
3012 note mode or chord mode and render them in a @code{FretBoards} context,
3013 see @ref{Automatic fret diagrams}.  Alternatively, fret diagrams can be
3014 entered as markup above the notes using the @code{\fret-diagram}
3015 command, see @ref{Fret diagram markups}.
3016
3017 @subsubsubheading Lyrics mode
3018
3019 This is activated with the @code{\lyricmode} command, and causes
3020 input to be interpreted as lyric syllables with optional durations
3021 and associated lyric modifiers, see @ref{Vocal music}.  Input in
3022 lyric mode is rendered as lyric syllables when entered into a
3023 @code{Lyrics} context.
3024
3025 Lyric mode is also activated with the @code{\lyrics} command.  This
3026 also causes the following input to be interpreted as lyric syllables
3027 but in addition it implicitly creates a new @code{Lyrics} context and
3028 renders the input into it as lyric syllables.
3029
3030 Lyric mode is also activated with the @code{\addlyrics} command.  This
3031 also implicitly creates a new @code{Lyrics} context and in addition it
3032 adds an implicit @code{\lyricsto} command which associates the following
3033 lyrics with the preceding music, see @ref{Automatic syllable durations}.
3034
3035 @subsubsubheading Markup mode
3036
3037 This is activated with the @code{\markup} command, and causes
3038 input to be interpreted with the syntax of markup, see
3039 @ref{Text markup commands}.
3040
3041 @subsubsubheading Note mode
3042
3043 This is the default mode or it may be activated with the
3044 @code{\notemode} command.  Input is interpreted as pitches,
3045 durations, markup, etc and typeset as musical notation on a staff.
3046
3047 It is not normally necessary to specify note mode explicitly, but
3048 it may be useful to do so in certain situations, for example if you
3049 are in lyric mode, chord mode or any other mode and want to insert
3050 something that only can be done with note mode syntax.
3051
3052
3053 @node Direction and placement
3054 @subsection Direction and placement
3055
3056 In typesetting music the direction and placement of many items is
3057 a matter of choice.  For example, the stems of notes can
3058 be directed up or down; lyrics, dynamics, and other expressive
3059 marks may be placed above or below the staff; text may be aligned
3060 left, right or center; etc.  Most of these choices may be left to
3061 be determined automatically by LilyPond, but in some cases it may
3062 be desirable to force a particular direction or placement.
3063
3064 @menu
3065 * Articulation direction indicators::
3066 * The direction property::
3067 @end menu
3068
3069
3070 @node Articulation direction indicators
3071 @unnumberedsubsubsec Articulation direction indicators
3072
3073 By default some directions are always up or always down (e.g.,
3074 dynamics or fermata), while other things can alternate between
3075 up or down based on the stem direction (like slurs or accents).
3076
3077 @c TODO Add table showing these
3078
3079 The default action may be overridden by prefixing the articulation
3080 by a @emph{direction indicator}.  Three direction indicators are
3081 available: @code{^} (meaning @qq{up}), @code{_} (meaning @qq{down})
3082 and @code{-} (meaning @qq{use default direction}).  The direction
3083 indicator can usually be omitted, in which case @code{-} is assumed,
3084 but a direction indicator is @strong{always} required before
3085
3086 @itemize
3087 @item @code{\tweak} commands
3088 @item @code{\markup} commands
3089 @item @code{\tag} commands
3090 @item string markups, e.g., -"string"
3091 @item fingering instructions, e.g., @w{@code{-1}}
3092 @item articulation shortcuts, e.g., @w{@code{-.}}, @w{@code{->}}, @w{@code{--}}
3093 @end itemize
3094
3095 Direction indicators affect only the next note:
3096
3097 @lilypond[verbatim,quote]
3098 \relative {
3099   c''2( c)
3100   c2_( c)
3101   c2( c)
3102   c2^( c)
3103 }
3104 @end lilypond
3105
3106
3107 @node The direction property
3108 @unnumberedsubsubsec The direction property
3109
3110 The position or direction of many layout objects is controlled by the
3111 @code{direction} property.
3112
3113 The value of the @code{direction} property may be set to @code{1},
3114 meaning @qq{up} or @qq{above}, or to @w{@code{-1}}, meaning @qq{down} or
3115 @qq{below}.  The symbols @code{UP} and @code{DOWN} may be used instead
3116 of @code{1} and @w{@code{-1}} respectively.  The default direction may
3117 be specified by setting @code{direction} to @code{0} or @code{CENTER}.
3118 Alternatively, in many cases predefined commands exist to specify the
3119 direction.  These are of the form
3120
3121 @example
3122 \xxxUp, \xxxDown or \xxxNeutral
3123 @end example
3124
3125 @noindent
3126 where @code{\xxxNeutral} means @qq{use the default} direction.
3127 See @rlearning{Within-staff objects}.
3128
3129 In a few cases, arpeggio for example, the value of the @code{direction}
3130 property can specify whether the object is to be placed to the right or
3131 left of the parent.  In this case @w{@code{-1}} or @code{LEFT} means
3132 @qq{to the left} and @code{1} or @code{RIGHT} means @qq{to the right}.
3133 @code{0} or @code{CENTER} means @qq{use the default} direction.
3134
3135 @ignore
3136 These all have side-axis set to #X
3137 AmbitusAccidental - direction has no effect
3138 Arpeggio - works
3139 StanzaNumber - not tried
3140 TrillPitchAccidental - not tried
3141 TrillPitchGroup - not tried
3142 @end ignore
3143
3144 These indications affect all notes until they are canceled.
3145
3146 @lilypond[verbatim,quote]
3147 \relative {
3148   c''2( c)
3149   \slurDown
3150   c2( c)
3151   c2( c)
3152   \slurNeutral
3153   c2( c)
3154 }
3155 @end lilypond
3156
3157 In polyphonic music, it is generally better to specify an explicit
3158 @code{voice} than change an object's direction.  For more information,
3159 see @ref{Multiple voices}.
3160
3161 @seealso
3162 Learning Manual:
3163 @rlearning{Within-staff objects}.
3164
3165 Notation Reference:
3166 @ref{Multiple voices}.
3167
3168
3169 @node Distances and measurements
3170 @subsection Distances and measurements
3171
3172 @cindex distances, absolute
3173 @cindex distances, scaled
3174
3175 @funindex \mm
3176 @funindex \cm
3177 @funindex \in
3178 @funindex \pt
3179
3180 Distances in LilyPond are of two types: absolute and scaled.
3181
3182 Absolute distances are used for specifying margins, indents, and
3183 other page layout details, and are by default specified in
3184 millimeters.  Distances may be specified in other units by
3185 following the quantity by @code{\mm}, @code{\cm},
3186 @code{\in}@tie{}(inches), or @code{\pt}@tie{}(points, 1/72.27 of
3187 an inch).  Page layout distances can also be specified in scalable
3188 units (see the following paragraph) by appending
3189 @code{\staff-space} to the quantity.  Page layout is described in
3190 detail in @ref{Page layout}.
3191
3192 Scaled distances are always specified in units of the staff-space
3193 or, rarely, the half staff-space.  The staff-space is the distance
3194 between two adjacent staff lines.  The default value can be changed
3195 globally by setting the global staff size, or it can be overridden
3196 locally by changing the @code{staff-space} property of
3197 @code{StaffSymbol}.  Scaled distances automatically scale with any
3198 change to the either the global staff size or the
3199 @code{staff-space} property of @code{StaffSymbol}, but fonts scale
3200 automatically only with changes to the global staff size.
3201 The global staff size thus enables the overall size of a rendered
3202 score to be easily varied.  For the methods of setting the global
3203 staff size see @ref{Setting the staff size}.
3204
3205 @funindex magstep
3206
3207 If just a section of a score needs to be rendered to a different
3208 scale, for example an ossia section or a footnote, the global staff
3209 size cannot simply be changed as this would affect the entire score.
3210 In such cases the change in size is made by overriding both the
3211 @code{staff-space} property of @code{StaffSymbol} and the size of
3212 the fonts.  A Scheme function, @code{magstep}, is available to
3213 convert from a font size change to the equivalent change in
3214 @code{staff-space}.  For an explanation and an example of its use,
3215 see @rlearning{Length and thickness of objects}.
3216
3217 @seealso
3218 Learning Manual:
3219 @rlearning{Length and thickness of objects}.
3220
3221 Notation Reference:
3222 @ref{Page layout},
3223 @ref{Setting the staff size}.
3224
3225
3226 @node Dimensions
3227 @subsection Dimensions
3228
3229 @cindex dimensions
3230 @cindex bounding box
3231
3232 The dimensions of a graphical object specify the positions of the left
3233 and right edges and the bottom and top edges of the objects' bounding
3234 box as distances from the objects' reference point in units of
3235 staff-spaces.  These positions are usually coded as two Scheme pairs.
3236 For example, the text markup command @code{\with-dimensions} takes
3237 three arguments, the first two of which are a Scheme pair giving the
3238 left and right edge positions and a Scheme pair giving the bottom and
3239 top edge positions:
3240
3241 @example
3242 \with-dimensions #'(-5 . 10) #'(-3 . 15) @var{arg}
3243 @end example
3244
3245 This specifies a bounding box for @var{arg} with its left edge at -5,
3246 its right edge at 10, its bottom edge at -3 and its top edge at 15,
3247 all measured from the objects' reference point in units of
3248 staff-spaces.
3249
3250 @seealso
3251 Notation Reference:
3252 @ref{Distances and measurements}.
3253
3254
3255 @node Staff symbol properties
3256 @subsection Staff symbol properties
3257
3258 @cindex adjusting staff symbol
3259 @cindex drawing staff symbol
3260 @cindex staff symbol, setting of
3261
3262 @c TODO Extend or remove this section.  See also NR 1.6.2 Staff symbol
3263 @c      Need to think of uses for these properties.  Eg 'line-positions
3264 @c      is used in a snippet to thicken centre line.
3265 @c      If retained, add @ref to here in 1.6.2  -td
3266
3267 The vertical position of staff lines and the number of staff lines
3268 can be defined at the same time.  As the following example shows,
3269 note positions are not influenced by the staff line positions.
3270
3271 @warning{The @code{'line-positions} property overrides the
3272 @code{'line-count} property.  The number of staff lines is
3273 implicitly defined by the number of elements in the list of values
3274 for @code{'line-positions}.}
3275
3276 @lilypond[verbatim,quote]
3277 \new Staff \with {
3278   \override StaffSymbol.line-positions = #'(7 3 0 -4 -6 -7)
3279 }
3280 \relative { a4 e' f b | d1 }
3281 @end lilypond
3282
3283 The width of a staff can be modified.  The units are staff
3284 spaces.  The spacing of objects inside the staff is not affected by
3285 this setting.
3286
3287 @lilypond[verbatim,quote]
3288 \new Staff \with {
3289   \override StaffSymbol.width = #23
3290 }
3291 \relative { a4 e' f b | d1 }
3292 @end lilypond
3293
3294
3295 @node Spanners
3296 @subsection Spanners
3297
3298 Many objects of musical notation extend over several notes or even
3299 several bars.  Examples are slurs, beams, tuplet brackets, volta
3300 repeat brackets, crescendi, trills, and glissandi.  Such objects
3301 are collectively called @qq{spanners}, and have special properties to control
3302 their appearance and behaviour.  Some of these properties are common
3303 to all spanners; others are restricted to a sub-set of the spanners.
3304
3305 All spanners support the @code{spanner-interface}.  A few, essentially
3306 those that draw a straight line between the two objects, support in
3307 addition the @code{line-spanner-interface}.
3308
3309 @menu
3310 * Using the spanner-interface::
3311 * Using the line-spanner-interface::
3312 @end menu
3313
3314 @node Using the spanner-interface
3315 @unnumberedsubsubsec Using the @code{spanner-interface}
3316
3317 This interface provides two properties that apply to several spanners.
3318
3319 @subsubsubheading The @code{minimum-length} property
3320
3321 The minimum length of the spanner is specified by the
3322 @code{minimum-length} property.  Increasing this usually has the
3323 necessary effect of increasing the spacing of the notes between the
3324 two end points.  However, this override has no effect on
3325 many spanners, as their length is determined by other considerations.
3326 A few examples where it is effective are shown below.
3327
3328 @ignore
3329 Works for:
3330   Tie
3331   MultiMeasureRest
3332   Hairpin
3333   Slur
3334   PhrasingSlur
3335
3336 Works as long as callback is made:
3337   Glissando
3338   Beam
3339
3340 Works not at all for:
3341   LyricSpace
3342   LyricHyphen
3343   LyricExtender
3344   TextSpanner
3345   System
3346
3347 @end ignore
3348
3349 @lilypond[verbatim,quote,fragment]
3350 a'~ a'
3351 a'
3352 % increase the length of the tie
3353 -\tweak minimum-length #5
3354 ~ a'
3355 @end lilypond
3356
3357 @lilypond[verbatim,quote]
3358 \relative \compressMMRests {
3359   a'1
3360   R1*23
3361   % increase the length of the rest bar
3362   \once \override MultiMeasureRest.minimum-length = #20
3363   R1*23
3364   a1
3365 }
3366 @end lilypond
3367
3368 @lilypond[verbatim,quote]
3369 \relative {
3370   a' \< a a a \!
3371   % increase the length of the hairpin
3372   \override Hairpin.minimum-length = #20
3373   a \< a a a \!
3374 }
3375 @end lilypond
3376
3377 This override can also be used to increase the length of slurs and
3378 phrasing slurs:
3379
3380 @lilypond[verbatim,quote]
3381 \relative {
3382   a'( g)
3383   a
3384   -\tweak minimum-length #5
3385   ( g)
3386
3387   a\( g\)
3388   a
3389   -\tweak minimum-length #5
3390   \( g\)
3391 }
3392 @end lilypond
3393
3394 For some layout objects, the @code{minimum-length} property becomes
3395 effective only if the @code{set-spacing-rods} procedure is called
3396 explicitly.  To do this, the @code{springs-and-rods} property should
3397 be set to @code{ly:spanner::set-spacing-rods}.  For example,
3398 the minimum length of a glissando has no effect unless the
3399 @code{springs-and-rods} property is set:
3400
3401 @lilypond[verbatim,fragment,quote]
3402 % default
3403 e' \glissando c''
3404
3405 % not effective alone
3406 \once \override Glissando.minimum-length = #20
3407 e' \glissando c''
3408
3409 % effective only when both overrides are present
3410 \once \override Glissando.minimum-length = #20
3411 \once \override Glissando.springs-and-rods = #ly:spanner::set-spacing-rods
3412 e' \glissando c''
3413 @end lilypond
3414
3415 The same is true of the @code{Beam} object:
3416
3417 @lilypond[verbatim,fragment,quote]
3418 % not effective alone
3419 \once \override Beam.minimum-length = #20
3420 e'8 e' e' e'
3421
3422 % effective only when both overrides are present
3423 \once \override Beam.minimum-length = #20
3424 \once \override Beam.springs-and-rods = #ly:spanner::set-spacing-rods
3425 e'8 e' e' e'
3426 @end lilypond
3427
3428 @subsubsubheading The @code{to-barline} property
3429
3430 The second useful property of the @code{spanner-interface} is
3431 @code{to-barline}.  By default this is true, causing hairpins and
3432 other spanners which are terminated on the first note of a measure to
3433 end instead on the immediately preceding bar line.  If set to false,
3434 the spanner will extend beyond the bar line and end on the note
3435 itself:
3436
3437 @lilypond[verbatim,quote]
3438 \relative {
3439   a' \< a a a a \! a a a \break
3440   \override Hairpin.to-barline = ##f
3441   a \< a a a a \! a a a
3442 }
3443 @end lilypond
3444
3445 This property is not effective for all spanners.  For example,
3446 setting it to @code{#t} has no effect on slurs or phrasing slurs
3447 or on other spanners for which terminating on the bar line would
3448 not be meaningful.
3449
3450 @node Using the line-spanner-interface
3451 @unnumberedsubsubsec Using the @code{line-spanner-interface}
3452
3453 Objects which support the @code{line-spanner-interface} include
3454
3455 @itemize
3456 @item @code{DynamicTextSpanner}
3457 @item @code{Glissando}
3458 @item @code{TextSpanner}
3459 @item @code{TrillSpanner}
3460 @item @code{VoiceFollower}
3461 @end itemize
3462
3463 The routine responsible for drawing the stencils for these spanners is
3464 @code{ly:line-spanner::print}.  This routine determines the
3465 exact location of the two end points and draws a line
3466 between them, in the style requested.  The locations of the two
3467 end points of the spanner are computed on-the-fly, but it is
3468 possible to override their Y-coordinates.  The
3469 properties which need to be specified are nested
3470 two levels down within the property hierarchy, but the syntax of
3471 the @code{\override} command is quite simple:
3472
3473 @lilypond[quote,fragment,verbatim]
3474 e''2 \glissando b'
3475 \once \override Glissando.bound-details.left.Y = #3
3476 \once \override Glissando.bound-details.right.Y = #-2
3477 e''2 \glissando b'
3478 @end lilypond
3479
3480 The units for the @code{Y} property are @code{staff-space}s,
3481 with the center line of the staff being the zero point.
3482 For the glissando, this is the value for @code{Y} at the
3483 X-coordinate corresponding to the center point of each note head,
3484 if the line is imagined to be extended to there.
3485
3486 If @code{Y} is not set, the value is computed from the vertical
3487 position of the corresponding attachment point of the spanner.
3488
3489 In case of a line break, the values for the end points are
3490 specified by the @code{left-broken} and @code{right-broken}
3491 sub-lists of @code{bound-details}.  For example:
3492
3493 @lilypond[ragged-right,fragment,verbatim,quote]
3494 \override Glissando.breakable = ##t
3495 \override Glissando.bound-details.right-broken.Y = #-3
3496 c''1 \glissando \break
3497 f''1
3498 @end lilypond
3499
3500
3501 A number of further properties of the @code{left} and
3502 @code{right} sub-lists of the @code{bound-details} property
3503 may be modified in the same way as @code{Y}:
3504
3505 @table @code
3506 @item Y
3507 This sets the Y-coordinate of the end point, in @code{staff-space}s
3508 offset from the staff center line.  By default, it is the center of
3509 the bound object, so a glissando points to the vertical center of
3510 the note head.
3511
3512 For horizontal spanners, such as text spanners and trill spanners,
3513 it is hardcoded to 0.
3514
3515 @item attach-dir
3516 This determines where the line starts and ends in the X-direction,
3517 relative to the bound object.  So, a value of @w{@code{-1}} (or
3518 @code{LEFT}) makes the line start/end at the left side of the note
3519 head it is attached to.
3520
3521 @item X
3522 This is the absolute X-coordinate of the end point.  It is usually
3523 computed on the fly, and overriding it has little useful effect.
3524
3525 @item stencil
3526 Line spanners may have symbols at the beginning or end, which is
3527 contained in this sub-property.  This is for internal use; it is
3528 recommended that @code{text} be used instead.
3529
3530 @item text
3531 This is a markup that is evaluated to yield the stencil.  It is used
3532 to put @i{cresc.}, @i{tr} and other text on horizontal spanners.
3533
3534 @lilypond[quote,ragged-right,fragment,verbatim]
3535 \override TextSpanner.bound-details.left.text
3536    = \markup { \small \bold Slower }
3537 \relative { c''2\startTextSpan b c a\stopTextSpan }
3538 @end lilypond
3539
3540 @item stencil-align-dir-y
3541 @item stencil-offset
3542 Without setting one of these, the stencil is simply put at the
3543 end-point, centered on the line, as defined by the @code{X} and
3544 @code{Y} sub-properties.  Setting either @code{stencil-align-dir-y}
3545 or @code{stencil-offset} will move the symbol at the edge vertically
3546 relative to the end point of the line:
3547
3548 @lilypond[quote,fragment,verbatim]
3549 \override TextSpanner.bound-details.left.stencil-align-dir-y = #-2
3550 \override TextSpanner.bound-details.right.stencil-align-dir-y = #UP
3551
3552 \override TextSpanner.bound-details.left.text = #"ggg"
3553 \override TextSpanner.bound-details.right.text = #"hhh"
3554
3555 \relative { c'4^\startTextSpan c c c \stopTextSpan }
3556 @end lilypond
3557
3558 Note that negative values move the text @emph{up}, contrary to the
3559 effect that might be expected, as a value of @w{@code{-1}} or
3560 @code{DOWN} means align the @emph{bottom} edge of the text with
3561 the spanner line.  A value of @code{1} or @code{UP} aligns
3562 the top edge of the text with the spanner line.
3563
3564 @item arrow
3565 Setting this sub-property to @code{#t} produces an arrowhead at the
3566 end-points of the line.
3567
3568 @item padding
3569 This sub-property controls the space between the specified
3570 end point of the line and the actual end.  Without padding, a
3571 glissando would start and end in the center of each note head.
3572
3573 @end table
3574
3575 The music function @code{\endSpanners} terminates the spanner
3576 which starts on the immediately following note prematurely.  It
3577 is terminated after exactly one note, or at the following bar line
3578 if @code{to-barline} is true and a bar line occurs before the next
3579 note.
3580
3581 @lilypond[verbatim,quote,ragged-right]
3582 \relative c'' {
3583   \endSpanners
3584   c2 \startTextSpan c2 c2
3585   \endSpanners
3586   c2 \< c2 c2
3587 }
3588 @end lilypond
3589
3590 When using @code{\endSpanners} it is not necessary to close
3591 \startTextSpan with \stopTextSpan, nor is it necessary to close
3592 hairpins with @code{\!}.
3593
3594 @seealso
3595 Internals Reference:
3596 @rinternals{TextSpanner},
3597 @rinternals{Glissando},
3598 @rinternals{VoiceFollower},
3599 @rinternals{TrillSpanner},
3600 @rinternals{line-spanner-interface}.
3601
3602
3603 @node Visibility of objects
3604 @subsection Visibility of objects
3605
3606 @cindex objects, visibility of
3607 @cindex grobs, visibility of
3608 @cindex visibility of objects
3609
3610 There are four main ways in which the visibility of layout objects
3611 can be controlled: their stencil can be removed, they can be made
3612 transparent, they can be colored white, or their
3613 @code{break-visibility} property can be overridden.  The first
3614 three apply to all layout objects; the last to just a few -- the
3615 @emph{breakable} objects.  The Learning Manual introduces these
3616 four techniques, see @rlearning{Visibility and color of objects}.
3617
3618 There are also a few other techniques which are specific to
3619 certain layout objects.  These are covered under Special
3620 considerations.
3621
3622 @menu
3623 * Removing the stencil::
3624 * Making objects transparent::
3625 * Painting objects white::
3626 * Using break-visibility::
3627 * Special considerations::
3628 @end menu
3629
3630
3631 @node Removing the stencil
3632 @unnumberedsubsubsec Removing the stencil
3633
3634 @cindex stencil, removing
3635 @funindex \omit
3636
3637 Every layout object has a stencil property.  By default this is set
3638 to the specific function which draws that object.  If this property
3639 is overridden to @code{#f} no function will be called and the object
3640 will not be drawn.  The default action can be recovered with
3641 @code{\revert}.
3642
3643 @lilypond[quote,fragment,verbatim]
3644 a1 a
3645 \override Score.BarLine.stencil = ##f
3646 a a
3647 \revert Score.BarLine.stencil
3648 a a a
3649 @end lilypond
3650
3651 This rather common operation has a shortcut @code{\omit}:
3652
3653 @lilypond[quote,fragment,verbatim]
3654 a1 a
3655 \omit Score.BarLine
3656 a a
3657 \undo \omit Score.BarLine
3658 a a a
3659 @end lilypond
3660
3661 @node Making objects transparent
3662 @unnumberedsubsubsec Making objects transparent
3663
3664 @cindex transparent, making objects
3665 @funindex \hide
3666
3667 Every layout object has a transparent property which by default is
3668 set to @code{#f}.  If set to @code{#t} the object still occupies
3669 space but is made invisible.
3670
3671 @lilypond[quote,fragment,verbatim]
3672 a'4 a'
3673 \once \override NoteHead.transparent = ##t
3674 a' a'
3675 @end lilypond
3676
3677 This rather common operation has a shortcut @code{\hide}:
3678
3679 @lilypond[quote,fragment,verbatim]
3680 a'4 a'
3681 \once \hide NoteHead
3682 a' a'
3683 @end lilypond
3684
3685 @node Painting objects white
3686 @unnumberedsubsubsec Painting objects white
3687
3688 @cindex objects, coloring
3689 @cindex coloring objects
3690 @cindex layers
3691 @cindex printing order
3692 @cindex overwriting objects
3693 @cindex objects, overwriting
3694 @cindex grobs, overwriting
3695
3696 Every layout object has a color property which by default is set
3697 to @code{black}.  If this is overridden to @code{white} the object
3698 will be indistinguishable from the white background.  However,
3699 if the object crosses other objects the color of the crossing
3700 points will be determined by the order in which they are drawn,
3701 and this may leave a ghostly image of the white object, as shown
3702 here:
3703
3704 @lilypond[quote,fragment,verbatim]
3705 \override Staff.Clef.color = #white
3706 a'1
3707 @end lilypond
3708
3709 This may be avoided by changing the order of printing the objects.
3710 All layout objects have a @code{layer} property which should be set
3711 to an integer.  Objects with the lowest value of @code{layer} are
3712 drawn first, then objects with progressively higher values are drawn,
3713 so objects with higher values overwrite objects with lower values.
3714 By default most objects are assigned a @code{layer} value of
3715 @code{1}, although a few objects, including @code{StaffSymbol} and
3716 @code{BarLine}, are assigned a value of @code{0}.  The order of
3717 printing objects with the same value of @code{layer} is indeterminate.
3718
3719 In the example above the white clef, with a default @code{layer}
3720 value of @code{1}, is drawn after the staff lines (default
3721 @code{layer} value @code{0}), so overwriting them.  To change this,
3722 the @code{Clef} object must be given in a lower value of
3723 @code{layer}, say @w{@code{-1}}, so that it is drawn earlier:
3724
3725 @lilypond[quote,fragment,verbatim]
3726 \override Staff.Clef.color = #white
3727 \override Staff.Clef.layer = #-1
3728 a'1
3729 @end lilypond
3730
3731 @node Using break-visibility
3732 @unnumberedsubsubsec Using break-visibility
3733
3734 @c TODO Add making other objects breakable
3735
3736 @cindex break-visibility
3737
3738 Most layout objects are printed only once, but some like
3739 bar lines, clefs, time signatures and key signatures, may need
3740 to be printed twice when a line break occurs -- once at the end
3741 of the line and again at the start of the next line.  Such
3742 objects are called @emph{breakable}, and have a property, the
3743 @code{break-visibility} property to control their visibility
3744 at the three positions in which they may appear -- at the
3745 start of a line, within a line if they are changed, and at the
3746 end of a line if a change takes place there.
3747
3748 For example, the time signature
3749 by default will be printed at the start of the first line, but
3750 nowhere else unless it changes, when it will be printed at the
3751 point at which the change occurs.  If this change occurs at the
3752 end of a line the new time signature will be printed at the start
3753 of the next line and a cautionary time signature will be printed
3754 at the end of the previous line as well.
3755
3756 This behaviour is controlled by the @code{break-visibility}
3757 property, which is explained in
3758 @c Leave this ref on a newline - formats incorrectly otherwise -td
3759 @rlearning{Visibility and color of objects}.  This property takes
3760 a vector of three booleans which, in order, determine whether the
3761 object is printed at the end of, within the body of, or at the
3762 beginning of a line.  Or to be more precise, before a line break,
3763 where there is no line break, or after a line break.
3764
3765 Alternatively, these eight combinations may be specified
3766 by pre-defined functions, defined in @file{scm/output-lib.scm},
3767 where the last three columns indicate whether the layout objects
3768 will be visible in the positions shown at the head of the columns:
3769
3770 @multitable {@code{begin-of-line-invisible}} {@code{#(#t #t #t)}} {Before} {At no} {After}
3771 @headitem Function                   @tab Vector                 @tab Before @tab At no    @tab After
3772 @headitem form                       @tab form                   @tab break  @tab break    @tab break
3773
3774 @item @code{all-visible}             @tab @code{#(#t #t #t)}     @tab yes    @tab yes      @tab yes
3775 @item @code{begin-of-line-visible}   @tab @code{#(#f #f #t)}     @tab no     @tab no       @tab yes
3776 @item @code{center-visible}          @tab @code{#(#f #t #f)}     @tab no     @tab yes      @tab no
3777 @item @code{end-of-line-visible}     @tab @code{#(#t #f #f)}     @tab yes    @tab no       @tab no
3778 @item @code{begin-of-line-invisible} @tab @code{#(#t #t #f)}     @tab yes    @tab yes      @tab no
3779 @item @code{center-invisible}        @tab @code{#(#t #f #t)}     @tab yes    @tab no       @tab yes
3780 @item @code{end-of-line-invisible}   @tab @code{#(#f #t #t)}     @tab no     @tab yes      @tab yes
3781 @item @code{all-invisible}           @tab @code{#(#f #f #f)}     @tab no     @tab no       @tab no
3782 @end multitable
3783
3784 The default settings of @code{break-visibility} depend on the
3785 layout object.  The following table shows all the layout objects
3786 of interest which are affected by @code{break-visibility} and the
3787 default setting of this property:
3788
3789 @multitable @columnfractions .3 .3 .4
3790
3791 @headitem Layout object   @tab Usual context  @tab Default setting
3792
3793 @c omit Ambitus as it appears not to be affected by break-visibility -td
3794 @c @item @code{Ambitus}          @tab as specified   @tab @code{begin-of-line-visible}
3795 @item @code{BarLine}             @tab @code{Score}          @tab calculated
3796 @item @code{BarNumber}           @tab @code{Score}          @tab @code{begin-of-line-visible}
3797 @c omit the following item until it can be explained -td
3798 @c @item @code{BreakAlignGroup}  @tab @code{Score}          @tab calculated
3799 @item @code{BreathingSign}       @tab @code{Voice}          @tab @code{begin-of-line-invisible}
3800 @item @code{Clef}                @tab @code{Staff}          @tab @code{begin-of-line-visible}
3801 @item @code{Custos}              @tab @code{Staff}          @tab @code{end-of-line-visible}
3802 @item @code{DoublePercentRepeat} @tab @code{Voice}          @tab @code{begin-of-line-invisible}
3803 @item @code{KeyCancellation}     @tab @code{Staff}          @tab @code{begin-of-line-invisible}
3804 @item @code{KeySignature}        @tab @code{Staff}          @tab @code{begin-of-line-visible}
3805 @c omit LeftEdge until it can be explained -td
3806 @c @item @code{LeftEdge}         @tab @code{Score}          @tab @code{center-invisible}
3807 @item @code{ClefModifier}       @tab @code{Staff}          @tab @code{begin-of-line-visible}
3808 @item @code{RehearsalMark}       @tab @code{Score}          @tab @code{end-of-line-invisible}
3809 @item @code{TimeSignature}       @tab @code{Staff}          @tab @code{all-visible}
3810
3811 @end multitable
3812
3813 The example below shows the use of the vector form to control the
3814 visibility of bar lines:
3815
3816 @lilypond[quote,verbatim,ragged-right]
3817 \relative {
3818   f'4 g a b
3819   f4 g a b
3820   % Remove bar line at the end of the current line
3821   \once \override Score.BarLine.break-visibility = ##(#f #t #t)
3822   \break
3823   f4 g a b
3824   f4 g a b
3825 }
3826 @end lilypond
3827
3828 Although all three components of the vector used to override
3829 @code{break-visibility} must be present, not all of them are
3830 effective with every layout object, and some combinations may
3831 even give errors.  The following limitations apply:
3832
3833 @itemize @bullet
3834 @item Bar lines cannot be printed at the start of line.
3835
3836 @item A bar number cannot be printed at the start of the @emph{first}
3837 line unless it is set to be different from @code{1}.
3838
3839 @item Clef -- see the next section.
3840
3841 @item Double percent repeats are either @emph{all printed} or
3842 @emph{all suppressed}.  Use @code{begin-of-line-invisible}
3843 to print them and @code{all-invisible} to suppress them.
3844
3845 @item Key signature -- see the next section.
3846
3847 @item ClefModifier -- see the next section.
3848 @end itemize
3849
3850
3851 @node Special considerations
3852 @unnumberedsubsubsec Special considerations
3853
3854 @subsubsubheading Visibility following explicit changes
3855
3856 @cindex key signature, visibility following explicit change
3857 @cindex explicitKeySignatureVisibility
3858 @cindex clef, visibility following explicit change
3859 @cindex explicitClefVisibility
3860
3861 The @code{break-visibility} property controls the visibility of
3862 key signatures and changes of clef only at the start of lines,
3863 i.e., after a break.  It has no effect on the visibility of the
3864 key signature or clef following an explicit key change or an
3865 explicit clef change within or at the end of a line.  In the
3866 following example the key signature following the explicit change
3867 to B-flat major is still visible, even though @code{all-invisible}
3868 is set.
3869
3870 @lilypond[quote,verbatim,ragged-right]
3871 \relative {
3872   \key g \major
3873   f'4 g a b
3874   % Try to remove all key signatures
3875   \override Staff.KeySignature.break-visibility = #all-invisible
3876   \key bes \major
3877   f4 g a b
3878   \break
3879   f4 g a b
3880   f4 g a b
3881 }
3882 @end lilypond
3883
3884 The visibility of such explicit key signature and clef changes is
3885 controlled by the @code{explicitKeySignatureVisibility} and
3886 @code{explicitClefVisibility} properties.  These are the equivalent
3887 of the @code{break-visibility} property and both take a vector of
3888 three booleans or the predefined functions listed above, exactly like
3889 @code{break-visibility}.  Both are properties of the Staff context,
3890 not the layout objects themselves, and so they are set using the
3891 @code{\set} command.  Both are set by default to @code{all-visible}.
3892 These properties control only the visibility of key signatures and
3893 clefs resulting from explicit changes and do not affect key
3894 signatures and clefs at the beginning of lines;
3895 @code{break-visibility} must still be overridden in the appropriate
3896 object to remove these.
3897
3898 @lilypond[quote,verbatim,ragged-right]
3899 \relative {
3900   \key g \major
3901   f'4 g a b
3902   \set Staff.explicitKeySignatureVisibility = #all-invisible
3903   \override Staff.KeySignature.break-visibility = #all-invisible
3904   \key bes \major
3905   f4 g a b \break
3906   f4 g a b
3907   f4 g a b
3908 }
3909 @end lilypond
3910
3911 @subsubsubheading Visibility of cancelling accidentals
3912
3913 To remove the cancelling accidentals printed at an explicit key
3914 change, set the Staff context property @code{printKeyCancellation}
3915 to @code{#f}:
3916
3917 @lilypond[quote,verbatim,ragged-right]
3918 \relative {
3919   \key g \major
3920   f'4 g a b
3921   \set Staff.explicitKeySignatureVisibility = #all-invisible
3922   \set Staff.printKeyCancellation = ##f
3923   \override Staff.KeySignature.break-visibility = #all-invisible
3924   \key bes \major
3925   f4 g a b \break
3926   f4 g a b
3927   f4 g a b
3928 }
3929 @end lilypond
3930
3931 With these overrides only the accidentals before the notes remain
3932 to indicate the change of key.
3933
3934 Note that when changing the key to C@tie{}major or A@tie{}minor
3935 the cancelling accidentals would be the @emph{only} indication of
3936 the key change.  In this case setting @code{printKeyCancellation} to
3937 @code{#f} has no effect:
3938
3939 @lilypond[quote,verbatim,ragged-right]
3940 \relative {
3941   \key g \major
3942   f'4 g a b
3943   \set Staff.explicitKeySignatureVisibility = #all-invisible
3944   \set Staff.printKeyCancellation = ##f
3945   \key c \major
3946   f4 g a b \break
3947   f4 g a b
3948   f4 g a b
3949 }
3950 @end lilypond
3951
3952 To suppress the cancelling accidentals even when the key is
3953 changed to C@tie{}major or A@tie{}minor, override
3954 the visibility of the @code{KeyCancellation} grob instead:
3955
3956 @lilypond[quote,verbatim,ragged-right]
3957 \relative {
3958   \key g \major
3959   f'4 g a b
3960   \set Staff.explicitKeySignatureVisibility = #all-invisible
3961   \override Staff.KeyCancellation.break-visibility = #all-invisible
3962   \key c \major
3963   f4 g a b \break
3964   f4 g a b
3965   f4 g a b
3966 }
3967 @end lilypond
3968
3969 @c TODO Add visibility of cautionary accidentals before notes
3970
3971 @subsubsubheading Automatic bars
3972
3973 @cindex automaticBars
3974 @cindex bar lines, suppressing
3975
3976 As a special case, the printing of bar lines can also be turned off
3977 by setting the @code{automaticBars} property in the Score context.
3978 If set to @code{#f}, bar lines will not be printed automatically;
3979 they must be explicitly created with a @code{\bar} command.  Unlike
3980 the @code{\cadenzaOn} predefined command, measures are still counted.
3981 Bar generation will resume according to that count if this property
3982 is later set to @code{#t}.  When set to @code{#f}, line breaks can
3983 occur only at explicit @code{\bar} commands.
3984
3985 @c TODO Add example
3986
3987 @subsubsubheading Transposed clefs
3988
3989 @cindex transposed clefs, visibility of
3990 @cindex visibility of transposed clefs
3991 @cindex clefs, visibility of transposition
3992
3993 The small transposition symbol on transposed clefs is produced by the
3994 @code{ClefModifier} layout object.  Its visibility is automatically
3995 inherited from the @code{Clef} object, so it is not necessary to apply
3996 any required @code{break-visibility} overrides to the @code{ClefModifier}
3997 layout objects to suppress transposition symbols for invisible clefs.
3998
3999 For explicit clef changes, the @code{explicitClefVisibility}
4000 property controls both the clef symbol and any transposition symbol
4001 associated with it.
4002
4003 @seealso
4004 Learning Manual:
4005 @rlearning{Visibility and color of objects}.
4006
4007
4008 @node Line styles
4009 @subsection Line styles
4010
4011 Some performance indications, e.g., @i{rallentando} and
4012 @i{accelerando} and @i{trills} are written as text and are
4013 extended over many measures with lines, sometimes dotted or wavy.
4014
4015 These all use the same routines as the glissando for drawing the
4016 texts and the lines, and tuning their behavior is therefore also
4017 done in the same way.  It is done with a spanner, and the routine
4018 responsible for drawing the spanners is
4019 @code{ly:line-spanner::print}.  This routine determines the
4020 exact location of the two @i{span points} and draws a line
4021 between them, in the style requested.
4022
4023 Here is an example showing the different line styles available,
4024 and how to tune them.
4025
4026 @lilypond[ragged-right,verbatim,quote]
4027 \relative {
4028   d''2 \glissando d'2
4029   \once \override Glissando.style = #'dashed-line
4030   d,2 \glissando d'2
4031   \override Glissando.style = #'dotted-line
4032   d,2 \glissando d'2
4033   \override Glissando.style = #'zigzag
4034   d,2 \glissando d'2
4035   \override Glissando.style = #'trill
4036   d,2 \glissando d'2
4037 }
4038 @end lilypond
4039
4040 The locations of the end-points of the spanner are computed
4041 on-the-fly for every graphic object, but it is possible to
4042 override these:
4043
4044 @c TODO Complete
4045 @lilypond[ragged-right,verbatim,quote]
4046 \relative {
4047   e''2 \glissando f
4048   \once \override Glissando.bound-details.right.Y = #-2
4049   e2 \glissando f
4050 }
4051 @end lilypond
4052
4053 The value for @code{Y} is set to @w{@code{-2}} for the right end
4054 point.  The left side may be similarly adjusted by specifying
4055 @code{left} instead of @code{right}.
4056
4057 If @code{Y} is not set, the value is computed from the vertical
4058 position of the left and right attachment points of the spanner.
4059
4060 Other adjustments of spanners are possible, for details, see
4061 @ref{Spanners}.
4062
4063 @node Rotating objects
4064 @subsection Rotating objects
4065
4066 Both layout objects and elements of markup text can be rotated by
4067 any angle about any point, but the method of doing so differs.
4068
4069 @menu
4070 * Rotating layout objects::
4071 * Rotating markup::
4072 @end menu
4073
4074 @node Rotating layout objects
4075 @unnumberedsubsubsec Rotating layout objects
4076
4077 @cindex rotating objects
4078 @cindex objects, rotating
4079
4080 All layout objects which support the @code{grob-interface} can be
4081 rotated by setting their @code{rotation} property.  This takes a
4082 list of three items: the angle of rotation counter-clockwise,
4083 and the x and y coordinates of the point relative to the object's
4084 reference point about which the rotation is to be performed.  The
4085 angle of rotation is specified in degrees and the coordinates in
4086 staff-spaces.
4087
4088 The angle of rotation and the coordinates of the rotation point must
4089 be determined by trial and error.
4090
4091 @cindex hairpins, angled
4092 @cindex angled hairpins
4093
4094 There are only a few situations where the rotation of layout
4095 objects is useful; the following example shows one situation where
4096 they may be:
4097
4098 @lilypond[quote,fragment,verbatim]
4099 g4\< e' d'' f''\!
4100 \override Hairpin.rotation = #'(20 -1 0)
4101 g4\< e' d'' f''\!
4102 @end lilypond
4103
4104 @node Rotating markup
4105 @unnumberedsubsubsec Rotating markup
4106
4107 All markup text can be rotated to lie at any angle by prefixing it
4108 with the @code{\rotate} command.  The command takes two arguments:
4109 the angle of rotation in degrees counter-clockwise and the text to
4110 be rotated.  The extents of the text are not rotated: they take
4111 their values from the extremes of the x and y coordinates of the
4112 rotated text.  In the following example the
4113 @code{outside-staff-priority} property for text is set to @code{#f}
4114 to disable the automatic collision avoidance, which would push some
4115 of the text too high.
4116
4117 @lilypond[quote,fragment,verbatim]
4118 \override TextScript.outside-staff-priority = ##f
4119 g4^\markup { \rotate #30 "a G" }
4120 b^\markup { \rotate #30 "a B" }
4121 des'^\markup { \rotate #30 "a D-Flat" }
4122 fis'^\markup { \rotate #30 "an F-Sharp" }
4123 @end lilypond
4124
4125 @node Advanced tweaks
4126 @section Advanced tweaks
4127
4128 This section discusses various approaches to fine tuning the
4129 appearance of the printed score.
4130
4131 @menu
4132 * Aligning objects::
4133 * Vertical grouping of grobs::
4134 * Modifying stencils::
4135 * Modifying shapes::
4136 * Modifying broken spanners::
4137 * Unpure-pure containers::
4138 @end menu
4139
4140 @seealso
4141 Learning Manual:
4142 @rlearning{Tweaking output},
4143 @rlearning{Other sources of information}.
4144
4145 Notation Reference:
4146 @ref{Explaining the Internals Reference},
4147 @ref{Modifying properties}.
4148
4149 Extending LilyPond:
4150 @rextend{Interfaces for programmers}.
4151
4152 Installed Files:
4153 @file{scm/define-grobs.scm}.
4154
4155 Snippets:
4156 @rlsr{Tweaks and overrides}.
4157
4158 Internals Reference:
4159 @rinternals{All layout objects}.
4160
4161
4162 @node Aligning objects
4163 @subsection Aligning objects
4164
4165 Graphical objects which support the @code{self-alignment-interface}
4166 and/or the @code{side-position-interface} can be aligned to a previously
4167 placed object in a variety of ways.  For a list of these objects, see
4168 @rinternals{self-alignment-interface} and @rinternals{side-position-interface}.
4169
4170 All graphical objects have a reference point, a horizontal extent and a
4171 vertical extent.  The horizontal extent is a pair of numbers
4172 giving the displacements from the reference point of the left and
4173 right edges, displacements to the left being negative.  The vertical
4174 extent is a pair of numbers giving the displacement from the reference
4175 point to the bottom and top edges, displacements down being negative.
4176
4177 An object's position on a staff is given by the values of the
4178 @code{X-offset} and @code{Y-offset} properties.  The value of
4179 @code{X-offset} gives the displacement from the X coordinate of
4180 the reference point of the parent object, and the value of
4181 @code{Y-offset} gives the displacement from the center line of the
4182 staff.  The values of @code{X-offset} and @code{Y-offset} may
4183 be set directly or may be set to be calculated by procedures in order
4184 to achieve alignment with the parent object.
4185
4186 @warning{Many objects have special positioning considerations which
4187 cause any setting of @code{X-offset} or @code{Y-offset} to be
4188 ignored or modified, even though the object supports the
4189 @code{self-alignment-interface}.  Overriding the @code{X-offset}
4190 or @code{Y-offset} properties to a fixed value causes the respective
4191 @code{self-alignment} property to be disregarded.}
4192
4193 For example, an accidental can be repositioned vertically by setting
4194 @code{Y-offset} but any changes to @code{X-offset} have no effect.
4195
4196 Rehearsal marks may be aligned with breakable objects such as bar
4197 lines, clef symbols, time signature symbols and key signatures.  There
4198 are special properties to be found in the @code{break-aligned-interface}
4199 for positioning rehearsal marks on such objects.
4200
4201 @seealso
4202 Notation Reference:
4203 @ref{Using the break-alignable-interface}.
4204
4205 Extending LilyPond:
4206 @rextend{Callback functions}.
4207
4208 @menu
4209 * Setting X-offset and Y-offset directly::
4210 * Using the side-position-interface::
4211 * Using the self-alignment-interface::
4212 * Using the break-alignable-interface::
4213 @end menu
4214
4215 @node Setting X-offset and Y-offset directly
4216 @unnumberedsubsubsec Setting @code{X-offset} and @code{Y-offset} directly
4217
4218 Numerical values may be given to the @code{X-offset} and @code{Y-offset}
4219 properties of many objects.  The following example shows three
4220 notes with the default fingering position and the positions with @code{X-offset}
4221 and @code{Y-offset} modified.
4222
4223 @lilypond[verbatim,fragment,quote]
4224 a'-3
4225 a'
4226 -\tweak X-offset #0
4227 -\tweak Y-offset #0
4228 -3
4229 a'
4230 -\tweak X-offset #-1
4231 -\tweak Y-offset #1
4232 -3
4233 @end lilypond
4234
4235 @c TODO write more
4236
4237 @node Using the side-position-interface
4238 @unnumberedsubsubsec Using the @code{side-position-interface}
4239
4240 An object which supports the @code{side-position-interface} can be
4241 placed next to its parent object so that
4242 the specified edges of the two objects touch.  The object may be
4243 placed above, below, to the right or to the left of the parent.
4244 The parent cannot be specified; it is determined by the order of
4245 elements in the input stream.  Most objects have the associated
4246 note head as their parent.
4247
4248 The values of the @code{side-axis} and @code{direction} properties
4249 determine where the object is to be placed, as follows:
4250
4251 @c TODO add an example of each to the table
4252
4253 @multitable @columnfractions .3 .3 .3
4254 @headitem @code{side-axis}  @tab @code{direction}  @tab
4255 @headitem property          @tab property          @tab Placement
4256
4257 @item     @code{0}          @tab @code{-1}         @tab left
4258 @item     @code{0}          @tab @code{1}          @tab right
4259 @item     @code{1}          @tab @code{-1}         @tab below
4260 @item     @code{1}          @tab @code{1}          @tab above
4261
4262 @end multitable
4263
4264 When @code{side-axis} is @code{0}, @code{X-offset} should be set to
4265 the procedure @code{ly:side-position-interface::x-aligned-side}.
4266 This procedure will return the correct value of @code{X-offset} to
4267 place the object to the left or right side of the parent according
4268 to value of @code{direction}.
4269
4270 When @code{side-axis} is @code{1}, @code{Y-offset} should be set to
4271 the procedure @code{ly:side-position-interface::y-aligned-side}.
4272 This procedure will return the correct value of @code{Y-offset} to
4273 place the object to the top or bottom of the parent according
4274 to value of @code{direction}.
4275
4276 @c TODO Add examples
4277
4278 @node Using the self-alignment-interface
4279 @unnumberedsubsubsec Using the @code{self-alignment-interface}
4280
4281 @subsubsubheading Self-aligning objects horizontally
4282
4283 The horizontal alignment of an object which supports the
4284 @code{self-alignment-interface} is controlled by the value of
4285 the @code{self-alignment-X} property, provided the object's
4286 @code{X-offset} property is set to
4287 @code{ly:self-alignment-interface::x-aligned-on-self}.
4288 @code{self-alignment-X}  may be given any
4289 real value, in units of half the total X extent of the
4290 object.  Negative values move the object to the right, positive
4291 to the left.  A value of @code{0} centers the object on the
4292 reference point of its parent, a value of @w{@code{-1}} aligns the
4293 left edge of the object on the reference point of its parent,
4294 and a value of @code{1} aligns the right edge of the object on the
4295 reference point of its parent.  The symbols @code{LEFT},
4296 @code{CENTER}, and @code{RIGHT} may be used instead of the values
4297 @w{@code{-1}}, @code{0}, and @code{1}, respectively.
4298
4299 Normally the @code{\override} command would be used to modify the
4300 value of @code{self-alignment-X}, but the @code{\tweak} command
4301 can be used to separately align several annotations on a single
4302 note:
4303
4304 @lilypond[quote,verbatim,fragment]
4305 a'
4306 -\tweak self-alignment-X #-1
4307 ^"left-aligned"
4308 -\tweak self-alignment-X #0
4309 ^"center-aligned"
4310 -\tweak self-alignment-X #RIGHT
4311 ^"right-aligned"
4312 -\tweak self-alignment-X #-2.5
4313 ^"aligned further to the right"
4314 @end lilypond
4315
4316 @subsubsubheading Self-aligning objects vertically
4317
4318 Objects may be aligned vertically in an analogous way to aligning
4319 them horizontally if the @code{Y-offset} property is set to
4320 @code{ly:self-alignment-interface::y-aligned-on-self}.  However,
4321 other mechanisms are often involved in vertical alignment: the
4322 value of @code{Y-offset} is just one variable taken into account.
4323 This may make adjusting the value of some objects tricky.
4324 The units are just half the vertical extent of the object, which
4325 is usually quite small, so quite large numbers may be required.
4326 A value of @w{@code{-1}} aligns the lower edge of the object with
4327 the reference point of the parent object, a value of @code{0}
4328 aligns the center of the object with the reference point of the
4329 parent, and a value of @code{1} aligns the top edge of the object
4330 with the reference point of the parent.  The symbols @code{DOWN},
4331 @code{CENTER}, and @code{UP} may be substituted for @w{@code{-1}},
4332 @code{0}, and @code{1}, respectively.
4333
4334 @subsubsubheading Self-aligning objects in both directions
4335
4336 By setting both @code{X-offset} and @code{Y-offset}, an object may
4337 be aligned in both directions simultaneously.
4338
4339 The following example shows how to adjust a fingering mark so
4340 that it nestles close to the note head.
4341
4342 @lilypond[quote,verbatim,fragment]
4343 a'
4344 -\tweak self-alignment-X #0.5  % move horizontally left
4345 -\tweak Y-offset #ly:self-alignment-interface::y-aligned-on-self
4346 -\tweak self-alignment-Y #-1  % move vertically up
4347 -3  % third finger
4348 @end lilypond
4349
4350 @ignore
4351 @unnumberedsubsubsec Using the @code{aligned-on-parent} procedures
4352
4353 @c Cannot document as they do not seem to operate consistently on all objects -td
4354 @c TODO investigate further
4355
4356 The @code{aligned-on-parent} procedures are used in the same way
4357 as the @code{aligned-on-self} procedures, they difference being
4358 that they permit an object to be aligned with the @emph{edges} of
4359 the parent rather than the parent's reference point.  The following
4360 example shows the difference:
4361
4362 @c TODO Add example
4363
4364 @lilypond[verbatim,quote]
4365 @end lilypond
4366
4367 @end ignore
4368
4369 @ignore
4370 @unnumberedsubsubsec Using the @code{centered-on-parent} procedures
4371
4372 @c Cannot document as they do not seem to operate consistently on all objects -td
4373 @c TODO investigate further
4374
4375 @end ignore
4376
4377 @c TODO The align-interface, BassFigureAlignment and VerticalAlignment
4378
4379 @node Using the break-alignable-interface
4380 @unnumberedsubsubsec Using the @code{break-alignable-interface}
4381
4382 @cindex align to objects
4383 @cindex break-align-symbols
4384
4385 Rehearsal marks and bar numbers may be aligned with notation
4386 objects other than bar lines.  These objects include @code{ambitus},
4387 @code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar},
4388 @code{left-edge}, @code{key-cancellation}, @code{key-signature}, and
4389 @code{time-signature}.
4390
4391 Each type of object has its own default reference point, to which
4392 rehearsal marks are aligned:
4393
4394 @lilypond[verbatim,quote,fragment]
4395 % The rehearsal mark will be aligned to the right edge of the Clef
4396 \override Score.RehearsalMark.break-align-symbols = #'(clef)
4397 \key a \major
4398 \clef treble
4399 \mark "↓"
4400 e'1
4401 % The rehearsal mark will be aligned to the left edge of the Time Signature
4402 \override Score.RehearsalMark.break-align-symbols = #'(time-signature)
4403 \key a \major
4404 \clef treble
4405 \time 3/4
4406 \mark "↓"
4407 e'2.
4408 % The rehearsal mark will be centered above the Breath Mark
4409 \override Score.RehearsalMark.break-align-symbols = #'(breathing-sign)
4410 \key a \major
4411 \clef treble
4412 \time 4/4
4413 e'1
4414 \breathe
4415 \mark "↓"
4416 @end lilypond
4417
4418 A list of possible target alignment objects may be specified.  If
4419 some of the objects are invisible at that point due to the setting
4420 of @code{break-visibility} or the explicit visibility settings for
4421 keys and clefs, the rehearsal mark or bar number is aligned to the
4422 first object in the list which is visible.  If no objects in the
4423 list are visible the object is aligned to the bar line.  If the bar
4424 line is invisible the object is aligned to the place where the bar
4425 line would be.
4426
4427 @lilypond[verbatim,quote,fragment]
4428 % The rehearsal mark will be aligned to the right edge of the Key Signature
4429 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
4430 \key a \major
4431 \clef treble
4432 \mark "↓"
4433 e'1
4434 % The rehearsal mark will be aligned to the right edge of the Clef
4435 \set Staff.explicitKeySignatureVisibility = #all-invisible
4436 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
4437 \key a \major
4438 \clef bass
4439 \mark "↓"
4440 gis,1
4441 % The rehearsal mark will be centered above the Bar Line
4442 \set Staff.explicitKeySignatureVisibility = #all-invisible
4443 \set Staff.explicitClefVisibility = #all-invisible
4444 \override Score.RehearsalMark.break-align-symbols = #'(key-signature clef)
4445 \key a \major
4446 \clef treble
4447 \mark "↓"
4448 e'1
4449 @end lilypond
4450
4451 The alignment of the rehearsal mark relative to the notation object
4452 can be changed, as shown in the following example.  In a score with
4453 multiple staves, this setting should be done for all the staves.
4454
4455 @lilypond[verbatim,quote,fragment]
4456 % The RehearsalMark will be aligned with the right edge of the Key Signature
4457 \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
4458 \key a \major
4459 \clef treble
4460 \time 4/4
4461 \mark "↓"
4462 e'1
4463 % The RehearsalMark will be centered above the Key Signature
4464 \once \override Score.KeySignature.break-align-anchor-alignment = #CENTER
4465 \mark "↓"
4466 \key a \major
4467 e'1
4468 % The RehearsalMark will be aligned with the left edge of the Key Signature
4469 \once \override Score.KeySignature.break-align-anchor-alignment = #LEFT
4470 \key a \major
4471 \mark "↓"
4472 e'1
4473 @end lilypond
4474
4475 The rehearsal mark can also be offset to the right or left of the left
4476 edge by an arbitrary amount.  The units are staff-spaces:
4477
4478 @lilypond[verbatim,quote,fragment]
4479 % The RehearsalMark will be aligned with the left edge of the Key Signature
4480 % and then shifted right by 3.5 staff-spaces
4481 \override Score.RehearsalMark.break-align-symbols = #'(key-signature)
4482 \once \override Score.KeySignature.break-align-anchor = #3.5
4483 \key a \major
4484 \mark "↓"
4485 e'1
4486 % The RehearsalMark will be aligned with the left edge of the Key Signature
4487 % and then shifted left by 2 staff-spaces
4488 \once \override Score.KeySignature.break-align-anchor = #-2
4489 \key a \major
4490 \mark "↓"
4491 e'1
4492 @end lilypond
4493
4494
4495 @node Vertical grouping of grobs
4496 @subsection Vertical grouping of grobs
4497
4498 @c TODO Expand this section
4499
4500 The VerticalAlignment and VerticalAxisGroup grobs work together.
4501 VerticalAxisGroup groups together different grobs like Staff, Lyrics,
4502 etc.  VerticalAlignment then vertically aligns the different grobs
4503 grouped together by VerticalAxisGroup.  There is usually only one
4504 VerticalAlignment per score but every Staff, Lyrics, etc., has its own
4505 VerticalAxisGroup.
4506
4507
4508 @node Modifying stencils
4509 @subsection Modifying stencils
4510
4511 All layout objects have a @code{stencil} property which is part of
4512 the @code{grob-interface}.  By default, this property is usually
4513 set to a function specific to the object that is tailor-made to
4514 render the symbol which represents it in the output.  For example,
4515 the standard setting for the @code{stencil} property of the
4516 @code{MultiMeasureRest} object is @code{ly:multi-measure-rest::print}.
4517
4518 The standard symbol for any object can be replaced by modifying the
4519 @code{stencil} property to reference a different, specially-written,
4520 procedure.  This requires a high level of knowledge of the internal
4521 workings of LilyPond, but there is an easier way which can often
4522 produce adequate results.
4523
4524 This is to set the @code{stencil} property to the procedure which
4525 prints text -- @code{ly:text-interface::print} -- and to add a
4526 @code{text} property to the object which is set to contain the
4527 markup text which produces the required symbol.  Due to the
4528 flexibility of markup, much can be achieved -- see in particular
4529 @ref{Graphic notation inside markup}.
4530
4531 The following example demonstrates this by changing the note head
4532 symbol to a cross within a circle.
4533
4534 @lilypond[verbatim,quote]
4535 XinO = {
4536   \once \override NoteHead.stencil = #ly:text-interface::print
4537   \once \override NoteHead.text = \markup {
4538     \combine
4539       \halign #-0.7 \draw-circle #0.85 #0.2 ##f
4540       \musicglyph #"noteheads.s2cross"
4541   }
4542 }
4543 \relative {
4544   a' a \XinO a a
4545 }
4546 @end lilypond
4547
4548 Any of the @emph{Feta} glyphs used in the Emmentaler font can be
4549 supplied to the @code{\musicglyph} markup command -- see
4550 @ref{The Emmentaler font}.
4551
4552 @file{EPS} files and Postscript commands can both be inserted inline
4553 using the @code{\epsfile} and @code{\postscript} markup commands
4554 respectively -- see @ref{Graphic}.
4555
4556
4557 @seealso
4558 Notation Reference:
4559 @ref{Graphic notation inside markup},
4560 @ref{Formatting text},
4561 @ref{Text markup commands},
4562 @ref{The Emmentaler font},
4563 @ref{Graphic}.
4564
4565
4566 @node Modifying shapes
4567 @subsection Modifying shapes
4568
4569 @menu
4570 * Modifying ties and slurs::
4571 @end menu
4572
4573 @node Modifying ties and slurs
4574 @unnumberedsubsubsec Modifying ties and slurs
4575
4576 @cindex slurs, modifying
4577 @cindex ties, modifying
4578 @cindex Bézier curves, control points
4579 @cindex control points, Bézier curves
4580
4581 @code{Tie}s, @code{Slur}s, @code{PhrasingSlur}s,
4582 @code{LaissezVibrerTie}s and @code{RepeatTie}s are all drawn as
4583 third-order Bézier curves.  If the shape of the tie or slur which
4584 is calculated automatically is not optimum, the shape may be
4585 modified manually in two ways:
4586
4587 @enumerate a
4588 @item
4589 by specifying the displacements to be made to the control points
4590 of the automatically calculated Bézier curve, or
4591
4592 @item
4593 by explicitly specifying the positions of the four control points
4594 required to define the wanted curve.
4595 @end enumerate
4596
4597 Both methods are explained below.  The first method is more suitable
4598 if only slight adjustments to the curve are required; the second may
4599 be better for creating curves which are related to just a single
4600 note.
4601
4602 @subsubsubheading Cubic Bézier curves
4603
4604 Third-order or cubic Bézier curves are defined by four control
4605 points.  The first and fourth control points are precisely the
4606 starting and ending points of the curve.  The intermediate two
4607 control points define the shape.  Animations showing how the curve
4608 is drawn can be found on the web, but the following description
4609 may be helpful.  The curve starts from the first control point
4610 heading directly towards the second, gradually bending over to
4611 head towards the third and continuing to bend over to head towards
4612 the fourth, arriving there travelling directly from the third
4613 control point.  The curve is entirely contained in the
4614 quadrilateral defined by the four control points.  Translations,
4615 rotations and scaling of the control points all result in exactly
4616 the same operations on the curve.
4617
4618 @subsubsubheading Specifying displacements from current control points
4619
4620 @cindex shaping slurs and ties
4621 @funindex \shape
4622
4623 In this example the automatic placement of the tie is not optimum,
4624 and @code{\tieDown} would not help.
4625
4626 @lilypond[verbatim,quote]
4627 <<
4628   { e'1~ 1 }
4629 \\
4630   \relative { r4 <g' c,> <g c,> <g c,> }
4631 >>
4632 @end lilypond
4633
4634 Adjusting the control points of the tie with @code{\shape} allows
4635 the collisions to be avoided.
4636
4637 The syntax of @code{\shape} is
4638
4639 @example
4640 [-]\shape @var{displacements} @var{item}
4641 @end example
4642
4643 This will reposition the control-points of @var{item} by the amounts
4644 given by @var{displacements}.  The @var{displacements} argument is a
4645 list of number pairs or a list of such lists.  Each element of a pair
4646 represents the displacement of one of the coordinates of a
4647 control-point.  If @var{item} is a string, the result is
4648 @code{\once\override} for the specified grob type.  If @var{item} is
4649 a music expression, the result is the same music expression with an
4650 appropriate tweak applied.
4651
4652 In other words, the @code{\shape} function can act as either a
4653 @code{\once\override} command or a @code{\tweak} command depending
4654 on whether the @var{item} argument is a grob name, like @qq{Slur},
4655 or a music expression, like @qq{(}.  The @var{displacements} argument
4656 specifies the displacements of the four control points as a list of
4657 four pairs of (dx . dy) values in units of staff-spaces (or a list
4658 of such lists if the curve has more than one segment).
4659
4660 The leading hyphen is required if and only if the @code{\tweak} form
4661 is being used.
4662
4663 So, using the same example as above and the @code{\once\override}
4664 form of @code{\shape}, this will raise the tie by half a staff-space:
4665
4666 @lilypond[verbatim,quote]
4667 <<
4668   {
4669     \shape #'((0 . 0.5) (0 . 0.5) (0 . 0.5) (0 . 0.5)) Tie
4670     e'1~ 1
4671   }
4672 \\
4673   \relative { r4 <g' c,> <g c,> <g c,> }
4674 >>
4675 @end lilypond
4676
4677 This positioning of the tie is better, but maybe it should be raised
4678 more in the center.  The following example does this, this time using
4679 the alternative @code{\tweak} form:
4680
4681 @lilypond[verbatim,quote]
4682 <<
4683   {
4684     e'1-\shape #'((0 . 0.5) (0 . 1) (0 . 1) (0 . 0.5)) ~ e'
4685   }
4686 \\
4687   \relative { r4 <g' c,> <g c,> <g c,> }
4688 >>
4689 @end lilypond
4690
4691 Changes to the horizontal positions of the control points may be made
4692 in the same way, and two different curves starting at the same
4693 musical moment may also be shaped:
4694
4695 @lilypond[verbatim,quote,ragged-right]
4696 \relative {
4697   c''8(\( a) a'4 e c\)
4698   \shape #'((0.7 . -0.4) (0.5 . -0.4) (0.3 . -0.3) (0 . -0.2)) Slur
4699   \shape #'((0 . 0) (0 . 0.5) (0 . 0.5) (0 . 0)) PhrasingSlur
4700   c8(\( a) a'4 e c\)
4701 }
4702 @end lilypond
4703
4704 The @code{\shape} function can also displace the control points of
4705 curves which stretch across line breaks.  Each piece of the broken
4706 curve can be given its own list of offsets.  If changes to a
4707 particular segment are not needed, the empty list can serve as a
4708 placeholder.  In this example the line break makes the single slur
4709 look like two:
4710
4711 @lilypond[verbatim,quote,ragged-right]
4712 \relative {
4713   c'4( f g c
4714   \break
4715   d,4 c' f, c)
4716 }
4717 @end lilypond
4718
4719 Changing the shapes of the two halves of the slur makes it clearer
4720 that the slur continues over the line break:
4721
4722 @lilypond[verbatim,quote,ragged-right]
4723 % () may be used as a shorthand for ((0 . 0) (0 . 0) (0 . 0) (0 . 0))
4724 % if any of the segments does not need to be changed
4725 \relative c' {
4726   \shape #'(
4727              (( 0 . 0) (0 . 0) (0 . 0) (0 . 1))
4728              ((0.5 . 1.5) (1 . 0) (0 . 0) (0 . -1.5))
4729            ) Slur
4730   c4( f g c
4731   \break
4732   d,4 c' f, c)
4733 }
4734 @end lilypond
4735
4736 If an S-shaped curve is required the control points must always be
4737 adjusted manually --- LilyPond will never select such shapes
4738 automatically.
4739
4740 @lilypond[verbatim,quote]
4741 \relative c'' {
4742   c8( e b-> f d' a e-> g)
4743   \shape #'((0 . -1) (5.5 . -0.5) (-5.5 . -10.5) (0 . -5.5)) PhrasingSlur
4744   c8\( e b-> f d' a e-> g\)
4745 }
4746 @end lilypond
4747
4748 @subsubsubheading Specifying control points explicitly
4749
4750 The coordinates of the Bézier control points are specified in units
4751 of staff-spaces.  The X@tie{}coordinate is relative to the reference
4752 point of the note to which the tie or slur is attached, and the
4753 Y@tie{}coordinate is relative to the staff center line.  The
4754 coordinates are specified as a list of four pairs of decimal numbers
4755 (reals).  One approach is to estimate the coordinates of the two
4756 end points, and then guess the two intermediate points.  The optimum
4757 values are then found by trial and error.  Be aware that these values
4758 may need to be manually adjusted if any further changes are made to
4759 the music or the layout.
4760
4761 One situation where specifying the control points explicitly is
4762 preferable to specifying displacements is when they need to be
4763 specified relative to a single note.  Here is an example of this.
4764 It shows one way of indicating a slur extending into alternative
4765 sections of a volta repeat.
4766
4767 @lilypond[verbatim,quote]
4768 \relative {
4769   c''1
4770   \repeat volta 3 { c4 d( e f }
4771   \alternative {
4772     { g2) d }
4773     {
4774       g2
4775       % create a slur and move it to a new position
4776       % the <> is just an empty chord to carry the slur termination
4777       -\tweak control-points #'((-2 . 3.8) (-1 . 3.9) (0 . 4) (1 . 3.4)) ( <> )
4778       f,
4779     }
4780     {
4781       e'2
4782       % create a slur and move it to a new position
4783       -\tweak control-points #'((-2 . 3) (-1 . 3.1) (0 . 3.2) (1 . 2.4)) ( <> )
4784       f,
4785     }
4786   }
4787 }
4788 @end lilypond
4789
4790 @knownissues
4791 It is not possible to modify shapes of ties or slurs by changing
4792 the @code{control-points} property if there are multiple ties or slurs
4793 at the same musical moment -- the @code{\tweak} command will also not
4794 work in this case.  However, the @code{tie-configuration} property of
4795 @code{TieColumn} can be overridden to set start line and direction as
4796 required.
4797
4798 @seealso
4799 Internals Reference:
4800 @rinternals{TieColumn}.
4801
4802
4803 @node Modifying broken spanners
4804 @subsection Modifying broken spanners
4805
4806 @menu
4807 * Using alterBroken::
4808 @end menu
4809
4810 @node Using alterBroken
4811 @unnumberedsubsubsec Using @code{\alterBroken}
4812
4813 @cindex spanners, modifying
4814 @cindex broken spanners, modifying
4815 @funindex \alterBroken
4816
4817 When a spanner crosses a line break or breaks, each piece
4818 inherits the attributes of the original spanner.  Thus, ordinary
4819 tweaking of a broken spanner applies the same modifications to
4820 each of its segments.  In the example below, overriding
4821 @code{thickness} affects the slur on either side of the line
4822 break.
4823
4824 @lilypond[verbatim,quote,ragged-right]
4825 \relative c'' {
4826   r2
4827   \once\override Slur.thickness = 10
4828   c8( d e f
4829   \break
4830   g8 f e d) r2
4831 }
4832 @end lilypond
4833
4834 Independently modifying the appearance of individual pieces
4835 of a broken spanner is possible with the @code{\alterBroken}
4836 command.  This command can produce either an @code{\override}
4837 or a @code{\tweak} of a spanner property.
4838
4839 The syntax for @code{\alterBroken} is
4840
4841 @example
4842 [-]\alterBroken @var{property} @var{values} @var{item}
4843 @end example
4844
4845 The argument @var{values} is a list of values, one for each
4846 broken piece.  If @var{item} is a grob name like @code{Slur} or
4847 @code{Staff.PianoPedalBracket}, the result is an @code{\override}
4848 of the specified grob type.  If @var{item} is a music expression
4849 such as @qq{(} or @qq{[} the result is the same music expression
4850 with an appropriate tweak applied.
4851
4852 The leading hyphen must be used with the @code{\tweak} form.  Do
4853 not add it when @code{\alterBroken} is used as an
4854 @code{\override}.
4855
4856 In its @code{\override} usage, @code{\alterBroken} may be
4857 prefaced by @code{\once} or @code{\temporary} and reverted by
4858 using @code{\revert} with @var{property}.
4859
4860 The following code applies an independent @code{\override} to
4861 each of the slur segments in the previous example:
4862
4863 @lilypond[verbatim,quote,ragged-right]
4864 \relative c'' {
4865   r2
4866   \alterBroken thickness #'(10 1) Slur
4867   c8( d e f
4868   \break
4869   g8 f e d) r2
4870 }
4871 @end lilypond
4872
4873 The @code{\alterBroken} command may be used with any spanner
4874 object, including @code{Tie}, @code{PhrasingSlur}, @code{Beam}
4875 and @code{TextSpanner}.  For example, an editor preparing a
4876 scholarly edition may wish to indicate the absence of part of a
4877 phrasing slur in a source by dashing only the segment which has
4878 been added.  The following example illustrates how this can be
4879 done, in this case using the @code{\tweak} form of the command:
4880
4881 @lilypond[verbatim,quote,ragged-right]
4882 % The empty list is conveniently used below, because it is the
4883 % default setting of dash-definition, resulting in a solid curve.
4884 \relative {
4885   c''2-\alterBroken dash-definition #'(() ((0 1.0 0.4 0.75))) \(e
4886   \break
4887   g2 e\)
4888 }
4889 @end lilypond
4890
4891 It is important to understand that @code{\alterBroken} will set
4892 each piece of a broken spanner to the corresponding value in
4893 @var{values}.  When there are fewer values than pieces, any
4894 additional piece will be assigned the empty list.  This may lead
4895 to undesired results if the layout property is not set to the
4896 empty list by default.  In such cases, each segment should be
4897 assigned an appropriate value.
4898
4899 @knownissues
4900 Line breaks may occur in different places following changes in
4901 layout. Settings chosen for @code{\alterBroken} may be unsuitable
4902 for a spanner that is no longer broken or is split into more
4903 segments than before.  Explicit use of @code{\break} can guard
4904 against this situation.
4905
4906 The @code{\alterBroken} command is ineffective for spanner
4907 properties accessed before line-breaking such as
4908 @code{direction}.
4909
4910 @seealso
4911 Extending LilyPond:
4912 @rextend{Difficult tweaks}.
4913
4914
4915 @node Unpure-pure containers
4916 @subsection Unpure-pure containers
4917
4918 @cindex Scheme, pure containers
4919 @cindex Scheme, unpure containers
4920 @cindex pure containers, Scheme
4921 @cindex unpure containers, Scheme
4922 @cindex horizontal spacing, overriding
4923
4924 Unpure-pure containers are useful for overriding @emph{Y-axis} spacing
4925 calculations - specifically @code{Y-offset} and @code{Y-extent} - with a
4926 Scheme function instead of a literal (i.e., a number or pair).
4927
4928 For certain grobs, the @code{Y-extent} is based on the @code{stencil}
4929 property, overriding the stencil property of one of these will
4930 require an additional @code{Y-extent} override with an unpure-pure
4931 container.  When a function overrides a @code{Y-offset} and/or
4932 @code{Y-extent} it is assumed that this will trigger line breaking
4933 calculations too early during compilation.  So the function is not
4934 evaluated at all (usually returning a value of @samp{0} or
4935 @samp{'(0 . 0)}) which can result in collisions.  A @q{pure} function
4936 will not affect properties, objects or grob suicides and therefore will
4937 always have its Y-axis-related evaluated correctly.
4938
4939 Currently, there are about thirty functions that are already considered
4940 @q{pure} and Unpure-pure containers are a way to set functions not on
4941 this list as @q{pure}.  The @q{pure} function is evaluated @emph{before}
4942 any line-breaking and so the horizontal spacing can be adjusted
4943 @q{in time}.  The @q{unpure} function is then evaluated @emph{after}
4944 line breaking.
4945
4946 @warning{As it is difficult to always know which functions are on this
4947 list we recommend that any @q{pure} functions you create do not use
4948 @code{Beam} or @code{VerticalAlignment} grobs.}
4949
4950 An unpure-pure container is constructed as follows;
4951
4952 @code{(ly:make-unpure-pure-container f0 f1)}
4953
4954 where @code{f0} is a function taking @var{n} arguments (@var{n >= 1})
4955 and the first argument must always be the grob.  This is the function
4956 that gives the actual result.  @var{f1} is the function being labeled
4957 as @q{pure} that takes @var{n + 2} arguments.  Again, the first argument
4958 must always still be the grob but the second and third are @q{start}
4959 and @q{end} arguments.
4960
4961 @var{start} and @var{end} are, for all intents and purposes, dummy
4962 values that only matter for @code{Spanners} (i.e @code{Hairpin} or
4963 @code{Beam}), that can return different height estimations based on a
4964 starting and ending column.
4965
4966 The rest are the other arguments to the first function (which
4967 may be none if @var{n = 1}).
4968
4969 The results of the second function are used as an approximation of the
4970 value needed which is then used by the first function to get the real
4971 value which is then used for fine-tuning much later during the spacing
4972 process.
4973
4974 @c TODO: The following example supposedly showing a collision no longer
4975 @c 'works' since 2.18.x. Another example of a collision is needed.
4976 @c Issue #3512
4977
4978 @lilypond[verbatim,quote,ragged-right]
4979 #(define (square-line-circle-space grob)
4980 (let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
4981       (notename (ly:pitch-notename pitch)))
4982  (if (= 0 (modulo notename 2))
4983      (make-circle-stencil 0.5 0.0 #t)
4984      (make-filled-box-stencil '(0 . 1.0)
4985                               '(-0.5 . 0.5)))))
4986
4987 squareLineCircleSpace = {
4988   \override NoteHead.stencil = #square-line-circle-space
4989 }
4990
4991 smartSquareLineCircleSpace = {
4992   \squareLineCircleSpace
4993   \override NoteHead.Y-extent =
4994    #(ly:make-unpure-pure-container
4995       ly:grob::stencil-height
4996       (lambda (grob start end) (ly:grob::stencil-height grob)))
4997 }
4998
4999 \new Voice \with { \remove "Stem_engraver" }
5000 \relative c'' {
5001   \squareLineCircleSpace
5002   cis4 ces disis d
5003   \smartSquareLineCircleSpace
5004   cis4 ces disis d
5005 }
5006 @end lilypond
5007
5008 In the first measure, without the unpure-pure container, the spacing
5009 engine does not know the width of the note head and lets it collide with
5010 the accidentals.  In the second measure, with unpure-pure containers,
5011 the spacing engine knows the width of the note heads and avoids the
5012 collision by lengthening the line accordingly.
5013
5014 Usually for simple calculations nearly-identical functions for
5015 both the @q{unpure} and @q{pure} parts can be used, by only
5016 changing the number of arguments passed to, and the scope of, the
5017 function.  This use case is frequent enough that
5018 @code{ly:make-unpure-pure-container} constructs such a second
5019 function by default when called with only one function argument.
5020
5021 @warning{If a function is labeled as @q{pure} and it turns out not to
5022 be, the results can be unexpected.}
5023
5024
5025 @node Using music functions
5026 @section Using music functions
5027
5028 @c TODO -- add @seealso, etc. to these subsections
5029
5030 Where tweaks need to be reused with different music expressions,
5031 it is often convenient to make the tweak part of a @emph{music
5032 function}.  In this section, we discuss only @emph{substitution}
5033 functions, where the object is to substitute a variable into a
5034 piece of LilyPond input code.  Other more complex functions are
5035 described in @rextend{Music functions}.
5036
5037 @menu
5038 * Substitution function syntax::
5039 * Substitution function examples::
5040 @end menu
5041
5042 @node Substitution function syntax
5043 @subsection Substitution function syntax
5044
5045 Making a function that substitutes a variable into LilyPond
5046 code is easy.  The general form of these functions is
5047
5048 @example
5049 function =
5050 #(define-music-function
5051      (@var{arg1} @var{arg2} @dots{})
5052      (@var{type1?} @var{type2?} @dots{})
5053    #@{
5054      @var{@dots{}music@dots{}}
5055    #@})
5056 @end example
5057
5058 @noindent
5059 where
5060
5061 @multitable @columnfractions .33 .66
5062 @item @code{@var{argN}}
5063 @tab @var{n}th argument
5064
5065 @item @code{@var{typeN?}}
5066 @tab a scheme @emph{type predicate} for which @code{@var{argN}}
5067 must return @code{#t}.
5068
5069 @item @code{@var{@dots{}music@dots{}}}
5070 @tab normal LilyPond input, using @code{$} (in places where only
5071 LilyPond constructs are allowed) or @code{#} (to use it as a Scheme
5072 value or music function argument or music inside of music lists) to
5073 reference arguments
5074 (eg. @samp{#arg1}).
5075 @end multitable
5076
5077 The list of type predicates is required.  Some of the most common
5078 type predicates used in music functions are:
5079
5080 @example
5081 boolean?
5082 cheap-list?  @emph{(use instead of }@q{list?}@emph{ for faster processing)}
5083 ly:duration?
5084 ly:music?
5085 ly:pitch?
5086 markup?
5087 number?
5088 pair?
5089 string?
5090 symbol?
5091 @end example
5092
5093 @noindent
5094 For a list of available type predicates, see
5095 @ref{Predefined type predicates}.  User-defined type predicates
5096 are also allowed.
5097
5098 @seealso
5099 Notation Reference:
5100 @ref{Predefined type predicates}.
5101
5102 Extending LilyPond:
5103 @rextend{Music functions}.
5104
5105 Installed Files:
5106 @file{lily/music-scheme.cc},
5107 @file{scm/c++.scm},
5108 @file{scm/lily.scm}.
5109
5110
5111 @node Substitution function examples
5112 @subsection Substitution function examples
5113
5114 This section introduces some substitution function examples.
5115 These are not intended to be exhaustive, but rather to demonstrate
5116 some of the possibilities of simple substitution functions.
5117
5118 In the first example, a function is defined that simplifies
5119 setting the padding of a TextScript:
5120
5121 @lilypond[quote,verbatim,ragged-right]
5122 padText =
5123 #(define-music-function
5124      (padding)
5125      (number?)
5126    #{
5127      \once \override TextScript.padding = #padding
5128    #})
5129
5130 \relative {
5131   c''4^"piu mosso" b a b
5132   \padText #1.8
5133   c4^"piu mosso" b a b
5134   \padText #2.6
5135   c4^"piu mosso" b a b
5136 }
5137 @end lilypond
5138
5139 In addition to numbers, we can use music expressions such
5140 as notes for arguments to music functions:
5141
5142 @lilypond[quote,verbatim,ragged-right]
5143 custosNote =
5144 #(define-music-function
5145      (note)
5146      (ly:music?)
5147    #{
5148      \tweak NoteHead.stencil #ly:text-interface::print
5149      \tweak NoteHead.text
5150         \markup \musicglyph #"custodes.mensural.u0"
5151      \tweak Stem.stencil ##f
5152      #note
5153    #})
5154
5155 \relative { c'4 d e f \custosNote g }
5156 @end lilypond
5157
5158 @funindex \etc
5159 Both of those functions are simple single expressions where only
5160 the last element of a function call or override is missing.  For
5161 those particular function definitions, there is a simpler
5162 alternative syntax, namely just writing out the constant part of
5163 the expression and replacing its final missing element with
5164 @code{\etc}:
5165
5166 @lilypond[quote,verbatim,ragged-right]
5167 padText =
5168   \once \override TextScript.padding = \etc
5169
5170 \relative {
5171   c''4^"piu mosso" b a b
5172   \padText #1.8
5173   c4^"piu mosso" b a b
5174   \padText #2.6
5175   c4^"piu mosso" b a b
5176 }
5177 @end lilypond
5178
5179 @lilypond[quote,verbatim,ragged-right]
5180 custosNote =
5181   \tweak NoteHead.stencil #ly:text-interface::print
5182   \tweak NoteHead.text
5183      \markup \musicglyph #"custodes.mensural.u0"
5184   \tweak Stem.stencil ##f
5185   \etc
5186
5187 \relative { c'4 d e f \custosNote g }
5188 @end lilypond
5189
5190
5191 Substitution functions with multiple arguments can be defined:
5192
5193 @lilypond[quote,verbatim,ragged-right]
5194 tempoPadded =
5195 #(define-music-function
5196      (padding tempotext)
5197      (number? markup?)
5198    #{
5199      \once \override Score.MetronomeMark.padding = #padding
5200      \tempo \markup { \bold #tempotext }
5201    #})
5202
5203 \relative {
5204   \tempo \markup { "Low tempo" }
5205   c''4 d e f g1
5206   \tempoPadded #4.0 "High tempo"
5207   g4 f e d c1
5208 }
5209 @end lilypond
5210
5211 @c TODO: add appropriate @@ref's here.