]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/user/changing-defaults.itely
2e9840019e66818e3da9aa2c7bb42f287a0bb0ea
[lilypond.git] / Documentation / user / changing-defaults.itely
1 @c -*-texinfo-*-
2 @node Changing defaults
3 @chapter Changing defaults
4
5
6 The purpose of LilyPond's design is to provide the finest output
7 quality as a default. Nevertheless, it may happen that you need to
8 change that default layout.  The layout is controlled through a large
9 number of proverbial ``knobs and switches.''  This chapter does not
10 list each and every knob. Rather, it outlines what groups of controls
11 are available, and how to tune them.
12
13 Which controls are available for tuning is described in a separate
14 document, the @internalsref{Program reference} manual. This manual
15 lists all different variables, functions and options available in
16 LilyPond. It is available as a HTML document, which is available
17 @uref{http://lilypond.org/doc/Documentation/user/out-www/lilypond-internals/,on-line},
18 but is also included with the LilyPond documentation package.
19
20 There are X areas where the default settings may be changed:
21
22 @itemize @bullet
23 @item Output: changing the appearance of individual
24   objects. For example, changing stem directions, or the location of
25   subscripts.
26   
27 @item Context: changing aspects of the translation from music events to
28   notation. For example, giving each staff a separate time signature. 
29   
30 @item Global layout: changing the appearance of the spacing, line
31   breaks and page dimensions.
32 @end itemize
33
34 Then, there are separate systems for typesetting text (like
35 @emph{ritardando}) and selecting different fonts. This chapter also
36 discusses these.
37
38 Internally, LilyPond uses Scheme (a LISP dialect) to provide
39 infrastructure.  Overriding layout decisions in effect accesses the
40 program internals, so it is necessary to learn a (very small) subset
41 of Scheme. That is why this chapter starts with a short tutorial on
42 entering numbers, lists, strings and symbols in Scheme.
43
44
45 @menu
46 * Scheme tutorial::             
47 * Interpretation contexts::     
48 * Tuning output::               
49 * Fonts::                       
50 * Text markup::                 
51 * Global layout::               
52 * Font Size::                   
53 * Output details::              
54 @end menu
55
56 @node Scheme tutorial
57 @section Scheme tutorial
58
59 @cindex Scheme
60 @cindex GUILE
61 @cindex Scheme, in-line code
62 @cindex accessing Scheme
63 @cindex evaluating Scheme
64 @cindex LISP
65
66 LilyPond uses the Scheme programming language, both as part of the
67 input syntax, and as internal mechanism to glue together modules of
68 the program. This section is a very brief overview of entering data in
69 Scheme.@footnote{If you want to know more about Scheme, see
70 @uref{http://www.schemers.org}.}
71
72 The most basic thing of a language is data: numbers, character
73 strings, lists, etc. Here is a list of data types that are relevant to
74 LilyPond input.
75
76 @table @asis
77 @item Booleans
78   Boolean values are True or False. The Scheme for True is @code{#t}
79   and False is @code{#f}.
80 @item Numbers
81   Numbers are entered in the standard fashion,
82   @code{1} is the (integer) number one, while @code{-1.5} is a
83   floating point number (a non-integer number). 
84 @item Strings
85   Strings are enclosed in double quotes,
86   @example
87     "this is a string"
88   @end example
89
90   Strings may span several lines
91   @example
92     "this
93     is
94     a string"
95   @end example
96
97   Quotation marks and newlines can also be added with so-called escape
98   sequences. The string @code{a said "b"} is entered as
99   @example
100     "a said \"b\""
101   @end example
102
103   Newlines and backslashes are escaped with @code{\n} and @code{\\}
104 respectively.
105 @end table
106
107
108 In a music file, snippets of Scheme code are introduced with the hash
109 mark @code{#}. So, the previous examples translated in LilyPondese are
110
111 @example
112   ##t ##f 
113   #1 #-1.5
114   #"this is a string"
115   #"this
116   is
117   a string"
118 @end example
119
120 For the rest of this section, we will assume that the data is entered
121 in a music file, so we add @code{#}s everywhere.
122
123 Scheme can be used to do calculations. It uses @emph{prefix}
124 syntax. Adding 1 and 2 is written as @code{(+ 1 2)} rather than the
125 traditional 1+2.
126
127 @lisp
128   #(+ 1 2)
129    @result{} #3 
130 @end lisp
131
132 The arrow @result{} shows that the result of evaluating @code{(+ 1 2)}
133 is @code{3}.  Calculations may be nested: the result of a function may
134 be used for another calculation.
135
136 @lisp
137   #(+ 1 (* 3 4))
138    @result{} #(+ 1 12) 
139    @result{} #13
140 @end lisp
141
142 These calculations are examples of evaluations: an expression (like
143 @code{(* 3 4)} is replaced by its value @code{12}. A similar thing
144 happens with variables. After defining a variable  
145
146 @example
147   twelve = #12 
148 @end example
149
150 variables can also be used in expressions, here
151
152 @example
153   twentyFour = #(* 2 twelve) 
154 @end example 
155
156 the number 24 is stored in the variable @code{twentyFour}.
157
158 The @emph{name} of a variable is also an expression, similar to a
159 number or a string. It is entered as
160
161 @example
162   #'twentyFour
163 @end example
164
165 The quote mark @code{'} prevents Scheme interpreter from substituting
166 @code{24} for the @code{twentyFour}. Instead, we get the name
167 @code{twentyFour}.
168
169 This syntax will be used very frequently, since many of the layout
170 tweaks involve assigning (Scheme) values to internal variables, for
171 example
172
173 @example
174   \override Stem #'thickness = #2.6
175 @end example
176
177 This instruction adjusts the appearance of stems. The value @code{2.6}
178 is put into a the @code{thickness} variable of a @code{Stem}
179 object. This makes stems almost twice as thick as their normal size.
180 To distinguish between variables defined in input files (like
181 @code{twentyFour} in the example above), and internal variables, we
182 will call the latter ``properties.'' So, the stem object has a
183 @code{thickness} property.
184
185 Two-dimensional offsets (X and Y coordinates) as well as object sizes
186 (intervals with a left and right point) are entered as @code{pairs}. A
187 pair@footnote{In Scheme terminology, the pair is called @code{cons},
188 and its two elements are called car and cdr respectively.}  is entered
189 as @code{(first . second)}, and like symbols, they must be quoted,
190
191 @example
192   \override TextScript #'extra-offset = #'(1 . 2)  
193 @end example 
194
195 This assigns the pair (1, 2) to @code{extra-offset} variable of the
196 TextScript object. This moves the object 1 staff space to the right,
197 and 2 spaces up.
198
199 The two elements of a pair may be arbitrary values, for example
200
201 @example
202   #'(1 . 2)
203   #'(#t . #f)
204   #'("blah-blah" . 3.14159265)
205 @end example
206
207 A list is entered by enclosing its elements in parentheses, and adding
208 a quote. For example,
209 @example
210   #'(1 2 3)
211   #'(1 2 "string" #f)
212 @end example
213
214 We have been using lists all along.  A calculation, like @code{(+ 1
215 2)} is also a list (containing the symbol @code{+} and the numbers 1
216 and 2). For entering lists, use a quote @code{'} and for
217 calculations, do not use a quote. 
218
219 Inside a quoted list or pair, there is no need to quote anymore.  The
220 following is a pair of symbols, a list of symbols and a list of lists
221 respectively,
222
223 @example
224   #'(stem . head)
225   #'(staff clef key-signature)
226   #'((1) (2))
227 @end example
228
229
230 @node Interpretation contexts
231 @section Interpretation contexts
232
233 When music is printed, a lot of things notation elements must be added
234 to the input, which is often bare bones.  For example, compare the
235 input and output of the following example
236
237 @lilypond[verbatim,relative=2]
238   cis4 cis2. g4
239 @end lilypond
240
241 The input is rather sparse, but in the output, bar lines, accidentals,
242 clef and time signature are added. LilyPond @emph{interprets} the
243 input. During this step, the musical information is inspected in time
244 order, similar to reading a score from left to right. While reading,
245 the program remembers where measure boundaries are, and what pitches
246 need explicit accidentals.
247
248 This is contextual information. and it can be present on several
249 levels.  For example, the effect of an accidental is limited to a
250 single stave, while a bar line must be synchronized across the entire
251 score.  To match this hierarchy, LilyPond's interpretation step is
252 hierarchical.  There are interpretation contexts, like
253 @context{Voice}, Staff and Score, and each level can maintain its own
254 properties.
255
256 Full description of all available contexts is in the program
257 reference, see
258 @ifhtml
259 @internalsref{Contexts}
260 @end ifhtml
261 @ifnothtml 
262 Translation @arrow{} Context.
263 @end ifnothtml
264
265 @menu
266 * Creating contexts::           
267 * Changing context properties on the fly ::  
268 * Modifying context plug-ins::  
269 * Layout tunings within contexts::  
270 * Defining context defaults ::  
271 * Which properties to change::  
272 @end menu
273
274 @node Creating contexts
275 @subsection Creating contexts
276
277 [TODO: propagation]
278
279 For scores with only one voice and one staff, correct contexts are
280 created automatically. For more complex scores, it is necessary to
281 instantiate them by hand.  There are three commands to do this.
282
283 The easiest command is @code{\new}, and it also the quickest to type.
284 It is prepended to a  music expression, for example
285
286 @example
287   \new @var{type} @var{music expression}
288 @end example
289
290 @noindent
291 where @var{type} is a context name (like @code{Staff} or
292 @code{Voice}).  This command creates a new context, and starts
293 interpreting @var{music expression} with that.
294
295 A practical application of @code{\new} is a score with many
296 staves. Each part that should be on its own staff, gets a @code{\new
297 Staff}.
298
299 @lilypond[verbatim,relative=2,raggedright]
300   << \new Staff { c4 c }
301      \new Staff { d4 d }
302   >>
303 @end lilypond
304
305 Like @code{\new}, the @code{\context} command also directs a music
306 expression to a context object, but gives the context an extra name. The
307 syntax is
308
309 @example
310   \context @var{type} = @var{id} @var{music}
311 @end example
312
313 This form will search for an existing context of type @var{type}
314 called @var{id}. If that context does not exist yet, it is created.
315 This is useful if the context referred to later on. For example, when
316 setting lyrics the melody is in a named context
317
318 @example
319  \context Voice = "@b{tenor}" @var{music}
320 @end example
321
322 @noindent
323 so the texts can be properly aligned to its notes,
324
325 @example
326 \new Lyrics \lyricsto "@b{tenor}" @var{lyrics} 
327 @end example
328
329 @noindent
330
331 Another possibility is funneling two different music expressions into
332 one context. In the following example, articulations and notes are
333 entered separately,
334
335 @verbatim
336 music = \notes { c4 c4 }
337 arts = \notes  { s4-. s4-> }
338 @end verbatim
339
340 They are combined by sending both to the same @context{Voice} context,
341
342 @verbatim
343   << \new Staff \context Voice = "A" \music
344      \context Voice = "A" \arts
345   >>
346 @end verbatim
347 @lilypond[raggedright]
348 music = \notes { c4 c4 }
349 arts = \notes  { s4-. s4-> }
350 \score {
351        \notes \relative c''  << \new Staff \context Voice = "A" \music
352      \context Voice = "A" \arts
353   >>
354
355 @end lilypond
356
357
358
359 The third command for creating contexts is
360 @example
361   \context @var{type} @var{music}
362 @end example
363
364
365 @noindent
366 This is similar to @code{\context} with @code{= @var{id}}, but matches
367 any context of type @var{type}, regardless of its given name.
368
369 This variant is used with music expressions that can be interpreted at
370 several levels. For example, the @code{\applyoutput} command (see
371 @ref{Running a function on all layout objects}). Without an explicit
372 @code{\context}, it is usually is applied to @context{Voice}
373
374 @example
375   \applyoutput #@var{function}   % apply to Voice
376 @end example
377
378 To have it interpreted at @context{Score} or @context{Staff} level use
379 these forms
380
381 @example
382   \context Score \applyoutput #@var{function}
383   \context Staff \applyoutput #@var{function}
384 @end example
385
386
387 @node Changing context properties on the fly 
388 @subsection Changing context properties  on the fly
389
390 Each context can have different @emph{properties}, variables contained
391 in that context. They can be changed during the interpretation step.
392 This is achieved by inserting the @code{\set} command in the music,
393
394 @quotation
395   @code{\set } @var{context}@code{.}@var{prop}@code{ = #}@var{value} 
396 @end quotation
397
398 For example,
399 @lilypond[verbatim,relative=2]
400   R1*2 
401   \set Score.skipBars = ##t
402   R1*2
403 @end lilypond
404
405 This command skips measures that have no notes. The result is that
406 multi rests are condensed.  The value assigned is a Scheme object. In
407 this case, it is @code{#t}, the boolean True value.
408
409 If the @var{context} argument is left out, then the current bottom-most
410 context (typically @context{ChordNames}, @context{Voice} or
411 @context{Lyrics}) is used.  In this example,
412
413 @lilypond[verbatim,relative=2]
414   c8 c c c
415   \set autoBeaming = ##f
416   c8 c c c
417 @end lilypond
418
419 @noindent
420 the @var{context} argument to @code{\set} is left out, and the current
421 @internalsref{Voice} is used.
422
423 Contexts are hierarchical, so if a bigger context was specified, for
424 example @context{Staff}, then the change would also apply to all
425 @context{Voice}s in the current stave. The change is applied
426 `on-the-fly', during the music, so that the setting only affects the
427 second group of eighth notes.
428
429 There is also an @code{\unset} command,
430 @quotation
431   @code{\set }@var{context}@code{.}@var{prop}
432 @end quotation
433
434 @noindent
435 which removes the definition of @var{prop}. This command only removes
436 the definition if it is set in @var{context}. In
437
438 @example
439   \set Staff.autoBeaming = ##f
440   \unset Voice.autoBeaming
441 @end example
442
443 @noindent
444 the current @context{Voice} does not have the property, and the
445 definition at @context{Staff} level remains intact. Like @code{\set},
446 the @var{context} argument does not have to be specified for a bottom
447 context.
448
449 Settings that should only apply to a single time-step can be entered
450 easily with @code{\once}, for example in
451
452 @lilypond[verbatim,relative=2]
453   c4
454   \once \set fontSize = #4.7
455   c4
456   c4
457 @end lilypond
458
459 the property @code{fontSize} is unset automatically after the second
460 note.
461
462 A full description of all available context properties is in the
463 program reference, see
464 @ifhtml
465 @internalsref{Tunable-context-properties}.
466 @end ifhtml
467 @ifnothtml
468 Translation @arrow{} Tunable context properties.
469 @end ifnothtml
470
471
472 @node Modifying context plug-ins
473 @subsection Modifying context plug-ins
474
475 Notation contexts (like Score and Staff) not only store properties,
476 they also contain plug-ins, called ``engravers'' that create notation
477 elements. For example, the Voice context contains a
478 @code{Note_head_engraver} and the Staff context contains a
479 @code{Key_signature_engraver}.
480
481 For a full a description of each plug-in, see 
482 @ifhtml
483 @internalsref{Engravers}
484 @end ifhtml
485 @ifnothtml
486 Program reference @arrow Translation @arrow{} Engravers.
487 @end ifnothtml
488 Every context described in
489 @ifhtml
490 @internalsref{Contexts}
491 @end ifhtml
492 @ifnothtml 
493 Program reference @arrow Translation @arrow{} Context.
494 @end ifnothtml
495 lists the engravers used for that context.
496
497
498 It can be useful to shuffle around these plug-ins. This is done by
499 starting a new context, with @code{\new} or @code{\context}, and
500 modifying it like this, 
501
502 @example
503  \new @var{context} \with @{
504    \consists @dots{}
505    \consists @dots{}
506    \remove  @dots{}
507    \remove @dots{}
508    @emph{etc.}
509  @}
510  @var{..music..}
511 @end example
512
513 where the @dots{} should be the name of an engraver. Here is a simple
514 example which removes @code{Time_signature_engraver} and
515 @code{Clef_engraver} from a @code{Staff} context,
516
517 @lilypond[relative=1, verbatim]
518 << \new Staff {
519     f2 g
520   }
521   \new Staff \with {
522      \remove "Time_signature_engraver"
523      \remove "Clef_engraver"
524   } {
525     f2 g2
526   }
527 >>
528 @end lilypond
529
530 In the second stave there are no time signature or clef symbols.  This
531 is a rather crude method of making objects disappear, it will affect the
532 entire staff. The spacing will be adversely influenced too. More
533 sophisticated methods of blanking objects are shown in (TODO).
534
535 The next example shows a practical application.  Bar lines and time
536 signatures are normally synchronized across the score.  This is done
537 by the @code{Timing_engraver}. This plug-in keeps an administration of
538 time signature, location within the measure, etc. By moving the
539 @code{Timing_engraver} engraver from Score to Staff context, we can
540 have score where each staff has its own time signature.
541
542 @cindex polymetric scores
543
544
545 @lilypond[relative=1,raggedright,verbatim]
546 \new Score \with {
547   \remove "Timing_engraver"
548 } <<
549   \new Staff \with {
550     \consists "Timing_engraver"
551   } {
552       \time 3/4
553       c4 c c c c c
554   }
555   \new Staff \with {
556     \consists "Timing_engraver"
557   } {
558        \time 2/4
559        c4 c c c c c
560   }
561 >>
562 @end lilypond
563
564
565 @node Layout tunings within contexts
566 @subsection Layout tunings within contexts
567
568 Each context is responsible for creating certain types of graphical
569 objects. The settings used for printing these objects are also stored by
570 context. By changing these settings, the appearance of objects can be
571 altered.
572  
573 The syntax for this is
574
575 @example
576   \override @var{context}.@var{name}@code{ #'}@var{property} = #@var{value}
577 @end example
578
579 Here @var{name} is the name of a graphical object, like @code{Stem} or
580 @code{NoteHead}.  @var{property} is an internal variable of the
581 formatting system (`grob property' or `layout property'). It is a
582 symbol, so it must be quoted. The subsection refTODO explains what to
583 fill in for @var{name}, @var{property} and @var{value}. Here we only
584 discuss functionality of this command.
585
586 The command
587
588 @verbatim
589   \override Staff.Stem #'thickness = #4.0 
590 @end verbatim
591
592 @noindent
593 makes stems thicker (the default is 1.3, with staff line thickness as a
594 unit). Since the command specifies @context{Staff} as context, it only
595 applies to the current staff. Other staves will keep their normal
596 appearance.  Here we see the command in action:
597
598 @lilypond[verbatim,relative=2]
599   c4
600   \override Staff.Stem #'thickness = #4.0 
601   c4
602   c4
603   c4
604 @end lilypond
605
606 The @code{\override} command is executed during the interpreting phase,
607 and changes the definition of the @code{Stem} within
608 @context{Staff}. After the command all stems are thickened.
609
610 Analogous to @code{\set}, the @var{context} argument may be left out,
611 causing it to default to @context{Voice} and adding @code{\once} applies
612 the change during only one timestep
613
614 @lilypond[verbatim,relative=2]
615   c4
616   \once \override Stem #'thickness = #4.0 
617   c4
618   c4 
619 @end lilypond
620
621 The @code{\override} must be done before the object is
622 started. Therefore, when altering @emph{Spanner} objects, like slurs or
623 beams, the @code{\override} command must be executed at the moment that
624 the object is created. In this example,
625
626
627 @lilypond[verbatim,relative=2]
628   \override Slur #'thickness = #3.0
629   c8[( c
630   \override Beam #'thickness = #0.6
631   c8 c]) 
632 @end lilypond
633
634 @noindent
635 the slur is fatter and the beam is not. This is because the command for
636 @code{Beam} comes after the Beam is started. Therefore it has no effect.
637
638 Analogous to @code{\unset}, the @code{\revert} command for a context
639 undoes a @code{\override} command; like with @code{\unset}, it only
640 affects settings that were made in the same context. In other words, the
641 @code{\revert} in the next example does not do anything.
642
643 @verbatim
644   \override Voice.Stem #'thickness = #4.0
645   \revert Staff.Stem #'thickness
646 @end verbatim
647
648
649
650
651 @seealso
652
653 Internals: @internalsref{OverrideProperty}, @internalsref{RevertProperty},
654 @internalsref{PropertySet}, @internalsref{All-backend-properties}, and
655 @internalsref{All-layout-objects}.
656
657
658 @refbugs
659
660 The back-end is not very strict in type-checking object properties.
661 Cyclic references in Scheme values for properties can cause hangs
662 and/or crashes.
663
664
665 @node Changing context default settings
666 @subsection Changing context default settings
667
668 The adjustments of the previous chapters can also be entered separate
669 from the music, in the @code{\paper} block,
670
671 @example
672   \paper {
673      @dots{}
674      \context @{
675         \StaffContext
676
677         \set fontSize = #-2
678         \override Stem #'thickness
679         \remove "Time_signature_engraver"
680       @}
681    @}
682 @end example
683
684 This
685 @example
686   \StaffContext
687 @end example
688
689 @noindent
690 takes the existing definition @context{Staff} from the identifier
691 @code{StaffContext}. This works analogously other contexts, so the
692 existing definition  of @code{Voice} is in 
693 @code{\VoiceContext}.
694
695 The statements
696 @example
697         \set fontSize = #-2
698         \override Stem #'thickness
699         \remove "Time_signature_engraver"
700 @end example
701
702 @noindent
703 affect all staves in the score.
704
705 The @code{\set} keyword is optional within the @code{\paper} block, so
706
707 @example
708   fontSize = #-2
709 @end example
710
711 @noindent
712 will also work.
713
714
715
716
717 @node Defining new  contexts
718 @subsection Defining new  contexts
719
720 Specific contexts, like @context{Staff} and @code{Voice} are made of
721 simple building blocks, and it is possible to compose engraver
722 plug-ins in different combinations, thereby creating new types of
723 contexts.
724
725 The next example shows how to build a different type of
726 @context{Voice} context from scratch.  It will be similar to
727 @code{Voice}, but print centered slash noteheads only. It can be used
728 to indicate improvisation in Jazz pieces,
729
730 @lilypond[raggedright]
731   \paper { \context {
732     \name ImproVoice
733     \type "Engraver_group_engraver"
734     \consists "Note_heads_engraver"
735     \consists "Text_script_engraver"
736     \consists Pitch_squash_engraver
737     squashedPosition = #0
738     \override NoteHead #'style = #'slash
739     \override Stem #'transparent = ##t
740     \alias Voice
741   }
742   \context { \StaffContext
743     \accepts "ImproVoice"
744   }
745   \score { \notes \relative c'' {
746     a4 d8 bes8 \new ImproVoice { c4^"ad lib" 4 
747      c4 c^"undress"  c c_"while playing :)"  } 
748     a1 
749   }
750 @end lilypond
751
752
753 These settings are again done within a @code{\context} block inside a
754 @code{\paper} block,
755
756 @example
757   \paper  {
758     \context {
759       @dots{}
760     }
761   }
762 @end example
763
764 In the following discussion, the example input shown should go on the
765 @dots{} of the previous fragment.
766
767 First, name the context gets a name. Instead of @context{Voice} it
768 will be called @context{ImproVoice},
769
770 @verbatim
771   \name ImproVoice
772 @end verbatim
773
774 Since it is similar to the @context{Voice}, we want commands that work
775 on (existing) @context{Voice}s to remain working. This is achieved by
776 giving the new context an alias @context{Voice},
777
778 @verbatim
779   \alias Voice
780 @end verbatim
781
782 The context will print notes, and instructive texts
783
784 @verbatim
785   \consists Note_heads_engraver
786   \consists Text_script_engraver
787 @end verbatim
788
789 but only on the center line,
790
791 @verbatim
792   \consists Pitch_squash_engraver
793   squashedPosition = #0
794 @end verbatim
795
796 The @internalsref{Pitch_squash_engraver} modifies note heads (created
797 by @internalsref{Note_heads_engraver}) and sets their vertical
798 position to the value of @code{squashedPosition}, in this case
799 @code{0}, the center line.
800
801 The notes look like a  slash, without a stem,
802
803 @verbatim
804     \override NoteHead #'style = #'slash
805     \override Stem #'transparent = ##t
806 @end verbatim
807
808
809 All these plug-ins have to cooperate, and this is achieved with a
810 special plug-in, which must be marked with the keyword @code{\type}.
811 This should always be @internalsref{Engraver_group_engraver},
812
813 @example
814  \type "Engraver_group_engraver"
815 @end example
816
817 Put together, we get
818
819 @verbatim
820   \context {
821     \name ImproVoice
822     \type "Engraver_group_engraver"
823     \consists "Note_heads_engraver"
824     \consists "Text_script_engraver"
825     \consists Pitch_squash_engraver
826     squashedPosition = #0
827     \override NoteHead #'style = #'slash
828     \override Stem #'transparent = ##t
829     \alias Voice
830   }
831 @end verbatim
832
833 Contexts form hierarchies. We want to hang the @consists{ImproVoice}
834 under @consists{Staff}, just like normal @code{Voice}s. Therefore, we
835 modify the @code{Staff} definition with the @code{\accepts}
836 command,@footnote{The opposite of @code{\accepts} is @code{\denies},
837 which is sometimes when reusing existing context definitions. }
838
839
840
841 @verbatim
842   \context {
843     \StaffContext
844     \accepts ImproVoice    
845   }
846 @end verbatim 
847
848
849 @example
850
851
852     
853 @node Which properties to change
854 @subsection Which properties to change
855
856
857 There are many different properties.  Not all of them are listed in
858 this manual. However, the program reference lists them all in the
859 section @internalsref{Context-properties}, and most properties are
860 demonstrated in one of the
861 @ifhtml
862 @uref{../../../input/test/out-www/collated-files.html,tips-and-tricks}
863 @end ifhtml
864 @ifnothtml
865 tips-and-tricks
866 @end ifnothtml
867 examples.
868
869
870 @node Tuning output
871 @section Tuning output
872
873
874
875
876 There are situations where default layout decisions are not
877 sufficient.  In this section we discuss ways to override these
878 defaults.
879
880 Formatting is internally done by manipulating so called objects
881 (graphic objects). Each object carries with it a set of properties
882 (object or layout properties) specific to that object.  For example, a
883 stem object has properties that specify its direction, length and
884 thickness.
885
886 The most direct way of tuning the output is by altering the values of
887 these properties. There are two ways of doing that: first, you can
888 temporarily change the definition of one type of object, thus
889 affecting a whole set of objects.  Second, you can select one specific
890 object, and set a layout property in that object.
891
892 Do not confuse layout properties with translation
893 properties. Translation properties always use a mixed caps style
894 naming, and are manipulated using @code{\set} and @code{\unset}: 
895 @example
896   \set Context.propertyName = @var{value}
897 @end example
898
899 Layout properties are use Scheme style variable naming, i.e.  lower
900 case words separated with dashes. They are symbols, and should always
901 be quoted using @code{#'}.  For example, this could be an imaginary
902 layout property name:
903 @example
904   #'layout-property-name
905 @end example
906
907
908 @menu
909 * Common tweaks::               
910 * Constructing a tweak::        
911 @end menu
912
913
914
915 @node Common tweaks
916 @subsection Common tweaks
917
918 Some overrides are so common that predefined commands are provided as
919 a short cut.  For example, @code{\slurUp} and @code{\stemDown}. These
920 commands are described in
921 @ifhtml
922 the
923 @end ifhtml
924 @ref{Notation manual}, under the sections for slurs and stems
925 respectively.
926
927 The exact tuning possibilities for each type of layout object are
928 documented in the program reference of the respective
929 object. However, many layout objects share properties, which can be
930 used to apply generic tweaks.  We mention a couple of these:
931
932 @itemize @bullet
933 @item The @code{extra-offset} property, which
934 @cindex @code{extra-offset}
935 has a pair of numbers as value, moves around objects in the printout.
936 The first number controls left-right movement; a positive number will
937 move the object to the right.  The second number controls up-down
938 movement; a positive number will move it higher.  The units of these
939 offsets are staff-spaces.  The @code{extra-offset} property is a
940 low-level feature: the formatting engine is completely oblivious to
941 these offsets.
942
943 In the following example, the second fingering is moved a little to
944 the left, and 1.8 staff space downwards:
945
946 @cindex setting object properties
947
948 @lilypond[relative=1,verbatim]
949 \stemUp
950 f-5
951 \once \override Fingering
952     #'extra-offset = #'(-0.3 . -1.8) 
953 f-5
954 @end lilypond
955
956 @item
957 Setting the @code{transparent} property will cause an object to be printed
958 in `invisible ink': the object is not printed, but all its other
959 behavior is retained. The object still takes up space, it takes part in
960 collisions, and slurs, and ties and beams can be attached to it.
961
962 @cindex transparent objects
963 @cindex removing objects
964 @cindex invisible objects
965 The following example demonstrates how to connect different voices
966 using ties. Normally, ties only connect two notes in the same
967 voice. By introducing a tie in a different voice, and blanking a stem
968 in that voice, the tie appears to cross voices:
969
970 @lilypond[fragment,relative=2,verbatim]
971   << {
972       \once \override Stem #'transparent = ##t
973       b8~ b8\noBeam
974   } \\ {
975        b[ g8]
976   } >>
977 @end lilypond
978
979 @item
980 The @code{padding} property for objects with
981 @cindex @code{padding}
982 @code{side-position-interface} can be set to increase distance between
983 symbols that are printed above or below notes. We only give an
984 example; a more elaborate explanation is in @ref{Constructing a
985 tweak}:
986
987 @lilypond[relative=1,verbatim]
988   c2\fermata
989   \override Script #'padding = #3
990   b2\fermata
991 @end lilypond
992
993 @end itemize
994
995 More specific overrides are also possible.  The following section
996 discusses in depth how to figure out these statements for yourself.
997
998
999 @node Constructing a tweak
1000 @subsection Constructing a tweak
1001
1002
1003 @cindex internal documentation
1004 @cindex finding graphical objects
1005 @cindex graphical object descriptions 
1006 @cindex tweaking
1007 @cindex @code{\override}
1008 @cindex @code{\set}
1009 @cindex internal documentation
1010
1011
1012
1013 Three pieces of information are required to use @code{\override} and
1014 @code{\set}: the name of the layout object, the context and the name
1015 of the property.  We demonstrate how to glean this information from
1016 the notation manual and the program reference.
1017
1018 The generated documentation is a set of HTML pages which should be
1019 included if you installed a binary distribution, typically in
1020 @file{/usr/share/doc/lilypond}.  They are also available on the web:
1021 go to the @uref{http://lilypond.org,LilyPond website}, click
1022 ``Documentation'', select the correct version, and then click
1023 ``Program reference.'' It is advisable to bookmark the local HTML
1024 files. They will load faster than the ones on the web and matches the
1025 version of LilyPond you are using.
1026  
1027
1028
1029 @c  [TODO: revise for new site.]
1030
1031 Suppose we want to move the fingering indication in the fragment
1032 below:
1033
1034 @lilypond[relative=2,verbatim]
1035 c-2
1036 \stemUp
1037 f
1038 @end lilypond
1039
1040 If you visit the documentation of @code{Fingering} (in @ref{Fingering
1041 instructions}), you will notice that there is written:
1042
1043 @quotation
1044 @seealso
1045
1046 Internals: @internalsref{FingerEvent} and @internalsref{Fingering}.
1047
1048 @end quotation
1049
1050 @separate
1051
1052 @noindent
1053 In other words, the fingerings once entered, are internally stored as
1054 @code{FingerEvent} music objects. When printed, a @code{Fingering}
1055 layout object is created for every @code{FingerEvent}.
1056
1057 The Fingering object has a number of different functions, and each of
1058 those is captured in an interface. The interfaces are listed under
1059 @internalsref{Fingering} in the program reference.
1060
1061
1062
1063 The @code{Fingering} object has a fixed size
1064 (@internalsref{item-interface}), the symbol is a piece of text
1065 (@internalsref{text-interface}), whose font can be set
1066 (@internalsref{font-interface}).  It is centered horizontally
1067 (@internalsref{self-alignment-interface}), it is placed vertically
1068 next to other objects (@internalsref{side-position-interface}), and
1069 its placement is coordinated with other scripts
1070 (@internalsref{text-script-interface}).  It also has the standard
1071 @internalsref{grob-interface} (grob stands for Graphical object)
1072 @cindex grob
1073 @cindex graphical object
1074 @cindex layout object
1075 @cindex object, layout 
1076 with all the variables that come with
1077 it.  Finally, it denotes a fingering instruction, so it has
1078 @internalsref{finger-interface}.
1079
1080 For the vertical placement, we have to look under
1081 @code{side-position-interface}:
1082 @quotation
1083 @code{side-position-interface}
1084
1085   Position a victim object (this one) next to other objects (the
1086   support).  In this case, the property @code{direction} signifies where to put the
1087   victim object relative to the support (left or right, up or down?)
1088 @end quotation
1089
1090 @cindex padding
1091 @noindent
1092 below this description, the variable @code{padding} is described as
1093 @quotation
1094 @table @code
1095 @item padding
1096  (dimension, in staff space)
1097
1098    add this much extra space between objects that are next to each
1099 other. Default value: @code{0.6}
1100 @end table
1101 @end quotation
1102
1103 By increasing the value of @code{padding}, we can move away the
1104 fingering.  The following command inserts 3 staff spaces of white
1105 between the note and the fingering:
1106 @example
1107 \once \override Fingering   #'padding = #3
1108 @end example
1109
1110 Inserting this command before the Fingering object is created,
1111 i.e. before @code{c2}, yields the following result:
1112
1113 @lilypond[relative=2,fragment,verbatim]
1114 \once \override Fingering
1115     #'padding = #3
1116 c-2
1117 \stemUp
1118 f
1119 @end lilypond
1120
1121 The context name @code{Voice} in the example above can be determined
1122 as follows. In the documentation for @internalsref{Fingering}, it says
1123 @quotation
1124 Fingering grobs are created by: @internalsref{Fingering_engraver} @c
1125 @end quotation
1126
1127 Clicking @code{Fingering_engraver} shows the documentation of
1128 the module responsible for interpreting the fingering instructions and
1129 translating them to a @code{Fingering} object.  Such a module is called
1130 an @emph{engraver}.  The documentation of the @code{Fingering_engraver}
1131 says
1132 @example
1133 Fingering_engraver is part of contexts: Voice 
1134 @end example
1135 so tuning the settings for Fingering should be done with
1136 @example
1137   \override Fingering @dots{}
1138 @end example
1139
1140 Of course, the tweak may also done in a larger context than
1141 @code{Voice}, for example, @internalsref{Staff} or
1142 @internalsref{Score}.
1143
1144 @seealso
1145
1146 Internals: the program reference also contains alphabetical lists of
1147 @internalsref{Contexts}, @internalsref{All-layout-objects} and
1148 @internalsref{Music-expressions}, so you can also find which objects
1149 to tweak by browsing the internals document.
1150
1151 @node Fonts
1152 @section Fonts
1153
1154 @menu
1155 * Selecting font sizes::        
1156 * Font selection::              
1157 @end menu
1158
1159 @node Selecting font sizes
1160 @subsection Selecting font sizes
1161
1162 The most common thing to change about the appearance of fonts is their
1163 size. The font size of any context can be easily changed by setting
1164 the @code{fontSize} property for that context.  Its value is a number:
1165 negative numbers make the font smaller, positive numbers larger. An
1166 example is given below:
1167 @c
1168 @lilypond[fragment,relative=1,verbatim]
1169   c4 c4 \set fontSize = #-3
1170   f4 g4
1171 @end lilypond
1172 This command will set @code{font-size} (see below) in all layout
1173 objects in the current context. It does not change the size of
1174 variable symbols, such as beams or slurs.
1175
1176 The font size is set by modifying the @code{font-size} property.  Its
1177 value is a number indicating the size relative to the standard size.
1178 Each step up is an increase of approximately 12% of the font size. Six
1179 steps is exactly a factor two. The Scheme function @code{magstep}
1180 converts a @code{font-size} number to a scaling factor.
1181
1182 LilyPond has fonts in different design sizes: the music fonts for
1183 smaller sizes are chubbier, while the text fonts are relatively wider.
1184 Font size changes are achieved by scaling the design size that is
1185 closest to the desired size.
1186
1187 The @code{font-size} mechanism does not work for fonts selected
1188 through @code{font-name}. These may be scaled with
1189 @code{font-magnification}.
1190
1191
1192 One of the uses of @code{fontSize} is to get smaller symbols for cue
1193 notes. An elaborate example of those is in
1194 @inputfileref{input/test,cue-notes.ly}.
1195
1196 @cindex @code{font-style}
1197
1198 @refcommands
1199
1200 The following commands set @code{fontSize} for the current voice.
1201
1202 @cindex @code{\tiny}
1203 @code{\tiny}, 
1204 @cindex @code{\small}
1205 @code{\small}, 
1206 @cindex @code{\normalsize}
1207 @code{\normalsize}.
1208
1209
1210
1211 @cindex magnification
1212 @cindex cue notes
1213
1214
1215 @node Font selection
1216 @subsection Font selection
1217
1218 Font selection for the standard fonts, @TeX{}'s Computer Modern fonts,
1219 can also be adjusted with a more fine-grained mechanism.  By setting
1220 the object properties described below, you can select a different font;
1221 all three mechanisms work for every object that supports
1222 @code{font-interface}:
1223
1224
1225 @itemize @bullet
1226 @item @code{font-encoding}
1227 is a symbol that sets layout of the glyphs. Choices include
1228 @code{text} for normal text, @code{braces} (for piano staff braces),
1229 @code{music} (the standard music font, including ancient glyphs),
1230 @code{dynamic} (for dynamic signs) and @code{number} for the number
1231 font.
1232
1233
1234 @item @code{font-family}
1235  is a symbol indicating the general class of the typeface.  Supported are
1236 @code{roman} (Computer Modern), @code{sans} and @code{typewriter}
1237   
1238 @item @code{font-shape}
1239   is a symbol indicating the shape of the font, there are typically
1240 several font shapes available for each font family. Choices are
1241 @code{italic}, @code{caps} and @code{upright}.
1242
1243 @item @code{font-series}
1244 is a  symbol indicating the series of the font. There are typically several
1245 font series for each font family and shape. Choices are @code{medium}
1246 and @code{bold}. 
1247
1248 @end itemize
1249
1250 Fonts selected in the way sketched above come from a predefined style
1251 sheet.
1252
1253  The font used for printing a object can be selected by setting
1254 @code{font-name}, e.g.
1255 @example
1256   \override Staff.TimeSignature
1257       #'font-name = #"cmr17"
1258 @end example
1259
1260 @noindent
1261 Any font can be used, as long as it is available to @TeX{}. Possible
1262 fonts include foreign fonts or fonts that do not belong to the
1263 Computer Modern font family.  The size of fonts selected in this way
1264 can be changed with the @code{font-magnification} property.  For
1265 example, @code{2.0} blows up all letters by a factor 2 in both
1266 directions.
1267
1268 @cindex font size
1269 @cindex font magnification
1270
1271
1272
1273 @seealso
1274
1275 Init files: @file{ly/declarations-init.ly} contains hints how new
1276 fonts may be added to LilyPond.
1277
1278 @refbugs
1279
1280 No style sheet is provided for other fonts besides the @TeX{}
1281 Computer Modern family.
1282
1283 @cindex font selection
1284 @cindex font magnification
1285 @cindex @code{font-interface}
1286
1287
1288 @node Text markup
1289 @section Text markup
1290 @cindex text markup
1291 @cindex markup text
1292
1293
1294 @cindex typeset text
1295
1296 LilyPond has an internal mechanism to typeset texts. You can access it
1297 with the keyword @code{\markup}. Within markup mode, you can enter texts
1298 similar to lyrics: simply enter them, surrounded by spaces:
1299 @cindex markup
1300
1301 @lilypond[verbatim,fragment,relative=1]
1302  c1^\markup { hello }
1303  c1_\markup { hi there }
1304  c1^\markup { hi \bold there, is \italic anyone home? }
1305 @end lilypond
1306
1307 @cindex font switching
1308
1309 The markup in the example demonstrates font switching commands.  The
1310 command @code{\bold} and @code{\italic} only apply to the first
1311 following word; enclose a set of texts with braces to apply a command
1312 to more words:
1313 @example
1314   \markup @{ \bold @{ hi there @} @}
1315 @end example
1316
1317 @noindent
1318 For clarity, you can also do this for single arguments, e.g.
1319
1320 @verbatim
1321   \markup { is \italic { anyone } home }
1322 @end verbatim
1323
1324 @cindex font size, texts
1325
1326
1327 In markup mode you can compose expressions, similar to mathematical
1328 expressions, XML documents and music expressions.  The braces group
1329 notes into horizontal lines. Other types of lists also exist: you can
1330 stack expressions grouped with @code{<}, and @code{>} vertically with
1331 the command @code{\column}. Similarly, @code{\center-align} aligns
1332 texts by their center lines:
1333
1334 @lilypond[verbatim,fragment,relative=1]
1335  c1^\markup { \column < a bbbb c > }
1336  c1^\markup { \center-align < a bbbb c > }
1337  c1^\markup { \line < a b c > }
1338 @end lilypond
1339
1340
1341 Markups can be stored in variables, and these variables
1342 may be attached to notes, like
1343 @verbatim
1344 allegro = \markup { \bold \large { Allegro } }
1345 \notes { a^\allegro b c d }
1346 @end verbatim
1347
1348
1349 Some objects have alignment procedures of their own, which cancel out
1350 any effects of alignments applied to their markup arguments as a
1351 whole.  For example, the @internalsref{RehearsalMark} is horizontally
1352 centered, so using @code{\mark \markup @{ \left-align .. @}} has no
1353 effect.
1354
1355 Similarly, for moving whole texts over notes with
1356 @code{\raise}, use the following trick:
1357 @example
1358   "" \raise #0.5 raised
1359 @end example
1360
1361 The text @code{raised} is now raised relative to the empty string
1362 @code{""} which is not visible.  Alternatively, complete objects can
1363 be moved with layout properties such as @code{padding} and
1364 @code{extra-offset}.
1365
1366
1367
1368 @seealso
1369
1370 Init files:  @file{scm/new-markup.scm}.
1371
1372
1373 @refbugs
1374
1375 Text layout is ultimately done by @TeX{}, which does kerning of
1376 letters.  LilyPond does not account for kerning, so texts will be
1377 spaced slightly too wide.
1378
1379 Syntax errors for markup mode are confusing.
1380
1381 Markup texts cannot be used in the titling of the @code{\header}
1382 field. Titles are made by La@TeX{}, so La@TeX{} commands should be used
1383 for formatting.
1384
1385
1386
1387 @menu
1388 * Overview of text markup commands::  
1389 @end menu
1390
1391 @node  Overview of text markup commands
1392 @subsection Overview of text markup commands
1393
1394 @include markup-commands.tely
1395
1396
1397 @node Global layout
1398 @section Global layout
1399
1400 The global layout determined by three factors: the page layout, the
1401 line breaks and the spacing. These all influence each other. The
1402 choice of spacing determines how densely each system of music is set,
1403 which influences where line breaks breaks are chosen, and thus
1404 ultimately how many pages a piece of music takes. This section
1405 explains how to tune the algorithm for spacing.
1406
1407 Globally spoken, this procedure happens in three steps: first,
1408 flexible distances (``springs'') are chosen, based on durations. All
1409 possible line breaking combination are tried, and the one with the
1410 best results---a layout that has uniform density and requires as
1411 little stretching or cramping as possible---is chosen. When the score
1412 is processed by @TeX{}, each page is filled with systems, and page breaks
1413 are chosen whenever the page gets full.
1414
1415
1416
1417 @menu
1418 * Vertical spacing::            
1419 * Horizontal spacing::          
1420 @end menu
1421
1422
1423 @node Vertical spacing
1424 @subsection Vertical spacing
1425
1426 @cindex vertical spacing
1427 @cindex distance between staves
1428 @cindex staff distance
1429 @cindex between staves, distance
1430 @cindex staves per page
1431 @cindex space between staves
1432
1433 The height of each system is determined automatically by LilyPond, to
1434 keep systems from bumping into each other, some minimum distances are
1435 set.  By changing these, you can put staves closer together, and thus
1436 put more  systems onto one page.
1437
1438 Normally staves are stacked vertically. To make
1439 staves maintain a distance, their vertical size is padded. This is
1440 done with the property @code{minimumVerticalExtent}. It takes a pair
1441 of numbers, so if you want to make it smaller from its, then you could
1442 set
1443 @example
1444   \set Staff.minimumVerticalExtent = #'(-4 . 4)
1445 @end example
1446 This sets the vertical size of the current staff to 4 staff spaces on
1447 either side of the center staff line.  The argument of
1448 @code{minimumVerticalExtent} is interpreted as an interval, where the
1449 center line is the 0, so the first number is generally negative.  The
1450 staff can be made larger at the bottom by setting it to @code{(-6
1451 . 4)}.
1452
1453 The piano staves are handled a little differently: to make cross-staff
1454 beaming work correctly, it is necessary that the distance between staves
1455 is fixed beforehand.  This is also done with a
1456 @internalsref{VerticalAlignment} object, created in
1457 @internalsref{PianoStaff}. In this object the distance between the
1458 staves is fixed by setting @code{forced-distance}. If you want to
1459 override this, use a @code{\context} block as follows:
1460 @example
1461   \paper @{
1462     \context @{
1463       \PianoStaffContext
1464       \override VerticalAlignment #'forced-distance = #9
1465     @}
1466     @dots{}
1467   @}
1468 @end example
1469 This would bring the staves together at a distance of 9 staff spaces,
1470 measured from the center line of each staff.
1471
1472 @seealso
1473
1474 Internals: Vertical alignment of staves is handled by the
1475 @internalsref{VerticalAlignment} object.
1476
1477
1478
1479
1480 @node Horizontal spacing
1481 @subsection Horizontal Spacing
1482
1483 The spacing engine translates differences in durations into
1484 stretchable distances (``springs'') of differing lengths. Longer
1485 durations get more space, shorter durations get less.  The shortest
1486 durations get a fixed amount of space (which is controlled by
1487 @code{shortest-duration-space} in the @internalsref{SpacingSpanner} object). 
1488 The longer the duration, the more space it gets: doubling a
1489 duration adds a fixed amount (this amount is controlled by
1490 @code{spacing-increment}) of space to the note.
1491
1492 For example, the following piece contains lots of half, quarter and
1493 8th notes, the eighth note is followed by 1 note head width (NHW). 
1494 The quarter note is followed by 2 NHW, the half by 3 NHW, etc.
1495 @lilypond[fragment,verbatim,relative=1] c2 c4. c8 c4. c8 c4. c8 c8
1496 c8 c4 c4 c4
1497 @end lilypond
1498
1499 Normally, @code{shortest-duration-space} is set to 1.2, which is the
1500 width of a note head, and @code{shortest-duration-space} is set to
1501 2.0, meaning that the shortest note gets 2 NHW (i.e. 2 times
1502 @code{shortest-duration-space}) of space. For normal notes, this space
1503 is always counted from the left edge of the symbol, so the shortest
1504 notes are generally followed by one NHW of space.
1505
1506 If one would follow the above procedure exactly, then adding a single
1507 32th note to a score that uses 8th and 16th notes, would widen up the
1508 entire score a lot. The shortest note is no longer a 16th, but a 32nd,
1509 thus adding 1 NHW to every note. To prevent this, the
1510 shortest duration for spacing is not the shortest note in the score,
1511 but the most commonly found shortest note.  Notes that are even
1512 shorter this are followed by a space that is proportional to their
1513 duration relative to the common shortest note.  So if we were to add
1514 only a few 16th notes to the example above, they would be followed by
1515 half a NHW:
1516
1517 @lilypond[fragment,verbatim,relative=2]
1518  c2 c4. c8 c4. c16[ c] c4. c8 c8 c8 c4 c4 c4
1519 @end lilypond
1520
1521 The most common shortest duration is determined as follows: in every
1522 measure, the shortest duration is determined. The most common short
1523 duration, is taken as the basis for the spacing, with the stipulation
1524 that this shortest duration should always be equal to or shorter than
1525 1/8th note. The shortest duration is printed when you run lilypond
1526 with @code{--verbose}.  These durations may also be customized. If you
1527 set the @code{common-shortest-duration} in
1528 @internalsref{SpacingSpanner}, then this sets the base duration for
1529 spacing. The maximum duration for this base (normally 1/8th), is set
1530 through @code{base-shortest-duration}.
1531
1532 @cindex @code{common-shortest-duration}
1533 @cindex @code{base-shortest-duration}
1534 @cindex @code{stem-spacing-correction}
1535 @cindex @code{spacing}
1536
1537 In the introduction it was explained that stem directions influence
1538 spacing. This is controlled with @code{stem-spacing-correction}
1539 property in @internalsref{NoteSpacing}, which are generated for every
1540 @internalsref{Voice} context. The @code{StaffSpacing} object
1541 (generated at @internalsref{Staff} context) contains the same property
1542 for controlling the stem/bar line spacing. The following example
1543 shows these corrections, once with default settings, and once with
1544 exaggerated corrections:
1545
1546 @lilypond
1547     \score { \notes {
1548       c'4 e''4 e'4 b'4 |
1549       b'4 e''4 b'4 e''4|
1550       \override Staff.NoteSpacing   #'stem-spacing-correction
1551    = #1.5
1552       \override Staff.StaffSpacing   #'stem-spacing-correction
1553    = #1.5
1554       c'4 e''4 e'4 b'4 |
1555       b'4 e''4 b'4 e''4|      
1556     }
1557     \paper { raggedright = ##t } }
1558 @end lilypond
1559
1560 @cindex SpacingSpanner, overriding properties
1561
1562 Properties of the  @internalsref{SpacingSpanner} must be overridden
1563 from the @code{\paper} block, since the @internalsref{SpacingSpanner} is
1564 created before any property commands are interpreted.
1565 @example
1566 \paper @{ \context  @{
1567   \ScoreContext
1568   SpacingSpanner \override #'spacing-increment = #3.0
1569 @} @}
1570 @end example
1571
1572
1573 @seealso
1574
1575 Internals: @internalsref{SpacingSpanner}, @internalsref{NoteSpacing},
1576 @internalsref{StaffSpacing}, @internalsref{SeparationItem}, and
1577 @internalsref{SeparatingGroupSpanner}.
1578
1579 @refbugs
1580
1581 Spacing is determined on a score wide basis. If you have a score that
1582 changes its character (measured in durations) halfway during the
1583 score, the part containing the longer durations will be spaced too
1584 widely.
1585
1586 There is no convenient mechanism to manually override spacing.
1587
1588
1589
1590 @node Font Size
1591 @section Font size
1592
1593 @cindex font size, setting
1594 @cindex staff size, setting
1595 @cindex @code{paper} file
1596
1597 The Feta font provides musical symbols at eight  different
1598 sizes. Each font is tuned for a different staff size: at smaller sizes
1599 the font gets heavier, to match the relatively heavier staff lines.
1600 The recommended font sizes are listed in the following table:
1601
1602 @multitable @columnfractions  .25 .25 .25 .25
1603
1604 @item @b{font name}
1605 @tab @b{staff height (pt)}
1606 @tab @b{staff height (mm)}
1607 @tab @b{use}
1608
1609 @item feta11
1610 @tab 11.22
1611 @tab 3.9 
1612 @tab pocket scores
1613
1614 @item feta13
1615 @tab 12.60
1616 @tab 4.4
1617 @tab
1618
1619 @item feta14
1620 @tab 14.14
1621 @tab 5.0
1622 @tab 
1623
1624 @item feta16
1625 @tab 15.87
1626 @tab 5.6
1627 @tab 
1628
1629 @item feta18
1630 @tab 17.82
1631 @tab 6.3
1632 @tab song books
1633
1634 @item feta20
1635 @tab 17.82
1636 @tab 7.0
1637 @tab standard parts 
1638
1639 @item feta23
1640 @tab 22.45 
1641 @tab 7.9
1642 @tab 
1643
1644 @item feta20
1645 @tab 25.2 
1646 @tab 8.9
1647 @tab
1648 @c modern rental material  ?
1649
1650 @end multitable
1651
1652 These fonts are available in any sizes. The context property
1653 @code{fontSize} and the layout property @code{staff-space} (in
1654 @internalsref{StaffSymbol}) can be used to tune size for individual
1655 staves. The size of individual staves are relative to the global size,
1656 which can be set   in the following manner:
1657
1658 @example
1659   #(set-global-staff-size 14)
1660 @end example
1661
1662 This sets the global default size to 14pt staff height, and scales all
1663 fonts accordingly.
1664
1665 @seealso
1666
1667 This manual: @ref{Selecting font sizes}.
1668
1669
1670 @menu
1671 * Line breaking::               
1672 * Page layout::                 
1673 * Defining contexts::           
1674 * Defining new contexts::       
1675 @end menu
1676
1677 @node Line breaking
1678 @subsection Line breaking
1679
1680 @cindex line breaks
1681 @cindex breaking lines
1682
1683 Line breaks are normally computed automatically. They are chosen such
1684 that lines look neither cramped nor loose, and that consecutive lines
1685 have similar density.
1686
1687 Occasionally you might want to override the automatic breaks; you can
1688 do this by  specifying @code{\break}. This will force a line break at
1689 this point.  Line breaks can only occur at places where there are bar
1690 lines.  If you want to have a line break where there is no bar line,
1691 you can force an invisible bar line by entering @code{\bar
1692 ""}. Similarly, @code{\noBreak} forbids a line break at a 
1693 point.
1694
1695
1696 @cindex regular line breaks
1697 @cindex four bar music. 
1698
1699 For line breaks at regular intervals  use @code{\break} separated by
1700 skips and repeated with @code{\repeat}:
1701 @example
1702 <<  \repeat unfold 7 @{
1703          s1 \noBreak s1 \noBreak
1704          s1 \noBreak s1 \break  @}
1705    @emph{the real music}
1706 >> 
1707 @end  example
1708
1709 @noindent
1710 This makes the following 28 measures (assuming 4/4 time) be broken every
1711 4 measures, and only there.
1712
1713 @refcommands
1714
1715 @code{\break}, @code{\noBreak}
1716 @cindex @code{\break}
1717 @cindex @code{\noBreak}
1718
1719 @seealso
1720
1721 Internals: @internalsref{BreakEvent}.
1722
1723
1724 @node Page layout
1725 @subsection Page layout
1726
1727 @cindex page breaks
1728 @cindex breaking pages
1729
1730 @cindex @code{indent}
1731 @cindex @code{linewidth}
1732
1733 The most basic settings influencing the spacing are @code{indent} and
1734 @code{linewidth}. They are set in the @code{\paper} block. They
1735 control the indentation of the first line of music, and the lengths of
1736 the lines.
1737
1738 If  @code{raggedright} is set to true in the @code{\paper}
1739 block, then the lines are justified at their natural length. This
1740 useful for short fragments, and for checking how tight the natural
1741 spacing is.
1742
1743 @cindex page layout
1744 @cindex vertical spacing
1745
1746 The page layout process happens outside the LilyPond formatting
1747 engine: variables controlling page layout are passed to the output,
1748 and are further interpreted by @code{lilypond} wrapper program. It
1749 responds to the following variables in the @code{\paper} block.  The
1750 spacing between systems is controlled with @code{interscoreline}, its
1751 default is 16pt.  The distance between the score lines will stretch in
1752 order to fill the full page @code{interscorelinefill} is set to a
1753 positive number.  In that case @code{interscoreline} specifies the
1754 minimum spacing.
1755
1756 @cindex @code{textheight}
1757 @cindex @code{interscoreline}
1758 @cindex @code{interscorelinefill}
1759
1760 If the variable @code{lastpagefill} is defined,
1761 @c fixme: this should only be done if lastpagefill= #t 
1762 systems are evenly distributed vertically on the last page.  This
1763 might produce ugly results in case there are not enough systems on the
1764 last page.  The @command{lilypond-book} command ignores
1765 @code{lastpagefill}.  See @ref{lilypond-book manual} for more
1766 information.
1767
1768 @cindex @code{lastpagefill}
1769
1770 Page breaks are normally computed by @TeX{}, so they are not under
1771 direct control of LilyPond.  However, you can insert a commands into
1772 the @file{.tex} output to instruct @TeX{} where to break pages.  This
1773 is done by setting the @code{between-systems-strings} on the
1774 @internalsref{NonMusicalPaperColumn} where the system is broken.
1775 An example is shown in @inputfileref{input/regression,between-systems.ly}.
1776 The predefined command @code{\newpage} also does this.
1777
1778 @cindex paper size
1779 @cindex page size
1780 @cindex @code{papersize}
1781
1782 To change the paper size, use the following Scheme code:
1783 @example
1784         \paper@{
1785            #(set-paper-size "a4")
1786         @}
1787 @end example
1788
1789
1790 @refcommands
1791
1792 @cindex @code{\newpage}
1793 @code{\newpage}. 
1794
1795
1796 @seealso
1797
1798 In this manual: @ref{Invoking lilypond}.
1799
1800 Examples: @inputfileref{input/regression,between-systems.ly}.
1801
1802 Internals: @internalsref{NonMusicalPaperColumn}.
1803
1804 @refbugs
1805
1806 LilyPond has no concept of page layout, which makes it difficult to
1807 reliably choose page breaks in longer pieces.
1808
1809
1810
1811
1812 @node Defining contexts
1813 @subsection Defining contexts
1814
1815 @cindex context definition
1816 @cindex translator definition
1817
1818 The most common way to create a new context definition is by extending
1819 an existing one.  An existing context from the paper block is copied
1820 by referencing a context identifier:
1821
1822 @example
1823 \paper @{
1824   \context @{
1825     @var{context-identifier}
1826   @}
1827 @}
1828 @end example
1829
1830 @noindent
1831 Every predefined context has a standard identifier. For example, the
1832 @code{Staff} context can be referred to as @code{\StaffContext}.
1833
1834 The context can then be modified by setting or changing properties,
1835 e.g.
1836 @example
1837 \context @{
1838   \StaffContext
1839   Stem \set #'thickness = #2.0
1840   defaultBarType = #"||"
1841 @}
1842 @end example
1843 These assignments happen before interpretation starts, so a property
1844 command will override any predefined settings.
1845
1846 @cindex engraver
1847
1848 @refbugs
1849
1850 It is not possible to collect multiple property assignments in a
1851 variable, and apply to one @code{\context} definition by
1852 referencing that variable.
1853
1854
1855
1856 @node Defining new contexts
1857 @subsection Defining new contexts
1858
1859
1860 It is also possible to define new contexts from scratch.  To do this,
1861 you must define give the new context a name.  In the following
1862 example, a very simple Staff context is created: one that will put
1863 note heads on a staff symbol.
1864
1865 @example
1866 \context @{
1867   \type "Engraver_group_engraver"
1868   \name "SimpleStaff"
1869   \alias "Staff"
1870   \consists "Staff_symbol_engraver"
1871   \consists "Note_head_engraver"
1872   \consistsend "Axis_group_engraver"
1873 @}
1874 @end example
1875
1876 @noindent
1877 The argument of @code{\type} is the name for a special engraver that
1878 handles cooperation between simple engravers such as
1879 @code{Note_head_engraver} and @code{Staff_symbol_engraver}.  This
1880 should always be  @code{Engraver_group_engraver} (unless you are
1881 defining a Score context from scratch, in which case
1882 @code{Score_engraver}   must be used).
1883
1884 The complete list of context  modifiers is the following:
1885 @itemize @bullet
1886 @item @code{\alias} @var{alternate-name}:
1887 This specifies a different name.  In the above example,
1888 @code{\set Staff.X = Y} will also work on @code{SimpleStaff}s.
1889
1890 @item @code{\consistsend} @var{engravername}:
1891 Analogous to @code{\consists}, but makes sure that
1892 @var{engravername} is always added to the end of the list of
1893 engravers.
1894
1895 Engravers that group context objects into axis groups or alignments
1896 need to be at the end of the list. @code{\consistsend} insures that
1897 engravers stay at the end even if a user adds or removes engravers.
1898
1899 @item @code{\accepts} @var{contextname}:
1900 This context can contains @var{contextname} contexts.  The first
1901 @code{\accepts} is created as a default context when events (e.g. notes
1902 or rests) are encountered.
1903
1904 @item @code{\denies}:
1905 The opposite of @code{\accepts}.
1906
1907 @item @code{\name} @var{contextname}:
1908 This sets the type name of the context, e.g. @code{Staff},
1909 @code{Voice}.  If the name is not specified, the translator will not
1910 do anything.
1911 @end itemize
1912
1913 @c EOF
1914
1915
1916
1917
1918 @node Output details
1919 @section Output details
1920
1921 The default output format is La@TeX{}, which should be run
1922 through La@TeX{}.  Using the option @option{-f}
1923 (or @option{--format}) other output formats can be selected also, but
1924  none of them work reliably.
1925
1926 Now the music is output system by system (a `system' consists of all
1927 staves belonging together).  From @TeX{}'s point of view, a system is an
1928 @code{\hbox} which contains a lowered @code{\vbox} so that it is centered
1929 vertically on the baseline of the text.  Between systems,
1930 @code{\interscoreline} is inserted vertically to have stretchable space.
1931 The horizontal dimension of the @code{\hbox} is given by the
1932 @code{linewidth} parameter from LilyPond's @code{\paper} block.
1933
1934 After the last system LilyPond emits a stronger variant of
1935 @code{\interscoreline} only if the macro
1936 @code{\lilypondpaperlastpagefill} is not defined (flushing the systems
1937 to the top of the page).  You can avoid that by setting the variable
1938 @code{lastpagefill} in LilyPond's @code{\paper} block.
1939
1940 It is possible to fine-tune the vertical offset further by defining the
1941 macro @code{\lilypondscoreshift}:
1942
1943 @example
1944 \def\lilypondscoreshift@{0.25\baselineskip@}
1945 @end example
1946
1947 @noindent
1948 where @code{\baselineskip} is the distance from one text line to the next.
1949
1950 Here an example how to embed a small LilyPond file @code{foo.ly} into
1951 running La@TeX{} text without using the @code{lilypond-book} script
1952 (@pxref{lilypond-book manual}):
1953
1954 @example
1955 \documentclass@{article@}
1956
1957 \def\lilypondpaperlastpagefill@{@}
1958 \lineskip 5pt
1959 \def\lilypondscoreshift@{0.25\baselineskip@}
1960
1961 \begin@{document@}
1962 This is running text which includes an example music file
1963 \input@{foo.tex@}
1964 right here.
1965 \end@{document@}
1966 @end example
1967
1968 The file @file{foo.tex} has been simply produced with
1969
1970 @example
1971   lilypond-bin foo.ly
1972 @end example
1973
1974 The call to @code{\lineskip} assures that there is enough vertical space
1975 between the LilyPond box and the surrounding text lines.
1976