1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
4 Translation of GIT committish: 32114617e6b96617749a3c4efb4fa2203a8c3d50
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..
13 @node Die Ausgabe verändern
14 @chapter Die Ausgabe verändern
15 @translationof Tweaking output
17 In diesem Kapitel wird erklärt, wie man die Notenausgabe verändern
18 kann. In LilyPond kann man sehr viel konfigurieren, fast jedes
19 Notenfragment kann geändert werden.
23 * Grundlagen für die Optimierung::
24 * Die Referenz der Programminterna::
25 * Erscheinung von Objekten::
26 * Positionierung von Objekten::
27 * Kollision von Objekten::
28 * Weitere Optimierungen::
32 @node Grundlagen für die Optimierung
33 @section Grundlagen für die Optimierung
34 @translationof Tweaking basics
37 * Grundlagen zur Optimierung::
38 * Objekte und Schnittstellen::
39 * Regeln zur Benennung von Objekten und Eigenschaften::
40 * Optimierungsmethoden::
43 @node Grundlagen zur Optimierung
44 @subsection Grundlagen zur Optimierung
45 @translationof Introduction to tweaks
47 @qq{Optimierung} (engl. tweaking) ist ein LilyPond-Begriff für die
48 verschiedenen Methoden, die Aktionen zu beeinflussen, die während
49 der Kompilation einer Notationsdatei vorgenommen werden sowie auf
50 das Notenbild einzuwirken. Einige dieser Opitmierungen sind sehr
51 einfach, andere dagegen recht komplex. Aber insgesamt erlaubt das
52 System an Optimierungen so gut wie alle möglichen Erscheindungsformen
55 In diesem Abschnitt werden die grundlegenden Konzepte vorgestellt,
56 um die Optimierung zu verstehen. Später soll eine Anzahl von fertigen
57 Befehlen bereitgestellt werden, die einfach in die Quelldatei
58 kopiert werden können um den selben Effekt wie im Beispiel
59 zu erhalten. Gleichzeitig zeigen diese Beispiele, wie die Befehle
60 konstruiert werden, so dass Sie in der Lage sein werden, eigene
61 Befehle auf dieser Grundlage zu entwickeln.
63 Bevor Sie mit diesem Kapitel beginnen, könnte Sie ein Blick in den
64 Abschnitt @ref{Kontexte und Engraver} interessieren, dann
65 Kontexte und Engraver sowie die Eigenschaften, die mit ihnen
66 verknüpft sind, sind die Voraussetzung, um die Funktionsweise
67 von Optimierungen verstehen zu können.
70 @node Objekte und Schnittstellen
71 @subsection Objekte und Schnittstellen
72 @translationof Objects and interfaces
79 @cindex Schnittstellen
80 @cindex graphische Objekte (Grob)
81 @cindex Objekteigenschaften
83 @cindex Objekt, Layout-
84 @cindex Eigenschaften von Objekten
86 Optimierung bedeutet, die internen Operationen und Strukturen
87 des LilyPond-Programmes zu verändern, darum sollen hier
88 zunächst die wichtigesten Begriffe erklärt werden, die zur
89 Beschreibung dieser Operationen und Strukturen benutzt werden.
91 Der Begriff @qq{Objekt} ist ein allgemeiner Begriff, mit dem
92 die Vielzahl an internen Strukturen bezeichnet wird, die LilyPond
93 während der Bearbeitung des Quelltextes erstellt. Wenn etwa
94 ein Befehl wie @code{\new Staff} auftritt, wird ein neues Objekt
95 vom Typ @code{Staff} erstellt. Dieses Objekt @code{Staff} enthält
96 dann alle Eigenschaften, die mit diesem speziellen Notensystem
97 verknüpft sind, wie beispielsweise seine Bezeichnung, Tonart und
98 spezifische Angaben über die Engraver, die innerhalb dieses Systems
99 eingesetzt werden. Für alle anderen Kontexte gibt es genauso
100 Objekte, die deren Eigenschaften beinhalten, beispielsweise für
101 @code{Voice}-Objekte, @code{Score}-Objekte, @code{Lyrics}-Objekte,
102 aber auch für Objekte, die Notationselemente wie die Taktlinien,
103 Notenköpfe, Bögen und Dynamikbezeichnung enthalten. Jedes
104 Objekt hat eine eigene Gruppe an Eigenschaftswerten.
106 Bestimmte Objekttypen tragen besondere Bezeichnungen. Objekte, die
107 Notationselemente der gesetzten Ausgabe repräsentieren, also
108 Notenköpfe, Hälse, Bögen, Fingersatz, Schlüssel usw., werden
109 @qq{Layout-Objekte}, oft auch @qq{Graphische Objekte} genannt.
110 Daraus resultiert die künstliche Abkürzung @qq{Grob}.
111 Diese sind auch Objekte im allgemeinen Sinn und haben genauso
112 Eigenschaften, die mit ihnen verknüpft sind, wie etwa Größe, Position,
115 Einige Layout-Objekte sind etwas spezieller. Phrasierungsbögen,
116 Crescendo-Klammern, Oktavierungszeichen und viele andere
117 Grobs sind nicht an einer Stelle plaziert -- sie haben vielmehr
118 einen Anfangspunkt, einen Endpunkt und eventuell noch andere
119 Eigenschaften, die ihre Form bestimmen. Objekte mit solch
120 einer erweiterten Gestalt werden als @qq{Strecker} (engl. Spanners)
123 Es bleibt uns noch übrig zu erklären, was @qq{Schnittstellen}
124 (engl. interface) sind. Wenn auch viele Objekte sehr unterschiedlich
125 sind, haben sie doch oft gemeinsame Eigenschaften, die auf
126 die gleiche Weise verarbeitet werden. Alle Grobs beispielsweise
127 haben eine Farbe, eine Größe, eine Position usw. und alle
128 diese Eigenschaften werden von LilyPond auf die gleiche Weise
129 verarbeitet, während der Quelltext in Notensatz umgesetzt wird.
130 Um die internen Operationen zu vereinfachen, sind alle diese
131 gemeinsamen Prozesse und Eigenschaften in einem Objekt
132 mit der Bezeichnung @code{grob-interface} (Schnittstelle eines
133 graphischen Objektes) zusammengefasst. Es gibt viele andere
134 Gruppen gemeinsamer Eigenschaften, die jede eine Bezeichnung
135 besitzen, welche auf @code{-interface} endet. Insgesamt
136 gibt es über 100 dieser Schnittstellen. Wir werden später sehen,
137 was es damit auf sich hat.
139 Dies waren die Hauptbegriffe, die in diesem Kapitel zur Anwendung
143 @node Regeln zur Benennung von Objekten und Eigenschaften
144 @subsection Regeln zur Benennung von Objekten und Eigenschaften
145 @translationof Naming conventions of objects and properties
147 @cindex Benennungskonventionen für Objekte
148 @cindex Benennungskonventionen für Eigenschaften
149 @cindex Objekte, Benennungskonventionen
150 @cindex Eigenschaften, Benennungskonventionen
151 @cindex Regeln zur Benennung von Objekten/Eigenschaften
153 Es wurden schon früher einige Regeln zur Benennung von
154 Objekten vorgestellt, siehe
155 @ref{Kontexte und Engraver}. Hier eine Referenzliste der
156 häufigsten Objekt- und Eigenschaftsbezeichnungen mit
157 den Regeln für ihre Bezeichnung und
158 illustrierenden echten Bezeichnungen. Es wurde @qq{A}
159 für einen beliebigen Großbuchstaben und @qq{aaa} für eine
160 beliebige Anzahl an Kleinbuchstaben eingesetzt. Andere
161 Zeichen werden explizit angegeben.
163 @multitable @columnfractions .33 .33 .33
164 @headitem Objekt-/Eigenschaftstyp
165 @tab Naming convention
168 @tab Aaaa oder AaaaAaaaAaaa
169 @tab Staff, GrandStaff
171 @tab Aaaa oder AaaaAaaaAaaa
174 @tab Aaaa_aaa_engraver
175 @tab Clef_engraver, Note_heads_engraver
177 @tab aaa-aaa-interface
178 @tab grob-interface, break-aligned-interface
179 @item Kontext-Eigenschaften
180 @tab aaa oder aaaAaaaAaaa
181 @tab alignAboveContext, skipBars
182 @item Layout-Objekt-Eigenschaften
183 @tab aaa oder aaa-aaa-aaa
184 @tab direction, beam-thickness
187 Es wird bald ersichtlich werden, dass die Eigenschaften von
188 unterschiedlichen Objekttypen mit unterschiedlichen Befehlen
189 geändert werden. Deshalb ist es nützlich, aus der
190 Schreibweise zu erkennen, um was
191 für ein Objekt es sich handelt, um den entsprechenden
192 Befehl einsetzen zu können.
195 @node Optimierungsmethoden
196 @subsection Optimierungsmethoden
197 @translationof Tweaking methods
199 @cindex override-Befehl
203 @strong{Der \override-Befehl}
205 Wir haben uns schon mit den Befehlen @code{\set}
206 und @code{\with} bekannt gemacht, mit welchen
207 Eigenschaften von @strong{Kontexten} verändert
208 und @strong{Engraver} entfernt oder hinzugefügt
209 werden können. Siehe dazu
210 @ref{Kontexteigenschaften verändern} und @ref{Engraver hinzufügen und entfernen}. Jetzt wollen wir uns weitere
211 wichtige Befehle anschauen.
213 Der Befehl, um die Eigenschaften von @strong{Layout-Objekten}
214 zu ändern, ist @code{\override}. Weil dieser Befehl interne
215 Eigenschaften tief in der Programmstruktur von LilyPond
216 verändern muss, ist seine Syntax nicht so einfach wie die der
217 bisherigen Befehle. Man muss genau wissen, welche Eigenschaft
218 welches Objektes in welchem Kontext geändert werder soll,
219 und welches der neu zu setzende Wert dann ist. Schauen wir
220 uns an, wie das vor sich geht.
222 Die allgemeine Syntax dieses Befehles ist:
225 \override @var{Kontext}.@var{LayoutObjekt} #'@var{layout-eigenschaft} =
230 Damit wir die Eigenschaft mit der Bezeichnung @var{layout-property}
231 das Layout-Objektes mit der Bezeichnung@var{LayoutObject},
232 welches ein Mitglied des @var{Kontext}-Kontextes ist, auf den
235 Der @var{Kontext} kann (und wird auch normalerweise) ausgelassen
236 werden, wenn der benötigte Kontext eindeutig impliziert ist und einer
237 der untersten Kontexte ist, also etwa @code{Voice}, @code{ChordNames}
238 oder @code{Lyrics}. Auch in diesem Text wird der Kontext oft ausgelassen
239 werden. Später soll gezeigt werden, in welchen Fällen er ausdrücklich
240 definiert werden muss.
242 Spätere Abschnitte behandeln umfassend Eigenschaften und ihre
243 Werte, aber um ihre Funktion und ihr Format zu demonstrieren,
244 werden wir hier nur einige einfache Eigenschaften und Werte einsetzen,
245 die einfach zu verstehen sind.
247 Für den Moment könne Sie die @code{#'}-Zeichen ignorieren, die vor jeder
248 Layout-Eigenschaft, und die @code{#}-Zeichen, die vor jedem Wert
249 stehen. Sie müssen immer in genau dieser Form geschrieben werden.
250 Das ist der am häufigsten gebrauchte Befehl für die Optimierung,
251 und der größte Teil dieses Abschnittes wird dazu benutzt, seine Benutzung
252 zu erläutern. Hier ein einfaches Beispiel, um die Farbe des Notenkopfes
255 @cindex color-Eigenschaft, Beispiel
256 @cindex Farb-Eigenschaft, Beispiel
257 @cindex NoteHead, Beispiel für override
258 @cindex Notenkopf, Beispiel für Veränderung
260 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
262 \override NoteHead #'color = #red
264 \override NoteHead #'color = #green
269 @strong{Der \revert-Befehl}
271 @cindex revert-Befehl
275 Wenn eine Eigenschaft einmal überschrieben wurde, wird ihr
276 neuer Wert so lange bewahrt, bis er noch einmal überschrieben
277 wird oder ein @code{\revert}-Befehl vorkommt. Der
278 @code{\revert}-Befehl hat die folgende Syntax und setzt den
279 Wert der Eigenschaft zurück auf den Standardwert, nicht
280 jedoch auf den vorigen Wert, wenn mehrere
281 @code{\override}-Befehle benutzt wurden.
284 \revert @var{Kontext}.@var{LayoutObjekt} #'@var{layout-eigenschaft}
287 Wiederum, genauso wie der @var{Kontext} bei dem @code{\override}-Befehl,
288 wird @var{Kontext} oft nicht benötigt. Er wird in vielen der folgenden
289 Beispiele ausgelassen. Im nächsten Beispiel wird die Farbe des Notenkopfes
290 wieder auf den Standardwert für die letzten zwei Noten gesetzt.
292 @cindex color-Eigenschaft, Beispiel
293 @cindex Farb-Eigenschaft, Beispiel
294 @cindex NoteHead, Beispiel für override
295 @cindex Notenkopf, Beispiel für Veränderung
297 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
299 \override NoteHead #'color = #red
301 \override NoteHead #'color = #green
303 \revert NoteHead #'color
307 @strong{\once-Präfix}
312 Sowohl der @code{\override}-Befehl als auch der @code{\set}-Befehl können mit
313 dem Präfix @code{\once} (@emph{einmal}) versehen werden. Dadurch wird
314 der folgende @code{\override}- oder @code{\set}-Befehl nur für den aktuellen
315 Musik-Moment wirksam, bevor sich wieder der Standard einstellt. Am gleichen
316 Beispiel demonstriert, kann damit die Farbe eines einzelnen Notenkopfes
319 @cindex color-Eigenschaft, Beispiel
320 @cindex Farb-Eigenschaft, Beispiel
321 @cindex NoteHead, Beispiel für override
322 @cindex Notenkopf, Beispiel für Veränderung
324 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
326 \once \override NoteHead #'color = #red
328 \once \override NoteHead #'color = #green
333 @strong{Der \overrideProperty-Befehl}
335 @cindex overrideProperty-Befehl
337 @funindex \overrideProperty
338 @funindex overrideProperty
340 Es gibt eine andere Form des @code{override}-Befehls,
341 @code{\overrideProperty} (überschreibe Eigenschaft),
342 welcher ab und zu benötigt wird. Es wird hier nur der
343 Vollständigkeit halber erwähnt, sein Einsatz wird demonstriert
344 in @ruser{Schwierige Korrekturen}.
345 @c Maybe explain in a later iteration -td
348 @strong{Der \tweak-Befehl}
354 Der letzte Optimierungsbefehl in LilyPond ist @code{\tweak}
355 (engl. optimieren). Er wird eingesetzt um Eigenschaften
356 von Objekten zu verändern, die zum selben Musik-Moment
357 auftreten, wie etwa die Noten eines Akkordes. Ein
358 @code{\override} würde alle Noten des Akkords beeinflussen,
359 während mit @code{\tweak} nur das nächste Objekt der
360 Eingabe geändert wird.
362 Hier ein Beispiel. Angenommen, die Größe des mittleren
363 Notenkopfes (ein E) in einem C-Dur-Akkord soll geändert
364 werden. Schauen wir zuerst, was wir mit
365 @code{\once \override} erhalten:
367 @cindex Schriftgröße, Beispiel
368 @cindex NoteHead, Beispiel für override
369 @cindex Notenkopf, Beispiel für Veränderung
371 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
373 \once \override NoteHead #'font-size = #-3
378 Wie man sehen kann, beeinflusst @code{override} @emph{alle}
379 Notenköpfe des Akkordes. Das liegt daran, dass alle die Noten
380 eines Akkordes zum selben Musik-Moment auftreten und
381 die Funktion von @code{\once} ist es, die Optimierung auf
382 an allen Objekten auszuführen, die zum selben Musik-Moment
383 auftreten wie der @code{\override}-Befehl.
385 Der @code{\tweak}-Befehl funktioniert anders. Er bezieht sich
386 auf das direkt folgende Element in der Eingabe-Datei. Es wirkt
387 aber auch nur mit Objekten, die direkt von der Eingabe kreirt
388 werden, insbesondere Notenköpfe und Artikulationszeichen.
389 Objekte wie etwa Hälse oder Versetzungszeichen werden erst
390 später erstellt und lassen sich nicht auf diese Weise ändern.
391 Zusätzlich @emph{müssen} sich etwa Notenköpfe innerhalb
392 eines Akkordes befinden, d. h. sie müssen von einfachen spitzen
393 Klammern umschlossen sein. Um also eine einzelne Note
394 mit @code{\tweak} zu verändern, muss der Befehl innerhalb
395 der spitzen Klammern zusammen mit der Note eingegeben werden.
397 Um also zu unserem Beispiel zurückzukommen, könnte man die
398 mittlere Note eines Akkordes auf diese Weise ändern:
400 @cindex font-size-Eigenschaft, Beispiel
401 @cindex Schriftgröße, Beispiel
402 @cindex @code{\tweak}-Beispiel
404 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
406 <c \tweak #'font-size #-3 e g>4
409 Beachten Sie, dass die Syntax des @code{\tweak}-Befehls sich
410 von der des @code{\override}-Befehls unterscheidet. Weder
411 Kontext noch Layout-Objekt konnen angegeben werden, denn
412 das würde zu einem Fehler führen. Beide Angaben sind
413 durch das folgende Element impliziert. Hier sollte auch
414 kein Gleichheitzeichen vorhanden sein. Die verallgemeinerte
415 Syntax des @code{\tweak}-Befehls ist also einfach
418 \tweak #'@var{layout-eigenschaft} #@var{Wert}
421 Ein @code{\tweak}-Befehl kann auch benutzt werden, um nur
422 eine von mehreren Artikulationen zu ändern, wie im nächsten
423 Beispiel zu sehen ist.
425 @cindex Farb-Eigenschaft, Beispiel
426 @cindex @code{\tweak}-Beispiel
428 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
430 -\tweak #'color #red ^Red
431 -\tweak #'color #green _Green
435 Beachten Sie, dass dem @code{\tweak}-Befehl ein Artikulationsmodifikartor
436 vorangestellt werden muss, ganz als ob er selbst ein Artikulationszeichen
439 @cindex Triolen, geschachtelt
440 @cindex N-tolen, geschachtelt
441 @cindex Klammer, Triole
442 @cindex Triolenklammer
443 @cindex N-tolenklammer
444 @cindex Komplizierte Rhythmen, Schachtelung von
445 @funindex TupletBracket
447 Der @code{\tweak}-Befehl muss auch benutzt werden, wenn das
448 Aussehen einer vor mehreren geschachtelten Triolenklammern
449 geändert werden soll, die zum selben Zeitpunkt beginnen.
450 Im folgenden Beispiel beginnen die lange Klammer und die
451 erste Triolenklammer zum selben Zeitpunkt, sodass ein
452 @code{\override}-Befehl sich auf beide beziehen würde.
453 In dem Beispiel wird @code{\tweak} benutzt, um zwischen
454 ihnen zu unterscheiden. Der erste @code{\tweak}Befehl
455 gibt an, dass die lange Klammer über den Noten gesetzt
456 werden soll, und der zweite, dass die Zahl der rhythmischen
457 Aufteilung für die erste der kurzen Klammern in rot
460 @cindex Farb-Eigenschaft, Beispiel
461 @cindex @code{\tweak}-Beispiel
462 @cindex Richtungs-Eigenschaft, Beispiel
463 @cindex color-Eigenschaft, Beispiel
464 @cindex direction-Eigenschaft, Beispiel
466 @lilypond[quote,ragged-right,verbatim,fragment,relative=2]
467 \tweak #'direction #up
470 \times 2/3 { c8[ c8 c8] }
471 \times 2/3 { c8[ c8 c8] }
472 \times 2/3 { c8[ c8 c8] }
476 Wenn geschachtelte N-tolen nicht zum gleichen Zeitpunkt
477 beginnen, kann ihr Aussehen auf die übliche Art mit dem
478 @code{\override}-Befehl geändert werden:
480 @cindex text-Eigenschaft, Beispiel
481 @cindex tuplet-number-Funktion, Beispiel
482 @cindex transparent-Eigenschaft, Beispiel
483 @cindex TupletNumber, Beispiel zur Veränderung
484 @cindex Triolennummer, Beispiel zur Veränderung
485 @cindex Triolen-Nummer-Funktion, Beispiel
487 @c NOTE Tuplet brackets collide if notes are high on staff
489 @lilypond[quote,ragged-right,verbatim,fragment,relative=1]
490 \times 2/3 { c8[ c c]}
491 \once \override TupletNumber
492 #'text = #tuplet-number::calc-fraction-text
496 \once \override TupletNumber #'transparent = ##t
497 \times 2/3 { c8[ c c] }
498 \times 2/3 { c8[ c c]}
505 @ruser{Der tweak-Befehl}.
508 @node Die Referenz der Programminterna
509 @section Die Referenz der Programminterna
510 @translationof The Internals Reference manual
513 * Eigenschaften von Layoutobjekten::
514 * Eigenschaften, die Schnittstellen besitzen können::
515 * Typen von Eigenschaften::
518 @node Eigenschaften von Layoutobjekten
519 @subsection Eigenschaften von Layoutobjekten
520 @translationof Properties of layout objects
522 @cindex Eigenschaften von Layout-Objekten
523 @cindex Eigenschaften von Grobs
524 @cindex Grobs, Eigenschaften von
525 @cindex Layout-Objekte, Eigenschaften von
526 @cindex Property (Layout-Objekte, Grobs)
527 @cindex Regerenz der Interna
529 Angenommen, in Ihrer Partitur tritt ein Legatobogen
530 auf, der Ihrer Meinung nach zu dünn ausgefallen ist.
531 Sie würden ihn gerne etwas schwerer gezeichnet
532 sehen. Wie gehen Sie vor? Von den Anmerkungen in
533 früheren Abschnitten wissen Sie schon, dass LilyPond
534 sehr flexibel ist und eine derartige Modifikation
535 möglich sein sollte, und Sie erraten vielleicht,
536 dass ein @code{\override}-Befehl angebracht ist.
537 Aber gibt es eine Eigenschaft für die Dicke eines
538 Legatobogens (engl. slur), und wenn es sie gibt,
539 auf welche Weise lässt sie sich verändern? Hier
540 kommt die Referenz der Interna zur Geltung. Dort
541 finden sich alle Informationen, um den beschriebenen
542 und alle anderen @code{\override}-Befehle zu
545 Bevor Sie jetzt in die Referenz der Interna wechseln, ist
546 eine Warnung angebracht. Es handelt sich um ein
547 @strong{Referenz}dokument, was heißt, dass es sehr
548 wenig oder gar keine Erklärungen enthält: seine Aufgabe
549 ist es, Information klar und genau darzustellen. Das
550 bedeutet, dass es auf den ersten Blick entmutigend
551 wirkt. Die Einführung und Erklärung in diesem Abschnitt
552 wird Ihnen aber schnell ermöglichen, genau die Information
553 aus der Referenz zu entnehmen, die Sie benötigen.
555 Beachten Sie, dass die Referenz der Interna nur auf Englisch
556 existiert. Um die Eigenschaftsbezeichnung eines bestimmten
557 Objektes zu finden, können Sie das Glossar (siehe
558 @rglosnamed{Top,Musikglossar})
560 die englischen Begriffe in viele andere Sprachen übersetzt sind.
562 @cindex Override-Beispiel
563 @cindex Referenz der Interna, Benutzung
564 @cindex IR (Referenz der Interna), Benutzung
565 @cindex @code{\addlyrics}-Beispiel
567 Das Vorgehen soll an einem konkreten Beispiel einer echten
568 Komposition demonstriert werden. Hier das Beispiel:
570 @lilypond[quote,verbatim,relative=2]
575 g[( e]) e d[( f]) a |
579 The man who feels love's sweet e -- mo -- tion
584 Angenommen also, wir wollen die Legatobögen etwas
585 dicker setzten. Ist das möglich? Die Legatobögen sind mit
586 Sicherheit ein Layout-Objekt, die Frage muss also lauten:
587 @qq{Gibt es eine Eigenschaft von Legatobögen, die die
588 Dicke bestimmt?} Um diese Frage zu beantworten, müssen
589 wir in der Referenz der Interna ( kurz IR) nachschauen.
591 Die IR für die LilyPond-Version, die Sie benutzen, findet sich
592 auf der LilyPond-Webseite unter der Adresse
593 @uref{http://lilypond.org}. Gehen Sie zur Dokumentationsseite
594 und klicken Sie auf den Link zur Referenz der Interna.
595 @c Addition for German users
596 Die Sprache ändert sich ab hier nach englisch. Für diese Übung
597 sollten Sie die HTML-Version benutzen, nicht die
598 @qq{auf einer großen Seite} oder die PDF-Version.
599 Damit Sie die nächsten Absätze verstehen können, müssen Sie
600 genauso vorgehen, während Sie weiterlesen.
602 Unter der Überschrift @strong{Top} befinden sich fünf Links.
603 Wählen Sie den Link zum @emph{Backend}, wo sich die Information
604 über Layout-Objekte befindet. Hier, unter der Überschrift
605 @strong{Backend}, wählen Sie den Link @emph{All layout objects}.
606 Die Seite, die sich öffnet, enthält ein Liste aller Layout-Objekte,
607 die in Ihrerer LilyPond-Version benutzt werden, in alphabetischer
608 Ordnung. Wählen Sie den Link @emph{Slur} und die Eigenschaften
609 der Legatobögen (engl. slur) werden aufgelistet.
611 Eine alternative Methode, auf diese Seite zu gelangen, ist von
612 der Notationsreferenz aus. Auf einer der Seiten zu Legatobögen
613 findet sich ein Link zur Referenz der Interna. Dieser Link führt
614 Sie direkt auf diese Seite. Wenn Sie aber eine Ahnung haben,
615 wie die Bezeichnung des Layout-Objektes lauten könnte, das sie
616 ändern wollen, ist es oft schneller, direkt zur IR zu gehen und
619 Aus der Slur-Seite in der IR könne wir entnehmen, dass
620 Legatobögen (Slur-Objekte) durch den Slur_engraver erstellt
621 werden. Dann werden die Standardeinstellungen aufgelistet.
622 Beachten Sie, dass diese @strong{nicht} in alphabetischer Reihenfolge
623 geordnet sind. Schauen Sie sich die Liste an, ob sie eine Eigenschaft
624 enthält, mit der die Dicke von Legatobögen kontrolliert werden kann.
625 Sie sollten folgendes finden:
628 @code{thickness} (number)
630 Line thickness, generally measured in @code{line-thickness}
633 Das sieht ganz danach aus, als ob damit die Dicke geändert
634 werden kann. Es bedeutet, dass der Wert von
635 @code{thickness} einfach eine Zahl (@emph{number}) ist,
636 dass der Standardwert 1.2 ist, und dass die Einheit
637 für die Dicke eine andere Eigenschaft mit der
638 Bezeichnung @code{line-thickness} ist.
640 Wie schon früher gesagt, gibt es wenig bis gar keine Erklärungen
641 in der IR, aber wir haben schon genug Informationen, um
642 zu versuchen, die Dicke eines Legatobogens zu ändern. Die
643 Bezeichnung des Layout-Objekts ist offensichtlich
644 @code{Slur} und die Bezeichnung der Eigenschaft, die geändert
646 @code{thickness}. Der neue Wert sollte etwas mehr als 1.2 sein,
647 denn der Bogen soll ja dicker werden.
649 Den benötigten @code{\override}-Befehl können wir jetzt einfach
650 konstruieren, indem wir die Werte für die Bezeichnungen in den
651 Modellbefehl einfügen und den Kontext auslassen. Setzen wir
652 einmal einen sehr großen Wert für die Dicke um zu sehen, ob der
653 Befehl auch funktioniert. Also:
656 \override Slur #'thickness = #5.0
659 Vergessen Sie nicht das Rautenzeichen und Apostroph
660 (@code{#'}) vor der Eigenschaftsbezeichnung und das
661 Rautenzeichen vor dem neuen Wert!
663 Die nächste Frage ist nun: @qq{Wohin soll dieser Befehl geschrieben
664 werden?} Solange wir uns noch im Lernstadium befinden, ist
665 die beste Antwort: @qq{Innerhalb der Noten, vor den ersten
666 Legatobogen und nahe bei ihm.} Also etwa so:
668 @cindex Legatobogen, Beispiel für Veränderung
669 @cindex thickness-Eigenschaft, Beispiel
670 @cindex Dicke-Eigenschaft, Beispiel
672 @lilypond[quote,verbatim,relative=2]
676 % Increase thickness of all following slurs from 1.2 to 5.0
677 \override Slur #'thickness = #5.0
679 g[( e]) e d[( f]) a |
683 The man who feels love's sweet e -- mo -- tion
689 und wirklich wird der Legatobogen dicker.
691 Das ist also die grundlegende Herangehensweise,
692 @code{\override}-Befehl zu formulieren. Es gibt einige
693 zusätzliche Komplikationen, denen wir uns später widmen
694 werden, aber Sie haben jetzt das Handwerkszeug, um Ihre
695 eigenen Befehle zu konstruieren -- wenn Sie auch noch etwas
696 Übung benötigen. Die sollen Sie durch die folgenden Übungen
700 @subheading Den Kontext finden
702 @cindex Kontext, Finden und identifizieren
704 Manchmal muss dennoch der Kontext spezifiziert werden.
705 Welcher aber ist der richtige Kontext? Wir könnten raten,
706 dass Legatobögen sich im @code{Voice}-Kontext befinden,
707 denn sie sind immer einzelnen Melodielinien zugewiesen.
708 Aber wir können uns dessen nicht sicher sein. Um unsere
709 Annahme zu überprüfen, gehen wir wieder zu der Seite im
710 IR, die die Legatobögen beschreibt und die Überschrift
711 @emph{Slur} hat. Dort steht: @qq{Slur objects are created
712 by: Slur engraver}. Legatobögen werden also in dem Kontext
713 erstellt, in dem sich der @code{Slur_engraver} befindet.
714 Folgen Sie dem Link zu der @code{Slur_engraver}-Seite.
715 Unten auf der Seite steht, dass der @code{Slur_engraver}
716 sich in fünf Stimmen-Kontexten befindet, unter anderem
717 auch im normalen @code{Voice}-Kontext. Unsere Annahme
718 war also richtig. Und weil @code{Voice} einer der Kontexte
719 der untersten Ebene ist, welcher eindeutig schon dadurch
720 definiert ist, dass wir Noten eingeben, kann er an dieser Stelle
721 auch weggelassen werden.
724 @subheading Nur einmal mit \override verändern
726 @cindex Override nur einmal
727 @cindex once override
731 Im Beispiel oben wurden @emph{alle} Legatobögen dicker
732 gesetzt. Vielleicht wollen Sie aber nur den ersten Bogen
733 dicker haben. Das können Sie mit dem @code{\once}-Befehl
734 erreichen. Er wird direkt vor den @code{\override}-Befehl
735 gesetzt und bewirkt, dass nur der Bogen geändert wird, der
736 @strong{unmittelbar an der nächsten Note beginnt.} Wenn
737 die nächste Note keinen Bogenbeginn hat, dann passiert
738 gar nichts -- der Befehl wird nicht gespeichert, sondern einfach
739 vergessen. Der Befehl, mit @code{\once} zusammen benutzt,
740 muss also wie folgt positioniert werden:
742 @cindex Legatobogen, Beispiel zur Veränderung
743 @cindex thickness-Eigenschaft, Beispiel
745 @lilypond[quote,verbatim,relative=2]
750 % Increase thickness of immediately following slur only
751 \once \override Slur #'thickness = #5.0
753 g[( e]) e d[( f]) a |
757 The man who feels love's sweet e -- mo -- tion
763 Jetzt bezieht er sich nur noch auf den ersten Legatobogen.
765 Der @code{\once}-Befehl kann übrigens auch vor einem @code{\set}-Befehl
769 @subheading Rückgängig machen
772 @cindex Rückgängig machen
773 @cindex Wiederherstellen von Standardeinstellungen
774 @cindex Standardeinstellungen, Wiederherstellen
778 Eine weitere Möglichkeit: nur die beiden ersten Legatobögen sollen
779 dicker gesetzt werden. Gut, wir könnten jetzt zwei Befehle benutzen,
780 jeden mit dem @code{\once}-Präfix und direkt vor die entsprechende
781 Note gestellt, an welcher der Bogen beginnt:
783 @cindex Legatobogen, Beispiel zur Veränderung
784 @cindex thickness-Eigenschaft, Beispiel
786 @lilypond[quote,verbatim,relative=2]
791 % Increase thickness of immediately following slur only
792 \once \override Slur #'thickness = #5.0
794 % Increase thickness of immediately following slur only
795 \once \override Slur #'thickness = #5.0
796 g[( e]) e d[( f]) a |
800 The man who feels love's sweet e -- mo -- tion
806 Wir könnten aber auch den @code{\once}-Befehl weglassen und anstelle
807 dessen später den @code{\revert}-Befehl einsetzen, um die
808 @code{thickness}-Eigenschaft wieder auf ihren Standardwert zurückzusetzen:
810 @cindex Legatobogen, Beispiel zur Veränderung
811 @cindex thickness-Eigenschaft, Beispiel
813 @lilypond[quote,verbatim,relative=2]
818 % Increase thickness of all following slurs from 1.2 to 5.0
819 \override Slur #'thickness = #5.0
822 % Revert thickness of all following slurs to default of 1.2
823 \revert Slur #'thickness
828 The man who feels love's sweet e -- mo -- tion
834 Der @code{\revert}-Befehl kann benutzt werden, um eine beliebige
835 Eigenschaft, die mit @code{\override} geändert worden ist, wieder in
836 ihre Standardeinstellungen zurückzuversetzen. In unserem Beispiel können
837 Sie die Methode benutzen, die Ihnen lieber ist, beide haben das gleiche
840 Damit endet die Einleitung in die Referenz der Interna (IR) und die
841 grundlegenden Optimierungsmethoden. Einige Beispiele folgen in späteren
842 Abschnitten dieses Kapitel, einerseits um Sie mit weiteren Möglichkeiten
843 der IR bekanntzumachen, andererseits um Ihnen mehr Übungsmöglichkeiten
844 zu geben, die relevante Information dort zu finden. Die Beispiele werden
845 Schritt für Schritt immer weniger Erklärungen beinhalten.
848 @node Eigenschaften, die Schnittstellen besitzen können
849 @subsection Eigenschaften, die Schnittstellen besitzen können
850 @translationof Properties found in interfaces
852 @cindex Interface-Eigenschaften
853 @cindex Eigenschaften von Interfaces
854 @cindex Schnittstellen, Eigenschaften von
855 @cindex Eigenschaften von Schnittstellen
857 Der Text unseres Beispiels soll jetzt kursiv gesetzt werden. Was für
858 ein @code{\override}-Befehl wird dazu benötigt? Schauen wir
859 uns zunächst das Inhaltsverzeichnis in der IR an: @qq{All layout objects},
860 wie auch schon zuvor. Welches Objekt könnte die Darstellung des
861 Textes (engl. lyrics) beeinflussen? Es gibt den Eintrag @code{LyricText},
862 das hört sich schon sehr gut an. Ein Klick hierauf zeigt alle Eigenschaften
863 an, die verändert werden können. Dazu gehört
864 @code{font-series} und @code{font-size}, aber nichts, womit man kursiven
865 Text erreichen könnte. Das liegt daran, dass die Schnitteigenschaft allen
866 Schrift-Objekten gemeinsam ist. Sie findet sich also nicht in jedem einzlenen
867 Layout-Objekt aufgelistet, sondern ist mit anderen ähnlichen Eigenschaften
868 zusammen in einem @strong{Interface} -- einer Schnittstelle -- verortet;
870 @code{font-interface}.
872 Jetzt müssen wir also lernen, wie wir Eigenschaften von Schnittstellen finden
873 und wie wir herausfinden, welche Objekte diese Schnittstelleneigenschaften
876 Schauen Sie sich noch einmal die Seite in der IR an, die @code{LyricText}
877 beschreibt. Unten auf der Seite ist eine klickbare Liste (in der HTML-Version
878 der IR) an Eigenschaften, die von @code{LyricText} unterstützt
879 werden. Diese Liste enthält sieben Einträge, darunter auch
880 @code{font-interface}. Ein Klick hierauf bringt uns zu den Eigenschaften,
881 die mit dieser Schnittstelle verbunden sind, also auch @code{LyricText}.
883 Jetzt sehen wir alle die Eigenschaften, die der Benutzer verändern kann,
884 um die Schriftartendarstellung zu beeinflussen. Dazu gehört nun auch
885 @code{font-shape(symbol)}, wobei @code{symbol} auf die Werte
886 @code{upright} (gerade), @code{italics} (kursiv) oder @code{caps}
887 (Kapitälchen) gesetzt werden kann.
889 Sie werden gemerkt haben, dass @code{font-series} und @code{font-size}
890 hier auch aufgelistet sind. Es stellt sich die Frage, warum diese
891 allgemeinen Schriftarteigenschaften @code{font-series} und
892 @code{font-size} sowohl unter der Überschrift
893 @code{LyricText} als unter dem @code{font-interface} aufgelistet
894 sind, aber @code{font-shape} befindet sich nur im
895 @code{font-interface}? Die Antwort ist: Die globalen Einstellungen
896 von @code{font-series} und @code{font-size} werden geändert, wenn
897 ein @code{LyricText}-Objekt erstellt wird, aber @code{font-shape}
898 wird davon nicht beeinflusst. Die zusätzlichen Einträge unter der
899 Überschrift @code{LyricText} beinhalten dann die Werte der
900 Standardeinstellungen dieser zwei Eigenschaften, wenn es sich
901 um ein @code{LyricText}-Objekt handelt. Andere Objekte,
902 die auch das @code{font-interface} unterstützen, setzen diese
903 Eigenschaften anders, wenn sie erstellt werden.
905 Versuchen wir nun einen @code{\override}-Befehl zu konstruieren,
906 der den Gesantext kursiv setzt. Das Objekt hat die Bezeichnung
907 @code{LyricText}, die Eigenschaft ist @code{font-shape}
908 und der Wert @code{italic}. Wie vorher schon lassen wir den
911 Am Rande sei angemerkt, dass die Werte der @code{font-shape}-Eigenschaft
912 mit einem Apostroph (@code{'}) gekennzeichnet werden
913 müssen, weil es sich um Symbole handelt. Aus dem gleichen
914 Grund mussten auch für @code{thickness} weiter oben im
915 Text ein Apostroph gesetzt werden. Symbole sind besondere
916 Bezeichnungen, die LilyPond intern bekannt sind. Einige
917 sind Bezeichnungen von Eigenschaften, wie eben @code{thickness}
918 oder @code{font-shape}. Andere sind besondere Werte,
919 die an Eigenschaften übergeben werden können, wie
920 @code{italic}. Im Unterschied hierzu gibt es auch beliebige
921 Zeichenketten, die immer mit Anführungszeichen, also
922 als @code{"Zeichenkette"} auftreten. Für weitere
923 Einzelheiten zu Zeichenketten und Werten, siehe
926 Gut, der @code{\override}-Befehl, mit dem der Gesangstext
927 kursiv gesetzt wird, lautet:
930 \override LyricText #'font-shape = #'italic
934 und er muss direkt vor den Text gesetzt werden, auf den er sich
937 @cindex font-shape-Eigenschaft, Beispiel
938 @cindex LyricText, Beispiel zur Veränderung
939 @cindex kursiv, Beispiel
940 @cindex @code{\addlyrics}, Beispiel
942 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
947 g[( e]) e d[( f]) a |
951 \override LyricText #'font-shape = #'italic
952 The man who feels love's sweet e -- mo -- tion
958 Jetzt wird der Text kursiv gesetzt.
961 @subheading Den Kontext im Liedtextmodus bestimmen
964 @cindex Kontext im Gesangstextmodus angeben
965 @cindex Gesangstextmodus, Kontext angeben
967 Bei Gesangstexten funktioniert der @code{\override}-Befehl
968 nicht mehr, wenn Sie den Kontext im oben dargestellten
969 Format angeben. Eine Silbe wird im Gesangtextmodus
970 (lyricmode) entweder von einem Leerzeichen, einer
971 neuen Zeile oder einer Zahl beendet. Alle anderen
972 Zeichen werden als Teil der Silbe integriert. Aus diesem
973 Grund muss auch vor der schließenden Klammer
974 @code{@}} ein Leerzeichen gesetzt oder eine neue
975 Zeile begonnen werden. Genauso müssen Leerzeichen
976 vor und nach einem Punkt benutzt werden, um die
977 Kontext-Bezeichnung von der Objekt-Bezeichnung zu
978 trennen, denn sonst würden beide Bezeichnungen als
979 ein Begriff interpretiert und von LilyPond nicht verstanden
980 werden. Der Befehl muss also lauten:
983 \override Lyrics . LyricText #'font-shape = #'italic
986 @warning{Innerhalb von Gesangstext muss immer ein
987 Leerzeichen zwischen der letzten Silbe und der schließenden
988 Klammer gesetzt werden.}
990 @warning{Innerhalb von @code{\override}-Befehlen in
991 Gesangstexten müssen Leerzeichen um Punkte zwischen
992 Kontext- und Objektbezeichnungen gesetzt werden.}
995 @node Typen von Eigenschaften
996 @subsection Typen von Eigenschaften
997 @translationof Types of properties
999 @cindex Eigenschaftsarten
1001 Bis jetzt hatten wir es mit zwei Arten von Eigenschaften zu
1002 tun: @code{number} (Zahl) und @code{symbol}. Damit
1003 ein Befehl funktioniert, muss der Wert einer Eigenschaft
1004 vom richtigen Typ sein und die Regeln befolgen, die
1005 für diesen Typ gelten. Der Eigenschaftstyp ist in der
1006 IR in Klammern hinter der Eigenschaftsbezeichnung
1007 angegeben. Hier eine Liste der Typen, die Sie vielleicht
1008 benötigen werden, mit den Regeln, die für den jeweiligen
1009 Typ gelten und einigen Beispielen. Sie müssen immer
1010 ein Rautenzeichen (@code{#}) vor den Typeintrag setzen,
1011 wenn sie in einem @code{\override}-Befehl benutzt werden.
1013 @multitable @columnfractions .2 .45 .35
1014 @headitem Eigenschaftstyp
1018 @tab Entweder wahr oder falsch, dargestellt als #t oder #f
1019 @tab @code{#t}, @code{#f}
1020 @item Dimension (in Notenlinienabständen)
1021 @tab Eine positive Dezimalzahl (in Notenlinienabstand-Einheiten)
1022 @tab @code{2.5}, @code{0.34}
1024 @tab Eine gültige Richtungskonstante oder das numerische Äquivalent
1025 @tab @code{LEFT}, @code{CENTER}, @code{UP},
1028 @tab Eine positive ganze Zahl
1029 @tab @code{3}, @code{1}
1031 @tab Eine eingeklammerte Anzahl von Einträgen, mit Klammern getrennt
1032 und angeführt von einem Apostroph
1033 @tab @code{'(left-edge staff-bar)}, @code{'(1)},
1034 @code{'(1.0 0.25 0.5)}
1035 @item Textbeschriftung (markup)
1036 @tab Beliebige gültige Beschriftung
1037 @tab @code{\markup @{ \italic "cresc." @}}
1039 @tab Ein Bruch einer ganzen Note, mit der make-moment-Funktion
1041 @tab @code{(ly:make-moment 1 4)},
1042 @code{(ly:make-moment 3 8)}
1044 @tab Eine beliebige positive oder negative Dezimalzahl
1045 @tab @code{3.5}, @code{-2.45}
1046 @item Paar (Zahlenpaar)
1047 @tab Zwei Zahlen getrennt von @qq{Leerzeichen . Leerzeichen}, eingeklammert
1048 und angeführt von einem Apostroph
1049 @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)}
1051 @tab Eine beliebige Anzahl von Symbolen, die für die Eigenschaft
1052 gültig sind, angeführt von einem Apostroph
1053 @tab @code{'italic}, @code{'inside}
1055 @tab Eine Prozedur oder @code{#f} (um keine Aktion hervorzurufen)
1056 @tab @code{bend::print}, @code{ly:text-interface::print},
1059 @tab Eine Liste mit drei Einträgen, eingeklammert und mit
1060 Apostroph-Raute ( @code{'#}) angeführt.
1061 @tab @code{'#(#t #t #f)}
1066 Handbuch zum Lernen: @ref{Scheme-Übung}.
1069 @node Erscheinung von Objekten
1070 @section Erscheinung von Objekten
1071 @translationof Appearance of objects
1073 In diesem Abschnitt wollen wir zeigen, wie die Kenntnisse der
1074 vorigen Abschnitte in der Praxis angewandt werden können,
1075 um das Aussehen des Musiksatzes zu beeinflussen.
1078 * Sichtbarkeit und Farbe von Objekten::
1079 * Größe von Objekten::
1080 * Länge und Dicke von Objekten::
1084 @node Sichtbarkeit und Farbe von Objekten
1085 @subsection Sichtbarkeit und Farbe von Objekten
1086 @translationof Visibility and color of objects
1088 In Unterrichtsmaterial für den Musikunterricht wird oft
1089 eine Partitur dargestellt, in der bestimmte Notationselemente
1090 fehlen, so dass der Schüler die Aufgabe bekommt, die
1091 nachzutragen. Ein einfaches Beispiel ist etwa, die
1092 Taktlinien zu entfernen, damit der Schüler sie selber zeichnen
1093 kann. Aber die Tatklinien werden normalerweise automatisch
1094 eingefügt. Wie verhindern wir, dass sie ausgegeben werden?
1096 Bevor wir uns hieran machen, sei daran erinnert, dass
1097 Objekteigenschaften in sogenannten @emph{Schnittstellen}
1098 -- engl. interface -- gruppiert sind, siehe auch
1099 @ref{Eigenschaften, die Schnittstellen besitzen können}. Das dient ganz einfach
1100 dazu, die Eigenschaften zusammenzufassen, die üblicherweise
1101 zusammen benötigt werden -- wenn eine davon für ein Objekt
1102 gilt, dann auch die anderen. Manche Objekte brauchen die
1103 Eigenschaften von der einen Schnittstelle, andere von einer
1104 anderen. Die Schnittstellen, die die Eigenschaften von einem
1105 bestimmten Grob beinhalten, sind in der IR unten auf der
1106 Seite aufgelistet, die dieses Grob beschreibt. Die Eigenschaften
1107 können betrachtet werden, indem die Seite der entsprechenden
1108 Schnittstelle geöffnet wird.
1110 Zu Information, wie man Eigenschaften von Grobs findet, siehe
1111 @ref{Eigenschaften von Layoutobjekten}. Wir benutzen also jetzt
1112 die selbe Methode um in der IR das Layout-Objekt zu finden,
1113 dass für die Tatklinien zuständig ist. Über die Überschriften
1114 @emph{Backend} und @emph{All layout objects} kommen
1115 wir zu einem Layout-Objekt mit der Bezeichnung
1116 @code{BarLine} (engl. TaktLinie). Seine Eigenschaften
1117 beinhalten zwei, die über die Sichtbarkeit entscheiden:
1118 @code{break-visibility} und @code{stencil}.
1119 @code{BarLine} unterstützt auch einige Schnittstellen,
1120 unter anderem @code{grob-interface}, wo wir eine
1121 @code{transparent} und eine @code{color}-Eigenschaft
1122 finden. Alle können die Sichtbarkeit von Taktlinien (und
1123 natürlich auch die Sichtbarkeit von vielen anderen Objekten)
1124 beeinflussen. Schauen wir uns diese Eigenschaften eine
1125 nach der anderen an.
1127 @subheading stencil (Matrize)
1129 @cindex Stencil-Eigenschaft
1130 @cindex Matrizen-Eigenschaft
1132 Diese Eigenschaft kontrolliert die Erscheinung der Taktlinien,
1133 indem sie das Symbol bestimmt, das ausgegeben werden soll.
1134 Wie bei vielen anderen Eigenschaften auch, kann sie so
1135 eingestellt werden, dass sie nichts ausgibt, indem ihr Wert
1136 auf @code{#f} (falsch) gesetzt wird. Ein Versuch also,
1137 wie vorher, indem wir den impliziten Kontext (@code{Voice})
1140 @cindex Taktlinie, Beispiel zur Veränderung
1141 @cindex stencil-Eigenschaft, Beispiel
1143 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1146 \override BarLine #'stencil = ##f
1148 g, a16 b8 c d4 e16 |
1153 Die Taktlinien werden aber immer noch angezeigt. Was ist da
1154 falsch gelaufen? Gehen Sie zurück zur IR und schauen Sie auf
1155 die Seite, die die Eigenschafter für @code{BarLine} angibt.
1156 Oben auf der Seite steht: @qq{Barline objects are created
1157 by: Bar_engraver}. Schauen Sie sich die
1158 @code{Bar_engraver}-Seite an. Unten auf der Seite steht
1159 eine Liste der Kontexte, in denen der Takt-Engraver
1160 funktioniert. Alle Kontexte sind @code{Staff}-Typen (also
1161 Notensystem-Typen). Der Grund, warum der
1162 @code{\override}-Befehl nicht funktioniert hat, liegt
1163 also darin, dass das Taktlinie-Objekt (@code{BarLine}) sich nicht
1164 im @code{Voice}-Kontextbefindet. Wenn der Kontext
1165 falsch angegeben wird, bewirkt der Befehl einfach gar
1166 nichts. Keine Fehlermeldung wird ausgegeben und auch
1167 nichts in die Log-Datei geschrieben. Versuchen wir also,
1168 den richtigen Kontext mitanzugeben:
1170 @cindex Taktlinie, Beispiel zur Veränderung
1171 @cindex stencil-Eigenschaft, Beispiel
1173 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1176 \override Staff.BarLine #'stencil = ##f
1178 g, a16 b8 c d4 e16 |
1184 Jetzt sind die Taktlinien wirklich verschwunden.
1186 Es sollte jedoch beachtet werden, dass das Setzen der
1187 @code{stencil}-Eigenschaft auf @code{#f} zu Fehlerhinweisen führen
1188 kann, wenn die Dimensionen des Objekts für die richtige Behandlung
1189 benötigt werden. Zum Beispiel werden Fehler ausgegeben, wenn
1190 die @code{stencil}-Eigenschaft des @code{NoteHead}-Objekts auf
1191 @code{#f} gesetzt wird. Wenn dieser Fall auftritt, kann anstatt
1192 dessen die @code{point-stencil}-Funktion benutzt werden, welche
1193 den Stencil auf ein Objekt mit der Größe Null setzt:
1195 @lilypond[quote,verbatim,relative=2]
1198 \once \override NoteHead #'stencil = #point-stencil
1204 @subheading break-visibility (unsichtbar machen)
1206 @cindex break-visibility-Eigenschaft
1207 @cindex Unsichtbar machen (break-visibility)
1209 Aus der Beschreibung der Eigenschaften für @code{BarLine}
1210 in der IR geht hervor, dass die @code{break-visibility}-Eigenschaft
1211 einen Vektor mit drei Booleschen Werten benötigt. Diese
1212 kontrollieren jeweils, ob die Taktlinien am Ende einer Zeile,
1213 in der Mitte einer Zeile und am Anfang einer Zeile ausgegeben
1214 werden. Wenn also alle Taktlinien unsichtbar sein sollen, wie in
1215 unserem Beispiel, brauchen wir den Wert @code{'#(#f #f #f)}.
1216 Versuchen wir es also, und berücksichtigen wir auch den
1217 @code{Staff}-Kontext. Beachten Sie auch, dass Sie @code{#'#}
1218 vor der öffnenden Klammer schreiben müssen:
1219 @code{'#} wird benötigt als Teil des Wertes, um einen Vektor zu
1220 signalisieren, und das erste @code{#} wird benötigt, um
1221 den Wert in einem @code{\override}-Befehl anzuführen.
1223 @cindex Taktlinie, Beispiel zur Veränderung
1224 @cindex break-visibility-Eigenschaft, Beispiel
1226 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1229 \override Staff.BarLine #'break-visibility = #'#(#f #f #f)
1231 g, a16 b8 c d4 e16 |
1237 Auch auf diesem Weg gelingt es, die Taktlinien unsichtbar zu machen.
1240 @subheading transparent (durchsichtig)
1242 @cindex transparent-Eigenschaft
1243 @cindex Durchsichtig machen (transparent)
1245 Aus den Eigenschaftsdefinitionen auf der @code{grob-interface}-Seite
1246 in der IR geht hervor, dass die @code{transparent}-Eigenschaft
1247 boolesch ist. Mit @code{#t} (wahr) wird also ein Grob durchsichtig
1248 gemacht. Im unserem Beispiel soll jetzt die Taktart durchsichtig
1249 gemacht werden, anstatt die Taktlinien durchsichtig zu machen.
1250 Wir brauchen also wieder die Grob-Bezeichnung für die Taktart.
1251 Auf der @qq{All layout objects}-Seite in der IR müssen wir die
1252 Eigenschaften des @code{TimeSignature}-Layout-Objekts suchen
1253 Das Objekt wird vom @code{Time_signature_engraver} erstellt,
1254 der sich auch im @code{Staff}-Kontext befindet und genauso das
1255 @code{grob-interface} unterstützt, wie Sie sich
1256 überzeugen können. Der Befehl, um die Taktangabe unsichtbar zu
1259 @cindex Taktart, Beispiel zur Veränderung
1260 @cindex transparent-Eigenschaft, Beispiel
1262 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1265 \override Staff.TimeSignature #'transparent = ##t
1267 g, a16 b8 c d4 e16 |
1273 Die Taktangabe ist verschwunden, aber mit diesem Befehl wird ein
1274 freier Platz gelassen, wo sich die Taktangabe eigentlich befinden
1275 würde. Das braucht man vielleicht für eine Schulaufgabe, in der
1276 die richtige Taktangabe eingefügt werden soll, aber in anderen
1277 Fällen ist diese Lücke nicht schön. Um auch die Lücke zu entfernen,
1278 muss die Matrize (stencil) der Taktangabe auf @code{#f} (falsch)
1281 @cindex Taktart, Beispiel zur Veränderung
1282 @cindex stencil-Eigenschaft, Beispiel
1284 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1287 \override Staff.TimeSignature #'stencil = ##f
1289 g, a16 b8 c d4 e16 |
1295 Und der Unterschied wird deutlich: hiermit wird das gesamte Objekt
1296 entfernt, während man mit @code{transparent} ein Objekt
1297 unsichtbar machen kann, es aber an seinem Platz gelassen wird.
1300 @subheading color (Farbe)
1302 @cindex color-Eigenschaft
1303 @cindex Farb-Eigenschaft
1305 Abschließend wollen wir die Taktlinien unsichtbar machen, indem
1306 wir sie weiß einfärben. (Es gibt hier eine Schwierigkeit: die weiße
1307 Taktlinie übermalt manchmal die Taktlinienen, wo sie sie kreuzt,
1308 manchmal aber auch nicht. Sie können in den Beispielen unten
1309 sehen, dass das nicht vorhersagbar ist. Die Einzelheiten dazu, warum
1310 das passiert und wie sie es kontrollieren können, werden dargestellt
1311 in @ruser{Objekte weiß malen}. Im Moment wollen wir lernen, wie
1312 man mit Farbe arbeitet, akzeptieren Sie bitte an dieser Stelle die
1315 Das @code{grob-interface} bestimmt, dass der Wert der Farb-Eigenschaft
1316 eine Liste ist, aber es gibt keine Erklärung, was für eine Liste das
1317 sein soll. Die Liste, die benötigt wird, ist eine Liste mit Werten in
1318 internen Einheiten, aber damit Sie nicht wissen müssen, wie diese
1319 aussehen, gibt es mehrere Wege, Farben anzugeben. Der erste
1320 Weg ist es, @qq{normale} Farben zu benutzen, wie sie in der
1321 Tabelle in @ruser{Liste der Farben} aufgelistet sind. Beachten Sie,
1322 dass die Bezeichnungen auf English sind. Um die Taktlinien auf
1323 weiß zu setzen, können Sie schreiben:
1325 @cindex Taktlinie, Beispiel zur Veränderung
1326 @cindex color-Eigenschaft, Beispiel
1328 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1331 \override Staff.BarLine #'color = #white
1333 g, a16 b8 c d4 e16 |
1339 und die Taktlinien verschwinden in der Tat. Beachten Sie,
1340 dass @emph{white} nicht mit einem Apostroph angeführt
1341 wird -- es ist kein Symbol, sondern eine @emph{Funktion}.
1342 Wenn sie aufgerufen wird, stellt sie eine Liste mit internen
1343 Werten zu Verfügung, mit welcher die Farbe auf weiß
1344 gestellt wird. Die anderen Farben in der Liste sind auch
1345 Funktionen. Um sich zu überzeugen, dass der Befehl auch
1346 wirklich funktioniert, können Sie die Farbe auf eine der
1347 anderen Funktionen dieser Liste abändern.
1353 Die zweite Art die Farbe zu ändern geschieht, indem die Liste
1354 der X11-Farbbezeichnungen einzusetzen, siehe die zweite Liste
1355 in @ruser{Liste der Farben}. Diesen Farben muss jedoch eine
1356 andere Funktion vorangestellt werden, die die X11-Farbbezeichnungen
1357 in interne Werte konvertiert:
1358 @code{x11-color}. Das geschieht wie folgt:
1360 @cindex Taktlinie, Beispiel zur Veränderung
1361 @cindex color-Eigenschaft, Beispiel
1363 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1366 \override Staff.BarLine #'color = #(x11-color 'white)
1368 g, a16 b8 c d4 e16 |
1374 In diesem Fall hat die Funktion @code{x11-color} ein Symbol
1375 als Argument, darum muss dem Symbol ein Apostroph vorangestellt
1376 und beide zusammen in Klammern gesetzt werden.
1382 Es gibt noch eine dritte Funktion, die RGB-Werte in die
1383 internen Werte übersetzt -- die @code{rgb-color}-Funktion. Sie
1384 braucht drei Argumente, um die Stärke von Rot, Grün und
1385 Blau darzustellen. Die Werte befinden sich zwischen
1386 0 und 1. Um also die Farbe Rot darzustellen, muss der
1387 Wert der Funktion lauten: @code{(rgb-color 1 0 0)}, weiß
1388 würde sein: @code{(rgb-color 1 1 1)}.
1390 @cindex Taktlinie, Beispiel zur Veränderung
1391 @cindex color-Eigenschaft, Beispiel
1393 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1396 \override Staff.BarLine #'color = #(rgb-color 1 1 1)
1398 g, a16 b8 c d4 e16 |
1403 Schließlich gibt es noch eine Grauskala, die zu den X11-Farben
1404 gehört. Sie reicht von schwarz (@code{'grey0'}) bis
1405 weiß (@code{'grey100}), in Einserschritten. Wir wollen das
1406 illustrieren, indem alle Layout-Objekte im Beispiel
1407 verschiede Grauschattierungen erhalten:
1409 @cindex StaffSymbol, Beispiel zur Veränderung
1410 @cindex TimeSignature, Beispiel zur Veränderung
1411 @cindex Schlüssel, Beispiel zur Veränderung
1412 @cindex Notenhals, Beispiel zur Veränderung
1413 @cindex Taktlinie, Beispiel zur Veränderung
1414 @cindex Farbeigenschaft, Beispiel
1415 @cindex x11-Farben, Beispiel
1416 @cindex Taktlinien, Beispiel zur Veränderung
1417 @cindex Taktart, Beispiel zur Veränderung
1418 @cindex Clef, Beispiel zur Veränderung
1419 @cindex Stem, Beispiel zur Veränderung
1420 @cindex NoteHead, Beispiel zur Veränderung
1421 @cindex Notenkopf, Beispiel zur Veränderung
1423 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1426 \override Staff.StaffSymbol #'color = #(x11-color 'grey30)
1427 \override Staff.TimeSignature #'color = #(x11-color 'grey60)
1428 \override Staff.Clef #'color = #(x11-color 'grey60)
1429 \override Voice.NoteHead #'color = #(x11-color 'grey85)
1430 \override Voice.Stem #'color = #(x11-color 'grey85)
1431 \override Staff.BarLine #'color = #(x11-color 'grey10)
1433 g, a16 b8 c d4 e16 |
1439 Beachten Sie die Kontexte, die mit jedem einzelnen Layout-Objekt
1440 verbunden sind. Es ist wichtig, den richtigen Kontext einzusetzen,
1441 damit die Befehle funktionieren. Denken Sie daran, dass der
1442 Kontext sich daran orientiert, wo sich der entsprechende
1443 Engraver befindet. Den Standardkontext für Engraver finden
1444 Sie, indem Sie beim Layout-Objekt beginnen, zum Engraver
1445 gehen, der es produziert und auf der Seite des Engravers in der
1446 IR finden Sie Information, in welchem Kontext sich der
1447 Engraver normalerweise befindet.
1450 @node Größe von Objekten
1451 @subsection Größe von Objekten
1452 @translationof Size of objects
1454 @cindex Veränderung von Objektgrößen
1455 @cindex Objektgrößen, verändern
1456 @cindex Größen von Objekten verändern
1458 Als Startpunkt wollen wir wieder ein früheres Beispiel
1459 wählen, siehe @ref{Musikalische Ausdrücke ineinander verschachteln}. Hier wurde
1460 ein neues Notensystem erstellt, wie man es für ein @rglos{ossia}
1463 @cindex alignAboveContext-Eigenschaft, Beispiel
1464 @cindex über dem System anordnen, Beispiel
1465 @cindex @code{\with}-Beispiel
1467 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1468 \new Staff ="main" {
1475 alignAboveContext = #"main" }
1483 Ossia-Systeme werden normalerweise ohne Schlüssel und Taktangabe
1484 geschrieben, und sie werden etwas kleiner als das Hauptsystem gesetzt.
1485 Wie man Schlüssel und Taktangabe entfernt, wissen wir schon:
1486 wir setzen den Stencil von beiden auf @code{#f}:
1488 @cindex alignAboveContext-Eigenschaft, Beispiel
1489 @cindex über dem System anordnen, Beispiel
1490 @cindex @code{\with}-Beispiel
1491 @cindex stencil-Eigenschaft, Beispiel
1492 @cindex Schlüssel, Beispiel zur Veränderung
1493 @cindex Taktart, Beispiel zur Veränderung
1495 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1496 \new Staff ="main" {
1503 alignAboveContext = #"main"
1506 \override Staff.Clef #'stencil = ##f
1507 \override Staff.TimeSignature #'stencil = ##f
1517 wobei ein zusätzliches Klammerpaar nach der @code{\with}-Konstruktion
1518 erforderlich ist um sicherzugehen, dass die Modifikation und
1519 die Noten sich auch auf das Ossia-System beziehen.
1521 Was für einen Unterschied macht es, ob man den @code{Staff}-Kontext
1522 mit @code{\with} verändert, oder ob man die Stencils mit
1523 @code{\override} beeinflusst? Der größte Unterschied liegt
1524 darin, dass Änderungen, die mit @code{\with} eingeführt werden,
1525 während der Erstellung des Kontextes miterzeugt werden und
1526 als @strong{Standardeinstellungen} für diesen Kontext während seiner
1527 gesamten Dauer gelten, während @code{\set}- oder @code{\override}-Befehle
1528 dynamisch in die Noten eingebettet werden -- sie führen die
1529 Änderungen synchron mit einem bestimmten Zeitpunkt in
1530 der Musik aus. Wenn die Änderungen mit @code{\unset}
1531 oder @code{\revert} rückgängig gemacht werden, werden
1532 wieder die Standardwerte eingesetzt, die also die sind, die
1533 mit einer @code{\with}-Konstruktion definiert wurden, oder
1534 wenn hier keine definiert worden sind, die normalen
1537 Manche Kontexteigenschaften können nur ein einer
1538 @code{\with}-Konstruktion verändert werden. Das sind
1539 Eigenschaften, die nicht sinnvoll mitten im System geändert
1540 werden können. @code{alignAboveContext} (Orientierung
1541 über dem Kontext) und die Parallele,
1542 @code{alignBelowContext} (Orientierung unter dem Kontext)
1543 sind zwei derartige Eigenschaften -- wenn das Notensystem
1544 einmal erstellt wurde, ist die Orientierung schon bestimmt
1545 und es wäre nicht sinnvoll, sie später zu ändern.
1547 Die Standardwerte für Layout-Objekt-Eigenschaften können
1548 auch in der @code{\with}-Konstruktion gesetzt werden.
1549 Benutzen Sie einfach den normalen @code{\override}-Befehl
1550 ohne den Kontext, denn der Kontext ist eindeutig definiert
1551 durch die Stelle, an welcher sich @code{\with} befindet.
1552 Wenn an dieser Stelle ein Kontext angegeben wird, produziert LilyPond
1555 Das obige Beispiel könnte also auch so aussehen:
1557 @cindex alignAboveContext-Eigenschaft, Beispiel
1558 @cindex über dem System anordnen, Beispiel
1559 @cindex @code{\with}-Beispiel
1560 @cindex stencil-Eigenschaft, Beispiel
1561 @cindex Schlüssel, Beispiel zur Veränderung
1562 @cindex Taktart, Beispiel zur Veränderung
1564 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1565 \new Staff ="main" {
1572 alignAboveContext = #"main"
1573 % Don't print clefs in this staff
1574 \override Clef #'stencil = ##f
1575 % Don't print time signatures in this staff
1576 \override TimeSignature #'stencil = ##f
1585 Nun können wir daran gehen, auch wirklich die
1586 Größe der Objekte zu ändern.
1588 Manche Layout-Objekte werden aus Glyphen erstellt,
1589 die sich in einer Schriftartdatei befinden. Dazu gehören
1590 die Notenköpfe, Versetzungszeichen, Text, Schlüssel,
1591 Taktbezeichnung, Dynamik und Gesangstext. Ihre
1592 Größe wird verändert, indem die
1593 @code{font-size}- (Schriftgröße)-Eigenschaft geändert wird, wie
1594 wir bald sehen werden. Andere Layout-Objekte, wie
1595 Bögen -- oder allgemein Strecker-Objekte -- werden
1596 individuell gezeichnet, es gibt dazu also keine
1597 @code{font-size}, die mit ihnen verknüpft wäre.
1598 Weitere Eigenschaften wie die Länge von Hälsen und
1599 Taktlinien, Dicke von Balken und anderen Linien und
1600 der Abstand der Notenlinien voneinander müssen auf
1601 spezielle Weise verändert werden.
1603 In unserem Ossia-Beispiel wollen wir zuerst die
1604 Schriftgröße verändern. Das ist auf zwei Arten möglich.
1605 Entweder wir ändern die Schriftgröße für jede Objektart
1606 mit einem eigenen Befehl, etwa:
1609 \override NoteHead #'font-size = #-2
1613 oder wir ändern die Größe aller Schriftobjekte, indem wir
1614 den Wert einer besonderen Eigenschaft, @code{fontSize},
1615 mit dem @code{\set}-Befehl bestimmen oder sie in
1616 eine @code{\with}-Konstruktion (ohne @code{\set} einschließen.
1622 Beide Beispiele reduzieren die Schriftgröße um zwei Schritte
1623 im Vergleich zum vorigen Wert, wobei jeder Schritt die
1624 Schriftgröße um etwa 12% verändert.
1626 Setzen wir das also in unserem Ossia-Beispiel ein:
1628 @cindex alignAboveContext-Eigenschaft, Beispiel
1629 @cindex über dem System anordnen, Beispiel
1630 @cindex @code{\with}-Beispiel
1631 @cindex stencil-Eigenschaft, Beispiel
1632 @cindex Schlüssel, Beispiel zur Veränderung
1633 @cindex Taktart, Beispiel zur Veränderung
1635 @lilypond[quote,verbatim,fragment,ragged-right,relative=2]
1636 \new Staff ="main" {
1643 alignAboveContext = #"main"
1644 \override Clef #'stencil = ##f
1645 \override TimeSignature #'stencil = ##f
1646 % Reduce all font sizes by ~24%
1656 Das sieht aber immer noch nicht richtig aus. Die Notenköpfe
1657 und Fähnchen sind kleiner, aber die Hälse im Vergleich
1658 dazu zu lang und die Notenlinien zu weit auseinander.
1659 Sie müssen auch proportional zur Schriftart verkleinert
1660 werden. Der nächste Abschnitt behandelt diese Anpassung.
1663 @node Länge und Dicke von Objekten
1664 @subsection Länge und Dicke von Objekten
1665 @translationof Length and thickness of objects
1667 @cindex Entfernungen
1671 @cindex Größe, verändern
1672 @cindex Notenhalslänge, verändern
1673 @cindex Hälse, Länge verändern
1674 @cindex Notenlinien, Länge verändern
1676 Abstände und Längen werden in LilyPond üblicherweise
1677 in Notenlinienabständen (engl. staff-spaces) gemessen.
1678 Das ist der Abstand zwischen zwei Notenlinien im System.
1679 Die meisten Dicken (engl. thickness) dagegen werden in
1680 einer internen Einheit Linien-Dicke (engl. line-thickness)
1681 gemessen. Die Linien von Dynamikklammern zum Beispiel
1682 haben standardmäßig eine Dicke von einer Einheit
1683 @code{line-thickness}, während die Dicke eines
1684 Notenhalses 1,3 ist. Beachten Sie jedoch, dass sich
1685 manche Dicken anders verhalten: die Dicke von
1686 Balken etwa wird in Notenlinienabständen gemessen.
1688 Wie also werden Längen skaliert um der Schriftgröße
1689 zu entsprechen? Das kann mit einer besonderen Funktion
1690 @code{magstep} vorgenommen werden, die genau für
1691 diesen Zweck vorhanden ist. Sie nimmt ein Argument auf,
1692 die Änderung der Schriftgröße (#-2 im obigen Beispiel)
1693 und gibt einen Skalierungsfaktor aus, der dazu dient,
1694 Objekte proportionell zueinander zu verändern. So wird
1697 @cindex alignAboveContext-Eigenschaft, Beispiel
1698 @cindex über dem System anordnen, Beispiel
1699 @cindex @code{\with}-Beispiel
1700 @cindex stencil-Eigenschaft, Beispiel
1701 @cindex Schlüssel, Beispiel zur Veränderung
1702 @cindex Taktart, Beispiel zur Veränderung
1703 @cindex Notenlinienabstände verändern
1704 @cindex staff-space-Eigenschaft verändern
1705 @cindex magstep-Funktion, Beispiel
1706 @cindex Schriftart-Eigenschaft, Beispiel
1708 @lilypond[quote,verbatim,fragment,ragged-right,relative=2]
1709 \new Staff ="main" {
1716 alignAboveContext = #"main"
1717 \override Clef #'stencil = ##f
1718 \override TimeSignature #'stencil = ##f
1720 % Reduce stem length and line spacing to match
1721 \override StaffSymbol #'staff-space = #(magstep -2)
1731 Da die Länge eines Halses und viele andere Längeneigenschaften
1732 relativ zum Wert des Notenlinienabstands (@code{staff-space})
1733 errechnet werden, werden sie auch automatisch verkleinert.
1734 Das wirkt sich jedoch nur auf die vertikale Skalierung des Ossias
1735 aus -- die horizontale Skala ist durch das Layout des Haupsystems
1736 bestimmt und wird also von diesen Größenänderungen nicht
1737 betroffen. Wenn natürlich die Größe der gesamten Noten reduziert
1738 würde, würde sich auch die horizontalen Abstände ändern. Dass
1739 wird später im Layout-Abschnitt betrachtet.
1741 Mit dieser Änderung ist unser Ossia fertig. Die Größen und Längen
1742 aller anderen Objekte können auf analoge Weise geändert
1745 Für kleine Größenänderungen, wie in dem obigen Beispiel,
1746 braucht die Dicke der verschiedenen Linien, wie Taktlinien,
1747 Notenlinien, Balken, Dynamikklammern usw. normalerweise
1748 keine spezielle Anpassung. Wenn die Dicke eines bestimmten
1749 Layout-Objektes angepasst werden muss, kann man das erreichen,
1750 indem die entsprechende @code{thickness}-Eigenschaft des
1751 Objekts mit @code{\override} verändert wird. Ein Beispiel,
1752 wie man die Dicke von Bögen ändert, wurde schon gezeigt,
1753 siehe @ref{Eigenschaften von Layoutobjekten}. Die Dicke aller
1754 gezeichneten Objekte (die also nicht aus einer Schriftart
1755 stammen) können auf gleiche Weise geändert werden.
1758 @node Positionierung von Objekten
1759 @section Positionierung von Objekten
1760 @translationof Placement of objects
1763 * Automatisches Verhalten::
1764 * within-staff (Objekte innerhalb des Notensystems)::
1765 * Objekte außerhalb des Notensystems::
1769 @node Automatisches Verhalten
1770 @subsection Automatisches Verhalten
1771 @translationof Automatic behavior
1773 @cindex within-staff-Objekte
1774 @cindex outside-staff-Objekte
1775 @cindex Objekte innerhalb des Notensystems
1776 @cindex Objekte außerhalb des Notensystems
1778 Es gibt Objekte der Notation, die zum Notensystem gehören, und
1779 andere, die außerhalb des Systems gesetzt werden müssen. Sie
1780 werden @code{within-staff}-Objekte bzw.
1781 @code{outside-staff}-Objekte genannt.
1783 @code{within-staff}-Objekte werden innerhalb des Notensystems
1784 (engl. staff) gesetzt: Notenköpfe, Hälse, Versetzungszeichen
1785 usw. Ihre Position ist üblicherweise durch die notierte Musik
1786 bestimmt -- sie werden vertikal auf bestimmten Linien notiert
1787 oder sind an andere Objekte gebunden, die vertikal festgelegt
1788 sind. Kollisionen von Notenköpfen, Hälsen und Versetzungszeichen
1789 werden normalerweise automatisch vermieden. Es gibt
1790 Befehle, um dieses automatische Verhalten zu verändern, wie
1791 unten gezeigt werden soll.
1793 Objekte, die außerhalb des Notensystems gesetzt werden, sind
1794 unter Anderem Übungsmarkierungen, Text und Dynamikzeichen.
1795 LilyPonds Regel für ihre vertikale Positionierung lautet, sie so nah wie
1796 möglich am Notensystem zu setzen, aber nicht so nah, dass
1797 sie mit anderen Objekten kollidieren. Dabei wird die
1798 @code{outside-staff-priority}-(Priorität außerhalb des Notensystems)-Eigenschaft
1799 eingesetzt, um die Reihenfolge zu bestimmen, in denen Objekte gesetzt werden
1802 Zuerst werden alle Innersystemobjekte von LilyPond gesetzt.
1803 Dann werden die Objekte außerhalb des Systems nach
1805 @code{outside-staff-priority} geordnet. Die @code{outside-staff}-Objekte
1806 werden dann nacheinander gesetzt, mit der niedrigsten
1807 Priorität beginnend, und so gesetzt, dass sie nicht mit anderen
1808 Objekten kollidieren, die schon gesetzt wurden. Wenn also zwei
1809 @code{outside-staff}-Objekte um den selben Platz streiten,
1810 wird das mit der geringeren @code{outside-staff-priority} näher
1811 am System gesetzt werden. Wenn zwei Objekte die selbe Priorität
1812 haben, wird das näher am System gesetzt, welches zuerst
1815 Im folgenden Beispiel haben alle Textbeschriftungen die gleiche
1816 Priorität (weil sie nicht explizit gesetzt worden ist). Beachten Sie,
1817 dass @qq{Text3} wieder dicht am System gesetzt wurde, weil
1818 er unter @qq{Text2} passt.
1820 @cindex Textbeschriftungsbeispiel
1822 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1829 Notensysteme werden in den Standardeinstellungen auch so dicht
1830 beeinander gesetzt wie es möglich ist (mit einem minimalen Abstand).
1831 Wenn Noten sehr weit aus einem System herausragen, zwingen sie
1832 das nächste System weiter weg, wenn eine Kollision drohen würde.
1833 Im nächsten Beispiel sehen Sie, wie Noten auf zwei Systemen
1834 @qq{ineinander greifen}.
1836 @lilypond[quote,ragged-right,verbatim]
1839 \relative c' { c a, }
1842 \relative c'''' { c a, }
1848 @node within-staff (Objekte innerhalb des Notensystems)
1849 @subsection within-staff (Objekte innerhalb des Notensystems)
1850 @translationof Within-staff objects
1852 Es wurde schon gezeigt, wie die Befehle @code{\voiceXXX} die Richtung
1853 von Bögen, Fingersatz und allen anderen Objekten beeinflusst,
1854 die von der Richtung der Notenhälsen abhängen. Diese Befehle
1855 sind nötig, wenn polyphone Musik geschrieben wird, damit sich
1856 die einzelnen Melodielinien klar abzeichnen. Es kann aber von Zeit
1857 zu Zeit nötig sein, dieses automatische Verhalten zu verändern. Das
1858 kann entweder für ganze Abschnitte, aber genauso auch nur für eine
1859 einzelne Note vorgenommen werden. Die Eigenschaft, die die Richtung
1860 bestimmt, ist die @code{direction}-Eigenschaft jedes Layout-Objekts.
1861 Es soll erst erklärt werden, was sie bewirkt und dann eine Anzahl
1862 an fertigen Befehlen für die üblicheren Situationen präsentiert werden,
1863 mit denen Sie gleich loslegen können.
1865 Manche Layout-Objekte, wie Legato- und Bindebögen, biegen sich
1866 oder zeigen entweder nach oben oder nach unten, andere, wie
1867 Hälse und Fähnchen, verändern auch die Position rechts oder links,
1868 je nach der Richtung, in die sie zeigen. Das wird automatisch
1869 berücksichtigt, wenn die @code{direction}-Eigenschaft verändert
1876 @cindex hoch-Eigenschaft
1877 @cindex runter-Eigenschaft
1878 @cindex zentriert-Eigenschaft
1879 @cindex neutral-Eigenschaft
1881 Das folgende Beispiel zeigt im ersten Takt die Standardeinstellung
1882 für Hälse, die bei hohen Noten nach unten zeigen und bei tiefen
1883 noten nach oben. Im nächsten Takt werden alle Hälse nach unten
1884 gezwungen, im dritten Takt nach oben, und im vierten wird wieder
1885 der Standard eingestellt.
1887 @cindex Notenhals, Beispiel zur Veränderung
1888 @cindex Richtungseigenschaft, Beispiel
1890 @lilypond[quote,verbatim,relative=2]
1892 \override Stem #'direction = #DOWN
1894 \override Stem #'direction = #UP
1896 \revert Stem #'direction
1900 Hier werden die Konstanten @code{DOWN} und @code{UP}
1901 eingesetzt. Sie haben die Werte @code{-1} bwz. @code{+1}, und
1902 diese numerischen Werte können ebenso benutzt werden. Auch
1903 der Wert @code{0} kann in manchen Fällen benutzt werden. Er
1904 bedeutet für die Hälse das gleiche wie @code{UP}, für einige
1905 andere Objekte jedoch @qq{zentiert}. Es gibt hierzu die Konstante
1906 @code{CENTER}, die den Wert @code{0} hat.
1908 Es gibt aber einfachere Befehle, die normalerweise benutzt werden.
1909 Hier eine Tabelle der häufigsten. Die Bedeutung des Befehls wird
1910 erklärt, wenn sie nicht selbsverständlich ist.
1912 @multitable @columnfractions .2 .2 .25 .35
1913 @headitem Runter/Links
1917 @item @code{\arpeggioArrowDown}
1918 @tab @code{\arpeggioArrowUp}
1919 @tab @code{\arpeggioNormal}
1920 @tab Arpeggio mit Pfeil nach unten, oben oder ohne Pfeil
1921 @item @code{\dotsDown}
1923 @tab @code{\dotsNeutral}
1924 @tab Richtung der Verschiebung eines Punktes, um Notenlinien zu vermeiden
1925 @item @code{\dynamicDown}
1926 @tab @code{\dynamicUp}
1927 @tab @code{\dynamicNeutral}
1928 @tab Position der Dynamik-Bezeichnung relativ zum System
1929 @item @code{\phrasingSlurDown}
1930 @tab @code{\phrasingSlurUp}
1931 @tab @code{\phrasingSlurNeutral}
1932 @tab Befehl für Richtung von Phrasierungsbögen
1933 @item @code{\slurDown}
1935 @tab @code{\slurNeutral}
1936 @tab Befehl für Richtung von Legatobögen
1937 @item @code{\stemDown}
1939 @tab @code{\stemNeutral}
1940 @tab Befehl für Richtung von Hälsen
1941 @item @code{\textSpannerDown}
1942 @tab @code{\textSpannerUp}
1943 @tab @code{\textSpannerNeutral}
1944 @tab Position von Textbeschrifungen, die als Strecker eingegeben werden
1945 @item @code{\tieDown}
1947 @tab @code{\tieNeutral}
1948 @tab Befehl für Richtung von Bindebögen
1949 @item @code{\tupletDown}
1950 @tab @code{\tupletUp}
1951 @tab @code{\tupletNeutral}
1952 @tab Befehl für Richtung von Klammern/Zahlen der N-tolen
1955 Diese vordefinierten Befehl können allerdings @strong{nicht}
1956 zusammen mit @code{\once} benutzt werden. Wenn Sie die
1957 Wirkung eines Befehl auf eine einzige Noten begrenzen wollen,
1958 müssen Sie den entsprechenden
1959 @code{\once \override}-Befehl benutzen oder den definierten
1960 Befehl, gefolgt von dem entsprechenden neutralisierenden
1961 @code{xxxNeutral}-Befehl nach der Note.
1964 @subheading Fingersatz
1966 @cindex Fingersatz, Positionierung
1967 @cindex Fingersatz, Akkorde
1969 Die Positionierung von Fingersatz kann auch durch den Wert
1970 seiner @code{direction}-Eigenschaft beeinflusst werden, aber
1971 eine Veränderung von @code{direction} hat keinen Einfluss auf
1972 Akkorde. es gibt auch hier
1973 besondere Befehle, mit denen der Fingersatz von einzelnen
1974 Noten in Akkorden kontrolliert werden kann, wobei mögliche
1975 Positionen über, unter der Note und rechts bzw. links von
1978 Zunächst die Wirkungsweise von @code{direction} auf
1979 den Fingersatz: im ersten Takt der Standard, dann
1980 die Wirkung von @code{DOWN} (runter) und @code{UP}
1983 @cindex Fingersatz, Beispiel zur Veränderung
1984 @cindex direction-Eigenschaft, Beispiel
1986 @lilypond[quote,verbatim,relative=2]
1988 \override Fingering #'direction = #DOWN
1990 \override Fingering #'direction = #UP
1994 Eine Beeinflussung der @code{direction}-Eigenschaft ist jedoch
1995 nicht die einfachste Art, Fingersatzbezeichnungen manuell über oder
1996 unter das System zu setzen. Normalerweise bietet es sich an,
1997 @code{_} oder @code{^} anstelle von @code{-} vor der Fingersatz-Zahl
1998 zu benutzen. Hier das vorherigen Beispiel mit dieser Methode:
2000 @cindex Fingersatz-Beispiel
2002 @lilypond[quote,verbatim,relative=2]
2008 Die @code{direction}-Eigenschaft wirkt sich nicht auf
2009 Akkorde aus, während die Präfixe @code{_} und @code{^} funktionieren.
2010 Standardmäßig wird der Fingersatz automatisch entweder
2011 über oder unter dem Akkord gesetzt:
2013 @cindex Fingersatz-Beispiel
2015 @lilypond[quote,verbatim,relative=2]
2022 aber das kann manuell geändert werden, um einzelne Fingersatzanweisungen
2023 nach oben oder unten zu zwingen:
2025 @cindex Fingersatz-Beispiel
2027 @lilypond[quote,verbatim,relative=2]
2033 Noch bessere Kontrolle über die Positionierung von Fingersatz für
2034 einzelne Noten in einem Akkord ist mit dem
2035 @code{\set fingeringOrientations}-Befehl möglich. Die Syntax
2039 @code{\set fingeringOrientations = #'([up] [left/right] [down])}
2043 @code{\set}wird benutzt, weil @code{fingeringOrientations} eine
2044 Eigenschaft des @code{Voice}-Kontextes ist, erstellt und eingesetzt
2045 vom @code{New_fingering_engraver}.
2047 Die Eigenschaft kann als Wert eine Liste mit einem bis drei Einträgen
2048 haben. Damit wird bestimmt, ob Fingersatz oberhalb gesetzt
2049 werden kann (wenn @code{up} in der Liste auftaucht), darunter
2050 (wenn@code{down} auftaucht), links (wenn @code{left} auftaucht)
2051 oder rechts (wenn @code{right} auftaucht). Wenn andererseits
2052 ein Wert nicht auftaucht, wir auch kein Fingersatz in dieser Richtung
2053 gesetzt. LilyPond nimmt diese Beschränkung als Bedingung und
2054 errechnet die besten Positionen für die Noten des nächsten Akkordes.
2055 Die seitliche Positionierung kann nur auf einer Seite des Akkordes
2056 geschehen, nicht auf beiden gleichzeitig, es kann also nur entweder
2057 @code{left} oder @code{right} auftreten, nicth beide gleichzeitig.
2059 @warning{Damit eine einzelne Note mit diesem Befehl beeinflusst werden
2060 kann, muss sie als ein @qq{Ein-Noten-Akkord} geschrieben
2061 werden, indem einfache spitze Klammern um die Note positioniert
2064 Hier ein paar Beispiele:
2066 @cindex Fingersatz-Beispiel
2067 @cindex @code{\set}, Benutzungsbeispiel
2068 @cindex fingerOrientations-Eigenschaft, Beispiel
2070 @lilypond[quote,verbatim,relative=1]
2071 \set fingeringOrientations = #'(left)
2073 < c-1 e-2 g-3 b-5 > 4
2074 \set fingeringOrientations = #'(left)
2076 < c-1 e-2 g-3 b-5 > 4
2077 \set fingeringOrientations = #'(up left down)
2079 < c-1 e-2 g-3 b-5 > 4
2080 \set fingeringOrientations = #'(up left)
2082 < c-1 e-2 g-3 b-5 > 4
2083 \set fingeringOrientations = #'(right)
2085 < c-1 e-2 g-3 b-5 > 4
2089 Wenn die Fingersatzbezeichnung zu gedrungen aussieht,
2090 kann auch die Schriftgröße (@code{font-size}) verringert
2091 werden. Der Standardwert kann aus dem
2092 @code{Fingering}-Objekt in der IR entnommen werden,
2093 er ist @code{-5}, versuchen wir es also mit @code{-7}.
2095 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
2096 \override Fingering #'font-size = #-7
2097 \set fingeringOrientations = #'(left)
2099 < c-1 e-2 g-3 b-5 > 4
2100 \set fingeringOrientations = #'(left)
2102 < c-1 e-2 g-3 b-5 > 4
2103 \set fingeringOrientations = #'(up left down)
2105 < c-1 e-2 g-3 b-5 > 4
2106 \set fingeringOrientations = #'(up left)
2108 < c-1 e-2 g-3 b-5 > 4
2109 \set fingeringOrientations = #'(right)
2111 < c-1 e-2 g-3 b-5 > 4
2116 @node Objekte außerhalb des Notensystems
2117 @subsection Objekte außerhalb des Notensystems
2118 @translationof Outside-staff objects
2120 Objekte außerhalb des Notensystems werden automatisch gesetzt,
2121 um Kollisionen zu vermeiden. Objekten mit einem geringeren
2122 Prioritätswert der Eigenschaft @code{outside-staff-priority}
2123 werden näher an das System gesetzt, und andere Objekte außerhalb
2124 des Systems werden dann soweit vom System entfernt gesetzt, dass
2125 Zusammenstöße vermieden werden. Die
2126 @code{outside-staff-priority}-Eigenschaft ist im
2127 @code{grob-interface} definiert und ist also eine Eigenschaft
2128 von allen Layout-Objekten. Standardmäßig ist sie für alle Objekte
2129 auf falsch (@code{#f}) gesetzt; dieser Wert wird in einen numerischen
2130 Wert dem Objekt entsprechend geändert, wenn das Objekt für die
2131 Notenausgabe erstellt wird. Die Tabelle unten zeigt die
2132 Standardwerte für die meistbenutzten @code{outside-staff}-Objekte,
2133 die den Voreinstellungen nach im
2134 @code{Staff}- oder @code{Voice}-Kontext gesetzt werden.
2136 @multitable @columnfractions .3 .3 .3
2137 @headitem Layout-Objekt
2139 @tab Kontrolliert Position von:
2140 @item @code{MultiMeasureRestText}
2142 @tab Text über Ganztaktpausen
2143 @item @code{TextScript}
2145 @tab Textbeschriftung
2146 @item @code{OttavaBracket}
2148 @tab Ottava (Oktavierungsklammern)
2149 @item @code{TextSpanner}
2152 @item @code{DynamicLineSpanner}
2154 @tab Alle Dynamik-Bezeichnungen
2155 @item @code{VoltaBracketSpanner}
2158 @item @code{TrillSpanner}
2160 @tab Triller-Strecker
2163 Hier ein Beispiel, das die Standardpositionierung von einigen
2166 @cindex Text-Strecker
2167 @cindex Text-Spanner
2168 @funindex \startTextSpan
2169 @funindex \stopTextSpan
2170 @funindex startTextSpan
2171 @funindex stopTextSpan
2172 @cindex Ottava-Klammer
2173 @cindex Oktavierungsklammer
2175 @cindex TextSpanner, Beispiel zur Veränderung
2176 @cindex bound-details-Eigenschaft, Beispiel
2178 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
2179 % Set details for later Text Spanner
2180 \override TextSpanner #'(bound-details left text)
2181 = \markup { \small \bold Slower }
2182 % Place dynamics above staff
2184 % Start Ottava Bracket
2189 % Add Dynamic Line Spanner
2195 c\ff c \stopTextSpan
2196 % Stop Ottava Bracket
2201 Dieses Beispiel zeigt auch, wie man Text-Strecker erstellt, d.h.
2202 Text mit Bindestrichen, der sich über eine bestimmte Länge
2203 erstreckt. Der Strecker beginnt mit dem
2204 @code{\startTextSpan}-Befehl und endet mit dem
2205 @code{\stopTextSpan}-Befehl, und das Format des Textes
2206 wird mit dem @code{\override TextSpanner}-Befehl bestimmt.
2207 Mehr Einzelheiten siehe @ruser{Text mit Verbindungslinien}.
2209 Im Beispiel wird auch gezeigt, wie Oktavierungsklammern
2210 (Ottava) erstellt werden.
2212 @cindex Taktzahlposition verändern
2213 @cindex Verändern der Taktzahlposition
2214 @cindex Position der Taktzahl, verändern
2215 @cindex Metronom-Bezeichnungsposition verändern
2216 @cindex Verändern der Metronom-Bezeichnungsposition
2217 @cindex Übungszeichenposition verändern
2218 @cindex Verändern der Übungszeichenposition
2220 Beachten Sie, dass Taktnummern, Metronombezeichnungen
2221 und Übungszeichen nicht gezeigt werden. Sie werden
2222 standardmäßig im @code{Score}-(Partitur)-Kontext
2223 erstellt und ihre @code{outside-staff-priority} wird
2224 in Bezug auf die Layout-Objekte, die im @code{Staff}-Kontext
2225 erstellt werden, ignoriert. Wenn Sie Taktnummern,
2226 Metronombezeichnungen oder Übungszeichen entsprechend
2227 ihrer Außersystem-Priorität setzen wollen, müssen Sie
2228 die entsprechenden Engraver (@code{Bar_number_engraver},
2229 @code{Metronome_mark_engraver} oder @code{Mark_engraver})
2230 vom @code{Score}-Kontext entfernen und dem
2231 @code{Staff}-Kontext hinzufügen. Wenn die Engraver so
2232 geändert werden, erhalten sie folgenden Werte für
2233 @code{outside-staff-priority}:
2235 @multitable @columnfractions .3 .3
2236 @headitem Layout-Objekt @tab Priorität
2237 @item @code{RehearsalMark} @tab @code{1500}
2238 @item @code{MetronomeMark} @tab @code{1000}
2239 @item @code{BarNumber} @tab @code{ 100}
2242 Wenn die Standardwerte der @code{outside-staff-priority} nicht
2243 die Positionierung hervorrufen, die Sie wünschen, kann die
2244 Priorität eines jeden Objektes geändert werden. Als Beispiel
2245 wollen wir zeigen, wie sich die Oktavierungsklammer unter
2246 den Textstrecker des vorigen Beispiels setzen lässt. Wir müssen
2247 nur die Priorität des
2248 @code{OttavaBracket}-Objektes in der IR oder der Tabelle oben
2249 herausfinden und einen kleineren Wert angeben als der Wert, den
2250 das @code{TextSpanner}-(Strecker)-Objekt bekommt, wobei noch daran
2251 zu denken ist, dass @code{OttavaBracket} im @code{Staff}-Kontext
2254 @cindex TextSpanner, Beispiel zur Veränderung
2255 @cindex bound-details-Eigenschaft, Beispiel
2257 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
2258 % Set details for later Text Spanner
2259 \override TextSpanner #'(bound-details left text)
2260 = \markup { \small \bold Slower }
2261 % Place dynamics above staff
2263 %Place following Ottava Bracket below Text Spanners
2264 \once \override Staff.OttavaBracket #'outside-staff-priority = #340
2265 % Start Ottava Bracket
2270 % Add Dynamic Line Spanner
2276 c\ff c \stopTextSpan
2277 % Stop Ottava Bracket
2282 @cindex Legatobögen und outside-staff-priority
2283 @cindex Legatobögen und Artikulationszeichen
2284 @cindex Artikulationszeichen und Legatobögen
2286 Legatobögen werden als Innersystem-Objekte klassifiziert, aber
2287 sie erscheinen oft auch über dem System, wenn die Noten, an die
2288 sie verbunden sind, sehr hoch im System notiert sind. Dadurch
2289 können Außersystem-Objekte, wie Artikulationszeichen, zu hoch
2290 gerückt werden. Die @code{avoid-slur}-Eigenschaft hat nur
2291 eine Auswirkung, wenn auch die @code{outside-staff-priority}
2292 auf @code{#f} gesetzt ist. Alternativ kann die
2293 @code{outside-staff-priority} des Legatobogens auf einen
2294 numerischen Wert gesetzt werden, sodass er mit anderen
2295 Außersystem-Objekten anhand dieses Wertes gesetzt wird.
2296 Hier ein Beispiel, das die beiden Möglichkeiten veranschaulicht:
2298 @lilypond[quote,verbatim,relative=2]
2299 c4( c^\markup\tiny\sharp d4.) c8
2301 \once \override TextScript #'avoid-slur = #'inside
2302 \once \override TextScript #'outside-staff-priority = ##f
2303 c^\markup\tiny\sharp d4.) c8
2304 \once \override Slur #'outside-staff-priority = #500
2305 c4( c^\markup\tiny\sharp d4.) c8
2308 Eine Änderung der @code{outside-staff-priority} kann auch dazu
2309 benutzt werden, die vertikale Plazierung von individuellen Objekten
2310 zu kontrollieren, auch wenn das Ergebnis nicht immer optimal
2311 ist. Im nächsten Beispiel soll @qq{Text3} oberhalb von @qq{Text4}
2312 gesetzt werden, das Beispiel wurde behandelt in
2313 @ref{Automatisches Verhalten}. Der Wert der Priorität muss also für
2314 die Eigenschaft @code{TextScript} entweder in der IR oder in der
2315 Tabelle oben festgestellt werden und dann die Priorität für
2316 @qq{Text3} höher eingestellt werden:
2318 @cindex TextScript, Beispiel zur Veränderung
2319 @cindex outside-staff-priority-Eigenschaft, Beispiel
2321 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2324 \once \override TextScript #'outside-staff-priority = #500
2329 Damit wird zwar @qq{Text3} ganz richtig über @qq{Text4}
2330 platziert, aber auch über @qq{Text2}, und @qq{Text4}
2331 wird jetzt weiter unten gesetzt. Eigentlich sollten ja alle
2332 diese Anmerkungen gleichweit vom System entfernt sein.
2333 Dazu muss offensichtlich horizontal etwas Platz gemacht
2334 werden. Das kann erreicht werden mit dem
2335 @code{textLengthOn}-(Textlänge an)-Befehl.
2337 @subheading \textLengthOn (Textlänge berücksichtigen)
2339 @cindex Noten, durch Text gespreizt
2340 @funindex \textLengthOn
2341 @funindex textLengthOn
2342 @funindex \textLengthOff
2343 @funindex textLengthOff
2345 Standardmäßig wird Text, der mit dem Beschriftungsbefehl
2346 @code{\markup} bzw. Äquivalenten erstellt wird, kein
2347 zusätzlicher Platz in Bezug auf die Positionierung der Noten
2348 zugestanden. Der @code{\textLengthOn}-Befehl ändert
2349 dieses Verhalten, so dass die Noten gespreizt werden, wenn
2350 die Breite des Textes es erfordert:
2352 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2353 \textLengthOn % Cause notes to space out to accommodate text
2360 Dieses Verhalten wird mit dem @code{\textLengthOff}-Befehl
2361 rückgängig gemacht. Erinnern Sie sich, dass @code{\once} nur mit
2362 @code{\override}, @code{\set}, @code{\revert} oder @code{unset}
2363 funktioniert, der Befehl kann also nicht zusammen mit
2364 @code{\textLengthOn} benutzt werden.
2366 @cindex Textbeschriftung, Vermeidung von Zusammenstößen
2367 @cindex Zusammenstöße vermeiden mit Textbeschriftung
2369 Textbeschriftung vermeidet auch Noten, die über das System hinausstehen.
2370 Wenn das nicht gewünscht ist, kann die automatische Verschiebung
2371 nach oben hin auch vollständig ausgeschaltet werden, indem die
2372 Priorität auf @code{#f} gesetzt wird. Hier ein Beispiel, wie
2373 eine Textbeschriftung mit diesen Noten reagiert:
2375 @cindex Textbeschriftung, Beispiel zur Veränderung
2376 @cindex outside-staff-priority-Eigenschaft, Beispiel
2378 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2379 % This markup is short enough to fit without collision
2383 % This is too long to fit, so it is displaced upwards
2387 % Turn off collision avoidance
2388 \once \override TextScript #'outside-staff-priority = ##f
2392 % Turn off collision avoidance
2393 \once \override TextScript #'outside-staff-priority = ##f
2394 \textLengthOn % and turn on textLengthOn
2395 c,,2^"Long Text " % Spaces at end are honored
2402 @cindex Verändern der Positionierung von Dynamikzeichen
2403 @cindex Dynamikzeichen: Positionierung verändern
2405 Dynamikbezeichnung wird üblicherweise unter dem System
2406 gesetzt, kann aber auch nach oben mit dem Befehl
2407 @code{dynamicUp} gezwungen werden. Die Bezeichnung
2408 wird vertikal relativ zu der Note positioniert, an die sie angefügt
2409 wurde. Sie wird vertikal variabel gesetzt in Bezug zu
2410 Innersystemobjekten wie Bögen oder Taktnummern. Damit
2411 können oft recht gute Resultate erreicht werden, wie im
2414 @lilypond[quote,fragment,ragged-right,verbatim,relative=1]
2419 bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! |
2420 ees,2.~\)\mf ees4 r8 |
2423 Wenn aber Noten und Dynamikzeichen sehr dicht beieinander
2424 stehen, positioniert die automatische Kollisionsvermeidung
2425 später kommende Dynamikzeichen weiter weg, was allerdings
2426 nicht immer die beste Möglichkeit ist, wie in dem folgenden,
2427 etwas gewollten Beispiel zu sehen ist:
2429 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2435 Wenn eine ähnliche Situation in @qq{echter} Musik auftaucht,
2436 kann es nötig sein, die Noten etwas zu spreizen, damit die
2437 Dynamikzeichen alle auf der selben vertikalen Position
2438 gesetzt werden können. Dieses Verhalten war im Falle von
2439 Textbeschriftungen möglich mit dem @code{\textLengthOn}-Befehl,
2440 aber es gibt keinen entsprechenden Befehl für Dynamik. Wir
2441 müssen also unsere eigenen Befehle mit @code{\override}
2445 @subheading Verändern der Größe von grobs
2447 @cindex Grob, Größenveränderung
2448 @cindex Größenveränderung von grobs
2450 Zuallererst müssen wir lernen, wie die Größe von Grobs verändert
2451 wird. Alle Grobs besitzen einen Referenzpunkt, der
2452 benutzt wird, um ihre Position in Relation zu ihnen übergeordneten
2453 Objekten zu bestimmen. Dieser Punkt innerhalb des Grobs wird dann
2454 auf einer horizontalen Position (@code{X-offset}) und einer
2455 vertikalen Position (@code{Y-offset}) ausgerichtet, immer bezüglich
2456 des übergeordneten Objektes. Eine horizontale Strecke wird
2457 durch ein Zahlenpaar angegeben (@code{X-extent}), welche
2458 die linke und rechte Grenze relativ zum übergeordneten Objekt
2459 bezeichnen. Die vertikale Strecke wir genauso durch ein
2460 Zahlenpaar (@code{Y-extent}) definiert. Diese Eigenschaften
2461 gehören zu allen Grobs, die das
2462 @code{grob-interface} unterstützen.
2464 @cindex @code{extra-spacing-width}
2466 Standardmäßig haben Außersystemobjekte eine Länge von Null,
2467 so dass sie sich in horizontaler Richtung überlappen können. Das
2468 geschieht, indem dem linken Rand Unendlich zugewiesen wird
2469 und dem rechten Rand minus Undendlich (der Code der
2470 @code{extra-spacing-width}-(zusätzliche Positionierungslänge)-Eigenschaft
2471 lautet: @code{'(+inf.0 . -inf.0)}).
2472 Damit sich diese Objekte also horizontal nicht überschneiden, muss
2473 der Wert von @code{extra-spacing-width} auf
2474 @code{'(0 . 0)} gesetzt werden, sodass die wirkliche Länge eines
2475 Objektes zur Geltung kommt. Mit diesem Befehl wird das für
2476 Dynamik-Zeichen erledigt:
2479 \override DynamicText #'extra-spacing-width = #'(0 . 0)
2483 Schauen wir uns an, wie es mit dem vorigen Beispiel funktioniert:
2485 @cindex DynamicText, Beispiel zur Veränderung
2486 @cindex extra-spacing-width-Eigenschaft, Beispiel
2488 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2490 \override DynamicText #'extra-spacing-width = #'(0 . 0)
2495 Damit werden die Dynamik-Zeichen also wirklich nebeneinander
2496 gesetzt, aber es gibt noch zwei Probleme. Die Zeichen sollten
2497 etwas weiter außeinander stehen und es wäre gut, wenn sie alle
2498 den gleichen Abstand zum System hätte. Das erste Problem ist
2499 einfach behoben. Anstatt der @code{extra-spacing-width}-Eigenschaft
2500 Null zuzuweisen, können wir auch einen etwas größeren Wert
2501 wählen. Die Einheit wird gemessen in dem Abstand zwischen zwei
2502 Notenlinien, es scheint also gut, den rechten und linken
2503 Rand eine halbe Einheit zu vergrößern:
2505 @cindex DynamicText, Beispiel zur Veränderung
2506 @cindex extra-spacing-width-Eigenschaft, Beispiel
2508 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2510 % Extend width by 1 staff space
2511 \override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
2516 Das sieht schon besser aus, aber es wäre noch besser, wenn die
2517 Dynamik-Zeichen alle an einer Linie ausgerichtet wären, anstatt
2518 höher und tiefer zu sitzen. Das kann mit der
2519 @code{staff-padding}-Eigenschaft erreicht werden,
2520 die wir uns im folgenden Abschnitt genauer anschauen werden.
2524 @node Kollision von Objekten
2525 @section Kollision von Objekten
2526 @translationof Collisions of objects
2529 * Verschieben von Objekten::
2530 * Überlappende Notation in Ordnung bringen::
2531 * Beispiele aus dem Leben::
2534 @node Verschieben von Objekten
2535 @subsection Verschieben von Objekten
2536 @translationof Moving objects
2538 @cindex Verschieben von überschneidenden Objekten
2539 @cindex Verschieben von Zusammenstößen
2540 @cindex Zusammenstöße vermeiden
2541 @cindex Objekte, verschieben von Zusammestößen
2542 @cindex Vermeiden von Zusammenstößen
2544 Es wird vielleicht eine Überraschung sein, aber LilyPond ist nicht
2545 perfekt. Einige Notationselemente können sich überschneiden. Das
2546 ist nicht schön, aber zum Glück sehr selten. Normalerweise müssen
2547 die Objekte zur Klarheit oder aus ästhetischen Gründen verschoben
2548 werden -- sie könnten besser aussehen, wenn sie etwas zusätzlichen
2551 Es gibt im Grunde drei Herangehensweisen, überlappende Notation
2552 zu verbessern. Man sollte sie in der folgenden Reihenfolge
2557 Die @strong{Richtung} eines der überlappenden Objekte kann
2558 geändert werden, indem die vordefinierten Befehle für
2559 Innersystemobjekte verwendet werden, wie beschrieben in
2560 @ref{within-staff (Objekte innerhalb des Notensystems)}. Hälse, Bögen, Balken, Dynamik-Zeichen
2561 und Triolen können auf diese Weise einfach umgeordnet
2562 werden. Beschränkt ist diese Methode insofern, als es nur
2563 zwei Möglichkeiten zur Veränderung gibt: oben oder unten.
2566 Die @strong{Objekteigenschaft}, die LilyPond benutzt um die
2567 Layout-Objekte zu platzieren, können mit dem
2568 @code{\override}-Befehl positioniert werden. Die Vorteile
2569 von Änderungen dieser Art sind a) dass einige Objekte
2570 automatisch verschoben werden, wenn es nötig ist Platz zu
2571 schaffen und b) ein einziges @code{\override} sich auf
2572 alle Fälle eines Objekttyps bezieht. Zu diesen Eigenschaften
2578 @code{direction} (Richtung)
2580 Das wurde schon detailliert behandelt, siehe
2581 @ref{within-staff (Objekte innerhalb des Notensystems)}.
2584 @code{padding}, @code{left-padding},
2585 @code{right-padding}, @code{staff-padding} (Verschiebung)
2587 @cindex left-padding-Eigenschaft
2588 @cindex Padding-Eigenschaft
2589 @cindex right-padding-Eigenschaft
2590 @cindex staff-padding-Eigenschaft
2591 @cindex Verschieben (padding)
2592 @cindex Füllung (padding)
2593 @cindex padding (Füllung)
2595 Wenn ein Objekt platziert wird, bestimmt der Wert seiner
2596 @code{padding}-(Füllungs)-Eigenschaft die Größe des
2597 Abstandes, der zwischen dem Objekt selber und dem
2598 Objekt, relativ zu welchem es positioniert wird, gelassen
2599 werden muss. Dabei zählt der @code{padding}-Wert
2600 des Objektes, das platziert werden soll, der @code{padding}-Wert
2601 des Objektes, das schon gesetzt wurde, wird hingegegen
2602 ignoriert. Abstände mit @code{padding} können zu
2603 allen Objekten hinzugefügt werden, die das
2604 @code{side-position-interface} unterstützen.
2606 Anstelle von @code{padding} wird die Position von
2607 Versetzungszeichengruppen durch die Eigenschaften
2608 @code{left-padding} und @code{right-padding} bestimmt.
2609 Diese Eigenschaften werden im
2610 @code{AccidentalPlacement}-(Versetzungszeichen-Positionierungs)-Objekt
2611 gefunden, das sich innerhalb des @strong{Staff}-Kontexts
2612 befindet. Während des Notensatzes werden die Notenköpfe
2613 zuerst gesetzt und dann die Versetzungszeichen, wenn denn
2614 welche gesetzt werden, durch die @code{right-padding}-Eigenschaft
2615 auf die linke Seite der Notenköpfe positioniert, um die Entfernung
2616 von den Notenköpfen zu bestimmen. Also nur die
2617 @code{right-padding}-(Verschiebung nach rechts)-Eigenschaft des
2618 @code{AccidentalPlacement}-Objekts hat Einfluss auf die
2619 Positionierung der Versetzungszeichen.
2621 Die @code{staff-padding}-(Verschiebung zum System)-Eigenschaft
2622 ist sehr ähnlich wie die @code{padding}-Eigenschaft:
2623 @code{padding} bestimmt den Minimalabstand zwischen
2624 einem Objekt, das das @code{side-position-interface}
2625 unterstützt, und dem nächsten anderen Objekt (normalerweise
2626 die Note oder Notenlinie); @code{staff-padding} dagegen
2627 wirkt nur auf Objekte die immer außerhalb des Notensystems
2628 sind -- damit wird der minimale Abstand bestimmt, der
2629 zwischen dem Objekt und dem Notensystem gelassen werden
2630 soll. @code{staff-padding} hat also @strong{keinen Einfluss}
2631 auf Objekte, die relativ zu einer Note positioniert werden, sondern
2632 nur auf solche, die zum System relativ stehen. Wenn es mit einem
2633 anderen Objekt eingesetzt wird, erhält man keine Fehlermeldung, aber
2634 der Befehl hat auch keine Auswirkungen.
2636 Um herauszufinden, welche @code{padding}-Eigenschaft für
2637 das bestimmte Objekt nötig, ist, das Sie verschieben wollen,
2638 müssen Sie in der IR nach den Objekt-Eigenschaften schauen.
2639 Dabei sollten Sie bedenken, dass sich die @code{padding}-Eigenschaften
2640 nicht unbedingt in dem Objekt selber befinden, schauen Sie
2641 also auch in Objekten nach, die offensichtlich Ähnlichkeiten
2644 Alle @code{padding}-Werte werden in Notenlinienabständen
2645 gemessen. Für die meisten Objekte ist der Wert ungefähr auf
2646 1.0 oder weniger gesetzt (das variiert von Objekt zu Objekt).
2647 Der Wert kann geändert werden, wenn ein größerer (oder
2648 kleinerer) Abstand gewünscht wird.
2651 @code{self-alignment-X} (Selbstpositionierung)
2653 @cindex self-alignment-X-Eigenschaft
2654 @cindex Selbstpositionierung von Objekten
2655 @cindex Ausrichtung von Objekten
2657 Diese Eigenschaft kann benutzt werden, um ein Objekt
2658 nach links, rechts oder zentriert an dem Referenzpunkt des Objekts
2659 auszurichten, an das es verknüpft ist. Es kann bei allen
2660 Objekten benutzt werden, die das @code{self-alignment-interface}
2661 unterstützen. Das sind üblicherweise Objekte, die Text
2662 enthalten. Die möglichen Werte der Eigenschaft sind @code{LEFT},
2663 @code{RIGHT} oder @code{CENTER}. Alternativ kann ein
2664 numerischer Wert zwischen @code{-1} und @code{+1}
2665 bestimmt werden: @code{-1} heißt linksbündig, @code{+1}
2666 rechtsbündig und Zahlen dazwischen bewegen den Text
2667 schrittweise von links nach rechts. Zahlen größer als
2668 @code{1} können angegeben werdne, um den Text
2669 noch weiter nach links zu bewegen, oder weniger als @code{-1},
2670 um ihn weiter nach rechts zu schieben. Eine Änderung
2671 um @code{1} des Wertes entspricht einer Bewegung um
2672 die halbe Textbreite.
2675 @code{extra-spacing-width} (zusätzliche Breite)
2677 @cindex extra-spacing-width-Eigenschaft
2679 Diese Eigenschaft steht für alle Objekte zur Verfügung, die
2680 das @code{item-interface} unterstützen. Es braucht zwei
2681 Zahlen als Argument, die erste wird zur rechten Ausdehnung,
2682 die zweite zur linken Ausdehnung hinzugerechnet. Negative
2683 Zahlen verschieben die Ausdehnung nach rechts, positive nach
2684 links, um also ein Objekt zu verbreitern, muss die erste
2685 Zahl negativ und die zweite positiv sein. Allerdings beachten
2686 nicht alle Objekte beide Zahlen. Das
2687 @code{accidental}-(Versetzungszeichen)-Objekt etwa beachtet
2688 nur erste Zahl für die linke Ausdehnung.
2691 @code{staff-position} (Notensystempositionierung)
2693 @cindex staff-position-Eigenschaft
2695 @code{staff-position} ist eine Eigenschaft des
2696 @code{staff-symbol-referencer-interface}, die von Objekten unterstützt
2697 wird, die relativ zum Notensystem (engl. staff) positioniert werden.
2698 Hiermit wird die vertikale Position eines Objekts relativ zur
2699 Mittellinie des Systems in halben Notenlinienabständen angegeben.
2700 Das ist sehr nützlich, um Zusammenstöße zwischen Layout-Objekten
2701 wie Ganztaktpausen, Bögen und Noten in verschiedenen Stimmen
2705 @code{force-hshift} (vertikale Verschiebung erzwingen)
2707 @cindex force-hshift-Eigenschaft
2709 Eng beeinander stehende Noten in einem Akkord oder Noten, die zum
2710 gleichen Zeitpunkt in unterschiedlichen Stimmen stehen, werden
2711 in zwei oder manchmal auch mehr Kolumnen gesetzt, um Kollisionen
2712 zu umgehen. Diese Kolumnen werden Notenkolumnen genannt;
2713 ein @code{NoteColumn}-Objekt wird erstellt um die Noten in den
2716 Die @code{force-hshift}-(erzwinge horizontale Verschiebung)-Eigenschaft
2717 ist eine Eigenschaft von @code{NoteColumn} (bzw. vom
2718 @code{note-column-interface}). Eine Veränderung dieser Eigenschaft
2719 macht es möglich, eine Notenkolumne zu verschieben, dabei gilt als
2720 Einheit die Breite einer Kolumne, also die Breite des Notenkopfes der
2721 ersten Stimme. Diese Eigenschaft kann in Situationen benutzt werden,
2722 in denen die normalen @code{\shiftOn}-Befehle (siehe auch
2723 @ref{Stimmen explizit beginnen}) das Problem nicht beseitigen.
2724 Diese Eigenschaft ist besser in solchen Fällen zu verwenden als die
2725 @code{extra-offset}-Eigenschaft, weil man die richtige Entfernung nicht
2726 in Notenlinienabständen ausrechnen muss. Wenn eine Note in eine
2727 Notenkolumne oder aus ihr heraus geschoben wird, werden auch andere
2728 Funktionen beeinflusst, wie etwa die Verschmelzung von Notenköpfen.
2733 Zu guter Letzt, wenn alles andere nicht funktioniert, können Objekte auch
2734 manuell positioniert werden, entweder vertikal in Bezug auf die
2735 Mittellinie des Systems, oder indem sie einen beliebigen Abstand weit
2736 auf eine neue Position verschoben werden. Der Nachteil ist, dass die
2737 richtigen Werte für eine gute Position manuell ausprobiert werden müssen,
2738 meistens durch Herantasten an den richtigen Wert, und das für jedes
2739 einzelne Objekt extra. Und weil diese Verschiebungen erst vorgenommen
2740 werden, wenn LilyPond alle anderen Objekte gesetzt hat, ist man als
2741 Notensetzer selber dafür verantwortlich, ob es Zusammenstöße gibt.
2742 Am schwerwiegendsten ist aber die Tatsache, dass die
2743 Verschiebungskoordinaten wahrscheinlich neu errechnent oder
2744 ausprobiert werden müssen, wenn sich an den Noten und deren
2745 Layout später irgend etwas ändert. Die Eigenschaften, die für diese
2746 Arte der manuellen Verschiebung verwendet werden können, sind:
2749 @item extra-offset (zusätzlicher Abstand)
2751 @cindex extra-offset-Eigenschaft
2753 Diese Eigenschaft gehört zu jedem Layout-Objekt, das das
2754 @code{grob-interface} unterstützt. Sie braucht ein Zahlenpaar,
2755 das die exakte Verschiebung in horizontaler und vertikaler Richtung
2756 bezeichnet. Negative Zahlen verschieben das Objekt nach links oder
2757 unten. Die Einheit sind Notenlinienabstände. Die zusätzliche
2758 Positionierung wird vorgenommen, nachdem alle anderen Objekte
2759 platziert sind, weshalb ein Objekt irgendwohin verschoben werden
2760 kann, ohne den restlichen Satz zu beeinflussen.
2762 @item positions (Position)
2764 @cindex positions-Eigenschaft
2766 Diese Eigenschaft ist am sinnvollsten, um die Steigung und die
2767 Höhe von Balken, Bögen und Triolenklammern anzupassen.
2768 Sie braucht ein Zahlenpaar, das die Position des rechten und linken
2769 Endes relativ zur Mittellinie des Notensystems bestimmt. Die
2770 Einheit sind Notenlinienabstände. Bögen allerdings können nicht
2771 beliebig weit weg positioniert werden. LilyPond erstellt zunächst eine
2772 Liste an möglichen Positionen für den Bogen und findet normalerweise
2773 die Version, die @qq{am besten aussieht}. Wenn die
2774 @code{positions}-Eigenschaft verändert worden ist, wird der
2775 Bogen aus der Liste gewählt, der der gewünschten Position am
2781 Ein bestimmtes Objekt hat vielleicht nicht alle dieser Eigenschaften.
2782 Darum ist es nötig, in der IR nachzuschlagen, welche Eigenschaften
2783 ein bestimmtes Objekt unterstützt.
2785 Hier ist eine Liste an Objekten, die am wahrscheinlichsten an einer
2786 Kollision beteiligt sind, daneben findet sich die Bezeichnung des
2787 Objektes, mit der Sie es in der IR finden, um zu bestimmen,
2788 welche Eigenschaften benutzt werden können, um es zu verschieben.
2790 @multitable @columnfractions .5 .5
2791 @headitem Objekttyp @tab Objektbezeichnung
2792 @item Articulationszeichen @tab @code{Script}
2793 @item Balken @tab @code{Beam}
2794 @item Dynamikzeichen (vertikal) @tab @code{DynamicLineSpanner}
2795 @item Dynamikzeichen (horizontal) @tab @code{DynamicText}
2796 @item Fingersatz @tab @code{Fingering}
2797 @item Übungs-/Textmarken @tab @code{RehearsalMark}
2798 @item Legatobögen @tab @code{Slur}
2799 @item Text z. B. @code{^"text"} @tab @code{TextScript}
2800 @item Bindebögen @tab @code{Tie}
2801 @item N-tolen @tab @code{TupletBracket}
2805 @node Überlappende Notation in Ordnung bringen
2806 @subsection Überlappende Notation in Ordnung bringen
2807 @translationof Fixing overlapping notation
2809 Hier soll nun gezeigt werden, wie die Eigenschaften, die im
2810 vorigen Abschnitt vorgestellt wurden, bei der Problemlösung
2811 mit sich überschneidenden Notationselementen eingesetzt
2814 @subheading padding (Fülleigenschafte)
2816 @cindex padding (Verschiebungs-Eigenschaft)
2817 @cindex Überschneidende Notation korrigieren
2818 @cindex Korrigieren von überschneidender Notation
2820 Die @code{padding}-(Verschiebungs-)Eigenschaft kann benutzt
2821 werden, um den Abstand zwischen Symbolen zu vergößern (oder
2822 zu verkleinern), die über oder unter den Noten gesetzt werden.
2824 @cindex Script, Beispiel zur Veränderung
2825 @cindex Verschiebungs-Eigenschaft, Beispiel
2826 @cindex padding (Verschiebuns-Eigenschaft), Beispiel
2828 @lilypond[quote,fragment,relative=1,verbatim]
2830 \override Script #'padding = #3
2834 @cindex MetronomMark, Beispiel zur Veränderung
2835 @cindex Verschiebungs-Eigenschaft, Beispiel
2836 @cindex padding (Verschiebuns-Eigenschaft), Beispiel
2838 @lilypond[quote,fragment,relative=1,verbatim]
2839 % This will not work, see below:
2840 \override MetronomeMark #'padding = #3
2844 \override Score.MetronomeMark #'padding = #3
2849 Im zweiten Beispiel können Sie sehen, wie wichtig es ist den richtigen
2850 Kontext anzugeben. Weil das @code{MetronomeMark}-Objekt
2851 sich im @code{Score}-Kontext befindet, werden Eigenschaftsänderungen
2852 im @code{Voice}-Kontext einfach ignoriert. Für mehr Einzelheiten siehe
2853 @ruser{Eignschaften verändern}.
2855 Wenn die @code{padding}-Eigenschaft eines Objektes erhöht wird, das
2856 sich in einem Stapel von Objekten befindet, die nach ihrer
2857 Außersystempriorität (@code{outside-staff-priority}) positioniert werden,
2858 werden das Objekt und alle, die sich außerhalb davon befinden,
2859 entsprechend verschoben.
2861 @subheading left-padding (Verschieben nach rechts) und right-padding (Verschieben nach links)
2863 @cindex left-padding-Eigenschaft (Verschiebung nach links)
2864 @cindex Verschiebung nach rechts oder links
2865 @cindex right-padding-Eigenschaft (Verschiebung nach rechts)
2867 Die @code{right-padding}-Eigenschaft wirkt sich auf den Abstand
2868 zwischen einem Versetzungszeichen und der Note, auf das sie sich
2869 bezieht, aus. Sie wird nicht sehr oft benötigt, aber die
2870 Standardanordnung kann für einige spezielle Versetzungszeichen-Glyphen
2871 oder Kombinationsglyphen,
2872 wie sie für Mikrotonale Musik benutzt werden, falsch sein. Derartige
2873 Glyphen müssen notiert werden, indem man den Stencil des
2874 Versetzungszeichens mit einer Textbeschriftung (Markup) ersetzt,
2875 wie im folgenden Beispiel:
2877 @cindex Versetzungszeichen, Beispiel zur Veränderung
2878 @cindex Accidental, Beispiel zur Veränderung
2879 @cindex Text-Eigenschaft, Beispiel
2880 @cindex stencil-Eigenschaft, Beispiel
2881 @cindex AccidentalPlacement, Beispiel zur Veränderung
2882 @cindex right-padding-Eigenschaft, Beispiel
2883 @cindex Verschiebung nach rechts (rigth-padding), Beispiel
2885 @lilypond[quote,ragged-right,verbatim]
2886 sesquisharp = \markup { \sesquisharp }
2889 % This prints a sesquisharp but the spacing is too small
2890 \once \override Accidental
2891 #'stencil = #ly:text-interface::print
2892 \once \override Accidental #'text = #sesquisharp
2894 % This improves the spacing
2895 \once \override Score.AccidentalPlacement #'right-padding = #0.6
2896 \once \override Accidental
2897 #'stencil = #ly:text-interface::print
2898 \once \override Accidental #'text = #sesquisharp
2904 Dazu ist aber ein @code{\override}-Befehl für den Stencil des
2905 Versetzungszeichens nötig, der bisher nicht behandelt wurde.
2906 Der Typ des Stencils muss eine Prozedur sein, die hier geändert
2907 wurde, um den Inhalt der @code{text}-Eigenschaft des
2908 @code{Accidental} (Versetzungszeichen)-Objekts zu setzen. Die
2909 @code{text}-Eigenschaft wiederum wird als @code{sesquisharp}-Glyph
2910 definiert. Dieser Glyph wird dann weiter vom Notenkopf entfernt
2911 durch die Veränderung von @code{right-padding} mit einem
2912 @code{\override}-Befehl.
2914 @subheading staff-padding (Systemfüllungseigenschaft)
2916 @cindex staff-padding-Eigenschaft
2917 @cindex Objekte an der Grundlinie ausrichten
2918 @cindex Ausrichten von Objekten an der Grundlinie
2920 @code{staff-padding} (Verschiebung zum Notensystem) kann
2921 verwendet werden um Objekte wie Dynamikzeichen an einer
2922 Grundlinie auf einer bestimmten Höhe über dem System
2923 auszurichten, sodass sie nicht von der Position der Note abhängen,
2924 an die sie angehängt sind. Diese Verschiebung ist keine Eigenschaft
2925 von @code{DynamicText}, sondern von @code{DynamicLineSpanner}.
2926 Das liegt daran, dass die Grundlinie sich gleicherweise auf
2927 @strong{alle} Dynamikzeichen beziehen soll, also auch auf die,
2928 die als Strecker erstellt wurden. Hier also die Lösung, die Dynamikzeichen
2929 aus dem Beispiel des vorigen Abschnitts auszurichten:
2931 @cindex DynamikText, Beispiel zur Veränderung
2932 @cindex extra-spacing-width-Eigenschaft, Beispiel
2933 @cindex DynamicLineSpanner, Beispiel zur Veränderung
2934 @cindex staff-padding-Eigenschaft, Beispiel
2936 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
2938 % Extend width by 1 unit
2939 \override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
2940 % Align dynamics to a base line 2 units above staff
2941 \override DynamicLineSpanner #'staff-padding = #2
2946 @subheading self-alignment-X (Selbstausrichtung-X-Eigenschaft)
2948 @cindex self-alignment-X-Eigenschaft
2950 Das nächste Beispiel zeigt, wie man den Zusammenstoß
2951 einer Fingersatzbezeichnung mit einem Notenhals
2952 verhindern kann, indem die rechte Ecke an dem
2953 Referenzpunkt der abhängigen Note angeordnet wird:
2955 @cindex StringNumber, Beispiel zur Veränderung
2957 @lilypond[quote,fragment,ragged-right,verbatim,relative=3]
2960 \once \override StringNumber #'self-alignment-X = #RIGHT
2965 @subheading staff-position (Position innerhalb des Systems)
2967 @cindex staff-position-Eigenschaft
2968 @cindex Notensystem-Position-Eigenschaft
2969 @cindex Kollision von Objekten im System
2970 @cindex Zusammenstöße von Objekten im System
2972 Vieltaktpausen in einer Stimmen können mit Noten in anderen
2973 Stimmen kollidieren. Da diese Pausen zentriert zwischen den
2974 Taktlinien gesetzt werden, würde es für LilyPond eine recht große
2975 Anstrengung bedeuten herauszufinden, welche Noten mit ihnen
2976 zusammenstoßen könnten, denn alle Kollisionsvermeidung
2977 für Noten und Pausen funktioniert nur für Noten bzw. Pausen, die
2978 zur selben Zeit auftreten. Hier ein typisches Beispiel für eine
2979 Kollision dieser Art:
2981 @lilypond[quote,verbatim,fragment,ragged-right, relative=1]
2982 << {c c c c} \\ {R1} >>
2985 Die beste Lösung ist es, die Ganztaktpause nach unten zu
2986 schieben, denn die Pause ist in der zweiten Stimme. Per
2987 Standardeinstellung für die zweite Stimme (@code{\voiceTwo},
2988 also die zweite Stimme in der
2989 @code{<<@{...@} \\ @{...@}>>}-Konstruktion) wird die
2990 Position auf dem System (@code{staff-position}) auf -4
2991 für @code{MultiMeasureRest}, in unserem Beispiel muss
2992 es also bspw. auf die Position @code{-8} gesetzt werden,
2993 d.h. vier halbe Notenlinienabstände weiter nach unten:
2995 @cindex MultiMeasureRest, Beispiel zur Veränderung
2996 @cindex Ganztaktpausen, Beispiel zur Veränderung
2997 @cindex staff-position-Eigenschaft, Beispiel
2999 @lilypond[quote,verbatim,fragment,ragged-right, relative=1]
3003 \override MultiMeasureRest #'staff-position = #-8
3008 Das ist besser, als etwa @code{extra-offset} zu benutzen, denn
3009 in unserem Fall wird die Hilfslinie der Pause automatisch gesetzt.
3012 @subheading extra-offset (Genaues Positionieren)
3014 @cindex extra-offset-Eigenschaft
3015 @cindex Zusätzlicher Abstand, Positionierung
3016 @cindex Positionierung von Objekten
3017 @cindex Objekte, Positionierung
3019 Die @code{extra-offset}-Eigenschaft bietet vollständige Kontrolle
3020 über die Positionierung von Objekten in horizontaler und vertikaler
3023 Im Beispiel unten ist das zweite Fingersatzzeichen (@code{Fingering}) etwas nach
3024 links und 1,8 Notenlinienabstände nach unten verschoben:
3026 @cindex Fingersatz, Beispiel zur Veränderung
3027 @cindex extra-offset-Eigenschaft, Beispiel
3029 @lilypond[quote,fragment,relative=1,verbatim]
3032 \once \override Fingering
3033 #'extra-offset = #'(-0.3 . -1.8)
3038 @subheading Ausrichtungseigenschaft
3040 @cindex positions-Eigenschaft
3041 @cindex Kontrolle über Triolen, Bögen und Balken manuell
3042 @cindex manuelle Kontrolle über Triolen, Bögen, Balken
3043 @cindex Balken, manuelle Kontrolle
3044 @cindex Bögen, manuelle Kontrolle
3045 @cindex Legatobögen, manuelle Kontrolle
3046 @cindex Phrasierungsbögen, manuelle Kontrolle
3047 @cindex Triollen-Klammer, manuelle Kontrolle
3049 Die @code{positions}-Eigenschaft erlaubt die Kontrolle von Position und
3050 Steigung von Balken, Legato- und Phrasierungsbögen sowie Triolenklammern.
3051 Hier ein Beispiel, in der ein unschöner Phrasierungsbogen auftritt, weil
3052 er den Bogen des Vorschlags vermeidet:
3054 @lilypond[quote,verbatim,fragment,ragged-right,relative=1]
3055 r4 \acciaccatura e8\( d8 c ~c d c d\)
3059 Man könnte einfach den Phrasierungsbogen oberhalb der Noten setzen, und
3060 das wäre auch die beste Lösung:
3062 @cindex Phrasierungsbogen, Beispiel zur Veränderung
3063 @cindex positions-Eigenschaft, Beispiel
3064 @cindex Positionierung, Beispiel
3066 @lilypond[quote,verbatim,fragment,ragged-right,relative=1]
3069 \acciaccatura e8\( d8 c ~c d c d\)
3073 aber wenn es einen Grund geben sollte, warum das nicht geht, könnte
3074 man das linke Ende des Phrasierungsbogens etwas nach unten verschieben,
3075 indem man die @code{positions}-Eigenschaft einsetzt. Damit
3076 verschwindet auch die etwas unschöne Form:
3078 @lilypond[quote,verbatim,fragment,ragged-right,relative=1]
3080 \once \override PhrasingSlur #'positions = #'(-4 . -3)
3082 e8\( d8 c ~c d c d\)
3085 Hier noch ein weiteres Beispiel aus der Einleitung von Chopins
3086 Prelude Op. 28 Nr. 2, das untere System. Wie zu sehen ist,
3087 stößt der Balken mit den oberen Noten zusammen:
3089 @lilypond[quote,verbatim,fragment,ragged-right]
3092 << {b,8 ais, b, g,} \\ {e, g e, g} >>
3093 << {b,8 ais, b, g,} \\ {e, g e, g} >>
3098 Das kann manuell gelöst werden, indem beide Enden des Balkens
3099 von ihrer Position 2 Notenlinienabstände über der Mittellinie
3100 hochgeschoben werden, etwa auf 3:
3102 @cindex Balken, Beispiel zur Veränderung
3103 @cindex positions-Eigenschaft, Beispiel
3104 @cindex Positionierung, Beispiel
3106 @lilypond[quote,verbatim,fragment,ragged-right]
3110 \override Beam #'positions = #'(3 . 3)
3115 << {b,8 ais, b, g,} \\ {e, g e, g} >>
3120 Hier ist zu beobachten, dass die Veränderung sich auch auf die
3121 weiteren Achtelbalken der ersten Stimme auwirkt, während sie keine
3122 Auswirkung auf die Balken der zweiten Stimme hat.
3124 @subheading force-hshift (vertikale Verschiebunseigenschaft)
3126 @cindex force-hshift-Eigenschaft
3127 @cindex Vertikale Verschiebung erzwingen
3129 @c FIXME: formatting stuff (ie not important right now IMO)
3130 @c @a nchor Chopin finally corrected TODOgp
3132 An diesem Punkt können wir den letzten Feinschliff an unserem
3133 Chopin-Beispiel vornhemen, das wir behandelt haben in
3134 @ref{Ich höre Stimmen}. Wir hatten es in folgende Form
3137 @lilypond[quote,verbatim,fragment,ragged-right]
3138 \new Staff \relative c'' {
3141 { c2 aes4. bes8 } \\
3153 Die unteren zwei Noten des ersten Akkords (also diein der
3154 dritten Stimme) sollten nicht aus der Notenkolumne der
3155 oberen zwei Noten weggeschoben werden. Um das zu
3156 korrigieren, setzen wir @code{force-hshift}, das eine
3158 @code{NoteColumn} ist, für diese Noten auf Null.
3159 Die untere Note des zweiten Akkordes wird am besten
3160 direkt rechts von den oberen Noten gesetzt. Das erreichen
3161 wir, indem wir @code{force-hshift} für diese Note auf
3162 0.5 setzen, also eine halbe Notenkopfbreite nach rechts von
3163 der Kolumne der oberen Noten aus.
3165 Hier das Endergebnis:
3167 @cindex Notenkolumne, Beispiel zur Veränderung
3168 @cindex force-hshift-Eigenschaft, Beispiel
3169 @cindex vertikale Verschiebung, Beispiel
3171 @lilypond[quote,verbatim,fragment,ragged-right]
3172 \new Staff \relative c'' {
3175 { c2 aes4. bes8 } \\
3178 \once \override NoteColumn #'force-hshift = #0 <ees c>2
3179 \once \override NoteColumn #'force-hshift = #0.5 des2
3187 @node Beispiele aus dem Leben
3188 @subsection Beispiele aus dem Leben
3189 @translationof Real music example
3191 Das Kapitel zu Optimierungen soll mit einem komplizierten Beispiel
3192 beendet werden, in dem verschiedene Optimierungen vorgenommen
3193 werden müssen, bis das Ergebnis gut ausssieht. Das Beispiel wurde
3194 ganz bewusst gewählt um die Benutzung der Notationsreferenz
3195 zu zeigen, wenn ungewöhnliche Notationsprobleme gelöst werden
3196 müssen. Es ist nicht repräsentativ für normale Notationsprojekte,
3197 lassen Sie sich also nicht durch dieses Beispiel entmutigen! Zum
3198 Glück sind Probleme wie die hier gezeigten nicht sehr häufig.
3200 Das Beispiel stammt aus Chopins Premiére Ballade, Op. 23, Takte
3201 6--9, der Übergang vom Lento der Einleitung zum Moderato.
3202 Hier zunächst der Satz, wie er aussehen soll, allerdings ohne
3203 Dynamik, Fingersatz und Pedalbezeichnung, um das Beispiel nicht
3204 zu kompliziert zu machen.
3206 @c This example should not be indexed
3207 @lilypond[quote,ragged-right]
3208 rhMusic = \relative c'' {
3211 \once \override Tie #'staff-position = #3.5
3215 \mergeDifferentlyHeadedOn
3216 \mergeDifferentlyDottedOn
3217 bes2.^\markup {\bold "Moderato"} r8
3219 {c,8[ d fis bes a] | }
3221 % Reposition the c2 to the right of the merged note
3222 {c,8~ \once \override NoteColumn #'force-hshift = #1.0
3223 % Move the c2 out of the main note column so the merge will work
3226 % Stem on the d2 must be down to permit merging
3227 {s8 \stemDown \once \override Stem #'transparent = ##t d2}
3231 \mergeDifferentlyHeadedOff
3232 \mergeDifferentlyDottedOff
3236 lhMusic = \relative c' {
3238 <d g, d>1)\arpeggio |
3245 \new Staff = "RH" <<
3249 \new Staff = "LH" <<
3258 Die erste Überlegung ist, dass das System für die rechte Hand
3259 im dritten Takt vier Stimmen braucht. Das sind die fünf
3260 Achtelnoten mit Balken, das übergebundene C, die Halbe D, die
3261 mit der Achtel D verschmolzen ist, und die punktierte Viertel
3262 Fis, die auch mit einer Achtelnote verschmolzen ist. Alles
3263 andere ist eine einzige Stimme, es ist also am einfachsten, die
3264 Stimmen nur zeitweise zu erstellen, wenn sie auftreten. Wenn
3265 Sie vergessen haben, wie man das anstellt, schauen Sie sich
3266 nochmal den Abschnitt @ref{Ich höre Stimmen} an. Wir
3267 wollen anfange, indem wir die Noten in zwei Variablen
3268 notieren und dann die Systemstruktur in einer
3269 @code{\score}-Umgebung erstellen. Das ist, was LilyPond
3272 @lilypond[quote,verbatim,ragged-right]
3273 rhMusic = \relative c'' {
3278 % Start polyphonic section of four voices
3280 {c,8 d fis bes a | }
3291 lhMusic = \relative c' {
3300 \new Staff = "RH" <<
3304 \new Staff = "LH" <<
3313 Alle Noten sind richtig, aber die Positionierung sehr
3314 verbesserungsbedürftig. Der Bindebogen stößt mit
3315 der veränderten Taktart zusammen, die Balkung im
3316 dritten Takt ist falsch, die Noten werden nicht
3317 verschmolzen und einige Notationselemente fehlen ganz.
3318 Behandeln wir zunächst die einfacheren Dinge. Der
3319 Balken kann durch eine manuelle Begrenzung einfach
3320 korrigiert werden, und auch der Legatobogen der linken
3321 Hand und der Phrasierungsbogen der rechten Hand
3322 sind schnell gesetzt, denn sie wurden schon in der
3323 Übung erklärt. Damit haben wir folgendes Notenbild:
3325 @lilypond[quote,verbatim,ragged-right]
3326 rhMusic = \relative c'' {
3331 % Start polyphonic section of four voices
3333 {c,8[ d fis bes a] | }
3344 lhMusic = \relative c' {
3353 \new Staff = "RH" <<
3357 \new Staff = "LH" <<
3366 Der erste Takt stimmt jetzt schon. Der zweite Takt enthält ein
3367 Arpeggio und wird mit einer doppelten Taktlinie beschlossen.
3368 Wie können wir diese notieren, denn sie sind im Handbuch zum
3369 Lernen nicht vorgekommen? Hier brauchen wir jetzt die
3370 Notationsreferenz. Ein Blick in den Index zeigt uns die
3371 Einträge für @qq{Arpeggio} und @qq{Taktlinien}: ein
3372 Arpeggio also erstellt man mit dem Befehl @code{\arpeggio}
3373 hinter einem Akkord und eine doppelte Taktlinie wird mit dem
3374 Befehl @code{\bar "||"} erstellt. Das ist einfach. Als nächstes
3375 muss der Zusammenstoß des Bindebogens mit der Taktartbezeichnung
3376 gelöst werden. Das geht am besten, indem wir den Bogen nach
3377 oben verschieben. Wie man Objekte verschiebt wurde schon
3378 behandelt in @ref{Verschieben von Objekten}, wo stand, dass Objekte
3380 relativ zum System positioniert werden, verschoben werden
3381 können, indem ihre @code{staff-position}-Eigenschaft
3382 geändert wird, die in halben Notenlienienabständen relativ
3383 zur Mittellinie angegeben wird. Dieser @code{\override}-Befehl
3384 also, direkt vor die erste übergebundene Note gestellt, verschiebt
3385 den Bindebogen (@code{tie}) 3,5 halbe Notenlinienabstände
3386 über die Mittellinie:
3388 @code{\once \override Tie #'staff-position = #3.5}
3390 Damit ist auch der zweite Takt vollständig:
3392 @lilypond[quote,verbatim,ragged-right]
3393 rhMusic = \relative c'' {
3395 \once \override Tie #'staff-position = #3.5
3400 % Start polyphonic section of four voices
3402 {c,8[ d fis bes a] | }
3413 lhMusic = \relative c' {
3415 <d g, d>1)\arpeggio |
3422 \new Staff = "RH" <<
3426 \new Staff = "LH" <<
3435 In Takt drei beginnt der Moderato-Abschnitt. In der
3436 Übung wurde behandelt, wie man fetten Text mit dem
3437 @code{\markup}-Befehl eingibt, es ist also einfach, das
3438 @qq{Moderato} hinzuzufügen. Wie aber werden Noten
3439 verschmolzen? Hier nehmen wir wieder die Notationsreferenz
3440 zu Hilfe. Die Suche nach @qq{Verschmelzen} (engl. merge)
3441 im Index führt uns zu den Befehlen um Noten mit
3442 unterschiedlichen Köpfen und unterschiedlichen Punkten
3443 zu verschmelzen in @ruser{Auflösung von Zusammenstößen}. In unserem
3444 Beispiel müssen sowohl unterschiedliche Köpfe also auch
3445 unterschiedliche Punktierung verschmolzen werden, wir
3446 brauchen also die Befehle
3449 \mergeDifferentlyHeadedOn
3450 \mergeDifferentlyDottedOn
3454 aus der Notationsreferenz, die wir an den Beginn unseres
3455 Abschnittes stellen und
3458 \mergeDifferentlyHeadedOff
3459 \mergeDifferentlyDottedOff
3463 um das Verhalten wieder auszuschalten. Das sieht so aus:
3465 @cindex Bindebogen, Beispiel zur Veränderung
3466 @cindex staff-position-Eigenschaft, Beispiel
3468 @lilypond[quote,verbatim,ragged-right]
3469 rhMusic = \relative c'' {
3471 \once \override Tie #'staff-position = #3.5
3475 bes2.^\markup {\bold "Moderato"} r8
3476 \mergeDifferentlyHeadedOn
3477 \mergeDifferentlyDottedOn
3478 % Start polyphonic section of four voices
3480 {c,8[ d fis bes a] | }
3488 \mergeDifferentlyHeadedOff
3489 \mergeDifferentlyDottedOff
3493 lhMusic = \relative c' {
3495 <d g, d>1)\arpeggio |
3502 \new Staff = "RH" <<
3506 \new Staff = "LH" <<
3515 Mit diesen Veränderungen wurden die beiden Fis-Noten
3516 verschmolzen, aber nicht die zwei Ds. Warum nicht? Die
3517 Antwort befindet sich im gleicher Abschnitt der Notationsreferenz:
3518 Noten, die verschmolzen werden, müssen Hälse in entgegengesetzte
3519 Richtungen aufweisen und zwei Noten können nicht verschmolzen
3520 werden, wenn eine dritte Noten in der gleichen Kolumne
3521 stört. In unserem Fall weisen beide Hälse nach oben und es
3522 befindet sich zur gleichen Zeit auch noch eine dritte Note, das C.
3523 Wie die Richtung von Hälsen geändert wird, wissen wir schon:
3524 mit @code{\stemDown}, und in der Notationsreferenz findet
3525 sich auch Information, wie das C verschoben werden kann: mit
3526 dem @code{\shift}-Befehl. Aber welcher von ihnen? Das C
3527 befindet sich in der zweiten Stimme, die @qq{shift off} hat,
3528 die zwei Ds sind in den Stimmen eins und drei, die @qq{shift
3529 off} bzw. @qq{shift on} haben. Das C muss also noch eine
3530 Stufe weiter verschoben werden mit @code{\shiftOnn}, damit
3531 es die Verschmelzung der Ds nicht stört. Das sieht jetzt so
3534 @lilypond[quote,verbatim,ragged-right]
3535 rhMusic = \relative c'' {
3537 \once \override Tie #'staff-position = #3.5
3541 bes2.^\markup {\bold "Moderato"} r8
3542 \mergeDifferentlyHeadedOn
3543 \mergeDifferentlyDottedOn
3544 % Start polyphonic section of four voices
3546 {c,8[ d fis bes a] | }
3548 % Move the c2 out of the main note column so the merge will work
3549 {c,8~ \shiftOnn c2 | }
3551 % Stem on the d2 must be down to permit merging
3552 {s8 \stemDown d2 | }
3556 \mergeDifferentlyHeadedOff
3557 \mergeDifferentlyDottedOff
3561 lhMusic = \relative c' {
3563 <d g, d>1)\arpeggio |
3570 \new Staff = "RH" <<
3574 \new Staff = "LH" <<
3583 Fast schon geschafft. Nur noch ein Problem ist übrig: Der Hals nach
3584 unten des verschmolzenen sollte nicht da sein, und das C sähe
3585 besser auf der rechten Seite des Ds aus. Beides können wir mit den
3586 gelernten Optimierungsmethoden erreichen. Den Hals machen
3587 wir durchsichtig und das C verschieben wir mit der
3588 @code{force-hshift}-Eigenschaft. Hier ist das Endergebnis:
3590 @cindex Notenkolumne, Beispiel zur Veränderung
3591 @cindex force-hshift-Eigenschaft, Beispiel
3592 @cindex Hals, Beispiel zur Veränderung
3593 @cindex Notenhals, Beispiel zur Veränderung
3594 @cindex transparent-Eigenschaft, Beispiel
3596 @lilypond[quote,verbatim,ragged-right]
3597 rhMusic = \relative c'' {
3600 \once \override Tie #'staff-position = #3.5
3604 bes2.^\markup {\bold "Moderato"} r8
3605 \mergeDifferentlyHeadedOn
3606 \mergeDifferentlyDottedOn
3608 {c,8[ d fis bes a] | }
3610 % Reposition the c2 to the right of the merged note
3611 {c,8~ \once \override NoteColumn #'force-hshift = #1.0
3612 % Move the c2 out of the main note column so the merge will work
3615 % Stem on the d2 must be down to permit merging
3616 {s8 \stemDown \once \override Stem #'transparent = ##t d2}
3620 \mergeDifferentlyHeadedOff
3621 \mergeDifferentlyDottedOff
3625 lhMusic = \relative c' {
3627 <d g, d>1)\arpeggio |
3634 \new Staff = "RH" <<
3638 \new Staff = "LH" <<
3648 @node Weitere Optimierungen
3649 @section Weitere Optimierungen
3650 @translationof Further tweaking
3653 * Andere Benutzung von Optimierungen::
3654 * Variablen für Optimierungen einsetzen::
3655 * Mehr Information::
3656 * Vermeiden von Optimierungen durch langsamere Übersetzung::
3657 * Fortgeschrittene Optimierungen mit Scheme::
3660 @node Andere Benutzung von Optimierungen
3661 @subsection Andere Benutzung von Optimierungen
3662 @translationof Other uses for tweaks
3664 @cindex Transparente Objekte
3665 @cindex Entfernen von Objekten
3666 @cindex Verstecken von Objekten
3667 @cindex Unsichtbare Objekte
3668 @cindex transparent-Eigenschaft, Benutzung
3669 @cindex Objekte unsichtbar machen
3670 @cindex Objekte entfernen
3671 @cindex Objekte verstecken
3672 @cindex Noten zwischen Stimmen überbinden
3673 @cindex Überbinden von Noten zwischen Stimmen
3675 @subheading Noten zwischen unterschiedlichen Stimmen überbinden
3677 Das nächste Beispiel zeigt, wie man Noten von verschiedenen
3678 Stimmen miteinander verknüpfen kann, indem man Bindebögen
3679 für Überbindungen benutzt. Normalerweise können nur zwei
3680 Noten der gleichen Stimme übergebunden werden. Wenn
3681 man zwei Stimmen benutzt, wobei die überbundenen Noten
3682 sich in der selben befinden,
3684 @lilypond[quote,fragment,relative=2]
3685 << { b8~ b8\noBeam }
3691 und dann den ersten Hals nach oben unsichtbar macht,
3692 sieht es so aus, als ob die Überbindung zwischen
3693 den Stimmen stattfindet:
3695 @cindex Hals, Beispiel zur Veränderung
3696 @cindex Notenhals, Beispiel zur Veränderung
3697 @cindex transparent-Eigenschaft, Beispiel
3699 @lilypond[quote,fragment,relative=2,verbatim]
3702 \once \override Stem #'transparent = ##t
3710 Um sicherzugehen, dass der unsichtbare Hals den Bindebogen
3711 nicht zu sehr verkleinert, kann er verlängert werden, indem
3712 seine Länge (@code{length}) auf den Wert @code{8}
3715 @lilypond[quote,fragment,relative=2,verbatim]
3718 \once \override Stem #'transparent = ##t
3719 \once \override Stem #'length = #8
3728 @subheading Eine Fermate in MIDI simulieren
3730 @cindex stencil-Eigenschaft, Benutzung
3731 @cindex Fermate, Benutzung in MIDI
3732 @cindex MIDI: Fermate erstellen
3734 Für Objekte außerhalb des Notensystems ist es normalerweise
3735 besser, die @code{stencil}-Eigenschaft anstelle der
3736 @code{transparent}-Eigenschaft zu verändern, wenn man
3737 sie vom fertigen Notensatz entfernen will. Indem die
3738 @code{stencil}-Eigenschaft auf falsch (@code{#f}) gesetzt
3739 wird, wird das entsprechende Objekt vollständig entfernt.
3740 Das bedeutet, dass es die Positionierung der anderen Objekte
3743 Auf diese Art kann etwa das Tempo geändert werden, damit
3744 in der MIDI-Ausgabe eine Fermate zu hören ist, ohne dass
3745 im Notensatz etwas von diesen Tempoänderungen zu sehen
3746 ist. Die Metronombezeichnung soll auch nicht die Position
3747 von Text an der gleichen Stelle oder die Abstände zwischen
3748 zwei Systemen beeinflussen. Darum ist es am besten,
3749 @code{stencil} auf @code{#f} zu setzen. Im Beispiel wird
3750 der Unterschied zwischen einem unsichtbaren Objekt und
3751 einem entfernten Objekt gezeigt:
3753 @cindex Metronom-Bezeichnung, Beispiel zur Veränderung
3754 @cindex transparent-Eigenschaft, Beispiel
3756 @lilypond[quote,verbatim,ragged-right]
3759 % Visible tempo marking
3762 \once \override Score.MetronomeMark #'transparent = ##t
3763 % Invisible tempo marking to lengthen fermata in MIDI
3766 % New tempo for next section
3775 @lilypond[quote,verbatim,ragged-right]
3778 % Visible tempo marking
3781 \once \override Score.MetronomeMark #'stencil = ##f
3782 % Invisible tempo marking to lengthen fermata in MIDI
3785 % New tempo for next section
3795 Mit beiden Methoden wird die Tempobezeichnung entfernt, mit
3796 der die Fermate verlängert wird, und beide beeinflussen die
3797 MIDI-Ausgabe wie gewünscht. Die unsichtbare Metronombezeichnung
3798 schiebt aber die folgende Bezeichnung in die Höhe, während
3799 das im zweiten Beispiel, in dem der @code{stencil} entfernt
3800 wurde, nicht passiert.
3803 @node Variablen für Optimierungen einsetzen
3804 @subsection Variablen für Optimierungen einsetzen
3805 @translationof Using variables for tweaks
3807 @cindex Variablen, Benutzung zur Optimierung
3808 @cindex Optimierung mit Variablen
3810 @code{\override}-Befehle sind oft lang und mühsam zu
3811 tippen, und sie müssen immer absolut richtig sein. Wenn
3812 derselbe Befehl mehrere Male benutzt werden muss, lohnt
3813 es sich oft schon, eine Variable zu definieren, in der er
3816 Als Beispiel sollen einige Worte im
3817 Gesangstext fett und kursiv hervorgehoben werden.
3818 Die Befehle @code{\italic} und @code{\bold} funktionieren
3819 im Gesangstext-Kontext nur, wenn sie gleichzeitig mit den Wörtern,
3820 auf die sie angewendet werden sollen, zusätzlich
3821 in eine @code{\markup}-Umgebung eingeschlossen
3822 werden. Durch diese Einbettung können einzelne Wörter nicht
3823 einfach zu einer Variable umgeformt werden. Als
3824 Alternative versuchen wir, einen Befehl mit
3825 @code{\override} und @code{\revert} zu konstruieren.
3828 @code{\override Lyrics . LyricText #'font-shape = #'italic}
3829 @code{\override Lyrics . LyricText #'font-series = #'bold}
3831 @code{\revert Lyrics . LyricText #'font-shape}
3832 @code{\revert Lyrics . LyricText #'font-series}
3835 Das wäre natürlich noch viel mühsamer, wenn viele Wörter eine
3836 Hervorhebung benötigen. Anstelle dieser Befehlsketten @emph{können}
3837 wir jedoch zwei Variablen definieren. Mit ihnen und dem entsprechenden
3838 Wort in geschweiften Klammern erreichen wir den gewünschten Effekt.
3839 Ein weiterer Vorteil ist, dass in diesem Fall die Leerzeichn um die
3840 Punkte herum nicht benötigt werden, weil sie nicht innerhalb des
3841 @code{lyricmode}-Kontextes interpretiert werden. Hier ein Beispiel;
3842 die Bezeichnungen können natürlich auch kürzer sein,
3843 um noch weniger schreiben zu müssen:
3845 @cindex LyricText, Beispiel zur Veränderung
3846 @cindex Gesangstext, Beispiel zur Veränderung
3847 @cindex font-shape-Eigenschaft, Beispiel
3848 @cindex font-series-Eigenschaft, Beispiel
3850 @lilypond[quote,verbatim]
3852 \override Lyrics.LyricText #'font-shape = #'italic
3853 \override Lyrics.LyricText #'font-series = #'bold
3856 \revert Lyrics.LyricText #'font-shape
3857 \revert Lyrics.LyricText #'font-series
3860 global = { \time 4/4 \partial 4 \key c \major}
3861 SopranoMusic = \relative c' { c4 | e4. e8 g4 g | a a g }
3862 AltoMusic = \relative c' { c4 | c4. c8 e4 e | f f e }
3863 TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 }
3864 BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 }
3865 VerseOne = \lyrics { E -- | ter -- nal \emphasize Fa -- ther, \normal | strong to save, }
3866 VerseTwo = \lyricmode { O | \emphasize Christ, \normal whose voice the | wa -- ters heard, }
3867 VerseThree = \lyricmode { O | \emphasize Ho -- ly Spi -- rit, \normal | who didst brood }
3868 VerseFour = \lyricmode { O | \emphasize Tri -- ni -- ty \normal of | love and pow'r }
3874 \new Voice = "Soprano" { \voiceOne \global \SopranoMusic }
3875 \new Voice = "Alto" { \voiceTwo \AltoMusic }
3876 \new Lyrics \lyricsto "Soprano" { \VerseOne }
3877 \new Lyrics \lyricsto "Soprano" { \VerseTwo }
3878 \new Lyrics \lyricsto "Soprano" { \VerseThree }
3879 \new Lyrics \lyricsto "Soprano" { \VerseFour }
3883 \new Voice = "Tenor" { \voiceOne \TenorMusic }
3884 \new Voice = "Bass" { \voiceTwo \BassMusic }
3891 @node Mehr Information
3892 @subsection Mehr Information
3893 @translationof Other sources of information
3895 Die Programmreferenz enthält sehr viel Information über LilyPond, aber
3896 noch mehr Information findet sich in den internen
3897 LilyPond-Dateien. Um sie erforschen zu können, müssen Sie erst
3898 das richtige Verzeichnis auf Ihrem System finden. Die Position
3899 hängt a) davon ab, ob Ihre LilyPond-Installation mit der vorkompilierten
3900 Version von der LilyPond-Internetseite vorgenommen wurde oder Sie
3901 die Version durch Ihren Paketmanager installiert haben (also
3902 z. B. in einer Linux-Distribution oder unter fink oder cygwin
3903 installiert), und b) auf welchem Betriebssystem Sie das Programm
3906 @strong{Von lilypond.org heruntergeladen}
3911 Wechseln Sie in das Verzeichnis
3912 @file{@var{INSTALL_VERZ}/lilypond/usr/share/lilypond/current/}
3916 Wechseln Sie in das Verzeichnis
3917 @file{@var{INSTALL_VERZ}/LilyPond.app/Contents/Resources/share/lilypond/current/}
3918 indem Sie entweder mit dem Befehl @code{cd} vom Terminal aus
3919 in das Verzeichnis wechseln, oder mit Control-Klick auf das
3920 LilyPond-Programmsymbol gehen und @qq{Show Package Contents}
3925 Wechseln Sie mit dem Windows Explorer ins Verzeichnis
3926 @file{@var{INSTALL_VERZ}/LilyPond/usr/share/lilypond/current/}
3930 @strong{Mit einem Paket-Manager installiert oder selber aus
3931 den Quellen kompiliert}
3933 Wechseln Sie in das Verzeichnis
3934 @file{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, wobei
3935 @var{PREFIX} bei Ihrem Paket-Manager oder dem
3936 @code{configure}-Skript gesetzt wird, und @var{X.Y.Z}
3937 die LilyPond-Versionsnummer.
3941 In diesem Ordner sind die zwei interessanten Unterordner:
3944 @item @file{ly/} - beinhaltet Dateien im LilyPond-Format
3945 @item @file{scm/} - beinhaltet Dateien im Scheme-Format
3948 Schauen wir uns zuerst einige Dateien in @file{ly/} an.
3949 Öffnen Sie @file{ly/property-init.ly} in einem Texteditor.
3950 Der, den Sie normalerweise für @code{.ly}-Dateien benutzen,
3951 genügt. Diese Datei enthält die Definitionen aller vordefinierten
3952 Befehle für LilyPond, wie etwa @code{\stemUp} und
3953 @code{\slurDotted}. Sie können sehen, dass es sich um
3954 nichts mehr handelt als Definitionen von Variablen, die eine
3955 oder mehrere @code{\override}-Befehle enthalten. Der
3956 Befehl @code{/tieDotted} etwa wird folgendermaßen definiert:
3960 \override Tie #'dash-period = #0.75
3961 \override Tie #'dash-fraction = #0.1
3965 Wenn Sie diese Voreinstellungen der vordefinierten Befehl nicht
3966 mögen, können Sie sie ganz einfach umdefinieren, genauso wie
3967 jede andere Variable auch, indem Sie sie an den Anfang Ihrer
3968 Quelldatei schreiben.
3970 Hier sind die wichtisgsten Dateien, die sich im Ordner
3971 @file{ly/} befinden:
3973 @multitable @columnfractions .4 .6
3976 @item @file{ly/engraver-init.ly}
3977 @tab Definitionen von Engraver-Kontexten
3978 @item @file{ly/paper-defaults-init.ly}
3979 @tab Spezifikationen von Voreinstellungen für Papiermaße
3980 @item @file{ly/performer-init.ly}
3981 @tab Definitionen von Performer-Kontexten
3982 @item @file{ly/property-init.ly}
3983 @tab Definitionen aller vordefinierten Befehle
3984 @item @file{ly/spanner-init.ly}
3985 @tab Definitionen aller vordefinierten Strecker-Befehle
3988 Andere Einstellungen (wie die Definitionen von Beschriftungsbefehlen)
3989 sind in @code{.scm}-(Scheme)-Dateien gespeichert. Die
3990 Scheme-Programmiersprache wird benutzt, um eine
3991 programmierbare Schnittstelle zu den internen Operationen von
3992 LilyPond zu haben. Eine weitere Erklärung dieser Dateien ist
3993 im Moment außerhalb des Rahmens dieses Handbuchs, denn
3994 sie erfordern einige Kenntnis der Scheme-Sprache. Die Warnung
3995 ist hier angebracht, dass des ein gutes technisches Verständnis
3996 oder sehr viel Zeit braucht, um Scheme und diese
3997 Dateien zu verstehen (siehe auch @ref{Scheme-Übung}).
3999 Wenn Sie sich mit Scheme auskennen, sind hier mögliche
4000 interessante Dateien:
4002 @multitable @columnfractions .4 .6
4005 @item @file{scm/auto-beam.scm}
4006 @tab Sub-Balken-Voreinstellungen
4007 @item @file{scm/define-grobs.scm}
4008 @tab Voreinstellungen für Grob-Eigenschaften
4009 @item @file{scm/define-markup-commands.scm}
4010 @tab Definition aller Markup-Beschriftungsbefehle
4011 @item @file{scm/midi.scm}
4012 @tab Voreinstellung für die MIDI-Ausgabe
4013 @item @file{scm/output-lib.scm}
4014 @tab Einstellungen mit Einfluss auf die Darstellung von Bunddiagrammen, Farben, Versetzungszeichen, Taktlinien usw.
4015 @item @file{scm/parser-clef.scm}
4016 @tab Definitionen der unterstützten Schlüssel
4017 @item @file{scm/script.scm}
4018 @tab Voreinstellungen for Artikulationszeichen
4022 @node Vermeiden von Optimierungen durch langsamere Übersetzung
4023 @subsection Vermeiden von Optimierungen durch langsamere Übersetzung
4024 @translationof Avoiding tweaks with slower processing
4026 LilyPond kann einige zusätzliche Tests durchführen, während
4027 die Noten gesetzt werden. Dadurch braucht das Programm länger,
4028 um den Notensatz zu produzieren, aber üblicherweise werden
4029 weniger nachträgliche Anpassungen nötig sein. Wenn eine
4030 Textsilbe oder eine Beschriftung aus dem Rand der Partitur
4031 ragt, wird durch diese Tests die Zeile gerade so weit komprimiert,
4032 dass sie sich innerhalb der Ränder befindet.
4036 % Um sicher zu gehen, dass Texte und Liedtext
4037 % innerhalb der Papierränder bleiben
4038 \override PaperColumn #'keep-inside-line = ##t
4039 \override NonMusicalPaperColumn #'keep-inside-line = ##t
4046 @node Fortgeschrittene Optimierungen mit Scheme
4047 @subsection Fortgeschrittene Optimierungen mit Scheme
4048 @translationof Advanced tweaks with Scheme
4050 Auch wenn viele Sachen mit @code{\override} und @code{\tweak}
4051 möglich sind, gibt es eine sehr viel mächtigere Möglichkeit, die
4052 Arbeitsweise von LilyPond mit Hilfe der programmierbaren Schnittstelle
4053 zu beeinflussen. Code, der in der Scheme-Programmiersprache
4054 geschrieben ist, kann direkt in die interne Satzmaschine von LilyPond
4055 eingefügt werden. Natürlich brauchen Sie dazu wenigstens ein
4056 grundlegendes Verständnis von Scheme. Eine Einleitung finden
4057 Sie in der @ref{Scheme-Übung}.
4059 Zur Illustration der vielen Möglichkeiten soll gezeigt werden, dass eine
4060 Eigenschaft nicht nur auf eine Konstante, sondern auch auf eine
4061 Scheme-Prozedur gesetzt werden kann, die dann jedes Mal
4062 aufgerufen wird, wenn die Eigenschaft von LilyPond benutzt
4063 wird. Die Eigenschaft kann damit dynamisch auf einen Wert
4064 gesetzt werden, der durch die Prozedur jedes Mal neu bestimmt
4065 wird. In diesem Beispiel wird die Farbe der Notenköpfe entsprechend
4066 zu ihrer Position innerhalb der Tonleiter gesetzt.
4068 @cindex x11-Farben, Beispiel zur Benutzung
4069 @cindex Notenkopf, Beispiel zur Veränderung
4070 @cindex Farb-Eigenschaft, in Scheme-Prozedur gesetzt
4072 @lilypond[quote,verbatim,ragged-right]
4073 #(define (color-notehead grob)
4074 "Color the notehead according to its position on the staff."
4075 (let ((mod-position (modulo (ly:grob-property grob 'staff-position) 7)))
4077 ;; Return rainbow colors
4078 ((1) (x11-color 'red )) ; for C
4079 ((2) (x11-color 'orange )) ; for D
4080 ((3) (x11-color 'yellow )) ; for E
4081 ((4) (x11-color 'green )) ; for F
4082 ((5) (x11-color 'blue )) ; for G
4083 ((6) (x11-color 'purple )) ; for A
4084 ((0) (x11-color 'violet )) ; for B
4090 % Arrange to obtain color from color-notehead procedure
4091 \override NoteHead #'color = #color-notehead
4098 Some -- where o -- ver the Rain -- bow, way up high,
4102 Weiter Beispiele, die die Benutzung dieser programmierbaren
4103 Schnittstelle zeigen, finden sich in @ref{Optimierungen mit Scheme}.