1 @c -*- coding: utf-8; mode: texinfo; -*-
2 @c This file is part of lilypond.tely
4 Translation of GIT committish: 3121682025660b6c85fbf3f22bb9cd8396699ad1
6 When revising a translation, copy the HEAD committish of the
7 version that you are working on. See TRANSLATION for details.
10 @node Working on LilyPond projects
11 @chapter Working on LilyPond projects
13 Dieses Kapitel erklärt, wie bestimmte häufige Probleme zu
14 lösen oder ganz zu vermeiden sind. Wenn Sie schon
15 Programmiererfahrung mitbringen, erscheinen diese Hinweise
16 vielleicht überflüssig, aber es wird dennoch empfohlen, dieses Kapitel
21 * Suggestions for writing LilyPond files::
22 * Saving typing with identifiers and functions::
24 * Updating old files::
25 * Troubleshooting (taking it all apart)::
30 @node Suggestions for writing LilyPond files
31 @section Suggestions for writing LilyPond files
32 Jetzt sind Sie so weit, größere Stücke mit LilyPond zu schreiben --
34 nur die kleinen Beispiele aus der Übung, sondern ganze Stücke.
35 Aber wie geht man das am besten an?
37 Solange LilyPond Ihre Dateien versteht und die Noten so setzt,
38 wie Sie das wollen, spielt es eigentlich keine Rolle, wie Ihre
39 Dateien aussehen. Es gibt aber trotzdem ein paar Dinge, die man
40 beim Schreiben von LilyPond-Code berücksichtigen sollte.
43 @item Was ist, wenn Sie einen Fehler machen? Die Struktur einer
44 LilyPond-Datei kann es erleichtern (oder erschweren), bestimmte
47 @item Was ist, wenn Sie Ihre Dateien mit jemandem austauschen
48 wollen? Oder Ihre Dateien nach einige Jahren noch einmal überarbeiten
49 wollen? Manche LilyPond-Dateien vesteht man auf den ersten Blick,
50 über anderen muss man eine Stunde grübeln, um die Struktur zu ahnen.
52 @item Was ist, wenn sie Ihre Dateien auf eine neuere LilyPond-Version
53 aktualisieren wollen? Die Syntax der Eingabesprache verändert sich
54 allmählich mit Verbesserungen im Programm. Die meisten Verändernungen
55 können automatisch durch @code{convert-ly} gelöst werden, aber
56 bestimmte Änderungen brauchen Hanbarbeit. LilyPond-Dateien können
57 strukturiert werden, damit sie einfacher aktualisierbar sind.
61 * General suggestions::
62 * Typesetting existing music::
67 @node General suggestions
68 @subsection General suggestions
70 Hier einige Vorschläge, wie Sie Probleme vermeiden oder lösen können:
73 @item @strong{Schreiben Sie immer mit @code{\version} die
75 in jede Datei}. Beachten Sie, dass in allen Vorlagen die Versionsnummer
76 @code{\version "2.11.38"} eingetragen ist. Es empfielt sich, in alle
77 Dateien, unabhängig von ihrer Größe, den @code{\version}-Befehl
78 einzufügen. Persönliche Erfahrung hat gezeigt, dass es ziemlich
79 frustrierend sein kann zu erinnern, welche Programmversion man etwa
80 vor einem Jahr verwendet hat. Auch @code{convert-ly} benötigt die
83 @item @strong{Benutzen Sie Überprüfungen}: @ruser{Bar check},
84 @ruser{Octave check} und
85 @ruser{Barnumber check}. Wenn Sie hier und da diese Überprüfungen
86 einfügen, finden Sie einen möglichen Fehler weit schneller. Wie oft
88 ist @qq{hier und da}? Das hängt von der Komplexität der Musik ab. Bei
89 einfachen Stücken reicht es vielleicht ein- oder zweimal, in sehr
90 komplexer Musik sollte man sie vielleicht in jeden Takt einfügen.
92 @item @strong{Ein Takt pro Textzeile}. Wenn irgendetwas kompliziertes
93 vorkommt, entweder in der Musik selber oder in der Anpassung der
95 empfielt es sich oft, nur einen Takt pro Zeile zu schreiben.
96 Bildschirmplatz zu sparen, indem Sie acht Takte in eine Zeile zwängen,
97 hilft nicht weiter, wenn Sie ihre Datei @qq{debuggen} müssen.
99 @item @strong{Kommentieren Sie ihre Dateien}. Benutzen Sie entweder
100 Taktnummern (in regelmäßigen Abständen) oder Verweise auf musikalische
101 Themen (@qq{Zweites Thema in den Geigen}, @qq{vierte Variation} usw.).
102 Sie brauchen diese Kommentare vielleicht noch nicht, wenn Sie das Stück
103 notieren, aber spätestens wenn Sie nach ein paar Jahren etwas
105 wollen oder Sie den Quelltext an einen Freund weitergeben wollen,
106 ist es weitaus komplizierter, die Dateistruktur ohne Kommentare zu
107 verstehen, als wenn Sie sie rechtzeitig eingefügt hätten.
109 @item @strong{Schreiben Sie Klammern mit Einrückung}. Viele
110 Probleme entstehen durch ungerade Anzahl von @code{@{} and
113 @item @strong{Schreiben Sie Tondauerangaben} am Anfang von
114 Abschnitten und Bezeichnern. Wenn Sie beispielsweise
115 @code{c4 d e} am Anfang eines Abschnittes schreiben,
116 ersparen Sie sich viele Probleme, wenn Sie ihre Musik
117 eines Tages umarrangieren wollen.
119 @item @strong{Trennen Sie Einstellungen} von den eigentlichen
120 Noten. Siehe auch @ruser{Saving typing with identifiers and functions}
122 @ruser{Style sheets}.
127 @node Typesetting existing music
128 @subsection Typesetting existing music
130 Wenn Sie Musik aus einer fertigen Partitur kopieren (z. B. die
131 LilyPond-Eingabe einer gedruckten Partitur):
135 @item Schreiben Sie ein System ihrer Quelle nach dem anderen
136 (aber trotzdem nur einen Takt pro Textzeile) und überprüfen
137 Sie jedes System, nachdem Sie es fertig kopiert haben. Mit dem
138 @code{showLastLength}-Befehl können Sie den Übersetzungsprozess
139 beschleunigen. Siehe auch
140 @ruser{Skipping corrected music}.
142 @item Definieren Sie @code{mBreak = @{ \break @}} und schreiben Sie
143 @code{\mBreak} in der Quelldatei immer dann, wenn im Manuskript
144 ein Zeilenumbruch vorkommt. Das macht es einfacher, die gesetzte
145 Zeile mit den ursprünglichen Noten zu vergleichen. Wenn Sie die
146 Partitur fertig gestellt haben, könne Sie @code{mBreak = @{ @}},
147 also leer definieren, um diese manuellen Zeilenumbrüche zu entfernen.
148 Damit kann dann LilyPond selber entscheiden, wohin es passende
149 Zeilenumbrüche plaziert.
155 @subsection Large projects
157 Besonders wenn Sie an größeren Projekten arbeiten, ist es
158 unumgänglich, dass Sie ihre LilyPond-Dateien klar strukturieren.
162 @item @strong{Verwenden Sie Variablen für jede Stimme}, innerhalb
163 der Definition sollte so wenig Struktur wie möglich sein. Die
164 Struktur des @code{\score}-Abschnittes verändert sich am ehesten,
165 während die @code{violin}-Definition sich wahrscheinlich mit einer
166 neuen Programmversion nicht verändern wird.
169 violin = \relative c'' @{
182 @item @strong{Trennen Sie Einstellungen von den Noten}. Diese
183 Empfehlung wurde schon im Abschnitt @ruser{General suggestions} gegeben,
184 aber für große Projekte ist es unumgänglich. Muss z. B. die
185 Definition für @code{fdannp} verändert werden, so braucht
186 man es nur einmal vorzunehmen und die Noten in der Geigenstimme,
187 @code{violin}, bleiben unberührt.
191 \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @}
192 violin = \relative c'' @{
200 @node Saving typing with identifiers and functions
201 @section Saving typing with identifiers and functions
206 Bis jetzt haben Sie immer etwa solche Noten gesehen:
208 @lilypond[quote,verbatim,ragged-right]
209 hornNotes = \relative c'' { c4 b dis c }
217 Das könnte auch nützlich in Minimal-Music sein:
219 @lilypond[quote,verbatim,ragged-right]
220 fragA = \relative c'' { a4 a8. b16 }
221 fragB = \relative c'' { a8. gis16 ees4 }
222 violin = \new Staff { \fragA \fragA \fragB \fragA }
230 Sie können diese Bezeichner oder Variablen aber auch für
231 (eigene) Einstellungen verwenden:
233 @lilypond[quote,verbatim,ragged-right]
234 dolce = \markup{ \italic \bold dolce }
235 padText = { \once \override TextScript #'padding = #5.0 }
236 fthenp=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p }
237 violin = \relative c'' {
239 c4._\dolce b8 a8 g a b |
241 c4.^"hi there!" d8 e' f g d |
242 c,4.\fthenp b8 c4 c-. |
249 \layout{ragged-right=##t}
253 Die Variablen haben in diesem Beispiel deutlich die
254 Tipparbeit erleichtert. Aber es lohnt sich, sie zu
255 einzusetzen, auch wenn man sie nur einmal anwendet,
256 denn sie vereinfachen die Struktur.
257 Hier ist das vorangegangene Beispiel ohne
258 Variablen. Es ist sehr viel komplizierter zu lesen,
259 besonders die letzte Zeile.
262 violin = \relative c'' @{
264 c4._\markup@{ \italic \bold dolce @} b8 a8 g a b |
265 \once \override TextScript #'padding = #5.0
266 c4.^"hi there!" d8 e' f g d |
267 c,4.\markup@{ \dynamic f \italic \small @{ 2nd @}
268 \hspace #0.1 \dynamic p @} b8 c4 c-. |
273 Bis jetzt wurde nur statische Substitution vorgestellt
274 -- wenn LilyPond den Befehl @code{\padText} findet, wird
275 er ersetzt durch durch unsere vorherige Definition (alles,
276 was nach dem @code{padtext =} kommt).
278 LilyPond kennt aber auch nicht-statische Substitutionen (man
279 kann sie sich als Funktionen vorstellen).
281 @lilypond[quote,verbatim,ragged-right]
283 #(define-music-function (parser location padding) (number?)
285 \once \override TextScript #'padding = #$padding
293 c4^"piu mosso" fis a g
297 Die Benutzung von Variablen hilft auch, viele Schreibarbeit zu
298 vermeiden, wenn die Eingabesyntax von LilyPond sich verändert
299 (siehe auch @ruser{Updating old files}). Wenn nur eine einzige
300 Definition (etwa @code{\dolce}) für alle Dateien verwendet wird
301 (vgl. @ruser{Style sheets}), muss nur diese einzige Definition
302 verändert werden, wenn sich die Syntax ändert. Alle Verwendungen
303 des Befehles beziehen sich dann auf die neue Definition.
306 @section Style sheets
308 Die Ausgabe, die LilyPond erstellt, kann sehr start modifiziert
309 werden, siehe @ruser{Tweaking output} für Einzelheiten. Aber wie
310 kann man diese Änderungen auf eine ganze Serie von Dateien
311 anwenden? Oder die Einstellungen von den Noten trennen? Das
312 Verfahren ist ziemlich einfach.
314 Hier ist ein Beispiel. Es ist nicht schlimm, wenn Sie nicht auf
315 Anhieb die Abschnitte mit den ganzen @code{#()} verstehen. Das
316 wird im Kapitel @ruser{Advanced tweaks with Scheme} erklärt.
318 @lilypond[quote,verbatim,ragged-right]
319 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
320 #:line(#:dynamic "mp" #:text #:italic "dolce" )))
321 tempoMark = #(define-music-function (parser location markp) (string?)
323 \once \override Score . RehearsalMark #'self-alignment-X = #left
324 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
325 \mark \markup { \bold $markp }
330 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
331 \tempoMark "Poco piu mosso"
332 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
336 Es treten einige Probleme mit überlappenden Symbolen auf. Sie
337 werden beseitigt mit den Tricks aus dem Kapitel @ruser{Moving objects}.
338 Aber auch die @code{mpdolce} und @code{tempoMark}-Defintiionen
339 können verbessert werden. Sie produzieren das Ergebnis, das
340 gewünscht ist, aber es wäre schön, sie auch in anderen Stücken
341 verwenden zu können. Man könnte sie natürlich einfach kopieren
342 und in die anderen Dateien einfügen, aber das ist lästig. Die
343 Defintionen verbleiben auch in der Notendatei und diese @code{#()}
344 sehen nicht wirklich schön aus. Sie sollen in einer anderen
345 Datei versteckt werden:
348 %%% speichern in einer Datei "definitions.ly"
349 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
350 #:line(#:dynamic "mp" #:text #:italic "dolce" )))
351 tempoMark = #(define-music-function (parser location markp) (string?)
353 \once \override Score . RehearsalMark #'self-alignment-X = #left
354 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
355 \mark \markup @{ \bold $markp @}
359 Jetzt muss natürlich noch die Notendatei angepasst werden (gespeichert
360 unter dem Namen @file{"music.ly"}).
362 @c We have to do this awkward example/lilypond-non-verbatim
363 @c because we can't do the \include stuff in the manual.
366 \include "definitions.ly"
370 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
371 \once \override Score.RehearsalMark #'padding = #2.0
372 \tempoMark "Poco piu mosso"
373 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
377 @lilypond[quote,ragged-right]
378 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
379 #:line(#:dynamic "mp" #:text #:italic "dolce" )))
380 tempoMark = #(define-music-function (parser location markp) (string?)
382 \once \override Score . RehearsalMark #'self-alignment-X = #left
383 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
384 \mark \markup { \bold $markp }
389 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
390 \once \override Score.RehearsalMark #'padding = #2.0
391 \tempoMark "Poco piu mosso"
392 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
396 Das sieht schon besser aus, aber es sind noch einige Verbesserungen
398 Das Glissando ist schwer zu sehen, also soll es etwas dicker erscheinen
399 und dichter an den Notenköpfen gesetzt werden. Das Metronom-Zeichen
400 soll über dem Schlüssel erscheinen, nicht über der ersten Note. Und
401 schließlich kann unser Kompositionsprofessor @qq{C}-Taktangaben
402 überhaupt nicht leiden, also
403 müssen sie in @qq{4/4} verändert werden.
405 Diese Veränderungen sollten Sie aber nicht in der @file{music.ly}-Datei
406 vornehmen. Ersetzen Sie die @file{definitions.ly}-Datei hiermit:
410 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
411 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
412 tempoMark = #(define-music-function (parser location markp) (string?)
414 \once \override Score . RehearsalMark #'self-alignment-X = #left
415 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
416 \mark \markup @{ \bold $markp @}
421 \override MetronomeMark #'extra-offset = #'(-9 . 0)
422 \override MetronomeMark #'padding = #'3
425 \override TimeSignature #'style = #'numbered
428 \override Glissando #'thickness = #3
429 \override Glissando #'gap = #0.1
434 @lilypond[quote,ragged-right]
435 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
436 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
437 tempoMark = #(define-music-function (parser location markp) (string?)
439 \once \override Score . RehearsalMark #'self-alignment-X = #left
440 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
441 \mark \markup { \bold $markp }
446 \override MetronomeMark #'extra-offset = #'(-9 . 0)
447 \override MetronomeMark #'padding = #'3
450 \override TimeSignature #'style = #'numbered
453 \override Glissando #'thickness = #3
454 \override Glissando #'gap = #0.1
460 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
461 \once \override Score.RehearsalMark #'padding = #2.0
462 \tempoMark "Poco piu mosso"
463 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
467 Das sieht schon besser aus! Aber angenommen Sie möchten dieses
468 Stück jetzt veröffentlichen. Ihr Kompositionsprofessor mag
469 die @qq{C}-Taktangaben nicht, aber Sie finden sie irgendwie
470 schöner. Also kopieren Sie die Datei @file{definitions.ly} nach
471 @file{web-publish.ly} und veränderen diese. Weil die Noten
472 in einer PDF-Datei auf dem Bilschirm angezeigt werden sollen,
473 bietet es sich auch an, die gesamte Ausgabe zu vergrößern.
477 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
478 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
479 tempoMark = #(define-music-function (parser location markp) (string?)
481 \once \override Score . RehearsalMark #'self-alignment-X = #left
482 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
483 \mark \markup @{ \bold $markp @}
486 #(set-global-staff-size 23)
489 \override MetronomeMark #'extra-offset = #'(-9 . 0)
490 \override MetronomeMark #'padding = #'3
495 \override Glissando #'thickness = #3
496 \override Glissando #'gap = #0.1
501 @lilypond[quote,ragged-right]
502 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
503 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
504 tempoMark = #(define-music-function (parser location markp) (string?)
506 \once \override Score . RehearsalMark #'self-alignment-X = #left
507 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
508 \mark \markup { \bold $markp }
511 #(set-global-staff-size 23)
514 \override MetronomeMark #'extra-offset = #'(-9 . 0)
515 \override MetronomeMark #'padding = #'3
518 \override Glissando #'thickness = #3
519 \override Glissando #'gap = #0.1
525 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
526 \once \override Score.RehearsalMark #'padding = #2.0
527 \tempoMark "Poco piu mosso"
528 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
532 In der Notendatei muss jetzt nur noch @code{\include "definitions.ly"}
533 durch @code{\include "web-publish.ly"} ausgetauscht werden.
534 Das könnte man natürlich noch weiter vereinfachen. Also
535 eine Datei @file{definitions.ly}, die nur die Definitionen
536 von @code{mpdolce} und @code{tempoMark} enthält, eine Datei
537 @file{web-publish.ly}, die alle die Änderungen für den
538 @code{\layout}-Abschnitt enthält und eine Datei @file{university.ly}
539 für eine Ausgabe, die den Wünschen des Professors entspricht.
540 Der Anfang der @file{music.ly}-Datei würde dann so aussehen:
543 \include "definitions.ly"
545 %%% Nur eine der beiden Zeilen auskommentieren!
546 \include "web-publish.ly"
547 %\include "university.ly"
550 Durch diese Herangehensweise kann auch bei der Erstellung
551 von nur einer Ausgabeversion Arbeit gespart werden. Ich
552 benutze ein halbes Dutzent verschidener Stilvorlagen
553 für meine Projekte. Jede Notationsdatei fängt an mit
554 @code{\include "../global.ly"}, welches folgenden Inhalt hat:
560 #(ly:set-option 'point-and-click #f)
561 \include "../init/init-defs.ly"
562 \include "../init/init-layout.ly"
563 \include "../init/init-headers.ly"
564 \include "../init/init-paper.ly"
568 @node Updating old files
569 @section Updating old files
571 Die Syntax von LilyPond verändert sich ab und zu. Wenn LilyPond
572 besser wird, muss auch die Syntax (Eingabesprache) entsprechend
573 angepasst werden. Teilweise machen diese Veränderungen die
574 Eingabesprache einfacher lesbar, teilweise dienen sie dazu, neue
575 Eigenschaften des Programmes benutzbar zu machen.
577 LilyPond stellt ein Programm bereit, das Aktualisierungen
578 vereinfacht: @code{convert-ly}. Einzelheiten zur Programmbenutzung
579 finden sich in @rprogram{Updating files with convert-ly}.
581 Leider kann @code{convert-ly} nicht alle Veränderungen der Syntax
582 berücksichtigen. Hier werden einfache @qq{Suchen und
583 Ersetzen}-Veränderungen vorgenommen (wie etwa @code{raggedright} zu
584 becoming @code{ragged-right}), aber einige Veränderungen sind zu
585 kompliziert. Die Syntax-Veränderungen, die das Programm nicht
586 berücksichtigt, sind im Kapitel @rprogram{Updating files with
587 convert-ly} aufgelistet.
589 Zum Beispiel wurden in LilyPond 2.4 und früheren Versionen
590 Akzente und Umlaute mit LaTeX-Befehlen eingegeben, ein
591 @qq{No\"el} etwa ergäbe das französische Wort für Weihnachten.
592 In LilyPond 2.6 und höher müssen diese Sonderzeichen direkt
593 als utf-8-Zeichen eingegeben werden, in diesem Fall also @qq{ë}.
594 @code{convert-ly} kann nicht alle dieser LaTeX-Befehle
595 verändern, das muss manuell vorgenommen werden.
598 @node Troubleshooting (taking it all apart)
599 @section Troubleshooting (taking it all apart)
601 Früher oder später werden Sie in die Lage kommen,
602 dass LilyPond Ihre Datei nicht kompilieren will. Die
603 Information, die LilyPond während der Übersetzung
604 gibt, können Ihnen helfen, den Fehler zu finden, aber
605 in vielen Fällen müssen Sie nach der Fehlerquelle
608 Die besten Hilfmittel sind in diesem Fall das Zeilen-
609 und Blockkommentar (angezeigt durch @code{%} bzw.
610 @code{%@{ ... %@}}). Wenn Sie nicht bestimmen können,
611 wo sich das Problem befindet, beginnen Sie damit, große
612 Teile des Quelltextes auszukommentieren. Nachdem Sie
613 einen Teil auskommentiert haben, versuchen Sie, die Datei
614 erneut zu übersetzen. Wenn es jetzt funktioniert, muss
615 sich das Problem innerhalb der Kommentare befinden.
616 Wenn es nicht funktioniert, müssen Sie weitere Teile
617 auskommentieren bis sie eine Version haben, die funktioniert.
619 In Extremfällen bleibt nur noch solch ein Beispiel übrig:
633 (also eine Datei ohne Noten).
635 Geben Sie nicht auf, wenn das vorkommen sollte. Nehmen
636 Sie das Kommentarzeichen von einem Teil wieder weg, sagen
637 wir der Bassstimme, und schauen Sie, ob es funktioniert.
638 Wenn nicht, dann kommentieren Sie die gesamte Bassstimme
639 aus, aber nicht den @code{\bass}-Befehl in dem
640 @code{\score}-Abschnitt:
643 bass = \relative c' @{
651 Jetzt beginnen Sie damit, langsam Stück für Stück der
652 Bassstimme wieder hineinzunehmen, bis Sie die problematische
655 Eine andere nützliche Technik zur Problemlösung ist es,
656 @ruser{Minimal examples} zu konstruieren.
659 @node Minimal examples
660 @section Minimal examples
662 Ein Minimalbeispiel ist eine Beispieldatei, die so klein wie
663 möglich ist. Diese Beispiele sind sehr viel einfacher zu
664 verstehen als die langen Originaldateien. Minimalbeispiele
669 @item Fehlerberichte zu erstellen,
670 @item eine Hilfeanfrage an die E-Mail-Liste zu schicken,
671 @item Ein Beispiel zur @uref{http://lsr@/.dsi@/.unimi@/.it/,LilyPond
672 Schnipselsammlung}hinzuzufügen.
675 Um ein Beispiel zu konstruieren, das so klein wie möglich ist,
676 gibt es eine einfache Regel: Alles nicht Notwendige entfernen.
677 Wenn Sie unnötige Teile einer Datei entfernen, bietet es sich an,
678 sie auszukommentieren und nicht gleich zu löschen. Auf diese Weise
679 können Sie eine Zeile leicht wieder mit aufnehmen, sollten Sie sie
680 doch brauchen, anstatt sie von Anfang an neu zu schreiben.
682 Es gibt zwei Ausnahmen dieser @qq{So klein wie möglich}-Regel:
685 @item Fügen Sie immer einen @code{\version}Befehl ein.
686 @item Wenn es möglich ist, benutzen Sie @code{\paper@{ ragged-right = ##t @}}
687 am Beginn des Beispiels.
690 Der Sinn der Minimalbeispiele ist, dass sie einfach lesbar sind:
693 @item Vermeiden Sie es, komplizierte Noten, Schlüssel oder Taktangaben
694 zu verwenden, es sei denn, Sie wollen genau an diesen Elementen
696 @item Benutzen Sie keine @code{\override}-Befehle, wenn sie nicht der
697 Zweck des Beispieles sind.