]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/de/usage/working.itely
7f5444c1942610c62eae92f6e60c799974630814
[lilypond.git] / Documentation / de / usage / working.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
2
3 @ignore
4     Translation of GIT committish: 0a868be38a775ecb1ef935b079000cebbc64de40
5
6     When revising a translation, copy the HEAD committish of the
7     version that you are working on.  For details, see the Contributors'
8     Guide, node Updating translation committishes..
9 @end ignore
10
11 @c \version "2.12.0"
12
13 @node An LilyPond-Projekten arbeiten
14 @chapter An LilyPond-Projekten arbeiten
15 @translationof Working on LilyPond projects
16
17 Dieses Kapitel erklärt, wie bestimmte häufige Probleme zu 
18 lösen oder ganz zu vermeiden sind.  Wenn Sie schon 
19 Programmiererfahrung mitbringen, erscheinen diese Hinweise 
20 vielleicht überflüssig, aber es wird dennoch empfohlen, dieses Kapitel 
21 zu lesen.
22
23
24 @menu
25 * Vorschläge, wie LilyPond-Eingabe-Dateien geschrieben werden sollen::
26 * Wenn etwas nicht funktioniert::
27 * Partituren und Stimmen::
28 * Make und Makefiles::
29 @end menu
30
31
32 @node Vorschläge, wie LilyPond-Eingabe-Dateien geschrieben werden sollen
33 @section Vorschläge, wie LilyPond-Eingabe-Dateien geschrieben werden sollen
34 @translationof Suggestions for writing LilyPond input files
35
36 Jetzt sind Sie so weit, größere Stücke mit LilyPond zu schreiben -- 
37 nicht nur die kleinen Beispiele aus der Übung, sondern ganze Stücke.
38 Aber wie geht man das am besten an?
39
40 Solange LilyPond Ihre Dateien versteht und die Noten so setzt, 
41 wie Sie das wollen, spielt es eigentlich keine Rolle, wie Ihre 
42 Dateien aussehen.  Es gibt aber trotzdem ein paar Dinge, die man 
43 beim Schreiben von LilyPond-Code berücksichtigen sollte.
44
45 @itemize @bullet
46 @item Was ist, wenn Sie einen Fehler machen?  Die Struktur einer 
47 LilyPond-Datei kann es erleichtern (oder erschweren), bestimmte 
48 Fehler zu finden.
49
50 @item Was ist, wenn Sie Ihre Dateien mit jemandem austauschen 
51 wollen?  Oder Ihre Dateien nach einige Jahren noch einmal überarbeiten 
52 wollen?  Manche LilyPond-Dateien versteht man auf den ersten Blick, 
53 über anderen muss man eine Stunde grübeln, um die Struktur zu ahnen.
54
55 @item Was ist, wenn sie Ihre Dateien auf eine neuere LilyPond-Version 
56 aktualisieren wollen?  Die Syntax der Eingabesprache verändert sich 
57 allmählich mit Verbesserungen im Programm.  Die meisten Veränderungen 
58 können automatisch durch @code{convert-ly} gelöst werden, aber 
59 bestimmte Änderungen brauchen Handarbeit.  LilyPond-Dateien können 
60 strukturiert werden, damit sie einfacher aktualisierbar sind.
61 @end itemize
62
63 @menu
64 * Allgemeine Vorschläge::
65 * Das Kopieren von bereits vorhandener Musik::
66 * Große Projekte::
67 * Tipparbeit sparen durch Bezeichner und Funktionen::
68 * Stil-Dateien::
69 @end menu
70
71
72 @node Allgemeine Vorschläge
73 @subsection Allgemeine Vorschläge
74 @translationof General suggestions
75
76 Hier einige Vorschläge, wie Sie Probleme vermeiden oder lösen können:
77
78 @itemize @bullet
79 @item @strong{Schreiben Sie immer mit @code{\version} die 
80 Versionsnummer 
81 in jede Datei}.  Beachten Sie, dass in allen Vorlagen die Versionsnummer  
82 @code{\version "2.12.0"} eingetragen ist.  Es empfiehlt sich, in alle 
83 Dateien, unabhängig von ihrer Größe, den @code{\version}-Befehl 
84 einzufügen.  Persönliche Erfahrung hat gezeigt, dass es ziemlich 
85 frustrierend sein kann zu erinnern, welche Programmversion man etwa 
86 vor einem Jahr verwendet hat.  Auch @code{convert-ly} benötigt die 
87 Versionsnummer.
88
89 @item @strong{Benutzen Sie Überprüfungen}: @ruser{Oktavenüberprüfung}, und
90 @ruser{Takt- und Taktzahlüberprüfung}.  Wenn Sie hier und da diese
91 Überprüfungen einfügen, finden Sie einen möglichen Fehler weit
92 schneller.  Wie oft aber ist @qq{hier und da}?  Das hängt von der
93 Komplexität der Musik ab.  ei einfachen Stücken reicht es vielleicht
94 ein- oder zweimal, in sehr komplexer Musik sollte man sie vielleicht
95 in jeden Takt einfügen.
96
97 @item @strong{Ein Takt pro Textzeile}.  Wenn irgendetwas kompliziertes 
98 vorkommt, entweder in der Musik selber oder in der Anpassung der 
99 Ausgabe,
100 empfiehlt es sich oft, nur einen Takt pro Zeile zu schreiben. 
101 Bildschirmplatz zu sparen, indem Sie acht Takte in eine Zeile zwängen, 
102 hilft nicht weiter, wenn Sie ihre Datei @qq{debuggen} müssen.
103
104 @item @strong{Kommentieren Sie ihre Dateien}.  Benutzen Sie entweder 
105 Taktnummern (in regelmäßigen Abständen) oder Verweise auf musikalische 
106 Themen (@qq{Zweites Thema in den Geigen}, @qq{vierte Variation} usw.). 
107 Sie brauchen diese Kommentare vielleicht noch nicht, wenn Sie das Stück  
108 notieren, aber spätestens wenn Sie nach ein paar Jahren etwas 
109 verändern 
110 wollen oder Sie den Quelltext an einen Freund weitergeben wollen, 
111 ist es weitaus komplizierter, die Dateistruktur ohne Kommentare zu 
112 verstehen, als wenn Sie sie rechtzeitig eingefügt hätten.
113
114 @item @strong{Schreiben Sie Klammern mit Einrückung}.  Viele 
115 Probleme entstehen durch ungerade Anzahl von  @code{@{} und 
116 @code{@}}-Klammern.
117
118 @item @strong{Schreiben Sie Tondauerangaben} am Anfang von 
119 Abschnitten und Bezeichnern.  Wenn Sie beispielsweise 
120  @code{c4 d e} am Anfang eines Abschnittes schreiben, 
121 ersparen Sie sich viele Probleme, wenn Sie ihre Musik 
122 eines Tages umarrangieren wollen.
123
124 @item @strong{Trennen Sie Einstellungen} von den eigentlichen 
125 Noten.  Siehe auch @ref{Tipparbeit sparen durch Bezeichner und Funktionen} 
126 und
127 @ref{Stil-Dateien}.
128
129 @end itemize
130
131
132 @node Das Kopieren von bereits vorhandener Musik
133 @subsection Das Kopieren von bereits vorhandener Musik
134 @translationof Typesetting existing music
135
136 Wenn Sie Musik aus einer fertigen Partitur kopieren (z. B. die 
137 LilyPond-Eingabe einer gedruckten Partitur):
138
139 @itemize @bullet
140
141 @item Schreiben Sie ein System ihrer Quelle nach dem anderen 
142 (aber trotzdem nur einen Takt pro Textzeile) und überprüfen 
143 Sie jedes System, nachdem Sie es fertig kopiert haben.  Mit dem 
144 @code{showLastLength}- oder @code{showFirstLenght}-Befehl können Sie den Übersetzungsprozess 
145 beschleunigen. Siehe auch 
146 @ruser{Korrigierte Musik überspringen}.
147
148 @item Definieren Sie @code{mBreak = @{ \break @}} und schreiben Sie
149  @code{\mBreak} in der Quelldatei immer dann, wenn im Manuskript 
150 ein Zeilenumbruch vorkommt.  Das macht es einfacher, die gesetzte 
151 Zeile mit den ursprünglichen Noten zu vergleichen.  Wenn Sie die 
152 Partitur fertig gestellt haben, könne Sie  @code{mBreak = @{ @}}, 
153 also leer definieren, um diese manuellen Zeilenumbrüche zu entfernen. 
154 Damit kann dann LilyPond selber entscheiden, wohin es passende 
155 Zeilenumbrüche platziert.
156
157 @item Wenn Sie eine Stimme für ein transponierendes Instrument als eine
158 Variable notieren, wird empfohlen, dass die Noten von
159
160 @example
161 \transpose c klingende-Tonhöhe @{...@}
162 @end example
163
164 eingefasst werden (wobei @code{klingende-Tonhöhe} die klingende Tonhöhe
165 des Instruments ist), sodass die Noten innerhalb der Variable für klingendes C
166 geschrieben sind.  Sie können die Variable zurücktransponieren, wenn es
167 nötig ist, aber Sie müssen es nicht tun.  Fehler in Transpositionen sind
168 treten seltener auf, wenn alle Noten in den Variablen für die gleiche
169 Ausgangstonhöhe geschrieben werden.
170
171 Denken Sie auch daran, dass Sie nur von/nach C transponieren.  Das heißt,
172 dass die einzigen anderen Tonhöhen, die Sie in Transpositionen benutzen,
173 die Tonhöhen der Instrumente sind, für die Sie schreiben: @code{bes} für
174 eine B-Trompete oder @code{aes} für eine As-Klarinette usw.
175
176 @end itemize
177
178
179 @node Große Projekte
180 @subsection Große Projekte
181 @translationof Large projects
182
183 Besonders wenn Sie an größeren Projekten arbeiten, ist es 
184 unumgänglich, dass Sie ihre LilyPond-Dateien klar strukturieren.
185
186 @itemize @bullet
187
188 @item @strong{Verwenden Sie Variablen für jede Stimme}, innerhalb 
189 der Definition sollte so wenig Struktur wie möglich sein.  Die 
190 Struktur des @code{\score}-Abschnittes verändert sich am ehesten, 
191 während die @code{violine}-Definition sich wahrscheinlich mit einer 
192 neuen Programmversion nicht verändern wird.
193
194 @example
195 violine = \relative c'' @{
196 g4 c'8. e16
197 @}
198 ...
199 \score @{
200   \new GrandStaff @{
201     \new Staff @{
202       \violine
203     @}
204   @}
205 @}
206 @end example
207
208 @item @strong{Trennen Sie Einstellungen von den Noten}.  Diese 
209 Empfehlung wurde schon im Abschnitt @ref{Allgemeine Vorschläge} gegeben, 
210 aber für große Projekte ist es unumgänglich.  Muss z. B. die 
211 Definition für @code{fdannp} verändert werden, so braucht 
212 man es nur einmal vorzunehmen und die Noten in der Geigenstimme, 
213 @code{violin}, bleiben unberührt.
214
215 @example
216 fdannp = _\markup@{
217   \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @}
218 violin = \relative c'' @{
219 g4\fdannp c'8. e16
220 @}
221 @end example
222
223 @end itemize
224
225
226 @node Tipparbeit sparen durch Bezeichner und Funktionen
227 @subsection Tipparbeit sparen durch Bezeichner und Funktionen
228 @translationof Saving typing with variables and functions
229
230 @cindex Variable
231 @cindex Bezeichner
232
233 Bis jetzt haben Sie immer etwa solche Noten gesehen:
234
235 @lilypond[quote,verbatim,ragged-right]
236 hornNotes = \relative c'' { c4 b dis c }
237 \score {
238   {
239     \hornNotes
240   }
241 }
242 @end lilypond
243
244 Das könnte auch nützlich in Minimal-Music sein:
245
246 @lilypond[quote,verbatim,ragged-right]
247 fragmentA = \relative c'' { a4 a8. b16 }
248 fragmentB = \relative c'' { a8. gis16 ees4 }
249 violin = \new Staff { \fragmentA \fragmentA \fragmentB \fragmentA }
250 \score {
251   {
252     \violin
253   }
254 }
255 @end lilypond
256
257 Sie können diese Bezeichner oder Variablen aber auch für 
258 (eigene) Einstellungen verwenden:
259
260 @lilypond[quote,verbatim,ragged-right]
261 dolce = \markup{ \italic \bold dolce }
262 padText = { \once \override TextScript #'padding = #5.0 }
263 fthenp=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p }
264 violin = \relative c'' {
265   \repeat volta 2 {
266     c4._\dolce b8 a8 g a b |
267     \padText
268     c4.^"hi there!" d8 e' f g d |
269     c,4.\fthenp b8 c4 c-. |
270   }
271 }
272 \score {
273   {
274     \violin
275   }
276 \layout{ragged-right=##t}
277 }
278 @end lilypond
279
280 Die Variablen haben in diesem Beispiel deutlich die 
281 Tipparbeit erleichtert.  Aber es lohnt sich, sie zu 
282 einzusetzen, auch wenn man sie nur einmal anwendet, 
283 denn sie vereinfachen die Struktur. 
284 Hier ist das vorangegangene Beispiel ohne 
285 Variablen.  Es ist sehr viel komplizierter zu lesen, 
286 besonders die letzte Zeile. 
287
288 @example
289 violin = \relative c'' @{
290   \repeat volta 2 @{
291     c4._\markup@{ \italic \bold dolce @} b8 a8 g a b |
292     \once \override TextScript #'padding = #5.0
293     c4.^"hi there!" d8 e' f g d |
294     c,4.\markup@{ \dynamic f \italic \small @{ 2nd @}
295       \hspace #0.1 \dynamic p @} b8 c4 c-. |
296   @}
297 @}
298 @end example
299
300 @c TODO Replace the following with a better example  -td
301 @c Skylining handles this correctly without padText
302
303 Bis jetzt wurde nur statische Substitution vorgestellt 
304 -- wenn LilyPond den Befehl @code{\padText} findet, wird 
305 er ersetzt durch durch unsere vorherige Definition (alles, 
306 was nach dem @code{padtext =} kommt).
307
308 LilyPond kennt aber auch nicht-statische Substitutionen (man 
309 kann sie sich als Funktionen vorstellen).
310
311 @lilypond[quote,verbatim,ragged-right]
312 padText =
313 #(define-music-function (parser location padding) (number?)
314   #{
315     \once \override TextScript #'padding = #$padding
316   #})
317
318 \relative c''' {
319   c4^"piu mosso" b a b
320   \padText #1.8
321   c4^"piu mosso" d e f
322   \padText #2.6
323   c4^"piu mosso" fis a g
324 }
325 @end lilypond
326
327 Die Benutzung von Variablen hilft auch, viele Schreibarbeit zu 
328 vermeiden, wenn die Eingabesyntax von LilyPond sich verändert 
329 (siehe auch @ref{Alte Dateien aktualisieren}).  Wenn nur eine einzige 
330 Definition (etwa @code{\dolce}) für alle Dateien verwendet wird 
331 (vgl. @ref{Stil-Dateien}), muss nur diese einzige Definition 
332 verändert werden, wenn sich die Syntax ändert.  Alle Verwendungen 
333 des Befehles beziehen sich dann auf die neue Definition.
334
335 @node Stil-Dateien
336 @subsection Stil-Dateien
337 @translationof Style sheets
338
339 Die Ausgabe, die LilyPond erstellt, kann sehr stark modifiziert 
340 werden, siehe @ref{Die Ausgabe verändern} für Einzelheiten.  Aber wie 
341 kann man diese Änderungen auf eine ganze Serie von Dateien 
342 anwenden?  Oder die Einstellungen von den Noten trennen?  Das 
343 Verfahren ist ziemlich einfach.
344
345 Hier ist ein Beispiel.  Es ist nicht schlimm, wenn Sie nicht auf 
346 Anhieb die Abschnitte mit den ganzen @code{#()} verstehen.  Das 
347 wird im Kapitel @ref{Fortgeschrittene Optimierungen mit Scheme} erklärt.
348
349 @lilypond[quote,verbatim,ragged-right]
350 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
351   #:line(#:dynamic "mp" #:text #:italic "dolce" )))
352
353 inst = #(define-music-function (parser location string) (string?)
354   (make-music
355     'TextScriptEvent
356     'direction UP
357     'text (markup #:bold (#:box string))))
358
359 \relative c'' {
360   \tempo 4=50
361   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
362   \inst "Clarinet"
363   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
364 }
365 @end lilypond
366
367 Es treten einige Probleme mit überlappenden Symbolen auf. Sie 
368 werden beseitigt mit den Tricks aus dem Kapitel @ref{Verschieben von Objekten}.
369 Aber auch die @code{mpdolce} und @code{inst}-Definitionen 
370 können verbessert werden.  Sie produzieren das Ergebnis, das 
371 gewünscht ist, aber es wäre schön, sie auch in anderen Stücken 
372 verwenden zu können.  Man könnte sie natürlich einfach kopieren 
373 und in die anderen Dateien einfügen, aber das ist lästig.  Die 
374 Definitionen verbleiben auch in der Notendatei und diese @code{#()} 
375 sehen nicht wirklich schön aus.  Sie sollen in einer anderen 
376 Datei versteckt werden:
377
378 @example
379 %%% speichern in einer Datei "definitions.ily"
380 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
381   #:line(#:dynamic "mp" #:text #:italic "dolce" )))
382
383 inst = #(define-music-function (parser location string) (string?)
384   (make-music
385     'TextScriptEvent
386     'direction UP
387     'text (markup #:bold (#:box string))))
388 @end example
389
390 Auf diese Datei kann dann später mit dem @code{\include}-Befehl
391 im oberen Teil der LilyPond-Datei zurückgegriffen werden. (Die
392 Erweiterung @code{.ily} wird benutzt, um diese eingefügte Datei,
393 die nicht alleine kompiliert werden kann, von der Hauptdatei zu
394 unterscheiden.)
395 Jetzt muss natürlich noch die Notendatei angepasst werden (gespeichert 
396 unter dem Namen @file{"music.ly"}).
397
398 @c  We have to do this awkward example/lilypond-non-verbatim
399 @c  because we can't do the \include stuff in the manual.
400
401 @example
402 \include "definitions.ily"
403
404 \relative c'' @{
405   \tempo 4=50
406   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
407   \inst "Clarinet"
408   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
409 @}
410 @end example
411
412 @lilypond[quote,ragged-right]
413 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
414   #:line(#:dynamic "mp" #:text #:italic "dolce" )))
415
416 inst = #(define-music-function (parser location string) (string?)
417   (make-music
418     'TextScriptEvent
419     'direction UP
420     'text (markup #:bold (#:box string))))
421
422 \relative c'' {
423   \tempo 4=50
424   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
425   \inst "Clarinet"
426   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
427 }
428 @end lilypond
429
430 Das sieht schon besser aus, aber es sind noch einige Verbesserungen 
431 möglich. 
432 Das Glissando ist schwer zu sehen, also soll es etwas dicker erscheinen 
433 und dichter an den Notenköpfen gesetzt werden.  Das Metronom-Zeichen 
434 soll über dem Schlüssel erscheinen, nicht über der ersten Note.  Und 
435 schließlich kann unser Kompositionsprofessor @qq{C}-Taktangaben 
436 überhaupt nicht leiden, also 
437 müssen sie in @qq{4/4} verändert werden.
438
439 Diese Veränderungen sollten Sie aber nicht in der @file{music.ly}-Datei 
440 vornehmen.  Ersetzen Sie die @file{definitions.ily}-Datei hiermit:
441
442 @example
443 %%%  definitions.ily
444 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
445   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
446
447 inst = #(define-music-function (parser location string) (string?)
448   (make-music
449     'TextScriptEvent
450     'direction UP
451     'text (markup #:bold (#:box string))))
452
453 \layout@{
454   \context @{ \Score
455     \override MetronomeMark #'extra-offset = #'(-9 . 0)
456     \override MetronomeMark #'padding = #'3
457   @}
458   \context @{ \Staff
459     \override TimeSignature #'style = #'numbered
460   @}
461   \context @{ \Voice
462     \override Glissando #'thickness = #3
463     \override Glissando #'gap = #0.1
464   @}
465 @}
466 @end example
467
468 @lilypond[quote,ragged-right]
469 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
470   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
471
472 inst = #(define-music-function (parser location string) (string?)
473   (make-music
474     'TextScriptEvent
475     'direction UP
476     'text (markup #:bold (#:box string))))
477
478 \layout{
479   \context { \Score
480     \override MetronomeMark #'extra-offset = #'(-9 . 0)
481     \override MetronomeMark #'padding = #'3
482   }
483   \context { \Staff
484     \override TimeSignature #'style = #'numbered
485   }
486   \context { \Voice
487     \override Glissando #'thickness = #3
488     \override Glissando #'gap = #0.1
489   }
490 }
491
492 \relative c'' {
493   \tempo 4=50
494   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
495   \inst "Clarinet"
496   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
497 }
498 @end lilypond
499
500 Das sieht schon besser aus!  Aber angenommen Sie möchten dieses 
501 Stück jetzt veröffentlichen.  Ihr Kompositionsprofessor mag 
502 die @qq{C}-Taktangaben nicht, aber Sie finden sie irgendwie 
503 schöner.  Also kopieren Sie die Datei @file{definitions.ily} nach 
504 @file{web-publish.ily} und verändern diese.  Weil die Noten 
505 in einer PDF-Datei auf dem Bildschirm angezeigt werden sollen, 
506 bietet es sich auch an, die gesamte Ausgabe zu vergrößern.
507
508 @example
509 %%%  definitions.ily
510 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
511   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
512
513 inst = #(define-music-function (parser location string) (string?)
514   (make-music
515     'TextScriptEvent
516     'direction UP
517     'text (markup #:bold (#:box string))))
518
519 #(set-global-staff-size 23)
520 \layout@{
521   \context @{ \Score
522     \override MetronomeMark #'extra-offset = #'(-9 . 0)
523     \override MetronomeMark #'padding = #'3
524   @}
525   \context @{ \Staff
526   @}
527   \context @{ \Voice
528     \override Glissando #'thickness = #3
529     \override Glissando #'gap = #0.1
530   @}
531 @}
532 @end example
533
534 @lilypond[quote,ragged-right]
535 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
536   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
537
538 inst = #(define-music-function (parser location string) (string?)
539   (make-music
540     'TextScriptEvent
541     'direction UP
542     'text (markup #:bold (#:box string))))
543
544 #(set-global-staff-size 23)
545 \layout{
546   \context { \Score
547     \override MetronomeMark #'extra-offset = #'(-9 . 0)
548     \override MetronomeMark #'padding = #'3
549   }
550   \context { \Voice
551     \override Glissando #'thickness = #3
552     \override Glissando #'gap = #0.1
553   }
554 }
555
556 \relative c'' {
557   \tempo 4=50
558   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
559   \inst "Clarinet"
560   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
561 }
562 @end lilypond
563
564 In der Notendatei muss jetzt nur noch @code{\include "definitions.ily"}
565 durch @code{\include "web-publish.ily"} ausgetauscht werden. 
566 Das könnte man natürlich noch weiter vereinfachen.  Also 
567 eine Datei @file{definitions.ily}, die nur die Definitionen 
568 von @code{mpdolce} und @code{inst} enthält, eine Datei 
569 @file{web-publish.ily}, die alle die Änderungen für den 
570 @code{\layout}-Abschnitt enthält und eine Datei @file{university.ily} 
571 für eine Ausgabe, die den Wünschen des Professors entspricht. 
572 Der Anfang der @file{music.ly}-Datei würde dann so aussehen:
573
574 @example
575 \include "definitions.ily"
576
577 %%%  Nur eine der beiden Zeilen auskommentieren!
578 \include "web-publish.ily"
579 %\include "university.ily"
580 @end example
581
582 Durch diese Herangehensweise kann auch bei der Erstellung 
583 von nur einer Ausgabeversion Arbeit gespart werden.  Ich 
584 benutze ein halbes Dutzend verschiedener Stilvorlagen 
585 für meine Projekte.  Jede Notationsdatei fängt an mit 
586 @code{\include "../global.ily"}, welches folgenden Inhalt hat:
587
588
589 @example
590 %%%   global.ly
591 \version "2.12.0"
592 #(ly:set-option 'point-and-click #f)
593 \include "../init/init-defs.ily"
594 \include "../init/init-layout.ily"
595 \include "../init/init-headers.ily"
596 \include "../init/init-paper.ily"
597 @end example
598
599
600 @node Wenn etwas nicht funktioniert
601 @section Wenn etwas nicht funktioniert
602 @translationof When things don't work
603
604 @menu
605 * Alte Dateien aktualisieren::
606 * Fehlersuche (alles auseinandernehmen)::
607 * Minimalbeispiele::
608 @end menu
609
610 @node Alte Dateien aktualisieren
611 @subsection Alte Dateien aktualisieren
612 @translationof Updating old files
613
614 Die Syntax von LilyPond verändert sich ab und zu.  Wenn LilyPond 
615 besser wird, muss auch die Syntax (Eingabesprache) entsprechend 
616 angepasst werden.  Teilweise machen diese Veränderungen die 
617 Eingabesprache einfacher lesbar, teilweise dienen sie dazu, neue 
618 Eigenschaften des Programmes benutzbar zu machen.
619
620 LilyPond stellt ein Programm bereit, das Aktualisierungen 
621 vereinfacht: @code{convert-ly}.  Einzelheiten zur Programmbenutzung 
622 finden sich in @rprogram{Dateien mit convert-ly aktualisieren}.
623
624 Leider kann @code{convert-ly} nicht alle Veränderungen der Syntax
625 berücksichtigen.  Hier werden einfache @qq{Suchen und
626 Ersetzen}-Veränderungen vorgenommen (wie etwa @code{raggedright} zu
627 @code{ragged-right}), aber einige Veränderungen sind zu
628 kompliziert.  Die Syntax-Veränderungen, die das Programm nicht
629 berücksichtigt, sind im Kapitel @rprogram{Dateien mit convert-ly aktualisieren} aufgelistet.
630
631 Zum Beispiel wurden in LilyPond 2.4 und früheren Versionen 
632 Akzente und Umlaute mit LaTeX-Befehlen eingegeben, ein 
633 @qq{No\"el} etwa ergäbe das französische Wort für Weihnachten.
634 In LilyPond 2.6 und höher müssen diese Sonderzeichen direkt 
635 als utf-8-Zeichen eingegeben werden, in diesem Fall also @qq{ë}. 
636 @code{convert-ly} kann nicht alle dieser LaTeX-Befehle 
637 verändern, das muss manuell vorgenommen werden.
638
639
640 @node Fehlersuche (alles auseinandernehmen)
641 @subsection Fehlersuche (alles auseinandernehmen)
642 @translationof Troubleshooting (taking it all apart)
643
644 Früher oder später werden Sie in die Lage kommen, 
645 dass LilyPond Ihre Datei nicht kompilieren will.  Die 
646 Information, die LilyPond während der Übersetzung 
647 gibt, können Ihnen helfen, den Fehler zu finden, aber 
648 in vielen Fällen müssen Sie nach der Fehlerquelle 
649 auf die Suche gehen.
650
651 Die besten Hilfsmittel sind in diesem Fall das Zeilen- 
652 und Blockkommentar (angezeigt durch @code{%} bzw. 
653 @code{%@{ ... %@}}).  Wenn Sie nicht bestimmen können, 
654 wo sich das Problem befindet, beginnen Sie damit, große 
655 Teile des Quelltextes auszukommentieren.  Nachdem Sie 
656 einen Teil auskommentiert haben, versuchen Sie, die Datei 
657 erneut zu übersetzen.  Wenn es jetzt funktioniert, muss 
658 sich das Problem innerhalb der Kommentare befinden. 
659 Wenn es nicht funktioniert, müssen Sie weitere Teile 
660 auskommentieren bis sie eine Version haben, die funktioniert.
661
662 In Extremfällen bleibt nur noch solch ein Beispiel übrig:
663
664 @example
665 \score @{
666   <<
667     % \melody
668     % \harmony
669     % \bass
670   >>
671   \layout@{@}
672 @}
673 @end example
674
675 @noindent
676 (also eine Datei ohne Noten).
677
678 Geben Sie nicht auf, wenn das vorkommen sollte.  Nehmen 
679 Sie das Kommentarzeichen von einem Teil wieder weg, sagen 
680 wir der Bassstimme, und schauen Sie, ob es funktioniert. 
681 Wenn nicht, dann kommentieren Sie die gesamte Bassstimme 
682 aus, aber nicht den @code{\bass}-Befehl in dem 
683  @code{\score}-Abschnitt:
684
685 @example
686 bass = \relative c' @{
687 %@{
688   c4 c c c
689   d d d d
690 %@}
691 @}
692 @end example
693
694 Jetzt beginnen Sie damit, langsam Stück für Stück der 
695 Bassstimme wieder hineinzunehmen, bis Sie die problematische 
696 Zeile finden.
697
698 Eine andere nützliche Technik zur Problemlösung ist es, 
699 @ref{Minimalbeispiele} zu konstruieren.
700
701
702 @node Minimalbeispiele
703 @subsection Minimalbeispiele
704 @translationof Minimal examples
705
706 Ein Minimalbeispiel ist eine Beispieldatei, die so klein wie 
707 möglich ist.  Diese Beispiele sind sehr viel einfacher zu 
708 verstehen als die langen Originaldateien.  Minimalbeispiele 
709 werden benutzt, um
710
711
712 @itemize
713 @item Fehlerberichte zu erstellen,
714 @item eine Hilfeanfrage an die E-Mail-Liste zu schicken,
715 @item Ein Beispiel zur @uref{http://lsr@/.dsi@/.unimi@/.it/,LilyPond
716 Schnipselsammlung} hinzuzufügen.
717 @end itemize
718
719 Um ein Beispiel zu konstruieren, das so klein wie möglich ist, 
720 gibt es eine einfache Regel:  Alles nicht Notwendige entfernen. 
721 Wenn Sie unnötige Teile einer Datei entfernen, bietet es sich an, 
722 sie auszukommentieren und nicht gleich zu löschen.  Auf diese Weise 
723 können Sie eine Zeile leicht wieder mit aufnehmen, sollten Sie sie 
724 doch brauchen, anstatt sie von Anfang an neu zu schreiben.
725
726 Es gibt zwei Ausnahmen dieser @qq{So klein wie möglich}-Regel:
727
728 @itemize
729 @item Fügen Sie immer einen @code{\version}Befehl ein.
730 @item Wenn es möglich ist, benutzen Sie @code{\paper@{ ragged-right = ##t @}}
731 am Beginn des Beispiels.
732 @end itemize
733
734 Der Sinn der Minimalbeispiele ist, dass sie einfach lesbar sind:
735
736 @itemize
737 @item Vermeiden Sie es, komplizierte Noten, Schlüssel oder Taktangaben 
738 zu verwenden, es sei denn, Sie wollen genau an diesen Elementen 
739 etwas demonstrieren.
740 @item Benutzen Sie keine @code{\override}-Befehle, wenn sie nicht der 
741 Zweck des Beispieles sind.
742 @end itemize
743
744
745 @node Partituren und Stimmen
746 @section Partituren und Stimmen
747 @translationof Scores and parts
748
749 Orchesternoten werden alle zweimal gesetzt. Erstens als Stimmen für 
750 die Musiker, und dann als große Partitur für den Dirigenten.  Mit 
751 Variablen 
752 kann hier doppelte Arbeit erspart werden. Die Musik muss nur einmal 
753 eingegeben werden und wird in einer Variable abgelegt.  Der Inhalt 
754 dieser 
755 Variable wird dann benutzt, um sowohl die Stimme als auch die Partitur 
756 zu erstellen.
757
758 Es bietet sich an, die Noten in eigenen Dateien zu speichern.  Sagen wir 
759 beispielsweise, dass in der Datei @file{Horn-Noten.ly} die folgenden 
760 Noten eines Duetts für Horn und Fagott gespeichert sind:
761
762 @example
763 HornNoten = \relative c @{
764   \time 2/4
765   r4 f8 a cis4 f e d
766 @}
767 @end example
768
769 @noindent
770 Daraus wird dann eine eigene Stimme gemacht, indem folgende Datei 
771 erstellt 
772 wird:
773
774 @example
775 \include "Horn-Noten.ly"
776 \header @{
777   instrument = "Horn in F"
778 @}
779
780 @{
781  \transpose f c' \HornNoten
782 @}
783 @end example
784
785 Die Zeile
786
787 @example
788 \include "Horn-Noten.ly"
789 @end example
790
791 @noindent
792 setzt den Inhalt der Datei @file{Horn-Noten.ly} an die Stelle des 
793 Befehls in die aktuelle Datei.  Damit besteht also eine Definition 
794 für @code{HornNoten}, so dass die Variable verwendet werden kann. 
795 Der Befehl @code{\transpose f@tie{}c'} zeigt an, dass das Argument, 
796 also @code{\HornNoten}, um eine Quinte nach oben transponiert wird.
797 Klingendes @q{f} wird also als @code{c'} notiert.  Das entspricht 
798 der Notation eines Waldhorns in F.  Die Transposition zeigt die folgende 
799 Ausgabe:
800
801 @lilypond[quote,ragged-right]
802 \transpose f c' \relative c {
803   \time 2/4
804   r4 f8 a cis4 f e d
805 }
806 @end lilypond
807
808 In der Musik für mehrere Instrumente kommt es oft vor, dass eine Stimme 
809 für mehrere Takte nicht spielt.  Das wird mit einer besonderen Pause 
810 angezeigt, dem Pausenzeichen für mehrere Takte (engl. multi-measure 
811 rest).  Sie wird mit dem @emph{großen} Buchstaben @samp{R} eingegeben, 
812 gefolgt von einer Dauer (@code{1}@tie{}für eine Ganze, @code{2}@tie{}
813 für eine Halbe usw.).  Indem man die Dauer multipliziert, können längere  
814 Pausen erstellt werden.  Z. B. dauert diese Pause drei Takte eines 
815 2/4-Taktes:
816
817 @example
818 R2*3
819 @end example
820
821 Wenn die Stimme gedruckt wird, müssen diese Pausen zusammengezogen 
822 werden. 
823 Das wird durch eine Variable erreicht:
824
825 @example
826 \set Score.skipBars = ##t
827 @end example
828
829 @noindent
830 Dieser Befehl setzt die Eigenschaft des @code{skipBars} (@qq{überspringe 
831 Takte}) auf wahr (@code{##t}).  Wenn diese Option und die Pause 
832 zu der Musik des Beispiels gesetzt wird, erhält man folgendes Ergebnis:
833
834 @lilypond[quote,ragged-right]
835 \transpose f c' \relative c {
836   \time 2/4
837   \set Score.skipBars = ##t
838   R2*3
839   r4 f8 a cis4 f e d
840 }
841 @end lilypond
842
843 Die Partitur wird erstellt, indem alle Noten zusammengesetzt werden. 
844 Angenommen, die andere Stimme trägt den Namen @code{FagottNoten} 
845  und ist in der Datei @file{Fagott-Noten.ly} gespeichert.  Die
846 Partitur sieht dann folgendermaßen aus:
847
848 @example
849 \include "Fagott-Noten.ly"
850 \include "Horn-Noten.ly"
851
852 <<
853   \new Staff \HornNoten
854   \new Staff \FagottNoten
855 >>
856 @end example
857
858 @noindent
859 Und mit LilyPond übersetzt:
860
861 @lilypond[quote,ragged-right]
862 \relative c <<
863   \new Staff {
864     \time 2/4 R2*3
865     r4 f8 a cis4 f e d
866   }
867   \new Staff {
868     \clef bass
869     r4 d,8 f | gis4 c | b bes |
870     a8 e f4 | g d | gis f
871   }
872 >>
873 @end lilypond
874
875
876 @node Make und Makefiles
877 @section Make und Makefiles
878 @translationof Make and Makefiles
879
880 @cindex Makefile
881 @cindex Make-Dateien
882 @cindex make
883
884 Fast alle Betriebssysteme, auf denen LilyPond benutzt werden kann,
885 unterstützen ein Programm mit dem Namen @code{make}.  Dieses Programm
886 liest eine besondere Datei mit der Bezeichnung @code{Makefile},
887 die definiert, welche Dateien von welchen anderen Dateien abhängen und
888 welche Befehle für das Betriebssystem nötig sind, um eine Datei aus
889 einer anderen zu erstellen. Ein Makefile könnte etwa erklären, wie
890 @code{ballad.pdf} und @code{ballad.midi} aus @code{ballad.ly}
891 erstellt werden können, indem LilyPond aufgerufen wird.
892
893 Es gibt Fällen, wenn es sich sehr stark empfiehlt, ein @code{Makefile}
894 für das aktuelle Projekt zu erstellen, entweder zur eigenen Bequemlichkeit,
895 oder aber auch als Hilfe für andere, die vielleicht einmal die
896 Quelldateien lesen und verstehen wollen.  Insbesondere bei großen Projekten
897 mit vielen eingefügten Dateien und unterschiedlichen Ausgabeoptionen
898 (etwa Partitur, einzelne Stimmen, Dirigierpartitur, Klavierauszug usw.),
899 aber auch bei Projekten, die komplizierte Programmaufrufe zur Verarbeitung
900 erfordern (wenn man etwa mit @code{lilypond-book} arbeitet), lohnt
901 sich die Erstellung einer Make-Datei.  Diese Dateien können sehr
902 unterschiedliche ausfallen, und ihre Komplexität und Flexibilität kann
903 den Bedürfnissen aber auch Kenntnissen des Schreibers angepasst werden.
904 Das Programm GNU Make ist auf GNU/Linux Distributionen und MacOS X
905 installiert, aber es ist auch für Windows erhältlich.
906
907 Das @strong{GNU Make Manual} gibt eine vollständige Anleitung, wie
908 @code{make} benutzt werden kann.  Hier sollen nur einige kleine
909 Blicke auf die vielfältigen Möglichkeiten geworfen werden.
910
911 Die Befehle, um Regeln in einer Make-Datei zu erstellen, unterscheidet
912 sich zwischen den Betriebssystemen.  Die verschiedenen Linuxe und
913 MacOS X benutzen @code{bash}, während unter Windows @code{cmd} eingesetzt
914 wird.  Unter MacOS X muss man das System so konfigurieren, dass
915 die Kommandozeile benutzt wird.  Hier einige Beispiele für Make-Dateien,
916 mit Versionen für Linux/MacOS und Windows.
917
918 Das erste Beispiel ist für ein Orchesterstück in vier Stätzen unt mit
919 der folgenden Dateistruktur:
920
921 @example
922 Symphony/
923 |-- MIDI/
924 |-- Makefile
925 |-- Notes/
926 |   |-- cello.ily
927 |   |-- figures.ily
928 |   |-- horn.ily
929 |   |-- oboe.ily
930 |   |-- trioString.ily
931 |   |-- viola.ily
932 |   |-- violinOne.ily
933 |   `-- violinTwo.ily
934 |-- PDF/
935 |-- Parts/
936 |   |-- symphony-cello.ly
937 |   |-- symphony-horn.ly
938 |   |-- symphony-oboes.ly
939 |   |-- symphony-viola.ly
940 |   |-- symphony-violinOne.ly
941 |   `-- symphony-violinTwo.ly
942 |-- Scores/
943 |   |-- symphony.ly
944 |   |-- symphonyI.ly
945 |   |-- symphonyII.ly
946 |   |-- symphonyIII.ly
947 |   `-- symphonyIV.ly
948 `-- symphonyDefs.ily
949 @end example
950
951 Die @code{.ly}-Dateien un den Verzeichnissen @code{Scores} und
952 @code{Parts} erhalten ihrere Noten aus @code{.ily}-Dateien, die
953 sich im @code{Notes}-Verzeichnis befinden:
954
955 @example
956 %%% Kopfzeile der Datei "symphony-cello.ly"
957 \include ../definitions.ily
958 \include ../Notes/cello.ily
959 @end example
960
961 Die Make-Datei hat die Ziele @code{score} (das gesamte Stück als
962 große Partitur), @code{movements} (die einzelnen Sätze als große
963 Partitur) und @code{parts} (die einzelnen Stimmen für die Spieler).
964 Es gibt auch das Ziel @code{archive}, welches ein Tar-Archiv
965 der Quelldateien erstellt, etwa um die Quellen über das Internet
966 oder per E-Mail zu verteilen.  Hier die Make-Datei für GNU/Linux
967 oder MacOS X.  Sie sollte unter dem Namen @code{Makefile} im obersten
968 Verzeichnis des Projektes gespeichert werden:
969
970 @warning{Wenn ein Ziel oder eine Musterregel definiert ist, müssen
971 die folgenden Zeilen mit Tabulatoren, nicht mit Leerzeichen beginnen.}
972
973 @example
974 # Namensstamm der Ausgabedateien
975 piece = symphony
976 # finde heraus, wieviele Prozessoren vorhanden sind
977 CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//`
978 # Der Befehl, um lilypond aufzurufen
979 LILY_CMD = lilypond -ddelete-intermediate-files \
980                     -dno-point-and-click -djob-count=$(CPU_CORES)
981
982 # Die Endungen, die im Makefile benutzt werden
983 .SUFFIXES: .ly .ily .pdf .midi
984
985 # Eingabe- und Ausgabedateien werden in den Verzeichnissen durchsucht,
986 # die sich in der VPATH-Variable befinden.  Alle sind Unterverzeichnisse
987 # des aktuellen Verzeichnisses (angegeben durch die GNU make-Variable
988 # `CURDIR').
989 VPATH = \
990   $(CURDIR)/Scores \
991   $(CURDIR)/PDF \
992   $(CURDIR)/Parts \
993   $(CURDIR)/Notes
994
995 # Die Musterregel, um PDF und MIDI-Dateien aus der LY-Eingabedatei
996 # zu erstellen.  Die .pdf-Ausgabedateien werden in das
997 # `PDF'-Unterverzeichnis abgelegt, die .midi-Dateien in das
998 # `MIDI'-Unterverzeichnis.
999 %.pdf %.midi: %.ly
1000         $(LILY_CMD) $<; \           # this line begins with a tab
1001         if test -f "$*.pdf"; then \
1002             mv "$*.pdf" PDF/; \
1003         fi; \
1004         if test -f "$*.midi"; then \
1005             mv "$*.midi" MIDI/; \
1006         fi
1007
1008 notes = \
1009   cello.ily \
1010   horn.ily \
1011   oboe.ily \
1012   viola.ily \
1013   violinOne.ily \
1014   violinTwo.ily
1015
1016 # Abhängigkeiten der einzelnen Sätze.
1017 $(piece)I.pdf: $(piece)I.ly $(notes)
1018 $(piece)II.pdf: $(piece)II.ly $(notes)
1019 $(piece)III.pdf: $(piece)III.ly $(notes)
1020 $(piece)IV.pdf: $(piece)IV.ly $(notes)
1021
1022 # Abhängigkeiten der großen Partitur.
1023 $(piece).pdf: $(piece).ly $(notes)
1024
1025 # Abhängigkeiten der Stimmen.
1026 $(piece)-cello.pdf: $(piece)-cello.ly cello.ily
1027 $(piece)-horn.pdf: $(piece)-horn.ly horn.ily
1028 $(piece)-oboes.pdf: $(piece)-oboes.ly oboe.ily
1029 $(piece)-viola.pdf: $(piece)-viola.ly viola.ily
1030 $(piece)-violinOne.pdf: $(piece)-violinOne.ly violinOne.ily
1031 $(piece)-violinTwo.pdf: $(piece)-violinTwo.ly violinTwo.ily
1032
1033 # `make score' eintippen, um die große Partitur mit allen vier
1034 # Sätzen als eine Datei zu erstellen.
1035 .PHONY: score
1036 score: $(piece).pdf
1037
1038 # `make parts' tippen, um alle Stimmen zu erstellen.
1039 # `make foo.pdf' tippen, um die Stimme für das Instrument `foo' zu erstellen.
1040 # Beispiel: `make symphony-cello.pdf'.
1041 .PHONY: parts
1042 parts: $(piece)-cello.pdf \
1043        $(piece)-violinOne.pdf \
1044        $(piece)-violinTwo.pdf \
1045        $(piece)-viola.pdf \
1046        $(piece)-oboes.pdf \
1047        $(piece)-horn.pdf
1048
1049 # `make movements' tippen um Dateien für die vier Sätze einzeln zu erstellen.
1050 .PHONY: movements
1051 movements: $(piece)I.pdf \
1052            $(piece)II.pdf \
1053            $(piece)III.pdf \
1054            $(piece)IV.pdf
1055
1056 all: score parts movements
1057
1058 archive:
1059         tar -cvvf stamitz.tar \       # this line begins with a tab
1060         --exclude=*pdf --exclude=*~ \
1061         --exclude=*midi --exclude=*.tar \
1062         ../Stamitz/*
1063 @end example
1064
1065 Unter Windows ergeben sich bestimmte Komplikationen.  Nachdem man
1066 GNU Make für Windows heruntergeladen und installiert hat, muss
1067 man den richtigen Pfad in den Umgebungsvariablen des Systems setzen,
1068 damit die DOS-Kommandozeile das Make-Programm finden kann.  Um das
1069 vorzunehmen, kann mit der rechten Maustaste auf "Arbeitsplatz"
1070 klicken, dann @code{Eigenschaften} und @code{Erweitert} geklickt
1071 werden.  Hier wählt man @code{Umgebungsvariablen}.  In der
1072 Liste @code{Systemvariablen} wählt man @code{Path} und mit 
1073 einem Klick auf @code{Bearbeiten} kann man den Pfad zu der
1074 @code{.exe}-Datei von GNU Make hinzufügen, der etwa wie
1075 folgt aussieht:
1076
1077 @example
1078 C:\Program Files\GnuWin32\bin
1079 @end example
1080
1081 Die Make-Datei selber muss auch angepasst werden, um unterschiedliche
1082 Shell-Befehle zu verwenden und mit Leerzeichen umgehen zu können,
1083 die sich in einigen Standardverzeichnissen unter Windows befinden.
1084 Das @code{archive}-Ziel wird entfernt, da Windows den
1085 @code{tar}-Befehl nicht kennt, und Windows benutzt auch eine
1086 andere Dateiendung für midi-Dateien.
1087
1088
1089 @example
1090 ## WINDOWS VERSION
1091 ##
1092 piece = symphony
1093 LILY_CMD = lilypond -ddelete-intermediate-files \
1094                     -dno-point-and-click \
1095                     -djob-count=$(NUMBER_OF_PROCESSORS)
1096
1097 # 8.3 Bezeichnung für CURDIR erhalten (Workaround wg. Leerzeichen in PATH)
1098 workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \
1099           do @@echo %%~sb)
1100
1101 .SUFFIXES: .ly .ily .pdf .mid
1102
1103 VPATH = \
1104   $(workdir)/Scores \
1105   $(workdir)/PDF \
1106   $(workdir)/Parts \
1107   $(workdir)/Notes
1108
1109 %.pdf %.mid: %.ly
1110         $(LILY_CMD) $<      # diese Zeile beginnt mit Tabulator
1111         if exist "$*.pdf"  move /Y "$*.pdf"  PDF/ # begin with tab
1112         if exist "$*.mid" move /Y "$*.mid" MIDI/  # begin with tab
1113
1114 notes = \
1115   cello.ily \
1116   figures.ily \
1117   horn.ily \
1118   oboe.ily \
1119   trioString.ily \
1120   viola.ily \
1121   violinOne.ily \
1122   violinTwo.ily
1123
1124 $(piece)I.pdf: $(piece)I.ly $(notes)
1125 $(piece)II.pdf: $(piece)II.ly $(notes)
1126 $(piece)III.pdf: $(piece)III.ly $(notes)
1127 $(piece)IV.pdf: $(piece)IV.ly $(notes)
1128
1129 $(piece).pdf: $(piece).ly $(notes)
1130
1131 $(piece)-cello.pdf: $(piece)-cello.ly cello.ily
1132 $(piece)-horn.pdf: $(piece)-horn.ly horn.ily
1133 $(piece)-oboes.pdf: $(piece)-oboes.ly oboe.ily
1134 $(piece)-viola.pdf: $(piece)-viola.ly viola.ily
1135 $(piece)-violinOne.pdf: $(piece)-violinOne.ly violinOne.ily
1136 $(piece)-violinTwo.pdf: $(piece)-violinTwo.ly violinTwo.ily
1137
1138 .PHONY: score
1139 score: $(piece).pdf
1140
1141 .PHONY: parts
1142 parts: $(piece)-cello.pdf \
1143        $(piece)-violinOne.pdf \
1144        $(piece)-violinTwo.pdf \
1145        $(piece)-viola.pdf \
1146        $(piece)-oboes.pdf \
1147        $(piece)-horn.pdf
1148
1149 .PHONY: movements
1150 movements: $(piece)I.pdf \
1151            $(piece)II.pdf \
1152            $(piece)III.pdf \
1153            $(piece)IV.pdf
1154
1155 all: score parts movements
1156 @end example
1157
1158 Die nächste Make-Datei ist für ein @command{lilypond-book}-Dokument,
1159 das in LaTeX gesetzt wird.  Das Projekt hat einen Index, welcher
1160 erfordert, dass der Befehl @command{latex} zweimal aufgerufen wird,
1161 um die Verweise zu aktualisieren.  Ausgabedateien werden in einem
1162 @code{out}-Verzeichnis für die .pdf-Dateien gespeichert und in
1163 @code{htmlout} für die html-Dateien.
1164
1165 @example
1166 SHELL=/bin/sh
1167 FILE=myproject
1168 OUTDIR=out
1169 WEBDIR=htmlout
1170 VIEWER=acroread
1171 BROWSER=firefox
1172 LILYBOOK_PDF=lilypond-book --output=$(OUTDIR) --pdf $(FILE).lytex
1173 LILYBOOK_HTML=lilypond-book --output=$(WEBDIR) $(FILE).lytex
1174 PDF=cd $(OUTDIR) && pdflatex $(FILE)
1175 HTML=cd $(WEBDIR) && latex2html $(FILE)
1176 INDEX=cd $(OUTDIR) && makeindex $(FILE)
1177 PREVIEW=$(VIEWER) $(OUTDIR)/$(FILE).pdf &
1178
1179 all: pdf web keep
1180
1181 pdf:
1182         $(LILYBOOK_PDF)  # begin with tab
1183         $(PDF)           # begin with tab
1184         $(INDEX)         # begin with tab
1185         $(PDF)           # begin with tab
1186         $(PREVIEW)       # begin with tab
1187
1188 web:
1189         $(LILYBOOK_HTML) # begin with tab
1190         $(HTML)          # begin with tab
1191         cp -R $(WEBDIR)/$(FILE)/ ./  # begin with tab
1192         $(BROWSER) $(FILE)/$(FILE).html &  # begin with tab
1193
1194 keep: pdf
1195         cp $(OUTDIR)/$(FILE).pdf $(FILE).pdf  # begin with tab
1196
1197 clean:
1198         rm -rf $(OUTDIR) # begin with tab
1199
1200 web-clean:
1201         rm -rf $(WEBDIR) # begin with tab
1202
1203 archive:
1204         tar -cvvf myproject.tar \ # begin this line with tab
1205         --exclude=out/* \
1206         --exclude=htmlout/* \
1207         --exclude=myproject/* \
1208         --exclude=*midi \
1209         --exclude=*pdf \
1210         --exclude=*~ \
1211         ../MyProject/*
1212 @end example
1213
1214 TODO: soll auch unter Windows funktionieren
1215
1216 Die vorige Make-Datei funktioniert nicht unter Windows.  Als Alternative
1217 für Windows-Benutzer könnte man eine einfache batch-Datei erstellen,
1218 welche die erforderlichen Befehl enthält.  Sie kümmert sich nicht
1219 um Abhängigkeiten, wie es eine Make-Datei kann, aber wenigstens
1220 wird die Kompilation auf einen einzigen Befehl beschränkt.  Das folgende
1221 kann als Datei @command{build.bat} oder @command{build.cmd} gespeichert
1222 werden.  Die Batch-Datei kann auf der Kommandozeile aufgerufen werden
1223 oder einfach doppelt angeklickt werden.
1224
1225 @example
1226 lilypond-book --output=out --pdf myproject.lytex
1227 cd out
1228 pdflatex myproject
1229 makeindex myproject
1230 pdflatex myproject
1231 cd ..
1232 copy out\myproject.pdf MyProject.pdf
1233 @end example
1234
1235
1236 @seealso
1237 Programmbenutzung:
1238 @rprogram{Einrichtung für MacOS X},
1239 @rprogram{Benutzung auf der Kommandozeile},
1240 @rprogram{LilyPond-book}