]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/learning/working.itely
Docs: reorganize documentation directory structure
[lilypond.git] / Documentation / learning / working.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.  See TRANSLATION for details.
8 @end ignore
9
10 @c \version "2.12.0"
11
12 @node Working on LilyPond projects
13 @chapter Working on LilyPond projects
14
15 This section explains how to solve or avoid certain common
16 problems.  If you have programming experience, many of these
17 tips may seem obvious, but it is still advisable to read
18 this chapter.
19
20
21 @menu
22 * Suggestions for writing LilyPond input files::
23 * When things don't work::
24 * Scores and parts::
25 * Make and Makefiles::
26 @end menu
27
28
29 @node Suggestions for writing LilyPond input files
30 @section Suggestions for writing LilyPond input files
31
32 Now you're ready to begin writing larger LilyPond input files --
33 not just the little examples in the tutorial, but whole pieces.
34 But how should you go about doing it?
35
36 As long as LilyPond can understand your input files and produce
37 the output that you want, it doesn't matter what your input files
38 look like.  However, there are a few other things to consider when
39 writing LilyPond input files.
40
41 @itemize
42 @item What if you make a mistake?  The structure of a LilyPond
43 file can make certain errors easier (or harder) to find.
44
45 @item What if you want to share your input files with somebody
46 else?  In fact, what if you want to alter your own input files in
47 a few years?  Some LilyPond input files are understandable at
48 first glance; others may leave you scratching your head
49 for an hour.
50
51 @item What if you want to upgrade your LilyPond file for use
52 with a later version of LilyPond?  The input syntax changes
53 occasionally as LilyPond improves.  Most changes can be
54 done automatically with @code{convert-ly}, but some changes
55 might require manual assistance.  LilyPond input files can be
56 structured in order to be easier (or harder) to update.
57
58 @end itemize
59
60 @menu
61 * General suggestions::
62 * Typesetting existing music::
63 * Large projects::
64 * Saving typing with variables and functions::
65 * Style sheets::
66 @end menu
67
68
69 @node General suggestions
70 @subsection General suggestions
71
72 Here are a few suggestions that can help you to avoid or fix
73 problems:
74
75 @itemize
76 @item @strong{Include @code{\version} numbers in every file}.  Note that all
77 templates contain @code{\version} information.  We
78 highly recommend that you always include the @code{\version}, no matter
79 how small your file is.  Speaking from personal experience, it's
80 quite frustrating to try to remember which version of LilyPond you were
81 using a few years ago.  @command{convert-ly} requires you to declare
82 which version of LilyPond you used.
83
84 @item @strong{Include checks}: @ruser{Bar and bar number checks},
85 @ruser{Octave checks}.  If you include checks every so often, then
86 if you make a mistake, you can pinpoint it quicker.  How often is
87 @q{every so often}?  It depends on the complexity of the music.
88 For very simple music, perhaps just once or twice.  For very
89 complex music, perhaps every bar.
90
91 @item @strong{One bar per line of text}.  If there is anything complicated,
92 either in the music
93 itself or in the output you desire, it's often good to write only one bar
94 per line.  Saving screen space by cramming eight bars per line just isn't
95 worth it if you have to @q{debug} your input files.
96
97 @item @strong{Comment your input files}.  Use either bar numbers
98 (every so often) or
99 references to musical themes (@q{second theme in violins,} @q{fourth
100 variation,} etc.).  You may not need comments when you're writing the piece
101 for the first time, but if you want to go back to change something two or
102 three years later, or if you pass the source over to a friend, it will
103 be much more
104 challenging to determine your intentions or how your file is structured if
105 you didn't comment the file.
106
107 @item @strong{Indent your braces}.  A lot of problems are caused by an
108 imbalance
109 in the number of @code{@{} and @code{@}}.
110
111 @item @strong{Explicitly add durations} at the beginnings of sections
112 and variables.  If you specify @code{c4 d e} at the beginning of a
113 phrase (instead of just @code{c d e}) you can save yourself some
114 problems if you rearrange your music later.
115
116 @item @strong{Separate tweaks} from music definitions.  See
117 @ref{Saving typing with variables and functions}, and
118 @ref{Style sheets}.
119
120 @end itemize
121
122
123 @node Typesetting existing music
124 @subsection Typesetting existing music
125
126 If you are entering music from an existing score (i.e., typesetting a
127 piece of existing sheet music),
128
129 @itemize
130
131 @item Enter the manuscript (the physical copy of the music) into
132 LilyPond one system at a time (but still only one bar per line of text),
133 and check each system when you finish it.  You may use the
134 @code{showLastLength} or @code{showFirstLength} properties to speed up
135 processing -- see @ruser{Skipping corrected music}.
136
137 @item Define @code{mBreak = @{ \break @}} and insert @code{\mBreak}
138 in the input file whenever the manuscript has a line break.  This
139 makes it much easier to compare the LilyPond music to the original
140 music.  When you are finished proofreading your score, you may
141 define @code{mBreak = @{ @}} to remove all those line breaks.  This
142 will allow LilyPond to place line breaks wherever it feels are
143 best.
144
145 @item When entering a part for a transposing instrument into a
146 variable, it is recommended that the notes are wrapped in
147
148 @example
149 \transpose c natural-pitch @{...@}
150 @end example
151 (where @code{natural-pitch} is the open pitch of the instrument) so
152 that the music in the variable is effectively in C. You can transpose
153 it back again when the variable is used, if required, but you might
154 not want to (e.g., when printing a score in concert pitch,
155 converting a trombone part from treble to bass clef, etc.)
156 Mistakes in transpositions are less likely if all the music in
157 variables is at a consistent pitch.
158
159 Also, only ever transpose to/from C. That means that the only other
160 keys you will use are the natural pitches of the instruments - bes
161 for a B-flat trumpet, aes for an A-flat clarinet, etc.
162
163 @end itemize
164
165
166 @node Large projects
167 @subsection Large projects
168
169 When working on a large project, having a clear structure to your
170 lilypond input files becomes vital.
171
172 @itemize
173
174 @item @strong{Use a variable for each voice}, with a minimum of
175 structure inside the definition.  The structure of the
176 @code{\score} section is the most likely thing to change;
177 the @code{violin} definition is extremely unlikely to change
178 in a new version of LilyPond.
179
180 @example
181 violin = \relative c'' @{
182 g4 c'8. e16
183 @}
184 ...
185 \score @{
186   \new GrandStaff @{
187     \new Staff @{
188       \violin
189     @}
190   @}
191 @}
192 @end example
193
194 @item @strong{Separate tweaks from music definitions}.  This
195 point was made previously, but for large
196 projects it is absolutely vital.  We might need to change
197 the definition of @code{fthenp}, but then we only need
198 to do this once, and we can still avoid touching anything
199 inside @code{violin}.
200
201 @example
202 fthenp = _\markup@{
203   \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @}
204 violin = \relative c'' @{
205 g4\fthenp c'8. e16
206 @}
207 @end example
208
209 @end itemize
210
211
212 @node Saving typing with variables and functions
213 @subsection Saving typing with variables and functions
214
215 @cindex variables
216 @cindex variables
217
218 By this point, you've seen this kind of thing:
219
220 @lilypond[quote,verbatim,ragged-right]
221 hornNotes = \relative c'' { c4 b dis c }
222 \score {
223   {
224     \hornNotes
225   }
226 }
227 @end lilypond
228
229 You may even realize that this could be useful in minimalist music:
230
231 @lilypond[quote,verbatim,ragged-right]
232 fragmentA = \relative c'' { a4 a8. b16 }
233 fragmentB = \relative c'' { a8. gis16 ees4 }
234 violin = \new Staff { \fragmentA \fragmentA \fragmentB \fragmentA }
235 \score {
236   {
237     \violin
238   }
239 }
240 @end lilypond
241
242 However, you can also use these variables (also known as
243 variables, macros, or (user-defined) command) for tweaks:
244
245 @lilypond[quote,verbatim,ragged-right]
246 dolce = \markup{ \italic \bold dolce }
247 padText = { \once \override TextScript #'padding = #5.0 }
248 fthenp=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p }
249 violin = \relative c'' {
250   \repeat volta 2 {
251     c4._\dolce b8 a8 g a b |
252     \padText
253     c4.^"hi there!" d8 e' f g d |
254     c,4.\fthenp b8 c4 c-. |
255   }
256 }
257 \score {
258   {
259     \violin
260   }
261 \layout{ragged-right=##t}
262 }
263 @end lilypond
264
265 These variables are obviously useful for saving
266 typing.  But they're worth considering even if you
267 only use them once -- they reduce complexity.  Let's
268 look at the previous example without any
269 variables.  It's a lot harder to read, especially
270 the last line.
271
272 @example
273 violin = \relative c'' @{
274   \repeat volta 2 @{
275     c4._\markup@{ \italic \bold dolce @} b8 a8 g a b |
276     \once \override TextScript #'padding = #5.0
277     c4.^"hi there!" d8 e' f g d |
278     c,4.\markup@{ \dynamic f \italic \small @{ 2nd @}
279       \hspace #0.1 \dynamic p @} b8 c4 c-. |
280   @}
281 @}
282 @end example
283
284 @c TODO Replace the following with a better example  -td
285 @c Skylining handles this correctly without padText
286
287 So far we've seen static substitution -- when LilyPond
288 sees @code{\padText}, it replaces it with the stuff that
289 we've defined it to be (ie the stuff to the right of
290 @code{padtext=}).
291
292 LilyPond can handle non-static substitution, too (you
293 can think of these as functions).
294
295 @lilypond[quote,verbatim,ragged-right]
296 padText =
297 #(define-music-function (parser location padding) (number?)
298   #{
299     \once \override TextScript #'padding = #$padding
300   #})
301
302 \relative c''' {
303   c4^"piu mosso" b a b
304   \padText #1.8
305   c4^"piu mosso" d e f
306   \padText #2.6
307   c4^"piu mosso" fis a g
308 }
309 @end lilypond
310
311 Using variables is also a good way to reduce work if the
312 LilyPond input syntax changes (see @ref{Updating old input files}).  If
313 you have a single definition (such as @code{\dolce}) for all your
314 input files (see @ref{Style sheets}), then if the syntax changes, you
315 only need to update your single @code{\dolce} definition,
316 instead of making changes throughout every @code{.ly} file.
317
318
319 @node Style sheets
320 @subsection Style sheets
321
322 The output that LilyPond produces can be heavily modified; see
323 @ref{Tweaking output}, for details.  But what if you have many
324 input files that you want to apply your tweaks to?  Or what if you
325 simply want to separate your tweaks from the actual music?  This
326 is quite easy to do.
327
328 Let's look at an example.  Don't worry if you don't understand
329 the parts with all the @code{#()}.  This is explained in
330 @ref{Advanced tweaks with Scheme}.
331
332 @lilypond[quote,verbatim,ragged-right]
333 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
334   #:line(#:dynamic "mp" #:text #:italic "dolce" )))
335
336 inst = #(define-music-function (parser location string) (string?)
337   (make-music
338     'TextScriptEvent
339     'direction UP
340     'text (markup #:bold (#:box string))))
341
342 \relative c'' {
343   \tempo 4=50
344   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
345   \inst "Clarinet"
346   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
347 }
348 @end lilypond
349
350 There are some problems with overlapping output; we'll fix those using
351 the techniques in @ref{Moving objects}.  But let's also
352 do something about the @code{mpdolce} and @code{inst}
353 definitions.  They produce the output we desire, but we might want
354 to use them in another piece.  We could simply copy-and-paste them
355 at the top of every file, but that's an annoyance.  It also leaves
356 those definitions in our input files, and I personally find all
357 the @code{#()} somewhat ugly.  Let's hide them in another file:
358
359 @example
360 %%% save this to a file called "definitions.ily"
361 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
362   #:line(#:dynamic "mp" #:text #:italic "dolce" )))
363
364 inst = #(define-music-function (parser location string) (string?)
365   (make-music
366     'TextScriptEvent
367     'direction UP
368     'text (markup #:bold (#:box string))))
369 @end example
370
371 We will refer to this file using the @code{\include} command near
372 the top of the music file. (The extension @code{.ily} is used to
373 distinguish this included file, which is not meant to be compiled
374 on its own, from the main file.)
375 Now let's modify our music (let's save this file as @file{"music.ly"}).
376
377 @c  We have to do this awkward example/lilypond-non-verbatim
378 @c  because we can't do the \include stuff in the manual.
379
380 @example
381 \include "definitions.ily"
382
383 \relative c'' @{
384   \tempo 4=50
385   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
386   \inst "Clarinet"
387   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
388 @}
389 @end example
390
391 @lilypond[quote,ragged-right]
392 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
393   #:line(#:dynamic "mp" #:text #:italic "dolce" )))
394
395 inst = #(define-music-function (parser location string) (string?)
396   (make-music
397     'TextScriptEvent
398     'direction UP
399     'text (markup #:bold (#:box string))))
400
401 \relative c'' {
402   \tempo 4=50
403   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
404   \inst "Clarinet"
405   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
406 }
407 @end lilypond
408
409 That looks better, but let's make a few changes.  The glissando is hard
410 to see, so let's make it thicker and closer to the note heads.  Let's
411 put the metronome marking above the clef, instead of over the first
412 note.  And finally, my composition professor hates @q{C} time signatures,
413 so we'd better make that @q{4/4} instead.
414
415 Don't change @file{music.ly}, though.  Replace our @file{definitions.ily}
416 with this:
417
418 @example
419 %%%  definitions.ily
420 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
421   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
422
423 inst = #(define-music-function (parser location string) (string?)
424   (make-music
425     'TextScriptEvent
426     'direction UP
427     'text (markup #:bold (#:box string))))
428
429 \layout@{
430   \context @{ \Score
431     \override MetronomeMark #'extra-offset = #'(-9 . 0)
432     \override MetronomeMark #'padding = #'3
433   @}
434   \context @{ \Staff
435     \override TimeSignature #'style = #'numbered
436   @}
437   \context @{ \Voice
438     \override Glissando #'thickness = #3
439     \override Glissando #'gap = #0.1
440   @}
441 @}
442 @end example
443
444 @lilypond[quote,ragged-right]
445 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
446   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
447
448 inst = #(define-music-function (parser location string) (string?)
449   (make-music
450     'TextScriptEvent
451     'direction UP
452     'text (markup #:bold (#:box string))))
453
454 \layout{
455   \context { \Score
456     \override MetronomeMark #'extra-offset = #'(-9 . 0)
457     \override MetronomeMark #'padding = #'3
458   }
459   \context { \Staff
460     \override TimeSignature #'style = #'numbered
461   }
462   \context { \Voice
463     \override Glissando #'thickness = #3
464     \override Glissando #'gap = #0.1
465   }
466 }
467
468 \relative c'' {
469   \tempo 4=50
470   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
471   \inst "Clarinet"
472   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
473 }
474 @end lilypond
475
476 That looks nicer!  But now suppose that I want to publish this
477 piece.  My composition professor doesn't like @q{C} time
478 signatures, but I'm somewhat fond of them.  Let's copy the
479 current @file{definitions.ily} to @file{web-publish.ily} and
480 modify that.  Since this music is aimed at producing a pdf which
481 will be displayed on the screen, we'll also increase the
482 overall size of the output.
483
484 @example
485 %%%  definitions.ily
486 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
487   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
488
489 inst = #(define-music-function (parser location string) (string?)
490   (make-music
491     'TextScriptEvent
492     'direction UP
493     'text (markup #:bold (#:box string))))
494
495 #(set-global-staff-size 23)
496 \layout@{
497   \context @{ \Score
498     \override MetronomeMark #'extra-offset = #'(-9 . 0)
499     \override MetronomeMark #'padding = #'3
500   @}
501   \context @{ \Staff
502   @}
503   \context @{ \Voice
504     \override Glissando #'thickness = #3
505     \override Glissando #'gap = #0.1
506   @}
507 @}
508 @end example
509
510 @lilypond[quote,ragged-right]
511 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
512   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
513
514 inst = #(define-music-function (parser location string) (string?)
515   (make-music
516     'TextScriptEvent
517     'direction UP
518     'text (markup #:bold (#:box string))))
519
520 #(set-global-staff-size 23)
521 \layout{
522   \context { \Score
523     \override MetronomeMark #'extra-offset = #'(-9 . 0)
524     \override MetronomeMark #'padding = #'3
525   }
526   \context { \Voice
527     \override Glissando #'thickness = #3
528     \override Glissando #'gap = #0.1
529   }
530 }
531
532 \relative c'' {
533   \tempo 4=50
534   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
535   \inst "Clarinet"
536   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
537 }
538 @end lilypond
539
540 Now in our music, I simply replace
541 @code{\include "definitions.ily"} with
542 @code{\include "web-publish.ily"}.  Of course, we could make this
543 even more convenient.  We could make a @file{definitions.ily} file which
544 contains only the definitions of @code{mpdolce} and @code{inst}, a
545 @file{web-publish.ily} file which contains only the @code{\layout}
546 section listed above, and a @file{university.ily} file which
547 contains only the tweaks to produce the output that my professor
548 prefers.  The top of @file{music.ly} would then look like this:
549
550 @example
551 \include "definitions.ily"
552
553 %%%  Only uncomment one of these two lines!
554 \include "web-publish.ily"
555 %\include "university.ily"
556 @end example
557
558 This approach can be useful even if you are only producing
559 one set of parts.  I use half a dozen different
560 @q{style sheet} files for my projects.  I begin every music
561 file with @code{\include "../global.ily"}, which contains
562
563 @example
564 %%%   global.ily
565 \version @w{"@version{}"}
566 #(ly:set-option 'point-and-click #f)
567 \include "../init/init-defs.ly"
568 \include "../init/init-layout.ly"
569 \include "../init/init-headers.ly"
570 \include "../init/init-paper.ly"
571 @end example
572
573
574 @node When things don't work
575 @section When things don't work
576
577 @menu
578 * Updating old input files::
579 * Common errors::
580 * Troubleshooting (taking it all apart)::
581 * Minimal examples::
582 @end menu
583
584 @node Updating old input files
585 @subsection Updating old input files
586
587 @cindex convert-ly
588 @cindex updating old input files
589
590 The LilyPond input syntax occasionally changes.  As LilyPond itself
591 improves, the syntax (input language) is modified accordingly.  Sometimes
592 these changes are made to make the input easier to read and write or
593 sometimes the changes are made to accommodate new features of LilyPond.
594
595 LilyPond comes with a file that makes this updating easier:
596 @code{convert-ly}.  For details about how to run this program, see
597 @rprogram{Updating files with convert-ly}.
598
599 Unfortunately, @code{convert-ly} cannot handle all input changes.  It
600 takes care of simple search-and-replace changes (such as @code{raggedright}
601 becoming @code{ragged-right}), but some changes are too
602 complicated.  The syntax changes that @code{convert-ly} cannot handle
603 are listed in @rprogram{Updating files with convert-ly}.
604
605 For example, in LilyPond 2.4 and earlier, accents and non-English
606 letters were entered using LaTeX -- for example,
607 @code{No\"el} (this would print the French word for
608 @q{Christmas}).  In LilyPond 2.6 and above, the special
609 @code{ë} must be entered directly into the LilyPond file as an
610 UTF-8 character.  @code{convert-ly} cannot change all the LaTeX
611 special characters into UTF-8 characters; you must manually update
612 your old LilyPond input files.
613
614 @node Common errors
615 @subsection Common errors
616
617 The error conditions described below occur often, yet the cause
618 is not obvious or easily found.  Once seen and understood, they
619 are easily handled.
620
621
622 @menu
623 * Music runs off the page::
624 * Apparent error in ../ly/init.ly::
625 * Error message Unbound variable %::
626 @end menu
627
628 @node Music runs off the page
629 @unnumberedsubsubsec Music runs off the page
630
631 Music running off the page over the right margin or appearing
632 unduly compressed is almost always due to entering an incorrect
633 duration on a note, causing the final note in a measure to extend
634 over the bar line.  It is not invalid if the final note in a
635 measure does not end on the automatically entered bar line, as the
636 note is simply assumed to carry over into the next measure.  But
637 if a long sequence of such carry-over measures occurs the music
638 can appear compressed or may flow off the page because automatic
639 line breaks can be inserted only at the end of complete measures,
640 i.e., where all notes end before or at the end of the measure.
641
642 @warning{An incorrect duration can cause line breaks to be
643 inhibited, leading to a line of highly compressed music or
644 music which flows off the page.}
645
646 The incorrect duration can be found easily if bar checks are used,
647 see @ruser{Bar and bar number checks}.
648
649 If you actually intend to have a series of such carry-over measures
650 you will need to insert an invisible bar line where you want the
651 line to break.  For details, see @ruser{Bar lines}.
652
653 @node Apparent error in ../ly/init.ly
654 @unnumberedsubsubsec Apparent error in @code{../ly/init.ly}
655
656 Various obscure error messages may appear about syntax errors in
657 @code{../ly/init.ly} if the input file is not correctly formed,
658 for example, if it does not contain correctly
659 matched braces or quote signs.
660
661 The most common error is a missing brace, (@code{@}}), at the end of
662 a @code{score} block.  Here the solution is obvious: check the
663 @code{score} block is correctly terminated.  The correct structure
664 of an input file is described in @ref{How LilyPond input files work}.
665 Using an editor which automatically highlights matching brackets and
666 braces is helpful to avoid such errors.
667
668 This error message can also appear if a terminating quote sign,
669 (@code{"}), is omitted.  In this case an accompanying error message
670 should give a line number close to the line in error.  The
671 mismatched quote will usually be on the line one or two above.
672
673 @node Error message Unbound variable %
674 @unnumberedsubsubsec Error message Unbound variable %
675
676 This error message will appear at the bottom of the console
677 output or log file together with a @qq{GUILE signalled an error ...}
678 message every time a Scheme routine is called which (invalidly)
679 contains a @emph{LilyPond} rather than a @emph{Scheme} comment.
680
681 LilyPond comments begin with a percent sign, (@code{%}), and must
682 not be used within Scheme routines.  Scheme comments begin with a
683 semi-colon, (@code{;}).
684
685 @node Troubleshooting (taking it all apart)
686 @subsection Troubleshooting (taking it all apart)
687
688 Sooner or later, you will write a file that LilyPond cannot
689 compile.  The messages that LilyPond gives may help
690 you find the error, but in many cases you need to do some
691 investigation to determine the source of the problem.
692
693 The most powerful tools for this purpose are the
694 single line comment (indicated by @code{%}) and the block
695 comment (indicated by @code{%@{ ... %@}}).  If you don't
696 know where a problem is, start commenting out huge portions
697 of your input file.  After you comment out a section, try
698 compiling the file again.  If it works, then the problem
699 must exist in the portion you just commented.  If it doesn't
700 work, then keep on commenting out material until you have
701 something that works.
702
703 In an extreme case, you might end up with only
704
705 @example
706 \score @{
707   <<
708     % \melody
709     % \harmony
710     % \bass
711   >>
712   \layout@{@}
713 @}
714 @end example
715
716 @noindent
717 (in other words, a file without any music)
718
719 If that happens, don't give up.  Uncomment a bit -- say,
720 the bass part -- and see if it works.  If it doesn't work,
721 then comment out all of the bass music (but leave
722 @code{\bass} in the @code{\score} uncommented.
723
724 @example
725 bass = \relative c' @{
726 %@{
727   c4 c c c
728   d d d d
729 %@}
730 @}
731 @end example
732
733 Now start slowly uncommenting more and more of the
734 @code{bass} part until you find the problem line.
735
736 Another very useful debugging technique is constructing
737 @ref{Minimal examples}.
738
739
740 @node Minimal examples
741 @subsection Minimal examples
742
743 A minimal example is an example which is as small as possible.  These
744 examples are much easier to understand than long examples.  Minimal
745 examples are used for
746
747 @itemize
748 @item Bug reports
749 @item Sending a help request to mailing lists
750 @item Adding an example to the @uref{http://lsr.dsi.unimi.it/,
751 LilyPond Snippet Repository}
752 @end itemize
753
754 To construct an example which is as small as possible, the rule is
755 quite simple: remove anything which is not necessary.  When trying to
756 remove unnecessary parts of a file, it is a very good idea to comment
757 out lines instead of deleting them.  That way, if you discover that you
758 actually @emph{do} need some lines, you can uncomment them, instead of
759 typing them in from scratch.
760
761 There are two exceptions to the @qq{as small as possible} rule:
762
763 @itemize
764 @item Include the @code{\version} number.
765 @item If possible, use @code{\paper@{ ragged-right=##t @}} at the
766 top of your example.
767 @end itemize
768
769 The whole point of a minimal example is to make it easy to read:
770
771 @itemize
772 @item Avoid using complicated notes, keys, or time signatures, unless you
773 wish to demonstrate something is about the behavior of those items.
774 @item Do not use @code{\override} commands unless that is the point of the
775 example.
776 @end itemize
777
778
779
780 @node Scores and parts
781 @section Scores and parts
782
783 TODO: this is really old stuff from the really old tutorial.
784 Rewrite, fix, etc.  Or maybe delete entirely.  -gp
785 Include section on tags   -td
786 and then move to section 5. Working ...  -td
787
788 In orchestral music, all notes are printed twice.  Once in a part for
789 the musicians, and once in a full score for the conductor.  Variables can
790 be used to avoid double work.  The music is entered once, and stored in
791 a variable.  The contents of that variable is then used to generate
792 both the part and the full score.
793
794 It is convenient to define the notes in a special file.  For example,
795 suppose that the file @file{horn-music.ly} contains the following part
796 of a horn/@/bassoon duo
797
798 @example
799 hornNotes = \relative c @{
800   \time 2/4
801   r4 f8 a cis4 f e d
802 @}
803 @end example
804
805 @noindent
806 Then, an individual part is made by putting the following in a file
807
808 @example
809 \include "horn-music.ly"
810 \header @{
811   instrument = "Horn in F"
812 @}
813
814 @{
815  \transpose f c' \hornNotes
816 @}
817 @end example
818
819 The line
820
821 @example
822 \include "horn-music.ly"
823 @end example
824
825 @noindent
826 substitutes the contents of @file{horn-music.ly} at this position in
827 the file, so @code{hornNotes} is defined afterwards.  The command
828 @code{\transpose f@tie{}c'} indicates that the argument, being
829 @code{\hornNotes}, should be transposed by a fifth upwards.  Sounding
830 @code{f} is denoted by notated @code{c'}, which corresponds with the
831 tuning of a normal French Horn in@tie{}F.  The transposition can be seen
832 in the following output
833
834 @lilypond[quote,ragged-right]
835 \transpose f c' \relative c {
836   \time 2/4
837   r4 f8 a cis4 f e d
838 }
839 @end lilypond
840
841 In ensemble pieces, one of the voices often does not play for many
842 measures.  This is denoted by a special rest, the multi-measure
843 rest.  It is entered with a capital @code{R} followed by a duration
844 (@code{1}@tie{}for a whole note, @code{2}@tie{}for a half note,
845 etc.).  By multiplying the
846 duration, longer rests can be constructed.  For example, this rest
847 takes 3@tie{}measures in 2/4 time
848
849 @example
850 R2*3
851 @end example
852
853 When printing the part, multi-rests
854 must be condensed.  This is done by setting a run-time variable
855
856 @example
857 \set Score.skipBars = ##t
858 @end example
859
860 @noindent
861 This command sets the property @code{skipBars} in the
862 @code{Score} context to true (@code{##t}).  Prepending the rest and
863 this option to the music above, leads to the following result
864
865 @lilypond[quote,ragged-right]
866 \transpose f c' \relative c {
867   \time 2/4
868   \set Score.skipBars = ##t
869   R2*3
870   r4 f8 a cis4 f e d
871 }
872 @end lilypond
873
874
875 The score is made by combining all of the music together.  Assuming
876 that the other voice is in @code{bassoonNotes} in the file
877 @file{bassoon-music.ly}, a score is made with
878
879 @example
880 \include "bassoon-music.ly"
881 \include "horn-music.ly"
882
883 <<
884   \new Staff \hornNotes
885   \new Staff \bassoonNotes
886 >>
887 @end example
888
889 @noindent
890 leading to
891
892 @lilypond[quote,ragged-right]
893 \relative c <<
894   \new Staff {
895     \time 2/4 R2*3
896     r4 f8 a cis4 f e d
897   }
898   \new Staff {
899     \clef bass
900     r4 d,8 f | gis4 c | b bes |
901     a8 e f4 | g d | gis f
902   }
903 >>
904 @end lilypond
905
906
907
908 @node Make and Makefiles
909 @section Make and Makefiles
910
911 @cindex makefiles
912 @cindex make
913
914 Pretty well all the platforms Lilypond can run on support a software
915 facility called @code{make}. This software reads a special file called a
916 @code{Makefile} that defines what files depend on what others and what
917 commands you need to give the operating system to produce one file from
918 another. For example the makefile would spell out how to produce
919 @code{ballad.pdf} and @code{ballad.midi} from @code{ballad.ly} by
920 running Lilypond.
921
922 There are times when it is a good idea to create a @code{Makefile}
923 for your project, either for your own convenience or
924 as a courtesy to others who might have access to your source files.
925 This is true for very large projects with many included files and
926 different output options (e.g. full score, parts, conductor's
927 score, piano reduction, etc.), or for projects that
928 require difficult commands to build them (such as
929 @code{lilypond-book} projects). Makefiles vary greatly in
930 complexity and flexibility, according to the needs and skills of
931 the authors. The program GNU Make comes installed on GNU/Linux
932 distributions and on MacOS X, and it is also available for Windows.
933
934 See the @strong{GNU Make Manual} for full details on using
935 @code{make}, as what follows here gives only a glimpse of what it
936 can do.
937
938 The commands to define rules in a makefile differ
939 according to platform; for instance the various forms of Linux and
940 MacOS use @code{bash}, while Windows uses @code{cmd}. Note that on
941 MacOS X, you need to configure the system to use the command-line
942 intepreter. Here are some example makefiles, with versions for both
943 Linux/MacOS and Windows.
944
945 The first example is for an orchestral work in four
946 movements with a directory structure as follows:
947
948 @example
949 Symphony/
950 |-- MIDI/
951 |-- Makefile
952 |-- Notes/
953 |   |-- cello.ily
954 |   |-- figures.ily
955 |   |-- horn.ily
956 |   |-- oboe.ily
957 |   |-- trioString.ily
958 |   |-- viola.ily
959 |   |-- violinOne.ily
960 |   `-- violinTwo.ily
961 |-- PDF/
962 |-- Parts/
963 |   |-- symphony-cello.ly
964 |   |-- symphony-horn.ly
965 |   |-- symphony-oboes.ly
966 |   |-- symphony-viola.ly
967 |   |-- symphony-violinOne.ly
968 |   `-- symphony-violinTwo.ly
969 |-- Scores/
970 |   |-- symphony.ly
971 |   |-- symphonyI.ly
972 |   |-- symphonyII.ly
973 |   |-- symphonyIII.ly
974 |   `-- symphonyIV.ly
975 `-- symphonyDefs.ily
976 @end example
977
978 The @code{.ly} files in the @code{Scores} and
979 @code{Parts} directories get their notes from @code{.ily}
980 files in the @code{Notes} directory:
981
982 @example
983 %%% top of file "symphony-cello.ly"
984 \include ../definitions.ily
985 \include ../Notes/cello.ily
986 @end example
987
988 The makefile will have targets of @code{score} (entire piece in
989 full score), @code{movements} (individual movements in full score),
990 and @code{parts} (individual parts for performers). There
991 is also a target @code{archive} that will create a tarball of
992 the source files, suitable for sharing via web or email. Here is
993 the makefile for GNU/Linux or MacOS X. It should be saved with the
994 name @code{Makefile} in the top directory of the project:
995
996 @warning{When a target or pattern rule is defined, the
997 subsequent lines must begin with tabs, not spaces.}
998
999 @example
1000 # the name stem of the output files
1001 piece = symphony
1002 # determine how many processors are present
1003 CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//`
1004 # The command to run lilypond
1005 LILY_CMD = lilypond -ddelete-intermediate-files \
1006                     -dno-point-and-click -djob-count=$(CPU_CORES)
1007
1008 # The suffixes used in this Makefile.
1009 .SUFFIXES: .ly .ily .pdf .midi
1010
1011 # Input and output files are searched in the directories listed in
1012 # the VPATH variable.  All of them are subdirectories of the current
1013 # directory (given by the GNU make variable `CURDIR').
1014 VPATH = \
1015   $(CURDIR)/Scores \
1016   $(CURDIR)/PDF \
1017   $(CURDIR)/Parts \
1018   $(CURDIR)/Notes
1019
1020 # The pattern rule to create PDF and MIDI files from a LY input file.
1021 # The .pdf output files are put into the `PDF' subdirectory, and the
1022 # .midi files go into the `MIDI' subdirectory.
1023 %.pdf %.midi: %.ly
1024         $(LILY_CMD) $<; \           # this line begins with a tab
1025         if test -f "$*.pdf"; then \
1026             mv "$*.pdf" PDF/; \
1027         fi; \
1028         if test -f "$*.midi"; then \
1029             mv "$*.midi" MIDI/; \
1030         fi
1031
1032 notes = \
1033   cello.ily \
1034   horn.ily \
1035   oboe.ily \
1036   viola.ily \
1037   violinOne.ily \
1038   violinTwo.ily
1039
1040 # The dependencies of the movements.
1041 $(piece)I.pdf: $(piece)I.ly $(notes)
1042 $(piece)II.pdf: $(piece)II.ly $(notes)
1043 $(piece)III.pdf: $(piece)III.ly $(notes)
1044 $(piece)IV.pdf: $(piece)IV.ly $(notes)
1045
1046 # The dependencies of the full score.
1047 $(piece).pdf: $(piece).ly $(notes)
1048
1049 # The dependencies of the parts.
1050 $(piece)-cello.pdf: $(piece)-cello.ly cello.ily
1051 $(piece)-horn.pdf: $(piece)-horn.ly horn.ily
1052 $(piece)-oboes.pdf: $(piece)-oboes.ly oboe.ily
1053 $(piece)-viola.pdf: $(piece)-viola.ly viola.ily
1054 $(piece)-violinOne.pdf: $(piece)-violinOne.ly violinOne.ily
1055 $(piece)-violinTwo.pdf: $(piece)-violinTwo.ly violinTwo.ily
1056
1057 # Type `make score' to generate the full score of all four
1058 # movements as one file.
1059 .PHONY: score
1060 score: $(piece).pdf
1061
1062 # Type `make parts' to generate all parts.
1063 # Type `make foo.pdf' to generate the part for instrument `foo'.
1064 # Example: `make symphony-cello.pdf'.
1065 .PHONY: parts
1066 parts: $(piece)-cello.pdf \
1067        $(piece)-violinOne.pdf \
1068        $(piece)-violinTwo.pdf \
1069        $(piece)-viola.pdf \
1070        $(piece)-oboes.pdf \
1071        $(piece)-horn.pdf
1072
1073 # Type `make movements' to generate files for the
1074 # four movements separately.
1075 .PHONY: movements
1076 movements: $(piece)I.pdf \
1077            $(piece)II.pdf \
1078            $(piece)III.pdf \
1079            $(piece)IV.pdf
1080
1081 all: score parts movements
1082
1083 archive:
1084         tar -cvvf stamitz.tar \       # this line begins with a tab
1085         --exclude=*pdf --exclude=*~ \
1086         --exclude=*midi --exclude=*.tar \
1087         ../Stamitz/*
1088 @end example
1089
1090
1091 There are special complications on the Windows platform. After
1092 downloading and installing GNU Make for Windows, you must set the
1093 correct path in the system's environment variables so that the
1094 DOS shell can find the Make program. To do this, right-click on
1095 "My Computer," then choose @code{Properties} and
1096 @code{Advanced}. Click @code{Environment Variables}, and then
1097 in the @code{System Variables} pane, highlight @code{Path}, click
1098 @code{edit}, and add the path to the GNU Make executable file, which
1099  will look something like this:
1100
1101 @example
1102 C:\Program Files\GnuWin32\bin
1103 @end example
1104
1105 The makefile itself has to be altered to handle different shell
1106 commands and to deal with spaces that are present
1107 in some default system directories. The @code{archive} target
1108 is eliminated since Windows does not have the @code{tar} command,
1109 and Windows also has a different default extension for midi files.
1110
1111
1112 @example
1113 ## WINDOWS VERSION
1114 ##
1115 piece = symphony
1116 LILY_CMD = lilypond -ddelete-intermediate-files \
1117                     -dno-point-and-click \
1118                     -djob-count=$(NUMBER_OF_PROCESSORS)
1119
1120 #get the 8.3 name of CURDIR (workaround for spaces in PATH)
1121 workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \
1122           do @@echo %%~sb)
1123
1124 .SUFFIXES: .ly .ily .pdf .mid
1125
1126 VPATH = \
1127   $(workdir)/Scores \
1128   $(workdir)/PDF \
1129   $(workdir)/Parts \
1130   $(workdir)/Notes
1131
1132 %.pdf %.mid: %.ly
1133         $(LILY_CMD) $<      # this line begins with a tab
1134         if exist "$*.pdf"  move /Y "$*.pdf"  PDF/ # begin with tab
1135         if exist "$*.mid" move /Y "$*.mid" MIDI/  # begin with tab
1136
1137 notes = \
1138   cello.ily \
1139   figures.ily \
1140   horn.ily \
1141   oboe.ily \
1142   trioString.ily \
1143   viola.ily \
1144   violinOne.ily \
1145   violinTwo.ily
1146
1147 $(piece)I.pdf: $(piece)I.ly $(notes)
1148 $(piece)II.pdf: $(piece)II.ly $(notes)
1149 $(piece)III.pdf: $(piece)III.ly $(notes)
1150 $(piece)IV.pdf: $(piece)IV.ly $(notes)
1151
1152 $(piece).pdf: $(piece).ly $(notes)
1153
1154 $(piece)-cello.pdf: $(piece)-cello.ly cello.ily
1155 $(piece)-horn.pdf: $(piece)-horn.ly horn.ily
1156 $(piece)-oboes.pdf: $(piece)-oboes.ly oboe.ily
1157 $(piece)-viola.pdf: $(piece)-viola.ly viola.ily
1158 $(piece)-violinOne.pdf: $(piece)-violinOne.ly violinOne.ily
1159 $(piece)-violinTwo.pdf: $(piece)-violinTwo.ly violinTwo.ily
1160
1161 .PHONY: score
1162 score: $(piece).pdf
1163
1164 .PHONY: parts
1165 parts: $(piece)-cello.pdf \
1166        $(piece)-violinOne.pdf \
1167        $(piece)-violinTwo.pdf \
1168        $(piece)-viola.pdf \
1169        $(piece)-oboes.pdf \
1170        $(piece)-horn.pdf
1171
1172 .PHONY: movements
1173 movements: $(piece)I.pdf \
1174            $(piece)II.pdf \
1175            $(piece)III.pdf \
1176            $(piece)IV.pdf
1177
1178 all: score parts movements
1179 @end example
1180
1181
1182 The next Makefile is for a @command{lilypond-book} document done in
1183 LaTeX. This project has an index, which requires that the
1184 @command{latex} command be run twice to update links. Output files are
1185 all stored in the @code{out} directory for .pdf output and in the
1186 @code{htmlout} directory for the html output.
1187
1188 @example
1189 SHELL=/bin/sh
1190 FILE=myproject
1191 OUTDIR=out
1192 WEBDIR=htmlout
1193 VIEWER=acroread
1194 BROWSER=firefox
1195 LILYBOOK_PDF=lilypond-book --output=$(OUTDIR) --pdf $(FILE).lytex
1196 LILYBOOK_HTML=lilypond-book --output=$(WEBDIR) $(FILE).lytex
1197 PDF=cd $(OUTDIR) && pdflatex $(FILE)
1198 HTML=cd $(WEBDIR) && latex2html $(FILE)
1199 INDEX=cd $(OUTDIR) && makeindex $(FILE)
1200 PREVIEW=$(VIEWER) $(OUTDIR)/$(FILE).pdf &
1201
1202 all: pdf web keep
1203
1204 pdf:
1205         $(LILYBOOK_PDF)  # begin with tab
1206         $(PDF)           # begin with tab
1207         $(INDEX)         # begin with tab
1208         $(PDF)           # begin with tab
1209         $(PREVIEW)       # begin with tab
1210
1211 web:
1212         $(LILYBOOK_HTML) # begin with tab
1213         $(HTML)          # begin with tab
1214         cp -R $(WEBDIR)/$(FILE)/ ./  # begin with tab
1215         $(BROWSER) $(FILE)/$(FILE).html &  # begin with tab
1216
1217 keep: pdf
1218         cp $(OUTDIR)/$(FILE).pdf $(FILE).pdf  # begin with tab
1219
1220 clean:
1221         rm -rf $(OUTDIR) # begin with tab
1222
1223 web-clean:
1224         rm -rf $(WEBDIR) # begin with tab
1225
1226 archive:
1227         tar -cvvf myproject.tar \ # begin this line with tab
1228         --exclude=out/* \
1229         --exclude=htmlout/* \
1230         --exclude=myproject/* \
1231         --exclude=*midi \
1232         --exclude=*pdf \
1233         --exclude=*~ \
1234         ../MyProject/*
1235 @end example
1236
1237 TODO: make this thing work on Windows
1238
1239 The previous makefile does not work on Windows. An alternative
1240 for Windows users would be to create a simple batch file
1241 containing the build commands. This will not
1242 keep track of dependencies the way a makefile does, but it at
1243 least reduces the build process to a single command. Save the
1244 following code as @command{build.bat} or @command{build.cmd}.
1245 The batch file can be run at the DOS prompt or by simply
1246 double-clicking its icon.
1247
1248 @example
1249 lilypond-book --output=out --pdf myproject.lytex
1250 cd out
1251 pdflatex myproject
1252 makeindex myproject
1253 pdflatex myproject
1254 cd ..
1255 copy out\myproject.pdf MyProject.pdf
1256 @end example
1257
1258
1259 @seealso
1260 Application Usage:
1261 @rprogram{Setup for MacOS X},
1262 @rprogram{Command-line usage},
1263 @rprogram{LilyPond-book}