]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/de/learning/tweaks.itely
Imported Upstream version 2.19.45
[lilypond.git] / Documentation / de / learning / tweaks.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
2
3 @ignore
4     Translation of GIT committish: 8819d7cb0ba2ab359e4aa2276695afb9c1957c42
5
6     When revising a translation, copy the HEAD committish of the
7     version that you are working on.  For details, see the Contributors'
8     Guide, node Updating translation committishes.
9 @end ignore
10
11 @c \version "2.19.22"
12 @c Translators: ???, Michael Gerdau
13
14 @node Die Ausgabe verbessern
15 @chapter Die Ausgabe verbessern
16 @translationof Tweaking output
17
18 In diesem Kapitel wird erklärt, wie man die Notenausgabe verändern
19 kann. In LilyPond kann man sehr viel konfigurieren, fast jedes
20 Notenfragment kann geändert werden.
21
22
23 @menu
24 * Grundlagen für die Optimierung::
25 * Die Referenz der Programminterna::
26 * Erscheinung von Objekten::
27 * Positionierung von Objekten::
28 * Vertikale Abstände::
29 * Kollision von Objekten::
30 * Weitere Optimierungen::
31 @end menu
32
33 @node Grundlagen für die Optimierung
34 @section Grundlagen für die Optimierung
35 @translationof Tweaking basics
36
37 @menu
38 * Grundlagen zur Optimierung::
39 * Objekte und Schnittstellen::
40 * Regeln zur Benennung von Objekten und Eigenschaften::
41 * Optimierungsmethoden::
42 @end menu
43
44 @node Grundlagen zur Optimierung
45 @subsection Grundlagen zur Optimierung
46 @translationof Introduction to tweaks
47
48 @qq{Optimierung} (engl. tweaking) ist ein LilyPond-Begriff für die
49 verschiedenen Methoden, die Aktionen zu beeinflussen, die während
50 der Kompilation einer Notationsdatei vorgenommen werden sowie auf
51 das Notenbild einzuwirken. Einige dieser Optimierungen sind sehr
52 einfach, andere dagegen recht komplex. Aber insgesamt erlaubt das
53 System an Optimierungen so gut wie alle möglichen Erscheinungsformen
54 für die Notenausgabe.
55
56 In diesem Abschnitt werden die grundlegenden Konzepte vorgestellt,
57 um die Optimierung zu verstehen. Später soll eine Anzahl von fertigen
58 Befehlen bereitgestellt werden, die einfach in die Quelldatei
59 kopiert werden können um den selben Effekt wie im Beispiel
60 zu erhalten. Gleichzeitig zeigen diese Beispiele, wie die Befehle
61 konstruiert werden, so dass Sie in der Lage sein werden, eigene
62 Befehle auf dieser Grundlage zu entwickeln.
63
64 Bevor Sie mit diesem Kapitel beginnen, könnte Sie ein Blick in den
65 Abschnitt @ref{Kontexte und Engraver} interessieren, dann
66 Kontexte und Engraver sowie die Eigenschaften, die mit ihnen
67 verknüpft sind, sind die Voraussetzung, um die Funktionsweise
68 von Optimierungen verstehen zu können.
69
70
71 @node Objekte und Schnittstellen
72 @subsection Objekte und Schnittstellen
73 @translationof Objects and interfaces
74
75 @cindex Objekte
76 @cindex Grobs
77 @cindex Spanners
78 @cindex Interfaces
79 @cindex Strecker
80 @cindex Schnittstellen
81 @cindex graphische Objekte (Grob)
82 @cindex Objekteigenschaften
83 @cindex Layout-Objekt
84 @cindex Objekt, Layout-
85 @cindex Eigenschaften von Objekten
86
87 Optimierung bedeutet, die internen Operationen und Strukturen
88 des LilyPond-Programms zu verändern, darum sollen hier
89 zunächst die wichtigsten Begriffe erklärt werden, die zur
90 Beschreibung dieser Operationen und Strukturen benutzt werden.
91
92 Der Begriff @qq{Objekt} ist ein allgemeiner Begriff, mit dem
93 die Vielzahl an internen Strukturen bezeichnet wird, die LilyPond
94 während der Bearbeitung des Quelltextes erstellt. Wenn etwa
95 ein Befehl wie @code{\new Staff} auftritt, wird ein neues Objekt
96 vom Typ @code{Staff} erstellt. Dieses Objekt @code{Staff} enthält
97 dann alle Eigenschaften, die mit diesem speziellen Notensystem
98 verknüpft sind, wie beispielsweise seine Bezeichnung, Tonart und
99 spezifische Angaben über die Engraver, die innerhalb dieses Systems
100 eingesetzt werden. Für alle anderen Kontexte gibt es genauso
101 Objekte, die deren Eigenschaften beinhalten, beispielsweise für
102 @code{Voice}-Objekte, @code{Score}-Objekte, @code{Lyrics}-Objekte,
103 aber auch für Objekte, die Notationselemente wie die Taktstriche,
104 Notenköpfe, Bögen und Dynamikbezeichnung enthalten. Jedes
105 Objekt hat eine eigene Gruppe an Eigenschaftswerten.
106
107 Bestimmte Objekttypen tragen besondere Bezeichnungen. Objekte, die
108 Notationselemente der gesetzten Ausgabe repräsentieren, also
109 Notenköpfe, Hälse, Bögen, Fingersatz, Schlüssel usw., werden
110 @qq{Layout-Objekte}, oft auch @qq{Graphische Objekte} genannt.
111 Daraus resultiert die künstliche Abkürzung @qq{Grob}.
112 Diese sind auch Objekte im allgemeinen Sinn und haben genauso
113 Eigenschaften, die mit ihnen verknüpft sind, wie etwa Größe, Position,
114 Farbe usw.
115
116 Einige Layout-Objekte sind etwas spezieller. Phrasierungsbögen,
117 Crescendo-Klammern, Oktavierungszeichen und viele andere
118 Grobs sind nicht an einer Stelle platziert -- sie haben vielmehr
119 einen Anfangspunkt, einen Endpunkt und eventuell noch andere
120 Eigenschaften, die ihre Form bestimmen. Objekte mit solch
121 einer erweiterten Gestalt werden als @qq{Strecker} (engl. Spanners)
122 bezeichnet.
123
124 Darüber hinaus gibt es @q{abstrakte} Grobs, die selbst keinen Ausdruck
125 irgendwelcher Art erzeugen. Vielmehr sammeln sie, positionieren oder
126 verwalten andere Grobs.  Typische Beispiele hierfür sind
127 @code{DynamicLineSpanner}, @code{BreakAlignment},
128 @code{NoteColumn}, @code{VerticalAxisGroup},
129 @code{NonMusicalPaperColumn} und Ähnliche.  Wir werden uns später
130 mit einigen von ihnen noch näher befassen.
131
132 Es bleibt uns noch übrig zu erklären, was @qq{Schnittstellen}
133 (engl. interface) sind. Wenn auch viele Objekte sehr unterschiedlich
134 sind, haben sie doch oft gemeinsame Eigenschaften, die auf
135 die gleiche Weise verarbeitet werden.  Alle Grobs beispielsweise
136 haben eine Farbe, eine Größe, eine Position usw. und alle
137 diese Eigenschaften werden von LilyPond auf die gleiche Weise
138 verarbeitet, während der Quelltext in Notensatz umgesetzt wird.
139 Um die internen Operationen zu vereinfachen, sind alle diese
140 gemeinsamen Prozesse und Eigenschaften in einem Objekt
141 mit der Bezeichnung @code{grob-interface} (Schnittstelle eines
142 graphischen Objektes) zusammengefasst. Es gibt viele andere
143 Gruppen gemeinsamer Eigenschaften, die jede eine Bezeichnung
144 besitzen, welche auf @code{-interface} endet. Insgesamt
145 gibt es über 100 dieser Schnittstellen. Wir werden später sehen,
146 was es damit auf sich hat.
147
148 Dies waren die Hauptbegriffe, die in diesem Kapitel zur Anwendung
149 kommen sollen.
150
151
152 @node Regeln zur Benennung von Objekten und Eigenschaften
153 @subsection Regeln zur Benennung von Objekten und Eigenschaften
154 @translationof Naming conventions of objects and properties
155
156 @cindex Benennungskonventionen für Objekte
157 @cindex Benennungskonventionen für Eigenschaften
158 @cindex Objekte, Benennungskonventionen
159 @cindex Eigenschaften, Benennungskonventionen
160 @cindex Regeln zur Benennung von Objekten/Eigenschaften
161
162 Es wurden schon früher einige Regeln zur Benennung von
163 Objekten vorgestellt, siehe
164 @ref{Kontexte und Engraver}. Hier eine Referenzliste der
165 häufigsten Objekt- und Eigenschaftsbezeichnungen mit
166 den Regeln für ihre Bezeichnung und
167 illustrierenden echten Bezeichnungen. Es wurde @qq{A}
168 für einen beliebigen Großbuchstaben und @qq{aaa} für eine
169 beliebige Anzahl an Kleinbuchstaben eingesetzt. Andere
170 Zeichen werden explizit angegeben.
171
172 @multitable @columnfractions .33 .33 .33
173 @headitem Objekt-/Eigenschaftstyp
174   @tab Naming convention
175   @tab Beispiele
176 @item Kontexte
177   @tab Aaaa oder AaaaAaaaAaaa
178   @tab Staff, GrandStaff
179 @item Layout-Objekte
180   @tab Aaaa oder AaaaAaaaAaaa
181   @tab Slur, NoteHead
182 @item Engraver
183   @tab Aaaa_aaa_engraver
184   @tab Clef_engraver, Note_heads_engraver
185 @item Schnittstellen
186   @tab aaa-aaa-interface
187   @tab grob-interface, break-aligned-interface
188 @item Kontext-Eigenschaften
189   @tab aaa oder aaaAaaaAaaa
190   @tab alignAboveContext, skipBars
191 @item Layout-Objekt-Eigenschaften
192   @tab aaa oder aaa-aaa-aaa
193   @tab direction, beam-thickness
194 @end multitable
195
196 Es wird bald ersichtlich werden, dass die Eigenschaften von
197 unterschiedlichen Objekttypen mit unterschiedlichen Befehlen
198 geändert werden.  Deshalb ist es nützlich, bereits am Namen
199 den Typ und die Eigenschaften eines Objekts zu erkennen.
200
201
202 @node Optimierungsmethoden
203 @subsection Optimierungsmethoden
204 @translationof Tweaking methods
205
206 @cindex Optimierungsmethoden
207
208 @menu
209 * Der override-Befehl::
210 * Der revert-Befehl::
211 * Der once-Präfix::
212 * Der overrideProperty-Befehl::
213 * Der tweak-Befehl::
214 * Der single-Präfix::
215 @end menu
216
217 @node Der override-Befehl
218 @unnumberedsubsubsec Der @code{@bs{}override}-Befehl
219 @translationof The override command
220
221 @cindex override-Befehl
222 @funindex \override
223
224 @strong{Der \override-Befehl}
225
226 Wir haben uns schon mit den Befehlen @code{\set}
227 und @code{\with} bekannt gemacht, mit welchen
228 Eigenschaften von @strong{Kontexten} verändert
229 und @strong{Engraver} entfernt oder hinzugefügt
230 werden können. Siehe dazu
231 @ref{Kontexteigenschaften verändern} und @ref{Engraver hinzufügen und entfernen}. Jetzt wollen wir uns weitere
232 wichtige Befehle anschauen.
233
234 Der Befehl, um die Eigenschaften von @strong{Layout-Objekten}
235 zu ändern, ist @code{\override}. Weil dieser Befehl interne
236 Eigenschaften tief in der Programmstruktur von LilyPond
237 verändern muss, ist seine Syntax nicht so einfach wie die der
238 bisherigen Befehle. Man muss genau wissen, welche Eigenschaft
239 welches Objektes in welchem Kontext geändert werden soll,
240 und welches der neu zu setzende Wert dann ist. Schauen wir
241 uns an, wie das vor sich geht.
242
243 Die allgemeine Syntax dieses Befehles ist:
244
245 @example
246 \override @var{Kontext}.@var{LayoutObjekt}.@var{layout-eigenschaft} = #@var{Wert}
247 @end example
248
249 @noindent
250 Damit wir die Eigenschaft mit der Bezeichnung @var{layout-property}
251 das Layout-Objektes mit der Bezeichnung@var{LayoutObject},
252 welches ein Mitglied des @var{Kontext}-Kontextes ist, auf den
253 Wert @var{value}.
254
255 Der @var{Kontext} kann (und wird auch normalerweise) ausgelassen
256 werden, wenn der benötigte Kontext eindeutig impliziert ist und einer
257 der untersten Kontexte ist, also etwa @code{Voice}, @code{ChordNames}
258 oder @code{Lyrics}.  Auch in diesem Text wird der Kontext oft ausgelassen
259 werden.  Später soll gezeigt werden, in welchen Fällen er ausdrücklich
260 definiert werden muss.
261
262 Spätere Abschnitte behandeln umfassend Eigenschaften und ihre
263 Werte, siehe @ref{Typen von Eigenschaften}.  Aber um ihre Funktion und ihr
264 Format zu demonstrieren,
265 werden wir hier nur einige einfache Eigenschaften und Werte einsetzen,
266 die einfach zu verstehen sind.
267
268 LilyPond's hauptsächliche Ausdrücke sind musikalische Dinge wie Noten,
269 Notendauern und Markierungen.  Diesen zugrunde liegende Ausdrücke wie
270 Zahlen, Zeichenketten und Listen werden im @q{Scheme Modus} verarbeitet.
271 Der Präfix @samp{#} leitet diesen Modus ein.  Einige dieser Werte haben
272 manchmal eine gültige Repräsentation in LilyPond's Musik Modus, in diesem
273 Handbuch werden wir aus Gründen der Einheitlichkeit immer das @samp{#}
274 für ihre Eingabe verwenden.  Weiterführende Informationen zu LilyPond's
275 Scheme mode finden sie unter @rextend{LilyPond Scheme-Syntax}.
276
277 @code{\override} ist der bei Optimierungen am häufigsten verwendete Befehl.
278 Daher wird der Rest dieses Kapitels im Wesentlichen aus Anwendungsbeispielen
279 dieses Befehls bestehen.  Hier kommt gleich ein einfaches Beispiel
280 zur Änderung der Farbe von Notenköpfen:
281
282 @cindex color-Eigenschaft, Beispiel
283 @cindex Farb-Eigenschaft, Beispiel
284 @cindex NoteHead, Beispiel für override
285 @cindex Notenkopf, Beispiel für Veränderung
286
287 @lilypond[quote,ragged-right,verbatim]
288 \relative {
289   c'4 d
290   \override NoteHead.color = #red
291   e4 f |
292   \override NoteHead.color = #green
293   g4 a b c |
294 }
295 @end lilypond
296
297
298 @node Der revert-Befehl
299 @unnumberedsubsubsec Der @code{@bs{}revert}-Befehl
300 @translationof The revert command
301
302 @cindex revert-Befehl
303
304 @funindex \revert
305
306 Wenn eine Eigenschaft einmal überschrieben wurde, wird ihr
307 neuer Wert so lange bewahrt, bis er noch einmal überschrieben
308 wird oder ein @code{\revert}-Befehl vorkommt. Der
309 @code{\revert}-Befehl hat die folgende Syntax und setzt den
310 Wert der Eigenschaft zurück auf den Standardwert, nicht
311 jedoch auf den vorigen Wert, wenn mehrere
312 @code{\override}-Befehle benutzt wurden.
313
314 @example
315 \revert @var{Kontext}.@var{LayoutObjekt}.@var{layout-eigenschaft}
316 @end example
317
318 Wiederum, genauso wie der @var{Kontext} bei dem @code{\override}-Befehl,
319 wird @var{Kontext} oft nicht benötigt. Er wird in vielen der folgenden
320 Beispiele ausgelassen. Im nächsten Beispiel wird die Farbe des Notenkopfes
321 wieder auf den Standardwert für die letzten zwei Noten gesetzt.
322
323 @cindex color-Eigenschaft, Beispiel
324 @cindex Farb-Eigenschaft, Beispiel
325 @cindex NoteHead, Beispiel für override
326 @cindex Notenkopf, Beispiel für Veränderung
327
328 @lilypond[quote,ragged-right,verbatim]
329 \relative {
330   c'4 d
331   \override NoteHead.color = #red
332   e4 f |
333   \override NoteHead.color = #green
334   g4 a
335   \revert NoteHead.color
336   b4 c |
337 }
338 @end lilypond
339
340
341 @node Der once-Präfix
342 @unnumberedsubsubsec Der @code{@bs{}once}-Präfix
343 @translationof The once prefix
344
345 @funindex \once
346
347 Sowohl der @code{\override}-Befehl als auch der @code{\set}-Befehl können mit
348 dem Präfix @code{\once} (@emph{einmal}) versehen werden.  Dadurch wird
349 der folgende @code{\override}- oder @code{\set}-Befehl nur für den aktuellen
350 Musik-Moment wirksam, bevor sich wieder der vorherige Zustand herstellt
351 (dieser kann sich vom Standard unterscheiden, wenn etwa noch ein anderer
352 @code{\override}-Befehl aktiv ist).  Am gleichen
353 Beispiel demonstriert, kann damit die Farbe eines einzelnen Notenkopfes
354 geändert werden:
355
356 @cindex color-Eigenschaft, Beispiel
357 @cindex Farb-Eigenschaft, Beispiel
358 @cindex NoteHead, Beispiel für override
359 @cindex Notenkopf, Beispiel für Veränderung
360
361 @lilypond[quote,verbatim]
362 \relative {
363   c'4 d
364   \override NoteHead.color = #red
365   e4 f |
366   \once \override NoteHead.color = #green
367   g4 a
368   \revert NoteHead.color
369   b c |
370 }
371 @end lilypond
372
373 Der @code{\once} Präfix eignet sich also dazu, die Geltungsdauer eines
374 anderen vordefinierten Befehls, dem er vorangestellt ist, auf ein
375 einziges musikalisches Ereignis zu beschränken:
376
377 @lilypond[quote,verbatim]
378 \relative {
379   c'4( d)
380   \once \slurDashed
381   e4( f) |
382   g4( a)
383   \once \hideNotes
384   b( c) |
385 }
386 @end lilypond
387
388 Allerdings funktioniert das nicht bei vordefinierten Befehlen wie
389 @code{\@dots{}Neutral}, @code{\@dots{}Off} oder @code{\un@dots{}}, weil
390 diese intern @code{\revert} verwenden und nicht @code{\override}, sodass
391 ein @code{\once} Präfix hier keine Auswirkungen hat.
392
393
394 @node Der overrideProperty-Befehl
395 @unnumberedsubsubsec Der @code{@bs{}overrideProperty}-Befehl
396 @translationof The overrideProperty command
397
398 @cindex overrideProperty-Befehl
399
400 @funindex \overrideProperty
401
402 Es gibt eine andere Form des @code{override}-Befehls,
403 @code{\overrideProperty} (überschreibe Eigenschaft),
404 welcher ab und zu benötigt wird.  Es wird hier nur der
405 Vollständigkeit halber erwähnt, sein Einsatz wird demonstriert
406 in @rextend{Schwierige Korrekturen}.
407 @c Maybe explain in a later iteration  -td
408
409
410 @node Der tweak-Befehl
411 @unnumberedsubsubsec Der @code{@bs{}tweak}-Befehl
412 @translationof The tweak command
413
414 @cindex tweak-Befehl
415
416 @funindex \tweak
417
418 Der letzte Optimierungsbefehl in LilyPond ist @code{\tweak}
419 (engl. optimieren).  Er wird eingesetzt um Eigenschaften
420 nur eines Objektes von mehreren Objekten zu verändern,
421 die zum selben Musik-Zeitpunkt
422 auftreten, wie etwa die Noten eines Akkordes.  Ein
423 @code{\override} würde alle Noten des Akkords beeinflussen,
424 während mit @code{\tweak} nur das nächste Objekt der
425 Eingabe geändert wird.
426
427 Hier ein Beispiel. Angenommen, die Größe des mittleren
428 Notenkopfes (ein E) in einem C-Dur-Akkord soll geändert
429 werden.  Schauen wir zuerst, was wir mit
430 @code{\once \override} erhalten:
431
432 @cindex Schriftgröße, Beispiel
433 @cindex NoteHead, Beispiel für override
434 @cindex Notenkopf, Beispiel für Veränderung
435
436 @lilypond[quote,ragged-right,verbatim]
437 \relative {
438   <c' e g>4
439   \once \override NoteHead.font-size = #-3
440   <c e g>4
441   <c e g>4
442 }
443 @end lilypond
444
445 Wie man sehen kann, beeinflusst @code{override} @emph{alle}
446 Notenköpfe des Akkordes.  Das liegt daran, dass alle die Noten
447 eines Akkordes zum selben Musik-Moment auftreten und
448 die Funktion von @code{\once} ist es, die Optimierung auf
449 an allen Objekten auszuführen, die zum selben Musik-Moment
450 auftreten wie der @code{\override}-Befehl.
451
452 Der @code{\tweak}-Befehl funktioniert anders. Er bezieht sich
453 auf das direkt folgende Element in der Eingabe-Datei.  In seiner
454 einfachsten Form ist der Befehl nur an Objekten wirksam, die direkt
455 vom vorhergehenden Element erstellt worden sind, insbesondere
456 Notenköpfe und Artikulation.
457
458 Um also zu unserem Beispiel zurückzukommen, könnte man die
459 mittlere Note eines Akkordes auf diese Weise ändern:
460
461 @cindex font-size-Eigenschaft, Beispiel
462 @cindex Schriftgröße, Beispiel
463 @cindex @code{\tweak}-Beispiel
464
465 @lilypond[quote,ragged-right,verbatim]
466 \relative {
467   <c' e g>4
468   <c \tweak font-size #-3 e g>4
469 }
470 @end lilypond
471
472 Beachten Sie, dass die Syntax des @code{\tweak}-Befehls sich
473 von der des @code{\override}-Befehls unterscheidet. Der
474 Kontext dürfen nicht angegeben werden, denn
475 das würde zu einem Fehler führen. Sowohl Kontext als auch das Layout-Objekt sind
476 durch das folgende Element im Inputstream impliziert. Hier sollte auch
477 kein Gleichheitszeichen vorhanden sein.  Die verallgemeinerte
478 Syntax des @code{\tweak}-Befehls ist also
479
480 @example
481 \tweak @var{layout-eigenschaft} #@var{Wert}
482 @end example
483
484 Ein @code{\tweak}-Befehl kann auch benutzt werden, um nur
485 eine von mehreren Artikulationen zu ändern, wie im nächsten
486 Beispiel zu sehen ist.
487
488 @cindex Farb-Eigenschaft, Beispiel
489 @cindex @code{\tweak}-Beispiel
490
491 @lilypond[quote,fragment,ragged-right,verbatim]
492 a'4^"Black"
493   -\tweak color #red ^"Red"
494   -\tweak color #green _"Green"
495 @end lilypond
496
497 @noindent
498 Beachten Sie, dass ein Artikulationsmodifikator vor dem @code{\tweak}-Befehl
499 geschrieben werden muss, weil auch der @code{\tweak}-Ausdruck als
500 Artikulation angefügt wird.  Im Falle von mehreren Richtungsmodifikatoren
501 (@code{^} or @code{_}) gilt der Modifikator links außen, weil er als
502 letzter angefügt wird.
503
504 @cindex @code{\tweak}, Versetzungszeichen
505 @cindex @code{\tweak}, bestimmtes Layout-Objekt
506
507 Objekte wie Hälse und Versetzungszeichen werden später erstellt und nicht
508 direkt aus dem vorhergehenden Ereignis.  Es ist dennoch möglich, @code{\tweak}
509 mit solchen indirekt erstelltn Objekten zu verwenden, indem man die
510 Layout-Objekte direkt benennt, vorausgesetzt dass LilyPond ihre Herkunft
511 bis zu dem ursprünglichen Ereignis zurück verfolgen kann:
512
513 @lilypond[quote,fragment,ragged-right,verbatim]
514 <\tweak Accidental.color #red   cis''4
515  \tweak Accidental.color #green es''
516  g''>
517 @end lilypond
518
519 Diese Langform des @code{\tweak}-Befehls kann wie folgend beschrieben werden:
520
521 @example
522 \tweak @var{layout-object}.@var{layout-property} @var{value}
523 @end example
524
525 @cindex Triolen, geschachtelt
526 @cindex N-tolen, geschachtelt
527 @cindex Klammer, Triole
528 @cindex Triolenklammer
529 @cindex N-tolenklammer
530 @cindex Komplizierte Rhythmen, Schachtelung von
531
532 @funindex TupletBracket
533
534 Der @code{\tweak}-Befehl muss auch benutzt werden, wenn das
535 Aussehen einer vor mehreren geschachtelten Triolenklammern
536 geändert werden soll, die zum selben Zeitpunkt beginnen.
537 Im folgenden Beispiel beginnen die lange Klammer und die
538 erste Triolenklammer zum selben Zeitpunkt, sodass ein
539 @code{\override}-Befehl sich auf beide beziehen würde.
540 In dem Beispiel wird @code{\tweak} benutzt, um zwischen
541 ihnen zu unterscheiden.  Der erste @code{\tweak}Befehl
542 gibt an, dass die lange Klammer über den Noten gesetzt
543 werden soll, und der zweite, dass die Zahl der rhythmischen
544 Aufteilung für die erste der kurzen Klammern in rot
545 gesetzt wird.
546
547 @cindex Farb-Eigenschaft, Beispiel
548 @cindex @code{\tweak}-Beispiel
549 @cindex Richtungs-Eigenschaft, Beispiel
550 @cindex color-Eigenschaft, Beispiel
551 @cindex direction-Eigenschaft, Beispiel
552
553 @lilypond[quote,ragged-right,verbatim]
554 \relative c'' {
555   \tweak direction #up
556   \tuplet 3/4 {
557     \tweak color #red
558     \tuplet 3/2 { c8[ c c] }
559     \tuplet 3/2 { c8[ c c] }
560     \tuplet 3/2 { c8[ c c] }
561   }
562 }
563 @end lilypond
564
565 Wenn geschachtelte N-tolen nicht zum gleichen Zeitpunkt
566 beginnen, kann ihr Aussehen auf die übliche Art mit dem
567 @code{\override}-Befehl geändert werden:
568
569 @cindex text-Eigenschaft, Beispiel
570 @cindex tuplet-number-Funktion, Beispiel
571 @cindex transparent-Eigenschaft, Beispiel
572 @cindex TupletNumber, Beispiel zur Veränderung
573 @cindex Triolennummer, Beispiel zur Veränderung
574 @cindex Triolen-Nummer-Funktion, Beispiel
575
576 @c NOTE Tuplet brackets collide if notes are high on staff
577 @c See issue 509
578 @lilypond[quote,ragged-right,verbatim]
579 \relative {
580   \tuplet 3/2 { c'8[ c c] }
581   \once \override TupletNumber.text = #tuplet-number::calc-fraction-text
582   \tuplet 3/2 {
583     c8[ c]
584     c8[ c]
585     \once \override TupletNumber.transparent = ##t
586     \tuplet 3/2 { c8[ c c] }
587     \tuplet 3/2 { c8[ c c] }
588   }
589 }
590 @end lilypond
591
592
593 @seealso
594 Notationsreferenz:
595 @ruser{Der tweak-Befehl}.
596
597 @node Der single-Präfix
598 @unnumberedsubsubsec Der @code{@bs{}single}-Präfix
599 @translationof The single prefix
600
601 @funindex \single
602 @cindex tweak, von override erzeugt
603
604 Nehmen wir einmal an, wir möchten bestimmte Noten betonen, indem wir ihre
605 Köpfe rot einfärben und sie außerdem vergrößern.  Damit das einfach zu
606 machen ist nehmen wir ferner an, wir hätten dafür eine Funktion definiert:
607
608 @lilypond[quote,verbatim]
609 emphNoteHead = {
610   \override NoteHead.color = #red
611   \override NoteHead.font-size = 2
612 }
613 \relative {
614   c''4 a \once \emphNoteHead f d |
615 }
616 @end lilypond
617
618 Der @code{\once} Präfix funktioniert wunderbar, wenn es darum geht einzelne
619 Noten oder ganze Akkorde zu betonen, jedoch versagt er, gilt es eine einzelne
620 Note @emph{innerhalb} eines Akkordes zu betonen.  Wir haben schon gesehen,
621 wie @code{\tweak} dennoch dazu gebracht werden kann, siehe
622 @ref{Der tweak-Befehl,,Der @code{@bs{}tweak}-Befehl}.  Aber
623 @code{\tweak} kann nicht auf eine Funktion angewandt werden; hier
624 kommt @code{\single} ins Spiel:
625
626 @lilypond[quote,verbatim]
627 emphNoteHead = {
628   \override NoteHead.color = #red
629   \override NoteHead.font-size = 2
630 }
631 \relative {
632    <c'' a \single \emphNoteHead f d>4
633 }
634 @end lilypond
635
636 Zusammenfassend kann man sagen, @code{\single} wandelt overrides in tweaks
637 sodass bei mehreren zeitgleichen musiklaischen Objekten (wie die Notenköpfe
638 eines Akkords), man mit @code{\single} lediglich ein einzelnes Objekt
639 beeinflusst, nämlich dasjenige, was im direkt folgenden musikalischen
640 Ausdruck steckt.  Das ist anders, als @code{\once}, welches alle diese
641 Objekte beträfe.
642
643 Man kann so @code{\single} dafür verwenden, jede kleine Funktion, die
644 lediglich overrides enthält auf einzelne Noten innerhalb eines Akkords
645 anzuwenden.  Es sei jedoch darauf hingewiesen, @code{\single} wandelt
646 weder @code{\revert}, noch noch @code{\set} oder @code{\unset} in tweaks.
647
648 @seealso
649 Handbuch zum Lernen:
650 @ref{Der tweak-Befehl,,Der @code{@bs{}tweak}-Befehl},
651 @ref{Variablen für Layout Anpassungen einsetzen}.
652
653
654 @node Die Referenz der Programminterna
655 @section Die Referenz der Programminterna
656 @translationof The Internals Reference manual
657
658 @cindex Referenz der Programminterna
659 @cindex Programminterna, Referenz
660
661 @menu
662 * Eigenschaften von Layoutobjekten::
663 * Eigenschaften die Schnittstellen besitzen können::
664 * Typen von Eigenschaften::
665 @end menu
666
667 @node Eigenschaften von Layoutobjekten
668 @subsection Eigenschaften von Layoutobjekten
669 @translationof Properties of layout objects
670
671 @cindex Eigenschaften von Layout-Objekten
672 @cindex Eigenschaften von Grobs
673 @cindex Grobs, Eigenschaften von
674 @cindex Layout-Objekte, Eigenschaften von
675 @cindex Property (Layout-Objekte, Grobs)
676 @cindex Regerenz der Interna
677
678 Angenommen, in Ihrer Partitur tritt ein Legatobogen
679 auf, der Ihrer Meinung nach zu dünn ausgefallen ist.
680 Sie würden ihn gerne etwas schwerer gezeichnet
681 sehen. Wie gehen Sie vor? Von den Anmerkungen in
682 früheren Abschnitten wissen Sie schon, dass LilyPond
683 sehr flexibel ist und eine derartige Modifikation
684 möglich sein sollte, und Sie erraten vielleicht,
685 dass ein @code{\override}-Befehl angebracht ist.
686 Aber gibt es eine Eigenschaft für die Dicke eines
687 Legatobogens (engl. slur), und wenn es sie gibt,
688 auf welche Weise lässt sie sich verändern? Hier
689 kommt die Referenz der Interna zur Geltung. Dort
690 finden sich alle Informationen, um den beschriebenen
691 und alle anderen @code{\override}-Befehle zu
692 konstruieren.
693
694 Bevor Sie jetzt in die Referenz der Interna wechseln, ist
695 eine Warnung angebracht. Es handelt sich um ein
696 @strong{Referenz}dokument, was heißt, dass es sehr
697 wenig oder gar keine Erklärungen enthält: seine Aufgabe
698 ist es, Information klar und genau darzustellen. Das
699 bedeutet, dass es auf den ersten Blick entmutigend
700 wirkt. Die Einführung und Erklärung in diesem Abschnitt
701 wird Ihnen aber schnell ermöglichen, genau die Information
702 aus der Referenz zu entnehmen, die Sie benötigen.
703 @c For German users
704 Beachten Sie, dass die Referenz der Interna nur auf Englisch
705 existiert. Um die Eigenschaftsbezeichnung eines bestimmten
706 Objektes zu finden, können Sie das Glossar (siehe
707 @rglosnamed{Top,Musikglossar})
708  verwenden, in dem
709 die englischen Begriffe in viele andere Sprachen übersetzt sind.
710
711 @cindex Override-Beispiel
712 @cindex Referenz der Interna, Benutzung
713 @cindex IR (Referenz der Interna), Benutzung
714 @cindex @code{\addlyrics}-Beispiel
715
716 Das Vorgehen soll an einem konkreten Beispiel einer echten
717 Komposition demonstriert werden. Hier das Beispiel:
718
719 @c Mozart, Die Zauberflöte Nr. 7 Duett
720
721 @lilypond[quote,verbatim]
722 {
723   \key es \major
724   \time 6/8
725   \relative {
726     r4 bes'8 bes[( g]) g |
727     g8[( es]) es d[( f]) as |
728     as8 g
729   }
730   \addlyrics {
731     The man who | feels love's sweet e -- | mo -- tion
732   }
733 }
734 @end lilypond
735
736 Angenommen also, wir wollen die Legatobögen etwas
737 dicker setzten. Ist das möglich? Die Legatobögen sind mit
738 Sicherheit ein Layout-Objekt, die Frage muss also lauten:
739 @qq{Gibt es eine Eigenschaft von Legatobögen, die die
740 Dicke bestimmt?} Um diese Frage zu beantworten, müssen
741 wir in der Referenz der Interna ( kurz IR) nachschauen.
742
743 Die IR für die LilyPond-Version, die Sie benutzen, findet sich
744 auf der LilyPond-Webseite unter der Adresse
745 @uref{http://lilypond.org}. Gehen Sie zur Dokumentationsseite
746 und klicken Sie auf den Link zur Referenz der Interna.
747 @c Addition for German users
748 Die Sprache ändert sich ab hier nach englisch.  Für diese Übung
749 sollten Sie die HTML-Version benutzen, nicht die
750 @qq{auf einer großen Seite} oder die PDF-Version.
751 Damit Sie die nächsten Absätze verstehen können, müssen Sie
752 genauso vorgehen, während Sie weiterlesen.
753
754 Unter der Überschrift @strong{Top} befinden sich fünf Links.
755 Wählen Sie den Link zum @emph{Backend}, wo sich die Information
756 über Layout-Objekte befindet.  Hier, unter der Überschrift
757 @strong{Backend}, wählen Sie den Link @emph{All layout objects}.
758 Die Seite, die sich öffnet, enthält ein Liste aller Layout-Objekte,
759 die in Ihrer LilyPond-Version benutzt werden, in alphabetischer
760 Ordnung. Wählen Sie den Link @emph{Slur} und die Eigenschaften
761 der Legatobögen (engl. slur) werden aufgelistet.
762
763 Eine alternative Methode, auf diese Seite zu gelangen, ist von
764 der Notationsreferenz aus.  Auf einer der Seiten zu Legatobögen
765 findet sich ein Link zur Referenz der Interna.  Dieser Link führt
766 Sie direkt auf diese Seite.  Wenn Sie aber eine Ahnung haben,
767 wie die Bezeichnung des Layout-Objektes lauten könnte, das sie
768 ändern wollen, ist es oft schneller, direkt zur IR zu gehen und
769 dort nachzuschlagen.
770
771 Der Slur-Seite in der IR können wir entnehmen, dass
772 Legatobögen (Slur-Objekte) durch den Slur_engraver erstellt
773 werden.  Dann werden die Standardeinstellungen aufgelistet.
774 Schauen Sie sich die Liste an, ob sie eine Eigenschaft
775 enthält, mit der die Dicke von Legatobögen kontrolliert werden kann.
776 Sie sollten folgendes finden:
777
778 @example
779 @code{thickness} (number)
780      @code{1.2}
781      Line thickness, generally measured in @code{line-thickness}
782 @end example
783
784 Das sieht ganz danach aus, als ob damit die Dicke geändert
785 werden kann.  Es bedeutet, dass der Wert von
786 @code{thickness} einfach eine Zahl (@emph{number}) ist,
787 dass der Standardwert 1.2 ist, und dass die Einheit
788 für die Dicke eine andere Eigenschaft mit der
789 Bezeichnung @code{line-thickness} ist.
790
791 Wie schon früher gesagt, gibt es wenig bis gar keine Erklärungen
792 in der IR, aber wir haben schon genug Informationen, um
793 zu versuchen, die Dicke eines Legatobogens zu ändern.  Die
794 Bezeichnung des Layout-Objekts ist offensichtlich @code{Slur}
795 und die Bezeichnung der Eigenschaft, die geändert werden soll
796 @code{thickness}.  Der neue Wert sollte etwas mehr als 1.2 sein,
797 denn der Bogen soll ja dicker werden.
798
799 Den benötigten @code{\override}-Befehl können wir jetzt einfach
800 konstruieren, indem wir die Werte für die Bezeichnungen in den
801 Modellbefehl einfügen und den Kontext auslassen.  Setzen wir
802 einmal einen sehr großen Wert für die Dicke um zu sehen, ob der
803 Befehl auch funktioniert.  Also:
804
805 @example
806 \override Slur.thickness = #5.0
807 @end example
808
809 Vergessen Sie nicht das@tie{}@code{#} vor dem neuen Wert!
810
811 Die nächste Frage ist nun: @qq{Wohin soll dieser Befehl geschrieben
812 werden?} Solange wir uns noch im Lernstadium befinden, ist
813 die beste Antwort: @qq{Innerhalb der Noten, vor den ersten
814 Legatobogen und nahe bei ihm.} Also etwa so:
815
816 @cindex Legatobogen, Beispiel für Veränderung
817 @cindex thickness-Eigenschaft, Beispiel
818 @cindex Dicke-Eigenschaft, Beispiel
819
820 @lilypond[quote,verbatim]
821 {
822   \key es \major
823   \time 6/8
824   \relative {
825     % Increase thickness of all following slurs from 1.2 to 5.0
826     \override Slur.thickness = #5.0
827     r4 bes'8 bes[( g]) g |
828     g8[( es]) es d[( f]) as |
829     as8 g
830   }
831   \addlyrics {
832     The man who | feels love's sweet e -- | mo -- tion
833   }
834 }
835 @end lilypond
836
837 @noindent
838 und wirklich wird der Legatobogen dicker.
839
840 Das ist also die grundlegende Herangehensweise,
841 @code{\override}-Befehl zu formulieren. Es gibt einige
842 zusätzliche Komplikationen, denen wir uns später widmen
843 werden, aber Sie haben jetzt das Handwerkszeug, um Ihre
844 eigenen Befehle zu konstruieren -- wenn Sie auch noch etwas
845 Übung benötigen. Die sollen Sie durch die folgenden Übungen
846 erhalten.
847
848 @subsubsubheading Den Kontext finden
849
850 @cindex Kontext, Finden und identifizieren
851
852 Manchmal muss dennoch der Kontext spezifiziert werden.
853 Welcher aber ist der richtige Kontext? Wir könnten raten,
854 dass Legatobögen sich im @code{Voice}-Kontext befinden,
855 denn sie sind immer einzelnen Melodielinien zugewiesen.
856 Aber wir können uns dessen nicht sicher sein. Um unsere
857 Annahme zu überprüfen, gehen wir wieder zu der Seite im
858 IR, die die Legatobögen beschreibt und die Überschrift
859 @emph{Slur} hat. Dort steht: @qq{Slur objects are created
860 by: Slur engraver}. Legatobögen werden also in dem Kontext
861 erstellt, in dem sich der @code{Slur_engraver} befindet.
862 Folgen Sie dem Link zu der @code{Slur_engraver}-Seite.
863 Unten auf der Seite steht, dass der @code{Slur_engraver}
864 sich in fünf Stimmen-Kontexten befindet, unter anderem
865 auch im normalen @code{Voice}-Kontext. Unsere Annahme
866 war also richtig. Und weil @code{Voice} einer der Kontexte
867 der untersten Ebene ist, welcher eindeutig schon dadurch
868 definiert ist, dass wir Noten eingeben, kann er an dieser Stelle
869 auch weggelassen werden.
870
871 @subsubsubheading Nur einmal mit \override verändern
872
873 @cindex Override nur einmal
874 @cindex once override
875
876 @funindex \once
877
878 Im Beispiel oben wurden @emph{alle} Legatobögen dicker
879 gesetzt. Vielleicht wollen Sie aber nur den ersten Bogen
880 dicker haben. Das können Sie mit dem @code{\once}-Befehl
881 erreichen. Er wird direkt vor den @code{\override}-Befehl
882 gesetzt und bewirkt, dass nur der Bogen geändert wird, der
883 @strong{unmittelbar an der nächsten Note beginnt.} Wenn
884 die nächste Note keinen Bogenbeginn hat, dann passiert
885 gar nichts -- der Befehl wird nicht gespeichert, sondern einfach
886 vergessen. Der Befehl, mit @code{\once} zusammen benutzt,
887 muss also wie folgt positioniert werden:
888
889 @cindex Legatobogen, Beispiel zur Veränderung
890 @cindex thickness-Eigenschaft, Beispiel
891
892 @lilypond[quote,verbatim]
893 {
894   \key es \major
895   \time 6/8
896   \relative {
897     r4 bes'8
898     % Increase thickness of immediately following slur only
899     \once \override Slur.thickness = #5.0
900     bes8[( g]) g |
901     g8[( es]) es d[( f]) as |
902     as8 g
903   }
904   \addlyrics {
905     The man who | feels love's sweet e -- | mo -- tion
906   }
907 }
908 @end lilypond
909
910 @noindent
911 Jetzt bezieht er sich nur noch auf den ersten Legatobogen.
912
913 Der @code{\once}-Befehl kann übrigens auch vor einem @code{\set}-Befehl
914 eingesetzt werden.
915
916 @subsubsubheading Rückgängig machen
917
918 @cindex Revert
919 @cindex Rückgängig machen
920 @cindex Wiederherstellen von Standardeinstellungen
921 @cindex Standardeinstellungen, Wiederherstellen
922
923 @funindex \revert
924
925 Eine weitere Möglichkeit: nur die beiden ersten Legatobögen sollen
926 dicker gesetzt werden. Gut, wir könnten jetzt zwei Befehle benutzen,
927 jeden mit dem @code{\once}-Präfix und direkt vor die entsprechende
928 Note gestellt, an welcher der Bogen beginnt:
929
930 @cindex Legatobogen, Beispiel zur Veränderung
931 @cindex thickness-Eigenschaft, Beispiel
932
933 @lilypond[quote,verbatim]
934 {
935   \key es \major
936   \time 6/8
937   \relative {
938     r4 bes'8
939     % Increase thickness of immediately following slur only
940     \once \override Slur.thickness = #5.0
941     bes[( g]) g |
942     % Increase thickness of immediately following slur only
943     \once \override Slur.thickness = #5.0
944     g8[( es]) es d[( f]) as |
945     as8 g
946   }
947   \addlyrics {
948     The man who | feels love's sweet e -- | mo -- tion
949   }
950 }
951 @end lilypond
952
953 @noindent
954 Wir könnten aber auch den @code{\once}-Befehl weglassen und anstelle
955 dessen später den @code{\revert}-Befehl einsetzen, um die
956 @code{thickness}-Eigenschaft wieder auf ihren Standardwert zurückzusetzen:
957
958 @cindex Legatobogen, Beispiel zur Veränderung
959 @cindex thickness-Eigenschaft, Beispiel
960
961 @lilypond[quote,verbatim]
962 {
963   \key es \major
964   \time 6/8
965   \relative {
966     r4 bes'8
967     % Increase thickness of all following slurs from 1.2 to 5.0
968     \override Slur.thickness = #5.0
969     bes[( g]) g |
970     g8[( es]) es
971     % Revert thickness of all following slurs to default of 1.2
972     \revert Slur.thickness
973     d8[( f]) as |
974     as8 g
975   }
976   \addlyrics {
977     The man who | feels love's sweet e -- | mo -- tion
978   }
979 }
980 @end lilypond
981
982 @noindent
983 Der @code{\revert}-Befehl kann benutzt werden, um eine beliebige
984 Eigenschaft, die mit @code{\override} geändert worden ist, wieder in
985 ihre Standardeinstellungen zurückzuversetzen. In unserem Beispiel können
986 Sie die Methode benutzen, die Ihnen lieber ist, beide haben das gleiche
987 Resultat.
988
989 Damit endet die Einleitung in die Referenz der Interna (IR) und die
990 grundlegenden Optimierungsmethoden. Einige Beispiele folgen in späteren
991 Abschnitten dieses Kapitel, einerseits um Sie mit weiteren Möglichkeiten
992 der IR bekanntzumachen, andererseits um Ihnen mehr Übungsmöglichkeiten
993 zu geben, die relevante Information dort zu finden. Die Beispiele werden
994 Schritt für Schritt immer weniger Erklärungen beinhalten.
995
996
997 @node Eigenschaften die Schnittstellen besitzen können
998 @subsection Eigenschaften, die Schnittstellen besitzen können
999 @translationof Properties found in interfaces
1000
1001 @cindex Interface-Eigenschaften
1002 @cindex Eigenschaften von Interfaces
1003 @cindex Schnittstellen, Eigenschaften von
1004 @cindex Eigenschaften von Schnittstellen
1005
1006 Der Text unseres Beispiels soll jetzt kursiv gesetzt werden. Was für
1007 ein @code{\override}-Befehl wird dazu benötigt? Schauen wir
1008 uns zunächst das Inhaltsverzeichnis in der IR an: @qq{All layout objects},
1009 wie auch schon zuvor. Welches Objekt könnte die Darstellung des
1010 Textes (engl. lyrics) beeinflussen? Es gibt den Eintrag @code{LyricText},
1011 das hört sich schon sehr gut an. Ein Klick hierauf zeigt alle Eigenschaften
1012 an, die verändert werden können. Dazu gehört
1013 @code{font-series} und @code{font-size}, aber nichts, womit man kursiven
1014 Text erreichen könnte. Das liegt daran, dass die Schnitteigenschaft allen
1015 Schrift-Objekten gemeinsam ist. Sie findet sich also nicht in jedem einzelnen
1016 Layout-Objekt aufgelistet, sondern ist mit anderen ähnlichen Eigenschaften
1017 zusammen in einem @strong{Interface} -- einer Schnittstelle -- verortet;
1018 in diesem Fall das
1019 @code{font-interface}.
1020
1021 Jetzt müssen wir also lernen, wie wir Eigenschaften von Schnittstellen finden
1022 und wie wir herausfinden, welche Objekte diese Schnittstelleneigenschaften
1023 benutzen.
1024
1025 Schauen Sie sich noch einmal die Seite in der IR an, die @code{LyricText}
1026 beschreibt. Unten auf der Seite ist eine klickbare Liste (in der HTML-Version
1027 der IR) an Eigenschaften, die von @code{LyricText} unterstützt
1028 werden. Diese Liste enthält sieben Einträge, darunter auch
1029 @code{font-interface}. Ein Klick hierauf bringt uns zu den Eigenschaften,
1030 die mit dieser Schnittstelle verbunden sind, also auch @code{LyricText}.
1031
1032 Jetzt sehen wir alle die Eigenschaften, die der Benutzer verändern kann,
1033 um die Schriftartendarstellung zu beeinflussen. Dazu gehört nun auch
1034 @code{font-shape(symbol)}, wobei @code{symbol} auf die Werte
1035 @code{upright} (gerade), @code{italics} (kursiv) oder @code{caps}
1036 (Kapitälchen) gesetzt werden kann.
1037
1038 Sie werden gemerkt haben, dass @code{font-series} und @code{font-size}
1039 hier auch aufgelistet sind. Es stellt sich die Frage, warum diese
1040 allgemeinen Schriftarteigenschaften @code{font-series} und
1041 @code{font-size} sowohl unter der Überschrift
1042 @code{LyricText} als unter dem @code{font-interface} aufgelistet
1043 sind, aber @code{font-shape} befindet sich nur im
1044 @code{font-interface}? Die Antwort ist: Die globalen Einstellungen
1045 von @code{font-series} und @code{font-size} werden geändert, wenn
1046 ein @code{LyricText}-Objekt erstellt wird, aber @code{font-shape}
1047 wird davon nicht beeinflusst. Die zusätzlichen Einträge unter der
1048 Überschrift @code{LyricText} beinhalten dann die Werte der
1049 Standardeinstellungen dieser zwei Eigenschaften, wenn es sich
1050 um ein @code{LyricText}-Objekt handelt. Andere Objekte,
1051 die auch das @code{font-interface} unterstützen, setzen diese
1052 Eigenschaften anders, wenn sie erstellt werden.
1053
1054 Versuchen wir nun einen @code{\override}-Befehl zu konstruieren,
1055 der den Gesangstext kursiv setzt.  Das Objekt hat die Bezeichnung
1056 @code{LyricText}, die Eigenschaft ist @code{font-shape}
1057 und der Wert @code{italic}.  Wie vorher schon lassen wir den
1058 Kontext aus.
1059
1060 Am Rande sei auf das wichtige Detail hingewiesen, dass die Werte für
1061 manche Eigenschaften Symbole sind, wie z.B. @code{italic} und dass
1062 diese mit einem Apostroph (@code{'}) gekennzeichnet werden müssen.
1063 Symbole sind besondere Bezeichnungen, die LilyPond intern
1064 bekannt sind.  Im Unterschied hierzu gibt es auch beliebige
1065 Zeichenketten, die immer mit Anführungszeichen, also
1066 als @code{"Zeichenkette"} auftreten. Für weitere
1067 Einzelheiten zu Zeichenketten und Werten, siehe
1068 @rextend{Scheme-Tutorium}.
1069
1070 Gut, der @code{\override}-Befehl, mit dem der Gesangstext
1071 kursiv gesetzt wird, lautet:
1072
1073 @example
1074 \override LyricText.font-shape = #'italic
1075 @end example
1076
1077 @noindent
1078 und er muss direkt vor den Text gesetzt werden, auf den er sich
1079 bezieht, etwa so:
1080
1081 @cindex font-shape-Eigenschaft, Beispiel
1082 @cindex LyricText, Beispiel zur Veränderung
1083 @cindex kursiv, Beispiel
1084 @cindex @code{\addlyrics}, Beispiel
1085
1086 @lilypond[quote,ragged-right,verbatim]
1087 {
1088   \key es \major
1089   \time 6/8
1090   \relative {
1091     r4 bes'8 bes[( g]) g |
1092     g8[( es]) es d[( f]) as |
1093     as8 g
1094   }
1095   \addlyrics {
1096     \override LyricText.font-shape = #'italic
1097     The man who | feels love's sweet e -- | mo -- tion
1098   }
1099 }
1100 @end lilypond
1101
1102 @noindent
1103 Jetzt wird der Text kursiv gesetzt.
1104
1105 @warning{Innerhalb von Gesangstext muss immer ein
1106 Leerzeichen zwischen der letzten Silbe und der schließenden
1107 Klammer gesetzt werden.}
1108
1109
1110 @seealso
1111 Erweitern: @rextend{Scheme-Tutorium}.
1112
1113
1114 @node Typen von Eigenschaften
1115 @subsection Typen von Eigenschaften
1116 @translationof Types of properties
1117
1118 @cindex Eigenschaftsarten
1119
1120 Bis jetzt hatten wir es mit zwei Arten von Eigenschaften zu
1121 tun: @code{number} (Zahl) und @code{symbol}.  Damit
1122 ein Befehl funktioniert, muss der Wert einer Eigenschaft
1123 vom richtigen Typ sein und die Regeln befolgen, die
1124 für diesen Typ gelten.  Der Eigenschaftstyp ist in der
1125 IR in Klammern hinter der Eigenschaftsbezeichnung
1126 angegeben.  Hier eine Liste der Typen, die Sie vielleicht
1127 benötigen werden, mit den Regeln, die für den jeweiligen
1128 Typ gelten und einigen Beispielen. Sie müssen immer
1129 ein Rautenzeichen (@code{#}) vor den Typeintrag setzen,
1130 wenn sie in einem @code{\override}-Befehl benutzt werden,
1131 auch dann, wenn der Wert selbst bereits mit@tie{}@code{#}
1132 anfängt.  Alle Beispiele verwenden ausschließlich Konstanten.
1133 Für die Verwendungen von mit Scheme berechneten Werten siehe
1134 @rextend{Berechnungen in Scheme}.
1135
1136 @multitable @columnfractions .2 .45 .35
1137 @headitem Eigenschaftstyp
1138   @tab Regeln
1139   @tab Beispiele
1140 @item Boolesch
1141   @tab Entweder wahr oder falsch, dargestellt als @code{#t} oder @code{#f}
1142   @tab @code{#t}, @code{#f}
1143 @item Dimension (in Notenlinienabständen)
1144   @tab Eine Dezimalzahl (in Notenlinienabstand-Einheiten)
1145   @tab @code{2.5}, @code{0.34}
1146 @item Richtung
1147   @tab Eine gültige Richtungskonstante oder das numerische Äquivalent
1148   (@code{0} or @code{CENTER} bezeichnen eine neutrale Richtung)
1149   @tab @code{LEFT}, @code{CENTER}, @code{UP},
1150        @code{1}, @w{@code{-1}}
1151 @item Integer
1152   @tab Eine ganze Zahl
1153   @tab @code{3}, @code{-1}
1154 @item Liste
1155   @tab Eine Folge von Konstanten oder Symbolen in Klammern, angeführt von einem Apostroph;
1156   Einträge durch Leerzeichen voneinander getrennt
1157   @tab @code{'(left-edge staff-bar)}, @code{'(1)}, @code{'()},
1158        @code{'(1.0 0.25 0.5)}
1159 @item Textbeschriftung (markup)
1160   @tab Beliebige gültige Beschriftung
1161   @tab @code{\markup @{ \italic "cresc." @}}, @code{"bagpipe"}
1162 @item Moment
1163   @tab Ein Bruch einer ganzen Note, mit der make-moment-Funktion
1164   konstruiert
1165   @tab @code{(ly:make-moment 1/4)},
1166        @code{(ly:make-moment 3/8)}
1167 @item Zahl
1168   @tab Eine beliebige positive oder negative Dezimalzahl
1169   @tab @code{3}, @w{@code{-2.45}}
1170 @item Paar (Zahlenpaar)
1171   @tab Zwei Zahlen getrennt durch @qq{Leerzeichen . Leerzeichen}, eingeklammert
1172   und angeführt von einem Apostroph
1173   @tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)}
1174 @item Symbol
1175   @tab Eine beliebige Anzahl von Symbolen, die für die Eigenschaft
1176   gültig sind, angeführt von einem Apostroph
1177   @tab @code{'italic}, @code{'inside}
1178 @item Unbekannt
1179   @tab Eine Prozedur oder @code{#f} (um keine Aktion hervorzurufen)
1180   @tab @code{bend::print}, @code{ly:text-interface::print},
1181        @code{#f}
1182 @item Vektor
1183   @tab Konstanten, getrennt durch Leerzeichen, eingeschlossen in
1184   @code{#(}@dots{}@code{)}.
1185   @tab @code{#(#t #t #f)}
1186 @end multitable
1187
1188
1189 @seealso
1190 Erweitern: @rextend{Scheme-Tutorium}.
1191
1192
1193 @node Erscheinung von Objekten
1194 @section Erscheinung von Objekten
1195 @translationof Appearance of objects
1196
1197 In diesem Abschnitt wollen wir zeigen, wie die Kenntnisse der
1198 vorigen Abschnitte in der Praxis angewandt werden können,
1199 um das Aussehen des Musiksatzes zu beeinflussen.
1200
1201 @menu
1202 * Sichtbarkeit und Farbe von Objekten::
1203 * Größe von Objekten::
1204 * Länge und Dicke von Objekten::
1205 @end menu
1206
1207
1208 @node Sichtbarkeit und Farbe von Objekten
1209 @subsection Sichtbarkeit und Farbe von Objekten
1210 @translationof Visibility and color of objects
1211
1212 In Unterrichtsmaterial für den Musikunterricht wird oft
1213 eine Partitur dargestellt, in der bestimmte Notationselemente
1214 fehlen, so dass der Schüler die Aufgabe bekommt, die
1215 nachzutragen.  Ein einfaches Beispiel ist etwa, die
1216 Taktstriche zu entfernen, damit der Schüler sie selber zeichnen
1217 kann.  Aber die Taktstriche werden normalerweise automatisch
1218 eingefügt.  Wie verhindern wir, dass sie ausgegeben werden?
1219
1220 Bevor wir uns hieran machen, sei daran erinnert, dass
1221 Objekteigenschaften in sogenannten @emph{Schnittstellen}
1222 -- engl. interface -- gruppiert sind, siehe auch
1223 @ref{Eigenschaften die Schnittstellen besitzen können}.  Das dient ganz einfach
1224 dazu, die Eigenschaften zusammenzufassen, die üblicherweise
1225 zusammen benötigt werden -- wenn eine davon für ein Objekt
1226 gilt, dann auch die anderen.  Manche Objekte brauchen die
1227 Eigenschaften von der einen Schnittstelle, andere von einer
1228 anderen.  Die Schnittstellen, die die Eigenschaften von einem
1229 bestimmten Grob beinhalten, sind in der IR unten auf der
1230 Seite aufgelistet, die dieses Grob beschreibt.  Die Eigenschaften
1231 können betrachtet werden, indem die Seite der entsprechenden
1232 Schnittstelle geöffnet wird.
1233
1234 Zu Information, wie man Eigenschaften von Grobs findet, siehe
1235 @ref{Eigenschaften von Layoutobjekten}.  Wir benutzen also jetzt
1236 die selbe Methode um in der IR das Layout-Objekt zu finden,
1237 dass für die Taktstriche zuständig ist.  Über die Überschriften
1238 @emph{Backend} und @emph{All layout objects} kommen
1239 wir zu einem Layout-Objekt mit der Bezeichnung
1240 @code{BarLine} (engl. Taktstrich).  Seine Eigenschaften
1241 beinhalten zwei, die über die Sichtbarkeit entscheiden:
1242 @code{break-visibility} und @code{stencil}.
1243 @code{BarLine} unterstützt auch einige Schnittstellen,
1244 unter anderem @code{grob-interface}, wo wir eine
1245 @code{transparent} und eine @code{color}-Eigenschaft
1246 finden.  Alle können die Sichtbarkeit von Taktstriche (und
1247 natürlich auch die Sichtbarkeit von vielen anderen Objekten)
1248 beeinflussen.  Schauen wir uns diese Eigenschaften eine
1249 nach der anderen an.
1250
1251 @menu
1252 * Die stencil-Eigenschaft::
1253 * Die break-visibility-Eigenschaft::
1254 * Die transparent-Eigenschaft::
1255 * Die color-Eigenschaft::
1256 @end menu
1257
1258 @node Die stencil-Eigenschaft
1259 @unnumberedsubsubsec Die @code{stencil}-Eigenschaft (Matrize)
1260 @translationof The stencil property
1261
1262 @cindex Stencil-Eigenschaft
1263 @cindex Matrizen-Eigenschaft
1264
1265 Diese Eigenschaft kontrolliert die Erscheinung der Taktstriche,
1266 indem sie das Symbol bestimmt, das ausgegeben werden soll.
1267 Wie bei vielen anderen Eigenschaften auch, kann sie so
1268 eingestellt werden, dass sie nichts ausgibt, indem ihr Wert
1269 auf @code{#f} (falsch) gesetzt wird.  Ein Versuch also,
1270 wie vorher, indem wir den impliziten Kontext (@code{Voice})
1271 auslassen:
1272
1273 @cindex Taktstrich, Beispiel zur Veränderung
1274 @cindex stencil-Eigenschaft, Beispiel
1275
1276 @lilypond[quote,ragged-right,verbatim]
1277 \relative {
1278   \time 12/16
1279   \override BarLine.stencil = ##f
1280   c''4 b8 c d16 c d8 |
1281   g,8 a16 b8 c d4 e16 |
1282   e8
1283 }
1284 @end lilypond
1285
1286 Die Taktstriche werden aber immer noch angezeigt.  Was ist da
1287 falsch gelaufen?  Gehen Sie zurück zur IR und schauen Sie auf
1288 die Seite, die die Eigenschaften für @code{BarLine} angibt.
1289 Oben auf der Seite steht: @qq{Barline objects are created
1290 by: Bar_engraver}.  Schauen Sie sich die
1291 @code{Bar_engraver}-Seite an.  Unten auf der Seite steht
1292 eine Liste der Kontexte, in denen der Takt-Engraver
1293 funktioniert.  Alle Kontexte sind @code{Staff}-Typen (also
1294 Notensystem-Typen).  Der Grund, warum der
1295 @code{\override}-Befehl nicht funktioniert hat, liegt
1296 also darin, dass das Taktstrich-Objekt (@code{BarLine}) sich nicht
1297 im @code{Voice}-Kontext befindet.  Wenn der Kontext
1298 falsch angegeben wird, bewirkt der Befehl einfach gar
1299 nichts.  Keine Fehlermeldung wird ausgegeben und auch
1300 nichts in die Log-Datei geschrieben.  Versuchen wir also,
1301 den richtigen Kontext mit anzugeben:
1302
1303 @cindex Taktstrich, Beispiel zur Veränderung
1304 @cindex stencil-Eigenschaft, Beispiel
1305
1306 @lilypond[quote,ragged-right,verbatim]
1307 \relative {
1308   \time 12/16
1309   \override Staff.BarLine.stencil = ##f
1310   c''4 b8 c d16 c d8 |
1311   g,8 a16 b8 c d4 e16 |
1312   e8
1313 }
1314 @end lilypond
1315
1316 @noindent
1317 Jetzt sind die Taktstriche wirklich verschwunden.  Setzen der
1318 @code{stencil}-Eigenschaft auf @code{#f} wird derart häufig verwendet,
1319 dass es dafür einen eigenen Befehl gibt, @code{\omit}:
1320 @funindex \omit
1321
1322 @lilypond[quote,ragged-right,verbatim]
1323 \relative {
1324   \time 12/16
1325   \omit Staff.BarLine
1326   c''4 b8 c d16 c d8 |
1327   g,8 a16 b8 c d4 e16 |
1328   e8
1329 }
1330 @end lilypond
1331
1332
1333 Es sollte jedoch beachtet werden, dass das Setzen der
1334 @code{stencil}-Eigenschaft auf @code{#f} zu Fehlerhinweisen führen
1335 kann, wenn die Dimensionen des Objekts für die richtige Behandlung
1336 benötigt werden.  Zum Beispiel werden Fehler ausgegeben, wenn
1337 die @code{stencil}-Eigenschaft des @code{NoteHead}-Objekts auf
1338 @code{#f} gesetzt wird. Wenn dieser Fall auftritt, kann anstatt
1339 dessen die @code{point-stencil}-Funktion benutzt werden, welche
1340 den Stencil auf ein Objekt mit der Größe Null setzt:
1341
1342 @lilypond[quote,verbatim]
1343 \relative {
1344   c''4 c
1345   \once \override NoteHead.stencil = #point-stencil
1346   c4 c
1347 }
1348 @end lilypond
1349
1350 @node Die break-visibility-Eigenschaft
1351 @unnumberedsubsubsec The @code{break-visibility}-Eigenschaft (unsichtbar machen)
1352 @translationof The break-visibility property
1353
1354 @cindex break-visibility-Eigenschaft
1355 @cindex Unsichtbar machen (break-visibility)
1356
1357 Aus der Beschreibung der Eigenschaften für @code{BarLine}
1358 in der IR geht hervor, dass die @code{break-visibility}-Eigenschaft
1359 einen Vektor mit drei Booleschen Werten benötigt. Diese
1360 kontrollieren jeweils, ob die Taktstriche am Ende einer Zeile,
1361 in der Mitte einer Zeile und am Anfang einer Zeile ausgegeben
1362 werden.  Wenn also alle Taktstriche unsichtbar sein sollen, wie in
1363 unserem Beispiel, brauchen wir den Wert @code{#(#f #f #f)}, (den es auch
1364 unter dem symbolischen Namen @code{all-invisible} gibt).
1365 Versuchen wir es also, und berücksichtigen wir auch den
1366 @code{Staff}-Kontext.  Beachten Sie auch, dass Sie @code{##}
1367 vor der öffnenden Klammer schreiben müssen:
1368 @code{#} wird benötigt als Teil des Wertes, um einen Vektor zu
1369 signalisieren, und das erste@tie{}@code{#} wird benötigt, um
1370 den Wert in einem @code{\override}-Befehl anzuführen.
1371
1372 @cindex Taktstrich, Beispiel zur Veränderung
1373 @cindex break-visibility-Eigenschaft, Beispiel
1374
1375 @lilypond[quote,ragged-right,verbatim]
1376 \relative {
1377   \time 12/16
1378   \override Staff.BarLine.break-visibility = ##(#f #f #f)
1379   c''4 b8 c d16 c d8 |
1380   g,8 a16 b8 c d4 e16 |
1381   e8
1382 }
1383 @end lilypond
1384
1385 @noindent
1386 Auch auf diesem Weg gelingt es, die Taktstriche unsichtbar zu machen.
1387
1388 @node Die transparent-Eigenschaft
1389 @unnumberedsubsubsec Die @code{transparent}-Eigenschaft (durchsichtig)
1390 @translationof The transparent property
1391
1392 @cindex transparent-Eigenschaft
1393 @cindex Durchsichtig machen (transparent)
1394
1395 Aus den Eigenschaftsdefinitionen auf der @code{grob-interface}-Seite
1396 in der IR geht hervor, dass die @code{transparent}-Eigenschaft
1397 boolesch ist.  Mit @code{#t} (wahr) wird also ein Grob durchsichtig
1398 gemacht.  Im unserem Beispiel soll jetzt die Taktart durchsichtig
1399 gemacht werden, anstatt die Taktstriche durchsichtig zu machen.
1400 Wir brauchen also wieder die Grob-Bezeichnung für die Taktart.
1401 Auf der @qq{All layout objects}-Seite in der IR müssen wir die
1402 Eigenschaften des @code{TimeSignature}-Layout-Objekts suchen
1403 Das Objekt wird vom @code{Time_signature_engraver} erstellt,
1404 der sich auch im @code{Staff}-Kontext befindet und genauso das
1405 @code{grob-interface} unterstützt, wie Sie sich
1406 überzeugen können.  Der Befehl, um die Taktangabe unsichtbar zu
1407 machen, ist also:
1408
1409 @cindex Taktart, Beispiel zur Veränderung
1410 @cindex transparent-Eigenschaft, Beispiel
1411
1412 @lilypond[quote,ragged-right,verbatim]
1413 \relative {
1414   \time 12/16
1415   \override Staff.TimeSignature.transparent = ##t
1416   c''4 b8 c d16 c d8 |
1417   g,8 a16 b8 c d4 e16 |
1418   e8
1419 }
1420 @end lilypond
1421
1422 @noindent
1423 Auch das Setzen der @code{transparent}-Eigenschaft ist ein recht häufige
1424 Operation und so gibt es auch hierfür eine Kurzform names @code{\hide}:
1425 @funindex \hide
1426
1427 @lilypond[quote,ragged-right,verbatim]
1428 \relative {
1429   \time 12/16
1430   \hide Staff.TimeSignature
1431   c''4 b8 c d16 c d8 |
1432   g,8 a16 b8 c d4 e16 |
1433   e8
1434 }
1435 @end lilypond
1436
1437 @noindent
1438 In beiden Fällen ist die Taktangabe ist verschwunden, aber mit diesem Befehl
1439 bleibt freier Platz, wo sich die Taktangabe eigentlich befinden
1440 würde.  Das braucht man vielleicht für eine Schulaufgabe, in der
1441 die richtige Taktangabe eingefügt werden soll, aber in anderen
1442 Fällen ist diese Lücke nicht schön.  Um auch die Lücke zu entfernen,
1443 muss stattdessen die Matrize (stencil) der Taktangabe auf @code{#f} (falsch)
1444 gesetzt werden:
1445
1446 @cindex Taktart, Beispiel zur Veränderung
1447 @cindex stencil-Eigenschaft, Beispiel
1448
1449 @lilypond[quote,fragment,ragged-right,verbatim,relative=2]
1450 {
1451   \time 12/16
1452   \override Staff.TimeSignature.stencil = ##f
1453   c4 b8 c d16 c d8 |
1454   g,8 a16 b8 c d4 e16 |
1455   e8
1456 }
1457 @end lilypond
1458
1459 @noindent
1460 Und der Unterschied wird deutlich: Setzen des stencil auf @code{#f} (ggf.
1461 mittels @code{\omit}) entfernt das gesamte Objekt, während man mit
1462 @code{transparent} (was auch mittels @code{\hide} eingestellt werden kann)
1463 ein Objekt unsichtbar machen kann, es aber an seinem Platz gelassen wird.
1464
1465 @node Die color-Eigenschaft
1466 @unnumberedsubsubsec Die @code{color}-Eigenschaft (Farbe)
1467 @translationof The color property
1468
1469 @cindex color-Eigenschaft
1470 @cindex Farb-Eigenschaft
1471
1472 Abschließend wollen wir die Taktstriche unsichtbar machen, indem
1473 wir sie weiß einfärben.  (Es gibt hier eine Schwierigkeit: die weiße
1474 Taktstrich übermalt manchmal die Taktstriche, wo sie sie kreuzt,
1475 manchmal aber auch nicht.  Sie können in den Beispielen unten
1476 sehen, dass das nicht vorhersagbar ist.  Die Einzelheiten dazu, warum
1477 das passiert und wie sie es kontrollieren können, werden dargestellt
1478 in @ruser{Objekte weiß malen}.  Im Moment wollen wir lernen, wie
1479 man mit Farbe arbeitet, akzeptieren Sie bitte an dieser Stelle die
1480 Beschränkung.)
1481
1482 Das @code{grob-interface} bestimmt, dass der Wert der Farb-Eigenschaft
1483 eine Liste ist, aber es gibt keine Erklärung, was für eine Liste das
1484 sein soll.  Die Liste, die benötigt wird, ist eine Liste mit Werten in
1485 internen Einheiten, aber damit Sie nicht wissen müssen, wie diese
1486 aussehen, gibt es mehrere Wege, Farben anzugeben.  Der erste
1487 Weg ist es, @qq{normale} Farben zu benutzen, wie sie in der
1488 Tabelle in @ruser{Liste der Farben} aufgelistet sind.  Beachten Sie,
1489 dass die Bezeichnungen auf Englisch sind.  Um die Taktstriche auf
1490 weiß zu setzen, können Sie schreiben:
1491
1492 @cindex Taktstrich, Beispiel zur Veränderung
1493 @cindex color-Eigenschaft, Beispiel
1494
1495 @lilypond[quote,ragged-right,verbatim]
1496 \relative {
1497   \time 12/16
1498   \override Staff.BarLine.color = #white
1499   c''4 b8 c d16 c d8 |
1500   g,8 a16 b8 c d4 e16 |
1501   e8
1502 }
1503 @end lilypond
1504
1505 @noindent
1506 und die Taktstriche verschwinden in der Tat.  Beachten Sie,
1507 dass @emph{white} nicht mit einem Apostroph angeführt
1508 wird -- es ist kein Symbol, sondern eine @emph{Variable}.
1509 Wird sie ausgewertet, stellt sie eine Liste mit internen
1510 Werten zu Verfügung, mit welcher die Farbe auf weiß
1511 gestellt wird.  Die anderen Farben in der Liste sind auch
1512 Funktionen.  Um sich zu überzeugen, dass der Befehl auch
1513 wirklich funktioniert, können Sie die Farbe auf eine der
1514 anderen Variablen dieser Liste abändern.
1515
1516 @cindex Farben, X11
1517 @cindex X11-Farben
1518
1519 @funindex x11-color
1520
1521 Die zweite Art die Farbe zu ändern geschieht, indem die Liste
1522 der X11-Farbbezeichnungen einzusetzen, siehe die zweite Liste
1523 in @ruser{Liste der Farben}.  Diese Namen werden durch die Funktion
1524 @code{x11-color} durch die tatsächlichen internen Farbwerte ersetzt.
1525 Das geschieht wie folgt:
1526
1527 @cindex Taktstrich, Beispiel zur Veränderung
1528 @cindex color-Eigenschaft, Beispiel
1529
1530 @lilypond[quote,ragged-right,verbatim]
1531 \relative {
1532   \time 12/16
1533   \override Staff.BarLine.color = #(x11-color 'white)
1534   c''4 b8 c d16 c d8 |
1535   g,8 a16 b8 c d4 e16 |
1536   e8
1537 }
1538 @end lilypond
1539
1540 @noindent
1541 In diesem Fall hat die Funktion @code{x11-color} ein Symbol
1542 als Argument, darum muss dem Symbol ein Apostroph vorangestellt
1543 werden, damit es nicht als Variable interpretiert wird. Beide
1544 zusammen müssen in Klammern gesetzt werden.
1545
1546 @cindex RGB-Farben
1547 @cindex Farben, RGB
1548
1549 @funindex rgb-color
1550
1551 Es gibt noch eine weitere Funktion, die RGB-Werte in die
1552 internen Werte übersetzt -- die @code{rgb-color}-Funktion.  Sie
1553 braucht drei Argumente, um die Stärke von Rot, Grün und
1554 Blau darzustellen. Die Werte befinden sich zwischen
1555 0 und 1.  Um also die Farbe Rot darzustellen, muss der
1556 Wert der Funktion lauten: @code{(rgb-color 1 0 0)}, weiß
1557 würde sein: @code{(rgb-color 1 1 1)}.
1558
1559 @cindex Taktstrich, Beispiel zur Veränderung
1560 @cindex color-Eigenschaft, Beispiel
1561
1562 @lilypond[quote,ragged-right,verbatim]
1563 \relative {
1564   \time 12/16
1565   \override Staff.BarLine.color = #(rgb-color 1 1 1)
1566   c''4 b8 c d16 c d8 |
1567   g,8 a16 b8 c d4 e16 |
1568   e8
1569 }
1570 @end lilypond
1571
1572 Schließlich gibt es noch eine Grauskala, die zu den X11-Farben
1573 gehört.  Sie reicht von schwarz (@code{'grey0}) bis
1574 weiß (@code{'grey100}), in Einerschritten.  Wir wollen das
1575 illustrieren, indem alle Layout-Objekte im Beispiel
1576 verschiedene Grauschattierungen erhalten:
1577
1578 @cindex StaffSymbol, Beispiel zur Veränderung
1579 @cindex TimeSignature, Beispiel zur Veränderung
1580 @cindex Schlüssel, Beispiel zur Veränderung
1581 @cindex Notenhals, Beispiel zur Veränderung
1582 @cindex Taktstrich, Beispiel zur Veränderung
1583 @cindex Farbeigenschaft, Beispiel
1584 @cindex x11-Farben, Beispiel
1585 @cindex Taktstriche, Beispiel zur Veränderung
1586 @cindex Taktart, Beispiel zur Veränderung
1587 @cindex Clef, Beispiel zur Veränderung
1588 @cindex Stem, Beispiel zur Veränderung
1589 @cindex NoteHead, Beispiel zur Veränderung
1590 @cindex Notenkopf, Beispiel zur Veränderung
1591
1592 @lilypond[quote,ragged-right,verbatim]
1593 \relative {
1594   \time 12/16
1595   \override Staff.StaffSymbol.color = #(x11-color 'grey30)
1596   \override Staff.TimeSignature.color = #(x11-color 'grey60)
1597   \override Staff.Clef.color = #(x11-color 'grey60)
1598   \override Voice.NoteHead.color = #(x11-color 'grey85)
1599   \override Voice.Stem.color = #(x11-color 'grey85)
1600   \override Staff.BarLine.color = #(x11-color 'grey10)
1601   c''4 b8 c d16 c d8 |
1602   g,8 a16 b8 c d4 e16 |
1603   e8
1604 }
1605 @end lilypond
1606
1607 @noindent
1608 Beachten Sie die Kontexte, die mit jedem einzelnen Layout-Objekt
1609 verbunden sind.  Es ist wichtig, den richtigen Kontext einzusetzen,
1610 damit die Befehle funktionieren.  Denken Sie daran, dass der
1611 Kontext sich daran orientiert, wo sich der entsprechende
1612 Engraver befindet.  Den Standardkontext für Engraver finden
1613 Sie, indem Sie beim Layout-Objekt beginnen, zum Engraver
1614 gehen, der es produziert und auf der Seite des Engravers in der
1615 IR finden Sie Information, in welchem Kontext sich der
1616 Engraver normalerweise befindet.
1617
1618
1619 @node Größe von Objekten
1620 @subsection Größe von Objekten
1621 @translationof Size of objects
1622
1623 @cindex Veränderung von Objektgrößen
1624 @cindex Objektgrößen, verändern
1625 @cindex Größen von Objekten verändern
1626
1627 Als Startpunkt wollen wir wieder ein früheres Beispiel
1628 wählen, siehe @ref{Musikalische Ausdrücke ineinander verschachteln}. Hier wurde
1629 ein neues Notensystem erstellt, wie man es für ein @rglos{ossia}
1630 braucht.
1631
1632 @cindex alignAboveContext-Eigenschaft, Beispiel
1633 @cindex über dem System anordnen, Beispiel
1634 @cindex @code{\with}-Beispiel
1635
1636 @lilypond[quote,ragged-right,verbatim]
1637 \new Staff ="main" {
1638   \relative {
1639     r4 g'8 g c4 c8 d |
1640     e4 r8
1641     <<
1642       { f8 c c }
1643       \new Staff \with {
1644         alignAboveContext = #"main" }
1645       { f8 f c }
1646     >>
1647     r4 |
1648   }
1649 }
1650 @end lilypond
1651
1652 Ossia-Systeme werden normalerweise ohne Schlüssel und Taktangabe
1653 geschrieben, und sie werden etwas kleiner als das Hauptsystem gesetzt.
1654 Wie man Schlüssel und Taktangabe entfernt, wissen wir schon:
1655 wir setzen den Stencil von beiden auf @code{#f}:
1656
1657 @cindex alignAboveContext-Eigenschaft, Beispiel
1658 @cindex über dem System anordnen, Beispiel
1659 @cindex @code{\with}-Beispiel
1660 @funindex \omit
1661 @cindex Schlüssel, Beispiel zur Veränderung
1662 @cindex Taktart, Beispiel zur Veränderung
1663
1664 @lilypond[quote,ragged-right,verbatim]
1665 \new Staff ="main" {
1666   \relative {
1667     r4 g'8 g c4 c8 d |
1668     e4 r8
1669     <<
1670       { f8 c c }
1671       \new Staff \with {
1672         alignAboveContext = #"main"
1673       }
1674       {
1675         \omit Staff.Clef
1676         \omit Staff.TimeSignature
1677         { f8 f c }
1678       }
1679     >>
1680     r4 |
1681   }
1682 }
1683 @end lilypond
1684
1685 @noindent
1686 wobei ein zusätzliches Klammerpaar nach der @code{\with}-Konstruktion
1687 erforderlich ist um sicherzugehen, dass die Modifikation und
1688 die Noten sich auch auf das Ossia-System beziehen.
1689
1690 Was für einen Unterschied macht es, ob man den @code{Staff}-Kontext
1691 mit @code{\with} verändert, oder ob man die Stencils mit
1692 @code{\override} oder wie in diesem Fall mit @code{\omit} beeinflusst?
1693 Der größte Unterschied liegt
1694 darin, dass Änderungen, die mit @code{\with} eingeführt werden,
1695 während der Erstellung des Kontextes mit erzeugt werden und
1696 als @strong{Standardeinstellungen} für diesen Kontext während seiner
1697 gesamten Dauer gelten, während @code{\set}- oder @code{\override}-Befehle
1698 dynamisch in die Noten eingebettet werden -- sie führen die
1699 Änderungen synchron mit einem bestimmten Zeitpunkt in
1700 der Musik aus.  Wenn die Änderungen mit  @code{\unset}
1701 oder @code{\revert} rückgängig gemacht werden, werden
1702 wieder die Standardwerte eingesetzt, die also die sind, die
1703 mit einer @code{\with}-Konstruktion definiert wurden, oder
1704 wenn hier keine definiert worden sind, die normalen
1705 Standardwerte.
1706
1707 Manche Kontexteigenschaften können nur ein einer
1708 @code{\with}-Konstruktion verändert werden.  Das sind
1709 Eigenschaften, die nicht sinnvoll mitten im System geändert
1710 werden können.  @code{alignAboveContext} (Orientierung
1711 über dem Kontext) und die Parallele,
1712 @code{alignBelowContext} (Orientierung unter dem Kontext)
1713 sind zwei derartige Eigenschaften -- wenn das Notensystem
1714 einmal erstellt wurde, ist die Orientierung schon bestimmt
1715 und es wäre nicht sinnvoll, sie später zu ändern.
1716
1717 Die Standardwerte für Layout-Objekt-Eigenschaften können
1718 auch in der @code{\with}-Konstruktion gesetzt werden.
1719 Benutzen Sie einfach den normalen @code{\override}-Befehl
1720 ohne den Kontext, denn der Kontext ist eindeutig definiert
1721 durch die Stelle, an welcher sich @code{\with} befindet.
1722 Wenn an dieser Stelle ein Kontext angegeben wird, produziert LilyPond
1723 eine Fehlermeldung.
1724
1725 Das obige Beispiel könnte also auch so aussehen:
1726
1727 @cindex alignAboveContext-Eigenschaft, Beispiel
1728 @cindex über dem System anordnen, Beispiel
1729 @cindex @code{\with}-Beispiel
1730 @cindex stencil-Eigenschaft, Beispiel
1731 @cindex Schlüssel, Beispiel zur Veränderung
1732 @cindex Taktart, Beispiel zur Veränderung
1733
1734 @lilypond[quote,ragged-right,verbatim]
1735 \new Staff ="main" {
1736   \relative {
1737     r4 g'8 g c4 c8 d |
1738     e4 r8
1739     <<
1740       { f8 c c }
1741       \new Staff \with {
1742         alignAboveContext = #"main"
1743         % Don't print clefs in this staff
1744         \override Clef.stencil = ##f
1745         % Don't print time signatures in this staff
1746         \override TimeSignature.stencil = ##f
1747       }
1748       { f8 f c }
1749     >>
1750     r4 |
1751   }
1752 }
1753 @end lilypond
1754
1755 Es zeigt sich, dass wir hier ebenso die Kurzformen @code{\hide}
1756 und @code{\omit} zum Setzen der @code{transparent}-Eigenschaft und
1757 zum Entfernen des @code{stencil} verwenden können, was zu folgender
1758 Fassung führt
1759
1760 @lilypond[quote,ragged-right,verbatim]
1761 \new Staff ="main" {
1762   \relative {
1763     r4 g'8 g c4 c8 d |
1764     e4 r8
1765     <<
1766       { f8 c c }
1767       \new Staff \with {
1768         alignAboveContext = #"main"
1769         % Don't print clefs in this staff
1770         \omit Clef
1771         % Don't print time signatures in this staff
1772         \omit TimeSignature
1773       }
1774       { f8 f c }
1775     >>
1776     r4 |
1777   }
1778 }
1779 @end lilypond
1780
1781 Nun können wir daran gehen, auch wirklich die
1782 Größe der Objekte zu ändern.
1783
1784 Manche Layout-Objekte werden aus Glyphen erstellt,
1785 die sich in einer Schriftartdatei befinden.  Dazu gehören
1786 die Notenköpfe, Versetzungszeichen, Text, Schlüssel,
1787 Taktbezeichnung, Dynamik und Gesangstext.  Ihre
1788 Größe wird verändert, indem die
1789 @code{font-size}- (Schriftgröße)-Eigenschaft geändert wird, wie
1790 wir bald sehen werden.  Andere Layout-Objekte, wie
1791 Bögen -- oder allgemein Strecker-Objekte -- werden
1792 individuell gezeichnet, es gibt dazu also keine
1793 @code{font-size}, die mit ihnen verknüpft wäre.
1794 Weitere Eigenschaften wie die Länge von Hälsen und
1795 Taktstriche, Dicke von Balken und anderen Linien und
1796 der Abstand der Notenlinien voneinander müssen auf
1797 spezielle Weise verändert werden.
1798
1799 In unserem Ossia-Beispiel wollen wir zuerst die
1800 Schriftgröße verändern.  Das ist auf zwei Arten möglich.
1801 Entweder wir ändern die Schriftgröße für jede Objektart
1802 mit einem eigenen Befehl, etwa:
1803
1804 @example
1805 \override NoteHead.font-size = #-2
1806 @end example
1807
1808 @noindent
1809 oder wir ändern die Größe aller Schriftobjekte, indem wir
1810 den Wert einer besonderen Eigenschaft, @code{fontSize},
1811 mit dem @code{\set}-Befehl bestimmen oder sie in
1812 eine @code{\with}-Konstruktion (ohne @code{\set} einschließen.
1813
1814 @example
1815 \set fontSize = #-2
1816 @end example
1817
1818 Beide Beispiele reduzieren die Schriftgröße um zwei Schritte
1819 im Vergleich zum vorigen Wert, wobei jeder Schritt die
1820 Schriftgröße um etwa 12% verändert.
1821
1822 Setzen wir das also in unserem Ossia-Beispiel ein:
1823
1824 @cindex alignAboveContext-Eigenschaft, Beispiel
1825 @cindex über dem System anordnen, Beispiel
1826 @cindex @code{\with}-Beispiel
1827 @cindex stencil-Eigenschaft, Beispiel
1828 @cindex Schlüssel, Beispiel zur Veränderung
1829 @cindex Taktart, Beispiel zur Veränderung
1830
1831 @lilypond[quote,ragged-right,verbatim]
1832 \new Staff ="main" {
1833   \relative {
1834     r4 g'8 g c4 c8 d |
1835     e4 r8
1836     <<
1837       { f8 c c }
1838       \new Staff \with {
1839         alignAboveContext = #"main"
1840         \omit Clef
1841         \omit TimeSignature
1842         % Verkleinere alle Fonts um ~24%
1843         fontSize = #-2
1844       }
1845       { f8 f c }
1846     >>
1847     r4 |
1848   }
1849 }
1850 @end lilypond
1851
1852 Das sieht aber immer noch nicht richtig aus.  Die Notenköpfe
1853 und Fähnchen sind kleiner, aber die Hälse im Vergleich
1854 dazu zu lang und die Notenlinien zu weit auseinander.
1855 Sie müssen auch proportional zur Schriftart verkleinert
1856 werden.  Der nächste Abschnitt behandelt diese Anpassung.
1857
1858
1859 @node Länge und Dicke von Objekten
1860 @subsection Länge und Dicke von Objekten
1861 @translationof Length and thickness of objects
1862
1863 @cindex Entfernungen
1864 @cindex Dicke
1865 @cindex Länge
1866 @funindex magstep
1867 @cindex Größe, verändern
1868 @cindex Notenhalslänge, verändern
1869 @cindex Hälse, Länge verändern
1870 @cindex Notenlinien, Länge verändern
1871
1872 Abstände und Längen werden in LilyPond üblicherweise
1873 in Notenlinienabständen (engl. staff-spaces) gemessen.
1874 Das ist der Abstand zwischen zwei Notenlinien im System.
1875 Die meisten Dicken (engl. thickness) dagegen werden in
1876 einer internen Einheit Linien-Dicke (engl. line-thickness)
1877 gemessen.  Die Linien von Dynamikklammern zum Beispiel
1878 haben standardmäßig eine Dicke von einer Einheit
1879 @code{line-thickness}, während die Dicke eines
1880 Notenhalses 1,3 ist.  Beachten Sie jedoch, dass sich
1881 manche Dicken anders verhalten: die Dicke von
1882 Balken etwa wird in Notenlinienabständen gemessen.
1883
1884 Wie also werden Längen skaliert um der Schriftgröße
1885 zu entsprechen?  Das kann mit einer besonderen Funktion
1886 @code{magstep} vorgenommen werden, die genau für
1887 diesen Zweck vorhanden ist.  Sie nimmt ein Argument auf,
1888 die Änderung der Schriftgröße (#-2 im obigen Beispiel)
1889 und gibt einen Skalierungsfaktor aus, der dazu dient,
1890 Objekte proportional zueinander zu verändern.  So wird
1891 sie benutzt:
1892
1893 @cindex alignAboveContext-Eigenschaft, Beispiel
1894 @cindex über dem System anordnen, Beispiel
1895 @cindex @code{\with}-Beispiel
1896 @cindex stencil-Eigenschaft, Beispiel
1897 @cindex Schlüssel, Beispiel zur Veränderung
1898 @cindex Taktart, Beispiel zur Veränderung
1899 @cindex Notenlinienabstände verändern
1900 @cindex staff-space-Eigenschaft verändern
1901 @cindex magstep-Funktion, Beispiel
1902 @cindex Schriftart-Eigenschaft, Beispiel
1903
1904 @lilypond[quote,ragged-right,verbatim]
1905 \new Staff ="main" {
1906   \relative {
1907     r4 g'8 g c4 c8 d |
1908     e4 r8
1909     <<
1910       { f8 c c }
1911       \new Staff \with {
1912         alignAboveContext = #"main"
1913         \omit Clef
1914         \omit TimeSignature
1915         fontSize = #-2
1916         % Reduziere Halslängen und Notenlinienabstände in gleicher Weise
1917         \override StaffSymbol.staff-space = #(magstep -2)
1918       }
1919       { f8 f c }
1920     >>
1921     r4 |
1922   }
1923 }
1924 @end lilypond
1925
1926 @noindent
1927 Da die Länge eines Halses und viele andere Längeneigenschaften
1928 relativ zum Wert des Notenlinienabstands (@code{staff-space})
1929 errechnet werden, werden sie auch automatisch verkleinert.
1930 Das wirkt sich jedoch nur auf die vertikale Skalierung des Ossias
1931 aus -- die horizontale Skala ist durch das Layout des Haupsystems
1932 bestimmt und wird also von diesen Größenänderungen nicht
1933 betroffen.  Wenn natürlich die Größe der gesamten Noten reduziert
1934 würde, würde sich auch die horizontalen Abstände ändern.  Dass
1935 wird später im Layout-Abschnitt betrachtet.
1936
1937 Mit dieser Änderung ist unser Ossia fertig.  Die Größen und Längen
1938 aller anderen Objekte können auf analoge Weise geändert
1939 werden.
1940
1941 Für kleine Größenänderungen, wie in dem obigen Beispiel,
1942 braucht die Dicke der verschiedenen Linien, wie Taktstriche,
1943 Notenlinien, Balken, Dynamikklammern usw. normalerweise
1944 keine spezielle Anpassung.  Wenn die Dicke eines bestimmten
1945 Layout-Objektes angepasst werden muss, kann man das erreichen,
1946 indem die entsprechende @code{thickness}-Eigenschaft des
1947 Objekts mit @code{\override} verändert wird.  Ein Beispiel,
1948 wie man die Dicke von Bögen ändert, wurde schon gezeigt,
1949 siehe @ref{Eigenschaften von Layoutobjekten}.  Die Dicke aller
1950 gezeichneten Objekte (die also nicht aus einer Schriftart
1951 stammen) können auf gleiche Weise geändert werden.
1952
1953
1954 @node Positionierung von Objekten
1955 @section Positionierung von Objekten
1956 @translationof Placement of objects
1957
1958 @menu
1959 * Automatisches Verhalten::
1960 * within-staff (Objekte innerhalb des Notensystems)::
1961 * Objekte außerhalb des Notensystems::
1962 @end menu
1963
1964
1965 @node Automatisches Verhalten
1966 @subsection Automatisches Verhalten
1967 @translationof Automatic behavior
1968
1969 @cindex within-staff-Objekte
1970 @cindex outside-staff-Objekte
1971 @cindex Objekte innerhalb des Notensystems
1972 @cindex Objekte außerhalb des Notensystems
1973
1974 Es gibt Objekte der Notation, die zum Notensystem gehören, und
1975 andere, die außerhalb des Systems gesetzt werden müssen.  Sie
1976 werden @code{within-staff}-Objekte bzw.
1977 @code{outside-staff}-Objekte genannt.
1978
1979 @code{within-staff}-Objekte werden innerhalb des Notensystems
1980 (engl. staff) gesetzt: Notenköpfe, Hälse, Versetzungszeichen
1981 usw.  Ihre Position ist üblicherweise durch die notierte Musik
1982 bestimmt -- sie werden vertikal auf bestimmten Linien notiert
1983 oder sind an andere Objekte gebunden, die vertikal festgelegt
1984 sind.  Kollisionen von Notenköpfen, Hälsen und Versetzungszeichen
1985 werden normalerweise automatisch vermieden.  Es gibt
1986 Befehle, um dieses automatische Verhalten zu verändern, wie
1987 unten gezeigt werden soll.
1988
1989 Objekte, die außerhalb des Notensystems gesetzt werden, sind
1990 unter Anderem Übungsmarkierungen, Text und Dynamikzeichen.
1991 LilyPonds Regel für ihre vertikale Positionierung lautet, sie so nah wie
1992 möglich am Notensystem zu setzen, aber nicht so nah, dass
1993 sie mit anderen Objekten kollidieren.  Dabei wird die
1994 @code{outside-staff-priority}-(Priorität außerhalb des Notensystems)-Eigenschaft
1995 eingesetzt, um die Reihenfolge zu bestimmen, in denen Objekte gesetzt werden
1996 sollen.
1997
1998 Zuerst werden alle Innersystemobjekte von LilyPond gesetzt.
1999 Dann werden die Objekte außerhalb des Systems nach
2000 ihrer
2001 @code{outside-staff-priority} geordnet.  Die @code{outside-staff}-Objekte
2002 werden dann nacheinander gesetzt, mit der niedrigsten
2003 Priorität beginnend, und so gesetzt, dass sie nicht mit anderen
2004 Objekten kollidieren, die schon gesetzt wurden.  Wenn also zwei
2005 @code{outside-staff}-Objekte um den selben Platz streiten,
2006 wird das mit der geringeren @code{outside-staff-priority} näher
2007 am System gesetzt werden.  Wenn zwei Objekte die selbe Priorität
2008 haben, wird das näher am System gesetzt, welches zuerst
2009 auftritt.
2010
2011 Im folgenden Beispiel haben alle Textbeschriftungen die gleiche
2012 Priorität (weil sie nicht explizit gesetzt worden ist).  Beachten Sie,
2013 dass @qq{Text3} wieder dicht am System gesetzt wurde, weil
2014 er unter @qq{Text2} passt.
2015
2016 @cindex Textbeschriftungsbeispiel
2017
2018 @lilypond[quote,fragment,ragged-right,verbatim]
2019 c''2^"Text1"
2020 c''2^"Text2" |
2021 c''2^"Text3"
2022 c''2^"Text4" |
2023 @end lilypond
2024
2025 Notensysteme werden in den Standardeinstellungen auch so dicht
2026 beieinander gesetzt wie es möglich ist (mit einem minimalen Abstand).
2027 Wenn Noten sehr weit aus einem System herausragen, zwingen sie
2028 das nächste System weiter weg, wenn eine Kollision drohen würde.
2029 Im nächsten Beispiel sehen Sie, wie Noten auf zwei Systemen
2030 @qq{ineinander greifen}.
2031
2032 @lilypond[quote,ragged-right,verbatim]
2033 <<
2034   \new Staff {
2035     \relative { c'4 a, }
2036   }
2037   \new Staff {
2038     \relative { c''''4 a, }
2039   }
2040 >>
2041 @end lilypond
2042
2043
2044 @node within-staff (Objekte innerhalb des Notensystems)
2045 @subsection within-staff (Objekte innerhalb des Notensystems)
2046 @translationof Within-staff objects
2047
2048 Es wurde schon gezeigt, wie die Befehle @code{\voiceXXX} die Richtung
2049 von Bögen, Fingersatz und allen anderen Objekten beeinflusst,
2050 die von der Richtung der Notenhälsen abhängen -- siehe @ref{Stimmen explizit beginnen}.
2051 Diese Befehle
2052 sind nötig, wenn polyphone Musik geschrieben wird, damit sich
2053 die einzelnen Melodielinien klar abzeichnen.  Es kann aber von Zeit
2054 zu Zeit nötig sein, dieses automatische Verhalten zu verändern.  Das
2055 kann entweder für ganze Abschnitte, aber genauso auch nur für eine
2056 einzelne Note vorgenommen werden.  Die Eigenschaft, die die Richtung
2057 bestimmt, ist die @code{direction}-Eigenschaft eines jeden Layout-Objekts.
2058 Es soll erst erklärt werden, was sie bewirkt und dann eine Anzahl
2059 an fertigen Befehlen für die üblicheren Situationen präsentiert werden,
2060 mit denen Sie gleich loslegen können.
2061
2062 Manche Layout-Objekte, wie Legato- und Bindebögen, biegen sich
2063 oder zeigen entweder nach oben oder nach unten, andere, wie
2064 Hälse und Fähnchen, verändern auch die Position rechts oder links,
2065 je nach der Richtung, in die sie zeigen.  Das wird automatisch
2066 berücksichtigt, wenn die @code{direction}-Eigenschaft verändert
2067 wird.
2068
2069 @menu
2070 * Die direction-Eigenschaft::
2071 * Fingersatz::
2072 @end menu
2073
2074 @node Die direction-Eigenschaft
2075 @unnumberedsubsubsec The @code{direction}-Eigenschaft (Richtung)
2076 @translationof The direction property
2077
2078 @funindex down
2079 @funindex up
2080 @funindex center
2081 @funindex neutral
2082 @cindex hoch-Eigenschaft
2083 @cindex runter-Eigenschaft
2084 @cindex zentriert-Eigenschaft
2085 @cindex neutral-Eigenschaft
2086
2087 Das folgende Beispiel zeigt im ersten Takt die Standardeinstellung
2088 für Legatobögen, die bei hohen Noten oberhalb, bei tiefen Noten indessen
2089 unterhalb platziert werden. Im nächsten Takt werden beide Bögen nach
2090 unten gezwungen, im darauf folgenden Takt nach oben, um schließlich
2091 wieder auf den Standard eingestellt zu werden.
2092
2093 @cindex Legatobogen, Beispiel zur Veränderung
2094 @cindex Richtungseigenschaft, Beispiel
2095
2096 @lilypond[quote,fragment,verbatim]
2097 a'4( g') c''( a') |
2098 \override Slur.direction = #DOWN
2099 a'4( g') c''( a') |
2100 \override Slur.direction = #UP
2101 a'4( g') c''( a') |
2102 \revert Slur.direction
2103 a'4( g') c''( a') |
2104 @end lilypond
2105
2106 Wir haben hier die Konstanten @code{DOWN} und @code{UP}
2107 eingesetzt.  Sie haben die Werte @w{@code{-1}} bzw. @code{+1}, und
2108 diese numerischen Werte können ebenso benutzt werden.  Auch
2109 der Wert @code{0} kann in manchen Fällen benutzt werden.  Er
2110 bedeutet für die Legatobögen das gleiche wie @code{UP}, für einige
2111 andere Objekte jedoch @qq{zentriert}.  Es gibt hierzu die Konstante
2112 @code{CENTER}, die den Wert @code{0} hat.
2113
2114 Es gibt aber einfachere Befehle, die normalerweise benutzt werden.
2115 Hier eine Tabelle der häufigsten.  Die Bedeutung des Befehls wird
2116 erklärt, wenn sie nicht selbstverständlich ist.
2117
2118 @multitable @columnfractions .2 .2 .25 .35
2119 @headitem Runter/Links
2120   @tab Rauf/Rechts
2121   @tab Rückgängig
2122   @tab Wirkung
2123 @item @code{\arpeggioArrowDown}
2124   @tab @code{\arpeggioArrowUp}
2125   @tab @code{\arpeggioNormal}
2126   @tab Arpeggio mit Pfeil nach unten, oben oder ohne Pfeil
2127 @item @code{\dotsDown}
2128   @tab @code{\dotsUp}
2129   @tab @code{\dotsNeutral}
2130   @tab Richtung der Verschiebung eines Punktes, um Notenlinien zu vermeiden
2131 @item @code{\dynamicDown}
2132   @tab @code{\dynamicUp}
2133   @tab @code{\dynamicNeutral}
2134   @tab Position der Dynamik-Bezeichnung relativ zum System
2135 @item @code{\phrasingSlurDown}
2136   @tab @code{\phrasingSlurUp}
2137   @tab @code{\phrasingSlurNeutral}
2138   @tab Befehl für Richtung von Phrasierungsbögen
2139 @item @code{\slurDown}
2140   @tab @code{\slurUp}
2141   @tab @code{\slurNeutral}
2142   @tab Befehl für Richtung von Legatobögen
2143 @item @code{\stemDown}
2144   @tab @code{\stemUp}
2145   @tab @code{\stemNeutral}
2146   @tab Befehl für Richtung von Hälsen
2147 @item @code{\textSpannerDown}
2148   @tab @code{\textSpannerUp}
2149   @tab @code{\textSpannerNeutral}
2150   @tab Position von Textbeschriftungen, die als Strecker eingegeben werden
2151 @item @code{\tieDown}
2152   @tab @code{\tieUp}
2153   @tab @code{\tieNeutral}
2154   @tab Befehl für Richtung von Bindebögen
2155 @item @code{\tupletDown}
2156   @tab @code{\tupletUp}
2157   @tab @code{\tupletNeutral}
2158   @tab Befehl für Richtung von Klammern/Zahlen der N-tolen
2159 @end multitable
2160
2161 Die neutralen/normalen Varianten dieser Befehle verwenden intern
2162 @code{\revert} und können daher @strong{nicht} mit einem
2163 vorangestellten @code{\once} benutzt werden.  Wenn Sie die
2164 Wirkung eines der anderen Befehle (die intern @code{\override} verwenden)
2165 auf eine einzige Noten begrenzen wollen, müssen Sie ihm ein @code{\once}
2166 voranstellen, genauso wie Sie es auch bei einem expliziten @code{\override}
2167 machen würden.
2168
2169 Falls nur ein einziges Layout Objekt nach oben oder unten gezwungen werden
2170 soll, können auch die Richtungsindikatoren @code{^} oder @code{_} verwendet werden:
2171
2172 @lilypond[quote,fragment,verbatim]
2173 a'4( g') c''( a') |
2174 a'4^( g') c''_( a') |
2175 @end lilypond
2176
2177 @node Fingersatz
2178 @unnumberedsubsubsec Fingersatz
2179 @translationof Fingering
2180
2181 @cindex Fingersatz, Positionierung
2182 @cindex Fingersatz, Akkorde
2183
2184 Die Positionierung von Fingersatz kann auch durch den Wert
2185 seiner @code{direction}-Eigenschaft beeinflusst werden, aber
2186 eine Veränderung von  @code{direction} hat keinen Einfluss auf
2187 Akkorde. es gibt auch hier
2188 besondere Befehle, mit denen der Fingersatz von einzelnen
2189 Noten in Akkorden kontrolliert werden kann, wobei mögliche
2190 Positionen über, unter der Note und rechts bzw. links von
2191 ihr sind.
2192
2193 Zunächst die Wirkungsweise von @code{direction} auf
2194 den Fingersatz: im ersten Takt der Standard, dann
2195 die Wirkung von @code{DOWN} (runter) und @code{UP}
2196 (hinauf).
2197
2198 @cindex Fingersatz, Beispiel zur Veränderung
2199 @cindex direction-Eigenschaft, Beispiel
2200
2201 @lilypond[quote,verbatim]
2202 \relative {
2203   c''4-5 a-3 f-1 c'-5 |
2204   \override Fingering.direction = #DOWN
2205   c4-5 a-3 f-1 c'-5 |
2206   \override Fingering.direction = #UP
2207   c4-5 a-3 f-1 c'-5 |
2208 }
2209 @end lilypond
2210
2211 Eine Beeinflussung der @code{direction}-Eigenschaft ist jedoch
2212 nicht die einfachste Art, Fingersatzbezeichnungen manuell über oder
2213 unter das System zu setzen.  Normalerweise bietet es sich an,
2214 @code{_} oder @code{^} anstelle von @code{-} vor der Fingersatz-Zahl
2215 zu benutzen.  Hier das vorherigen Beispiel mit dieser Methode:
2216
2217 @cindex Fingersatz-Beispiel
2218
2219 @lilypond[quote,verbatim]
2220 \relative {
2221   c''4-5 a-3 f-1 c'-5 |
2222   c4_5 a_3 f_1 c'_5 |
2223   c4^5 a^3 f^1 c'^5 |
2224 }
2225 @end lilypond
2226
2227 Die @code{direction}-Eigenschaft wirkt sich nicht auf
2228 Akkorde aus, während die Präfixe @code{_} und @code{^} funktionieren.
2229 Standardmäßig wird der Fingersatz automatisch entweder
2230 über oder unter dem Akkord gesetzt:
2231
2232 @cindex Fingersatz-Beispiel
2233
2234 @lilypond[quote,verbatim]
2235 \relative {
2236   <c''-5 g-3>4
2237   <c-5 g-3 e-2>4
2238   <c-5 g-3 e-2 c-1>4
2239 }
2240 @end lilypond
2241
2242 @noindent
2243 aber das kann manuell geändert werden, um einzelne Fingersatzanweisungen
2244 nach oben oder unten zu zwingen:
2245
2246 @cindex Fingersatz-Beispiel
2247
2248 @lilypond[quote,verbatim]
2249 \relative {
2250   <c''-5 g-3 e-2 c-1>4
2251   <c^5 g_3 e_2 c_1>4
2252   <c^5 g^3 e^2 c_1>4
2253 }
2254 @end lilypond
2255
2256 Noch bessere Kontrolle über die Positionierung von Fingersatz für
2257 einzelne Noten in einem Akkord ist mit dem
2258 @code{\set fingeringOrientations}-Befehl möglich.  Die Syntax
2259 lautet:
2260
2261 @example
2262 @code{\set fingeringOrientations = #'([up] [left/right] [down])}
2263 @end example
2264
2265 @noindent
2266 @code{\set}wird benutzt, weil @code{fingeringOrientations} eine
2267 Eigenschaft des @code{Voice}-Kontextes ist, erstellt und eingesetzt
2268 vom @code{New_fingering_engraver}.
2269
2270 Die Eigenschaft kann als Wert eine Liste mit einem bis drei Einträgen
2271 haben.  Damit wird bestimmt, ob Fingersatz oberhalb gesetzt
2272 werden kann (wenn @code{up} in der Liste auftaucht), darunter
2273 (wenn@code{down} auftaucht), links (wenn @code{left} auftaucht)
2274 oder rechts (wenn @code{right} auftaucht).  Wenn andererseits
2275 ein Wert nicht auftaucht, wir auch kein Fingersatz in dieser Richtung
2276 gesetzt.  LilyPond nimmt diese Beschränkung als Bedingung und
2277 errechnet die besten Positionen für die Noten des nächsten Akkordes.
2278 Die seitliche Positionierung kann nur auf einer Seite des Akkordes
2279 geschehen, nicht auf beiden gleichzeitig, es kann also nur entweder
2280 @code{left} oder @code{right} auftreten, nicht beide gleichzeitig.
2281
2282 @warning{Damit eine einzelne Note mit diesem Befehl beeinflusst werden
2283 kann, muss sie als ein @qq{Ein-Noten-Akkord} geschrieben
2284 werden, indem einfache spitze Klammern um die Note positioniert
2285 werden.}
2286
2287 Hier ein paar Beispiele:
2288
2289 @cindex Fingersatz-Beispiel
2290 @cindex @code{\set}, Benutzungsbeispiel
2291 @cindex fingerOrientations-Eigenschaft, Beispiel
2292
2293 @lilypond[quote,ragged-right,verbatim]
2294 \relative {
2295   \set fingeringOrientations = #'(left)
2296   <f'-2>4
2297   <c-1 e-2 g-3 b-5>4
2298   \set fingeringOrientations = #'(left)
2299   <f-2>4
2300   <c-1 e-2 g-3 b-5>4 |
2301   \set fingeringOrientations = #'(up left down)
2302   <f-2>4
2303   <c-1 e-2 g-3 b-5>4
2304   \set fingeringOrientations = #'(up left)
2305   <f-2>4
2306   <c-1 e-2 g-3 b-5>4 |
2307   \set fingeringOrientations = #'(right)
2308   <f-2>4
2309   <c-1 e-2 g-3 b-5>4
2310 }
2311 @end lilypond
2312
2313 @noindent
2314 Wenn die Fingersatzbezeichnung zu gedrungen aussieht,
2315 kann auch die Schriftgröße (@code{font-size}) verringert
2316 werden.  Der Standardwert kann aus dem
2317 @code{Fingering}-Objekt in der IR entnommen werden,
2318 er ist @w{@code{-5}}, versuchen wir es also mit @w{@code{-7}}.
2319
2320 @lilypond[quote,ragged-right,verbatim]
2321 \relative {
2322   \override Fingering.font-size = #-7
2323   \set fingeringOrientations = #'(left)
2324   <f'-2>4
2325   <c-1 e-2 g-3 b-5>4
2326   \set fingeringOrientations = #'(left)
2327   <f-2>4
2328   <c-1 e-2 g-3 b-5>4 |
2329   \set fingeringOrientations = #'(up left down)
2330   <f-2>4
2331   <c-1 e-2 g-3 b-5>4
2332   \set fingeringOrientations = #'(up left)
2333   <f-2>4
2334   <c-1 e-2 g-3 b-5>4 |
2335   \set fingeringOrientations = #'(right)
2336   <f-2>4
2337   <c-1 e-2 g-3 b-5>4
2338 }
2339 @end lilypond
2340
2341 @node Objekte außerhalb des Notensystems
2342 @subsection Objekte außerhalb des Notensystems
2343 @translationof Outside-staff objects
2344
2345 Objekte außerhalb des Notensystems werden automatisch gesetzt,
2346 um Kollisionen zu vermeiden.  Es gibt eine ganze Reihe von Möglichkeiten
2347 die Platzierung zu beeinflussen, sollte die Automatik kein optimales
2348 Resultat produzieren.
2349
2350 @menu
2351 * Die outside-staff-priority-Eigenschaft::
2352 * Der textLengthOn-Befehl::
2353 * Positionierung von Dynamikzeichen::
2354 * Verändern der Größe von grobs::
2355 @end menu
2356
2357
2358 @node Die outside-staff-priority-Eigenschaft
2359 @unnumberedsubsubsec Die @code{outside-staff-priority}-Eigenschaft
2360 @translationof The outside-staff-priority property
2361
2362 Objekten mit einem geringeren
2363 Prioritätswert der Eigenschaft @code{outside-staff-priority}
2364 werden näher an das System gesetzt, und andere Objekte außerhalb
2365 des Systems werden dann soweit vom System entfernt gesetzt, dass
2366 Zusammenstöße vermieden werden.  Die
2367 @code{outside-staff-priority}-Eigenschaft ist im
2368 @code{grob-interface} definiert und ist also eine Eigenschaft
2369 von allen Layout-Objekten.  Standardmäßig ist sie für alle Objekte
2370 auf falsch (@code{#f}) gesetzt; dieser Wert wird in einen numerischen
2371 Wert dem Objekt entsprechend geändert, wenn das Objekt für die
2372 Notenausgabe erstellt wird.  Die Tabelle unten zeigt die
2373 Standardwerte für die meistbenutzten @code{outside-staff}-Objekte.
2374
2375 @cindex spanners
2376 @cindex Strecker
2377
2378 Achtung bei einigen ungewöhnlichen Objektbezeichnungen: Strecker-Objekte
2379 werden automatisch erstellt, um die vertikale Position von Grobs
2380 zu kontrollieren, die an unterschiedlichen musikalischen Momenten
2381 beginnen und enden (könnten).  Wenn also @code{outside-staff-priority}
2382 des darunterliegenden Grobs geändert wird, hat das keine Auswirkung.
2383 Zum Beispiel bringt das Ändern von @code{outside-staff-priority}
2384 des @code{Hairpin}-(Dynamikklammer)-Objekts keine Änderung in der
2385 vertikalen Position von Crescendo-Klammern -- anstatt dessen muss
2386 @code{outside-staff-priority} des hiermit assoziierten
2387 @code{DynamicLineSpanne}-Objekts geändert werden.  Dieser
2388 @code{\override}-Befehl muss zu Beginn des Streckers gesetzt werden,
2389 welcher womöglich mehrere verbundene Dynamikklammern und Dynamikbezeichnung
2390 beinhaltet.
2391
2392 @multitable @columnfractions .3 .3 .3
2393 @headitem Layout-Objekt
2394   @tab Priorität
2395   @tab Kontrolliert Position von:
2396 @item @code{RehearsalMark}
2397   @tab @code{1500}
2398   @tab Übungszeichen
2399 @item @code{MetronomeMark}
2400   @tab @code{1000}
2401   @tab Metronomzeichen
2402 @item @code{VoltaBracketSpanner}
2403   @tab @code{600}
2404   @tab Volta-Wiederholungsklammern
2405 @item @code{TextScript}
2406   @tab @code{450}
2407   @tab Textbeschriftung
2408 @item @code{MultiMeasureRestText}
2409   @tab @code{450}
2410   @tab Text über Ganztaktpausen
2411 @item @code{OttavaBracket}
2412   @tab @code{400}
2413   @tab Ottava (Oktavierungsklammern)
2414 @item @code{TextSpanner}
2415   @tab @code{350}
2416   @tab Text-Strecker
2417 @item @code{DynamicLineSpanner}
2418   @tab @code{250}
2419   @tab Alle Dynamik-Bezeichnungen
2420 @item @code{BarNumber}
2421   @tab @code{ 100}
2422   @tab Taktzahlen
2423 @item @code{TrillSpanner}
2424   @tab @code{50}
2425   @tab Triller-Strecker
2426 @end multitable
2427
2428 Hier ein Beispiel, das die Standardpositionierung von einigen
2429 Objekten zeigt.
2430
2431 @cindex Text-Strecker
2432 @cindex Text-Spanner
2433
2434 @funindex \startTextSpan
2435 @funindex \stopTextSpan
2436 @funindex startTextSpan
2437 @funindex stopTextSpan
2438
2439 @cindex Ottava-Klammer
2440 @cindex Oktavierungsklammer
2441
2442 @cindex TextSpanner, Beispiel zur Veränderung
2443 @cindex bound-details-Eigenschaft, Beispiel
2444
2445 @lilypond[quote,fragment,ragged-right,verbatim]
2446 % Set details for later Text Spanner
2447 \override TextSpanner.bound-details.left.text
2448     = \markup { \small \bold Slower }
2449 % Place dynamics above staff
2450 \dynamicUp
2451 % Start Ottava Bracket
2452 \ottava #1
2453 c''4 \startTextSpan
2454 % Add Dynamic Text and hairpin
2455 c''4\pp\<
2456 c''4
2457 % Add Text Script
2458 c''4^Text |
2459 c''4 c''
2460 % Add Dynamic Text and terminate hairpin
2461 c''4\ff c'' \stopTextSpan |
2462 % Stop Ottava Bracket
2463 \ottava #0
2464 c'4 c' c' c' |
2465 @end lilypond
2466
2467 Dieses Beispiel zeigt auch, wie man Text-Strecker erstellt, d.h.
2468 Text mit Bindestrichen, der sich über eine bestimmte Länge
2469 erstreckt.  Der Strecker beginnt mit dem
2470 @code{\startTextSpan}-Befehl und endet mit dem
2471 @code{\stopTextSpan}-Befehl, und das Format des Textes
2472 wird mit dem @code{\override TextSpanner}-Befehl bestimmt.
2473 Mehr Einzelheiten siehe @ruser{Text mit Verbindungslinien}.
2474
2475 Im Beispiel wird auch gezeigt, wie Oktavierungsklammern
2476 (Ottava) erstellt werden.
2477
2478 @cindex Taktzahlposition verändern
2479 @cindex Verändern der Taktzahlposition
2480 @cindex Position der Taktzahl, verändern
2481 @cindex Metronom-Bezeichnungsposition verändern
2482 @cindex Verändern der Metronom-Bezeichnungsposition
2483 @cindex Übungszeichenposition verändern
2484 @cindex Verändern der Übungszeichenposition
2485
2486 Wenn die Standardwerte der @code{outside-staff-priority} nicht
2487 die Positionierung hervorrufen, die Sie wünschen, kann die
2488 Priorität eines jeden Objektes geändert werden.  Als Beispiel
2489 wollen wir zeigen, wie sich die Oktavierungsklammer unter
2490 den Textstrecker des vorigen Beispiels setzen lässt.  Wir müssen
2491 nur die Priorität des
2492 @code{OttavaBracket}-Objektes in der IR oder der Tabelle oben
2493 herausfinden und einen kleineren Wert angeben als der Wert, den
2494 das @code{TextSpanner}-(Strecker)-Objekt bekommt, wobei noch daran
2495 zu denken ist, dass @code{OttavaBracket} im @code{Staff}-Kontext
2496 erstellt wird:
2497
2498 @cindex TextSpanner, Beispiel zur Veränderung
2499 @cindex bound-details-Eigenschaft, Beispiel
2500
2501 @lilypond[quote,fragment,ragged-right,verbatim]
2502 % Set details for later Text Spanner
2503 \override TextSpanner.bound-details.left.text
2504     = \markup { \small \bold Slower }
2505 % Place dynamics above staff
2506 \dynamicUp
2507 % Place following Ottava Bracket below Text Spanners
2508 \once \override Staff.OttavaBracket.outside-staff-priority = #340
2509 % Start Ottava Bracket
2510 \ottava #1
2511 c''4 \startTextSpan
2512 % Add Dynamic Text
2513 c''4\pp
2514 % Add Dynamic Line Spanner
2515 c''4\<
2516 % Add Text Script
2517 c''4^Text |
2518 c''4 c''
2519 % Add Dynamic Text
2520 c''4\ff c'' \stopTextSpan |
2521 % Stop Ottava Bracket
2522 \ottava #0
2523 c'4 c' c' c' |
2524 @end lilypond
2525
2526 Beachten Sie, dass einige dieser Objekte, insbesondere Taktzahlen,
2527 Metronomzeichen und Übungszeichen standardmäßig im @code{Score}-Kontext
2528 zu Hause sind; benutzen Sie also den richtigen Kontext, wenn sie
2529 deren Einstellungen verändern wollen.
2530
2531 @cindex Legatobögen und outside-staff-priority
2532 @cindex Legatobögen und Artikulationszeichen
2533 @cindex Artikulationszeichen und Legatobögen
2534
2535 Legatobögen werden als Innersystem-Objekte klassifiziert, aber
2536 sie erscheinen oft auch über dem System, wenn die Noten, an die
2537 sie verbunden sind, sehr hoch im System notiert sind.  Dadurch
2538 können Außersystem-Objekte, wie Artikulationszeichen, zu hoch
2539 gerückt werden.  Die @code{avoid-slur}-Eigenschaft hat nur
2540 eine Auswirkung, wenn auch die @code{outside-staff-priority}
2541 auf @code{#f} gesetzt ist.  Alternativ kann die
2542 @code{outside-staff-priority}  des Legatobogens auf einen
2543 numerischen Wert gesetzt werden, sodass er mit anderen
2544 Außersystem-Objekten anhand dieses Wertes gesetzt wird.
2545 Hier ein Beispiel, das die beiden Möglichkeiten veranschaulicht:
2546
2547 @lilypond[quote,verbatim]
2548 \relative c'' {
2549   c4( c^\markup { \tiny \sharp } d4.) c8 |
2550   c4(
2551     \once \override TextScript.avoid-slur = #'inside
2552     \once \override TextScript.outside-staff-priority = ##f
2553     c4^\markup { \tiny \sharp } d4.) c8 |
2554   \once \override Slur.outside-staff-priority = #500
2555     c4( c^\markup { \tiny \sharp } d4.) c8 |
2556 }
2557 @end lilypond
2558
2559 Eine Änderung der @code{outside-staff-priority} kann auch dazu
2560 benutzt werden, die vertikale Platzierung von individuellen Objekten
2561 zu kontrollieren, auch wenn das Ergebnis nicht immer optimal
2562 ist.  Im nächsten Beispiel soll @qq{Text3} oberhalb von @qq{Text4}
2563 gesetzt werden, das Beispiel wurde behandelt in
2564 @ref{Automatisches Verhalten}.  Der Wert der Priorität muss also für
2565 die Eigenschaft @code{TextScript} entweder in der IR oder in der
2566 Tabelle oben festgestellt werden und dann die Priorität für
2567 @qq{Text3} höher eingestellt werden:
2568
2569 @cindex TextScript, Beispiel zur Veränderung
2570 @cindex outside-staff-priority-Eigenschaft, Beispiel
2571
2572 @lilypond[quote,fragment,ragged-right,verbatim]
2573 c''2^"Text1"
2574 c''2^"Text2" |
2575 \once \override TextScript.outside-staff-priority = #500
2576 c''2^"Text3"
2577 c''2^"Text4" |
2578 @end lilypond
2579
2580 Damit wird zwar @qq{Text3} ganz richtig über @qq{Text4}
2581 platziert, aber auch über @qq{Text2}, und @qq{Text4}
2582 wird jetzt weiter unten gesetzt.  Eigentlich sollten ja alle
2583 diese Anmerkungen gleich weit vom System entfernt sein.
2584 Dazu muss offensichtlich horizontal etwas Platz gemacht
2585 werden.  Das kann erreicht werden mit dem
2586 @code{textLengthOn}-(Textlänge an)-Befehl.
2587
2588 @node Der textLengthOn-Befehl
2589 @unnumberedsubsubsec Der @code{@bs{}textLengthOn}-Befehl (Textlänge berücksichtigen)
2590 @translationof The textLengthOn command
2591
2592 @cindex Noten, durch Text gespreizt
2593
2594 @funindex \textLengthOn
2595 @funindex \textLengthOff
2596
2597 Standardmäßig wird Text, der mit dem Beschriftungsbefehl
2598 @code{\markup} bzw. Äquivalenten erstellt wird, kein
2599 zusätzlicher Platz in Bezug auf die Positionierung der Noten
2600 zugestanden.  Der @code{\textLengthOn}-Befehl ändert
2601 dieses Verhalten, so dass die Noten gespreizt werden, wenn
2602 die Breite des Textes es erfordert:
2603
2604 @lilypond[quote,fragment,ragged-right,verbatim]
2605 \textLengthOn  % Cause notes to space out to accommodate text
2606 c''2^"Text1"
2607 c''2^"Text2" |
2608 c''2^"Text3"
2609 c''2^"Text4" |
2610 @end lilypond
2611
2612 Dieses Verhalten wird mit dem @code{\textLengthOff}-Befehl
2613 rückgängig gemacht.  Alternativ kann auch @code{\once} zusammen mit
2614 @code{\textLengthOn} benutzt werden, um die Auswirkung auf einen
2615 einzigen musikalisches Zeitpunkt zu begrenzen.  Das entsprechende
2616 Verhalten bzgl. des horizontalen Platzes für Übungzeichen und
2617 Tempomarkierungen kann hiervon unabhängig durch die Befehle
2618 @code{\markLengthOn} und @code{\markLengthOff} analog gesteuert werden.
2619
2620 @cindex Textbeschriftung, Vermeidung von Zusammenstößen
2621 @cindex Zusammenstöße vermeiden mit Textbeschriftung
2622
2623 Textbeschriftung vermeidet auch Noten, die über das System hinausstehen.
2624 Wenn das nicht gewünscht ist, kann die automatische Verschiebung
2625 nach oben hin auch vollständig ausgeschaltet werden, indem die
2626 Priorität auf @code{#f} gesetzt wird.  Hier ein Beispiel, wie
2627 eine Textbeschriftung mit diesen Noten reagiert:
2628
2629 @cindex Textbeschriftung, Beispiel zur Veränderung
2630 @cindex outside-staff-priority-Eigenschaft, Beispiel
2631
2632 @lilypond[quote,ragged-right,verbatim]
2633 \relative {
2634   % This markup is short enough to fit without collision
2635   c''2^"Tex" c'' |
2636   R1 |
2637
2638   % This is too long to fit, so it is displaced upwards
2639   c,,2^"Text" c'' |
2640   R1 |
2641
2642   % Turn off collision avoidance
2643   \once \override TextScript.outside-staff-priority = ##f
2644   c,,2^"Long Text   " c'' |
2645   R1 |
2646
2647   % Turn off collision avoidance
2648   \once \override TextScript.outside-staff-priority = ##f
2649   \textLengthOn        % and turn on textLengthOn
2650   c,,2^"Long Text   "  % Spaces at end are honored
2651   c''2 |
2652 }
2653 @end lilypond
2654
2655 @node Positionierung von Dynamikzeichen
2656 @unnumberedsubsubsec Positionierung von Dynamikzeichen
2657 @translationof Dynamics placement
2658
2659 @cindex Verändern der Positionierung von Dynamikzeichen
2660 @cindex Dynamikzeichen: Positionierung verändern
2661
2662 Dynamikbezeichnung wird üblicherweise unter dem System
2663 gesetzt, kann aber auch nach oben mit dem Befehl
2664 @code{\dynamicUp} gezwungen werden.  Die Bezeichnung
2665 wird vertikal relativ zu der Note positioniert, an die sie angefügt
2666 wurde.  Sie wird vertikal variabel gesetzt in Bezug zu
2667 Innersystemobjekten wie Bögen oder Taktnummern. Damit
2668 können oft recht gute Resultate erreicht werden, wie im
2669 folgenden Beispiel:
2670
2671 @lilypond[quote,ragged-right,verbatim]
2672 \relative {
2673   \clef "bass"
2674   \key aes \major
2675   \time 9/8
2676   \dynamicUp
2677   bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! |
2678   ees,2.~\)\mf ees4 r8 |
2679 }
2680 @end lilypond
2681
2682 Wenn aber Noten und Dynamikzeichen sehr dicht beieinander
2683 stehen, positioniert die automatische Kollisionsvermeidung
2684 später kommende Dynamikzeichen weiter weg, was allerdings
2685 nicht immer die beste Möglichkeit ist, wie in dem folgenden,
2686 etwas gewollten Beispiel zu sehen ist:
2687
2688 @lilypond[quote,ragged-right,verbatim,fragment]
2689 \dynamicUp
2690 \relative { a'4\f b\mf a\mp b\p }
2691 @end lilypond
2692
2693 @noindent
2694 Wenn eine ähnliche Situation in @qq{echter} Musik auftaucht,
2695 kann es nötig sein, die Noten etwas zu spreizen, damit die
2696 Dynamikzeichen alle auf der selben vertikalen Position
2697 gesetzt werden können.  Dieses Verhalten war im Falle von
2698 Textbeschriftungen möglich mit dem @code{\textLengthOn}-Befehl,
2699 aber es gibt keinen entsprechenden Befehl für Dynamik.  Wir
2700 müssen also unsere eigenen Befehle mit @code{\override}
2701 konstruieren.
2702
2703 @node Verändern der Größe von grobs
2704 @unnumberedsubsubsec Verändern der Größe von grobs
2705 @translationof Grob sizing
2706
2707 @cindex Grob, Größenveränderung
2708 @cindex Größenveränderung von grobs
2709
2710 Zuallererst müssen wir lernen, wie die Größe von Grobs verändert
2711 wird.  Alle Grobs besitzen einen Referenzpunkt, der
2712 benutzt wird, um ihre Position in Relation zu ihnen übergeordneten
2713 Objekten zu bestimmen.  Dieser Punkt innerhalb des Grobs wird dann
2714 auf einer horizontalen Position (@code{X-offset}) und einer
2715 vertikalen Position (@code{Y-offset}) ausgerichtet, immer bezüglich
2716 des übergeordneten Objektes.  Eine horizontale Strecke wird
2717 durch ein Zahlenpaar angegeben (@code{X-extent}), welche
2718 die linke und rechte Grenze relativ zum übergeordneten Objekt
2719 bezeichnen.  Die vertikale Strecke wir genauso durch ein
2720 Zahlenpaar (@code{Y-extent}) definiert.  Diese Eigenschaften
2721 gehören zu allen Grobs, die das
2722 @code{grob-interface} unterstützen.
2723
2724 @cindex @code{extra-spacing-width}
2725
2726 Standardmäßig haben Außersystemobjekte eine Länge von Null,
2727 so dass sie sich in horizontaler Richtung überlappen können.  Das
2728 geschieht, indem dem linken Rand Unendlich zugewiesen wird
2729 und dem rechten Rand minus Unendlich, d.h. die
2730 @code{extra-spacing-width}-(zusätzliche Positionierungslänge)-Eigenschaft
2731 wird auf den Wert @code{'(+inf.0 . -inf.0)} gesetzt.
2732 Damit sich diese Objekte also horizontal nicht überschneiden, muss
2733 der Wert von @code{extra-spacing-width} überschrieben werden um den
2734 Objekten ein wenig zusätzlich Platz zuzuweisen.  Die Einheit ist der
2735 Abstand zwischen zwei Notenlinien, also sollte es reichen die linke
2736 und rechte Kante je eine halbe Einheit nach links bzw. rechts zu verschieben:
2737
2738 @example
2739 \override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
2740 @end example
2741
2742 @noindent
2743 Schauen wir uns an, wie es mit dem vorigen Beispiel funktioniert:
2744
2745 @cindex DynamicText, Beispiel zur Veränderung
2746 @cindex extra-spacing-width-Eigenschaft, Beispiel
2747
2748
2749 @lilypond[quote,ragged-right,verbatim,fragment]
2750 \dynamicUp
2751 % Extend width by 1 staff space
2752 \override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
2753 \relative { a'4\f b\mf a\mp b\p }
2754 @end lilypond
2755
2756 @noindent
2757 Das sieht schon besser aus, aber es wäre noch besser, wenn die
2758 Dynamik-Zeichen alle an einer Linie ausgerichtet wären, anstatt
2759 höher und tiefer zu sitzen.  Das kann mit der
2760 @code{staff-padding}-Eigenschaft erreicht werden,
2761 die wir uns im folgenden Abschnitt genauer anschauen werden.
2762
2763
2764 @node Vertikale Abstände
2765 @section Vertikale Abstände
2766 @translationof Vertical spacing
2767
2768 In aller Regel ist die vertikale Platzierung von Objekten durch LilyPond
2769 ziemlich gut.  Schauen wir uns das an einem einfachen Lied mit zwei Stimmen
2770 und Klavierbegleitung etwas näher an:
2771
2772 @lilypond[quote,fragment,ragged-right]
2773 <<
2774   \new ChoirStaff
2775   <<
2776     \new Staff {
2777       \new Voice = "music" {
2778         b'2 c' c' c'
2779       }
2780     }
2781     \new Lyrics
2782     \lyricsto "music" {
2783       Here are some lyrics
2784     }
2785     \new Staff {
2786       \clef bass e'2 f e c
2787     }
2788   >>
2789   \new PianoStaff
2790   <<
2791     \new Staff {
2792       g''2 c'' c'' a''
2793     }
2794     \new Staff {
2795       \clef bass e2 f c e
2796     }
2797   >>
2798 >>
2799 @end lilypond
2800
2801 An der vertikalen Platzierung ist nichts auszusetzen.  Nehmen wir aber einmal
2802 an, wir arbeiten mit einem Verleger zusammen, der spezielle Wünsche bzgl.
2803 des Abstands von Systemen und Text hat: Der Text soll weit weg von allen
2804 Noten und die Klavierbegleitung soll weit weg von den Gesangslinien.
2805 Schließlich soll das Klaviersystem noch etwas enger zusammen geschoben
2806 werden.  Fangen wir mit dem Liedtext an.
2807
2808 Gesangstext wird innerhalb eines Systems platziert.  Daher finden sich die
2809 Befehle zu seiner Platzierung in
2810 @ruser{Flexible vertikale Abstände in Systemgruppen}.  Dort erfahren wir,
2811 das Gesangstext vom Typ @code{non-staff lines} ist und wir daher die
2812 Eigenschaft @code{nonstaff} anpassen müssen.  Den Text weiter weg vom
2813 darüber liegenden System zu schieben verwendet die
2814 @code{relatedstaff}-Eigenschaft.  Für den Abstand nach unten greifen
2815 wir auf die @code{unrelatedstaff}-Eigenschaft zurück.  Gesangsstimmen
2816 gehören zu einer @code{VerticalAxisGroup}, also setzen wir deren
2817 Eigenschaften.  Mal sehen, wie das klappt.
2818
2819 @lilypond[quote,fragment,ragged-right,verbatim]
2820 <<
2821   \new ChoirStaff
2822   <<
2823     \new Staff {
2824       \new Voice = "music" {
2825         b'2 c' c' c'
2826       }
2827     }
2828     \new Lyrics \with {
2829       \override VerticalAxisGroup.
2830         nonstaff-relatedstaff-spacing.padding = #5
2831       \override VerticalAxisGroup.
2832         nonstaff-unrelatedstaff-spacing.padding = #5
2833     }
2834     \lyricsto "music" {
2835       Here are some lyrics
2836     }
2837     \new Staff {
2838       \clef bass e'2 f e c
2839     }
2840   >>
2841   \new PianoStaff
2842   <<
2843     \new Staff {
2844       g''2 c'' c'' a''
2845     }
2846     \new Staff {
2847       \clef bass e2 f c e
2848     }
2849   >>
2850 >>
2851 @end lilypond
2852
2853 Nun ja, es klappt.  Aber vielleicht war das doch des Guten zu viel.
2854 Wenn wir @code{padding} auf 5 setzen, dann fügt LilyPond 5 System Abstände
2855 zum Abstand zwischen den Objekten hinzu, was im vorliegenden Fall
2856 eindeutig zu viel ist.  Wir werden 2 verwenden.
2857
2858 Als nächstes verschieben wir die Klavierbegleitung weiter weg von den
2859 Gesangsstimmen.  Die Gesangsstimmen sind ein @code{ChoirStaff}, also werden
2860 wir den Abstand zwischen diesem und dem darunter liegenden Klaviersystem
2861 vergrößern.  Das geschieht indem wir die @code{basic-distance} des
2862 @code{StaffGrouper}'s @code{staffgroup-staff-spacing} anpassen.
2863
2864 @lilypond[quote,fragment,ragged-right,verbatim]
2865 <<
2866   \new ChoirStaff \with {
2867     \override StaffGrouper.
2868       staffgroup-staff-spacing.basic-distance = #15
2869   }
2870   <<
2871     \new Staff {
2872       \new Voice = "music" {
2873         b'2 c' c' c'
2874       }
2875     }
2876     \new Lyrics \with {
2877       \override VerticalAxisGroup.
2878         nonstaff-relatedstaff-spacing.padding = #2
2879       \override VerticalAxisGroup.
2880         nonstaff-unrelatedstaff-spacing.padding = #2
2881     }
2882     \lyricsto "music" {
2883       Here are some lyrics
2884     }
2885     \new Staff {
2886       \clef bass e'2 f e c
2887     }
2888   >>
2889   \new PianoStaff
2890   <<
2891     \new Staff {
2892       g''2 c'' c'' a''
2893     }
2894     \new Staff {
2895       \clef bass e2 f c e
2896     }
2897   >>
2898 >>
2899 @end lilypond
2900
2901 Wunderbar.  Jetzt kümmern wir uns noch um die letzte Anforderung, die
2902 Klaviersysteme enger zusammen zu schieben.  Auch hierfür passen wir
2903 wieder die Eigenschaften des @code{StaffGrouper} an, aber dieses Mal
2904 werden wir sowohl die @code{basic-distance} als auch das @code{padding}
2905 reduzieren.  Wie genau sehen Sie unten.
2906
2907 @lilypond[quote,fragment,ragged-right,verbatim]
2908 <<
2909   \new ChoirStaff \with {
2910     \override StaffGrouper.
2911       staffgroup-staff-spacing.basic-distance = #15
2912   }
2913   <<
2914     \new Staff {
2915       \new Voice = "music" {
2916         b'2 c' c' c'
2917       }
2918     }
2919     \new Lyrics \with {
2920       \override VerticalAxisGroup.
2921         nonstaff-relatedstaff-spacing.padding = #2
2922       \override VerticalAxisGroup.
2923         nonstaff-unrelatedstaff-spacing.padding = #2
2924     }
2925     \lyricsto "music" {
2926       Here are some lyrics
2927     }
2928     \new Staff {
2929       \clef bass e'2 f e c
2930     }
2931   >>
2932   \new PianoStaff \with {
2933     \override StaffGrouper.staff-staff-spacing = #'(
2934                             (basic-distance . 0)
2935                             (padding . 0))
2936   }
2937   <<
2938     \new Staff {
2939       g''2 c'' c'' a''
2940     }
2941     \new Staff {
2942       \clef bass e2 f c e
2943     }
2944   >>
2945 >>
2946 @end lilypond
2947
2948 Damit sind die echt eng beieinander -- aber das ist es, was der
2949 Verleger wollte.  Wir könnten sie bei Bedarf wieder ein wenig auseinander
2950 schieben, indem wir @code{padding} oder @code{basic-distance}
2951 ändern.
2952
2953 Es gibt viele Arten die vertikalen Abstände zu verändern.  Im Grunde
2954 brauchen wir uns lediglich zu merken, dass der Abstand zwischen Objekten
2955 in einer @code{StaffGroup} (wie @code{GrandStaff} oder @code{PianoStaff}
2956 Gruppen) durch die Platzierungsvariablen des @code{StaffGrouper}
2957 kontrolliert wird.  Wohingegen die Abstände von nicht gruppierten
2958 Systemen (wie @code{Lyrics} und @code{Staff}) von den Variablen der
2959 @code{VerticalAxisGroup} kontrolliert werden.  Siehe
2960 @ruser{Flexible vertical spacing paper variables} und
2961 @ruser{Flexible vertikale Abstände in Systemgruppen} für weitere
2962 Details.
2963
2964 @node Kollision von Objekten
2965 @section Kollision von Objekten
2966 @translationof Collisions of objects
2967
2968 @menu
2969 * Verschieben von Objekten::
2970 * Überlappende Notation in Ordnung bringen::
2971 * Beispiel aus dem Leben::
2972 @end menu
2973
2974 @node Verschieben von Objekten
2975 @subsection Verschieben von Objekten
2976 @translationof Moving objects
2977
2978 @cindex Verschieben von überschneidenden Objekten
2979 @cindex Verschieben von Zusammenstößen
2980 @cindex Zusammenstöße vermeiden
2981 @cindex Objekte, verschieben von Zusammenstößen
2982 @cindex Vermeiden von Zusammenstößen
2983
2984 Es wird vielleicht eine Überraschung sein, aber LilyPond ist nicht
2985 perfekt. Einige Notationselemente können sich überschneiden. Das
2986 ist nicht schön, aber zum Glück sehr selten.  Normalerweise müssen
2987 die Objekte zur Klarheit oder aus ästhetischen Gründen verschoben
2988 werden -- sie könnten besser aussehen, wenn sie etwas zusätzlichen
2989 Platz erhalten.
2990
2991 Es gibt im Grunde drei Herangehensweisen, überlappende Notation
2992 zu verbessern.  Man sollte sie in der folgenden Reihenfolge
2993 anwenden:
2994
2995 @enumerate
2996 @item
2997 Die @strong{Richtung} eines der überlappenden Objekte kann
2998 geändert werden, indem die vordefinierten Befehle für
2999 Innersystemobjekte verwendet werden, wie beschrieben in
3000 @ref{within-staff (Objekte innerhalb des Notensystems)}.
3001 Hälse, Bögen, Balken, Dynamik-Zeichen
3002 und Triolen können auf diese Weise einfach umgeordnet
3003 werden.  Beschränkt ist diese Methode insofern, als es nur
3004 zwei Möglichkeiten zur Veränderung gibt: oben oder unten.
3005
3006 @item
3007 Die @strong{Objekteigenschaft}, die LilyPond benutzt um die
3008 Layout-Objekte zu platzieren, können mit dem
3009 @code{\override}-Befehl positioniert werden.  Die Vorteile
3010 von Änderungen dieser Art sind a) dass einige Objekte
3011 automatisch verschoben werden, wenn es nötig ist Platz zu
3012 schaffen und b) ein einziges @code{\override} sich auf
3013 alle Fälle eines Objekttyps bezieht.  Zu diesen Eigenschaften
3014 gehören:
3015
3016 @itemize
3017
3018 @item
3019 @code{direction} (Richtung)
3020
3021 Das wurde schon detailliert behandelt, siehe
3022 @ref{within-staff (Objekte innerhalb des Notensystems)}.
3023
3024 @item
3025 @code{padding}, @code{right-padding}, @code{staff-padding} (Verschiebung)
3026
3027 @cindex Padding-Eigenschaft
3028 @cindex right-padding-Eigenschaft
3029 @cindex staff-padding-Eigenschaft
3030 @cindex Verschieben (padding)
3031 @cindex Füllung (padding)
3032 @cindex padding (Füllung)
3033
3034 Wenn ein Objekt platziert wird, bestimmt der Wert seiner
3035 @code{padding}-(Füllungs)-Eigenschaft die Größe des
3036 Abstandes, der zwischen dem Objekt selber und dem
3037 Objekt, relativ zu welchem es positioniert wird, gelassen
3038 werden muss.  Dabei zählt der @code{padding}-Wert
3039 des Objektes, das platziert werden soll, der @code{padding}-Wert
3040 des Objektes, das schon gesetzt wurde, wird hingegen
3041 ignoriert.  Abstände mit @code{padding} können zu
3042 allen Objekten hinzugefügt werden, die das
3043 @code{side-position-interface} unterstützen.
3044
3045 Anstelle von @code{padding} wird die Position von
3046 Versetzungszeichengruppen durch die Eigenschaften
3047 @code{right-padding} bestimmt. Diese Eigenschaft wird im
3048 @code{AccidentalPlacement}-(Versetzungszeichen-Positionierungs)-Objekt
3049 gefunden, das sich innerhalb des @strong{Staff}-Kontexts
3050 befindet.  Während des Notensatzes werden die Notenköpfe
3051 zuerst gesetzt und dann die Versetzungszeichen, wenn denn
3052 welche gesetzt werden, durch die @code{right-padding}-Eigenschaft
3053 auf die linke Seite der Notenköpfe positioniert, um die Entfernung
3054 von den Notenköpfen und zwischen den einzelnen Versetzungszeichen zu
3055 bestimmen.  Also nur die @code{right-padding}-(Verschiebung nach rechts)-Eigenschaft
3056 des @code{AccidentalPlacement}-Objekts hat Einfluss auf die
3057 Positionierung der Versetzungszeichen.
3058
3059 Die @code{staff-padding}-(Verschiebung zum System)-Eigenschaft
3060 ist sehr ähnlich wie die @code{padding}-Eigenschaft:
3061 @code{padding} bestimmt den Minimalabstand zwischen
3062 einem Objekt, das das @code{side-position-interface}
3063 unterstützt, und dem nächsten anderen Objekt (normalerweise
3064 die Note oder Notenlinie); @code{staff-padding} dagegen
3065 wirkt nur auf Objekte die immer außerhalb des Notensystems
3066 sind -- damit wird der minimale Abstand bestimmt, der
3067 zwischen dem Objekt und dem Notensystem gelassen werden
3068 soll.  @code{staff-padding} hat also @strong{keinen Einfluss}
3069 auf Objekte, die relativ zu einer Note positioniert werden, sondern
3070 nur auf solche, die zum System relativ stehen. Wenn es mit einem
3071 anderen Objekt eingesetzt wird, erhält man keine Fehlermeldung, aber
3072 der Befehl hat auch keine Auswirkungen.
3073
3074 Um herauszufinden, welche @code{padding}-Eigenschaft für
3075 das bestimmte Objekt nötig, ist, das Sie verschieben wollen,
3076 müssen Sie in der IR nach den Objekt-Eigenschaften schauen.
3077 Dabei sollten Sie bedenken, dass sich die @code{padding}-Eigenschaften
3078 nicht unbedingt in dem Objekt selber befinden, schauen Sie
3079 also auch in Objekten nach, die offensichtlich Ähnlichkeiten
3080 haben.
3081
3082 Alle @code{padding}-Werte werden in Notenlinienabständen
3083 gemessen.  Für die meisten Objekte ist der Wert ungefähr auf
3084 1.0 oder weniger gesetzt (das variiert von Objekt zu Objekt).
3085 Der Wert kann geändert werden, wenn ein größerer (oder
3086 kleinerer) Abstand gewünscht wird.
3087
3088 @item
3089 @code{self-alignment-X} (Selbstpositionierung)
3090
3091 @cindex self-alignment-X-Eigenschaft
3092 @cindex Selbstpositionierung von Objekten
3093 @cindex Ausrichtung von Objekten
3094
3095 Diese Eigenschaft kann benutzt werden, um ein Objekt
3096 nach links, rechts oder zentriert an dem Referenzpunkt des Objekts
3097 auszurichten, an das es verknüpft ist.  Es kann bei allen
3098 Objekten benutzt werden, die das @code{self-alignment-interface}
3099 unterstützen.  Das sind üblicherweise Objekte, die Text
3100 enthalten.  Die möglichen Werte der Eigenschaft sind @code{LEFT},
3101 @code{RIGHT} oder @code{CENTER}.  Alternativ kann ein
3102 numerischer Wert zwischen @w{@code{-1}} und @code{+1}
3103 bestimmt werden: @w{@code{-1}} heißt linksbündig, @code{+1}
3104 rechtsbündig und Zahlen dazwischen bewegen den Text
3105 schrittweise von links nach rechts.  Zahlen größer als
3106 @code{1} können angegeben werden, um den Text
3107 noch weiter nach links zu bewegen, oder weniger als @w{@code{-1}},
3108 um ihn weiter nach rechts zu schieben.  Eine Änderung
3109 um @code{1} des Wertes entspricht einer Bewegung um
3110 die halbe Textbreite.
3111
3112 @item
3113 @code{extra-spacing-width} (zusätzliche Breite)
3114
3115 @cindex extra-spacing-width-Eigenschaft
3116
3117 Diese Eigenschaft steht für alle Objekte zur Verfügung, die
3118 das @code{item-interface} unterstützen.  Es braucht zwei
3119 Zahlen als Argument, die erste wird zur rechten Ausdehnung,
3120 die zweite zur linken Ausdehnung hinzugerechnet.  Negative
3121 Zahlen verschieben die Ausdehnung nach rechts, positive nach
3122 links, um also ein Objekt zu verbreitern, muss die erste
3123 Zahl negativ und die zweite positiv sein.  Allerdings beachten
3124 nicht alle Objekte beide Zahlen.  Das
3125 @code{accidental}-(Versetzungszeichen)-Objekt etwa beachtet
3126 nur erste Zahl für die linke Ausdehnung.
3127
3128 @item
3129 @code{staff-position} (Notensystempositionierung)
3130
3131 @cindex staff-position-Eigenschaft
3132
3133 @code{staff-position} ist eine Eigenschaft des
3134 @code{staff-symbol-referencer-interface}, die von Objekten unterstützt
3135 wird, die relativ zum Notensystem (engl. staff) positioniert werden.
3136 Hiermit wird die vertikale Position eines Objekts relativ zur
3137 Mittellinie des Systems in halben Notenlinienabständen angegeben.
3138 Das ist sehr nützlich, um Zusammenstöße zwischen Layout-Objekten
3139 wie Ganztaktpausen, Bögen und Noten in verschiedenen Stimmen
3140 zu lösen.
3141
3142 @item
3143 @code{horizontal-shift} (horizontale Verschiebung)
3144
3145 @cindex horizontal-shift-Eigenschaft
3146 @cindex Notenkolumne
3147 @cindex Notenkollisionen
3148 @cindex Kollision, Noten
3149 @cindex shift Befehl
3150 @funindex \shiftOff
3151 @funindex \shiftOn
3152 @funindex \shiftOnn
3153 @funindex \shiftOnnn
3154
3155 Innerhalb einer Stimme werden alle Noten, die zeitgleich stattfinden,
3156 zu einer Gruppe zusammen gefasst, einem sog. @code{NoteColumn} Objekt.
3157 Dieses Objekt dient dem Zweck, diese Gruppe von Noten horizontal zu
3158 positionieren (siehe auch @qq{Notenkolumnen} in @ref{Stimmen explizit beginnen}).
3159 @emph{Genau dann, wenn} zwei oder mehr Notenkolumnen innerhalb eines
3160 Systemkontexts, die beide jeweils die Hälse in die gleiche Richtung haben
3161 und auch zur gleichen Zeit stattfinden, werden die Werte ihrer
3162 @code{horizontal-shift}-Eigenschaften nach Größe sortiert und die Objekte
3163 dann mit einer Ordnungsnummer versehen. Je größer diese Ordnungsnummer,
3164 desto stärker wird ein Objekt verschoben um eine Kollision der Notenköpfe
3165 zu vermeiden.  Diese Eigenschaft wird mit den @code{\voiceXXX}-Befehlen
3166 gesetzt und kann direkt durch einen @code{\override}-Befehl, oder was für
3167 gewöhnlich häufiger vorkommt, durch einen @code{\shiftOn}-Befehl gesetzt
3168 werden.  Bedenken sie bitte, diese Eigenschaft dient lediglich dazu, den
3169 Notenkolumnen eine @emph{Ordnungsnummer} zuzuweisen - sie bestimmt in
3170 keinster Weise die Größe der jeweiligen Verschiebung.  Die steigt mit
3171 zunehmender Ordnungsnummer in festen Schritten.  Die Schrittweite ist
3172 für gewöhnlich eine halbe Notenkopfbreite.  Bei sehr eng platzierten Notengruppen
3173 kann sie aber auch mal eine ganze Notenkopfbreite betragen.
3174
3175 @item
3176 @code{force-hshift} (horizontale Verschiebung erzwingen)
3177
3178 @cindex force-hshift-Eigenschaft
3179
3180 Die @code{force-hshift}-(erzwinge horizontale Verschiebung)-Eigenschaft
3181 ist eine Eigenschaft von @code{NoteColumn} (bzw. vom
3182 @code{note-column-interface}).  Eine Veränderung dieser Eigenschaft
3183 macht es möglich, eine Notenkolumne zu verschieben, wenn sie mit anderen
3184 überlappt.  Diese Eigenschaft hat keinerlei Auswirkungen, wenn keine
3185 Überlappung vorliegt.  Veränderungen werden in einer Einheit angegeben,
3186 die zu der Notenkolumne passt, d.h. der Breite des Notenkopfes der Note
3187 der ersten Stimme.  Diese Eigenschaft sollte in denjenigen komplexen
3188 Fällen verwendet werden, die sich nicht mit dem normalen @code{\shiftOn}-Befehle
3189 (siehe auch @ref{Stimmen explizit beginnen}) lösen lassen.
3190 Sie ist auf jeden Fall der Verwendung der @code{extra-offset}-Eigenschaft
3191 vorzuziehen, weil man die richtige Entfernung nicht
3192 in Notenlinienabständen ausrechnen muss.  Wenn eine Note in eine
3193 Notenkolumne oder aus ihr heraus geschoben wird, werden auch andere
3194 Funktionen beeinflusst, wie etwa die Verschmelzung von Notenköpfen.
3195
3196 @end itemize
3197
3198 @item
3199 Zu guter Letzt, wenn alles andere nicht funktioniert, können Objekte auch
3200 manuell positioniert werden, entweder vertikal in Bezug auf die
3201 Mittellinie des Systems, oder indem sie einen beliebigen Abstand weit
3202 auf eine neue Position verschoben werden.  Der Nachteil ist, dass die
3203 richtigen Werte für eine gute Position manuell ausprobiert werden müssen,
3204 meistens durch Herantasten an den richtigen Wert, und das für jedes
3205 einzelne Objekt extra.  Und weil diese Verschiebungen erst vorgenommen
3206 werden, wenn LilyPond alle anderen Objekte gesetzt hat, ist man als
3207 Notensetzer selber dafür verantwortlich, ob es Zusammenstöße gibt.
3208 Am schwerwiegendsten ist aber die Tatsache, dass die
3209 Verschiebungskoordinaten wahrscheinlich neu errechnet oder
3210 ausprobiert werden müssen, wenn sich an den Noten und deren
3211 Layout später irgend etwas ändert.  Die Eigenschaften, die für diese
3212 Arte der manuellen Verschiebung verwendet werden können, sind:
3213
3214 @table @code
3215 @item extra-offset (zusätzlicher Abstand)
3216
3217 @cindex extra-offset-Eigenschaft
3218
3219 Diese Eigenschaft gehört zu jedem Layout-Objekt, das das
3220 @code{grob-interface} unterstützt.  Sie braucht ein Zahlenpaar,
3221 das die exakte Verschiebung in horizontaler und vertikaler Richtung
3222 bezeichnet.  Negative Zahlen verschieben das Objekt nach links oder
3223 unten.  Die Einheit sind Notenlinienabstände.  Die zusätzliche
3224 Positionierung wird vorgenommen, nachdem alle anderen Objekte
3225 platziert sind, weshalb ein Objekt irgendwohin verschoben werden
3226 kann, ohne den restlichen Satz zu beeinflussen.
3227
3228 @item positions (Position)
3229
3230 @cindex positions-Eigenschaft
3231
3232 Diese Eigenschaft ist am sinnvollsten, um die Steigung und die
3233 Höhe von Balken, Bögen und Triolenklammern anzupassen.
3234 Sie braucht ein Zahlenpaar, das die Position des rechten und linken
3235 Endes relativ zur Mittellinie des Notensystems bestimmt.  Die
3236 Einheit sind Notenlinienabstände.  Bögen allerdings können nicht
3237 beliebig weit weg positioniert werden.  LilyPond erstellt zunächst eine
3238 Liste an möglichen Positionen für den Bogen und findet normalerweise
3239 die Version, die @qq{am besten aussieht}.  Wenn die
3240 @code{positions}-Eigenschaft verändert worden ist, wird der
3241 Bogen aus der Liste gewählt, der der gewünschten Position am
3242 nächsten kommt.
3243 @end table
3244
3245 @end enumerate
3246
3247 Ein bestimmtes Objekt hat vielleicht nicht alle dieser Eigenschaften.
3248 Darum ist es nötig, in der IR nachzuschlagen, welche Eigenschaften
3249 ein bestimmtes Objekt unterstützt.
3250
3251 Hier ist eine Liste an Objekten, die am wahrscheinlichsten an einer
3252 Kollision beteiligt sind, daneben findet sich die Bezeichnung des
3253 Objektes, mit der Sie es in der IR finden, um zu bestimmen,
3254 welche Eigenschaften benutzt werden können, um es zu verschieben.
3255
3256 @multitable @columnfractions .5 .5
3257 @headitem Objekttyp           @tab Objektbezeichnung
3258 @item Articulationszeichen             @tab @code{Script}
3259 @item Balken                     @tab @code{Beam}
3260 @item Dynamikzeichen (vertikal)     @tab @code{DynamicLineSpanner}
3261 @item Dynamikzeichen (horizontal)   @tab @code{DynamicText}
3262 @item Fingersatz                @tab @code{Fingering}
3263 @item Übungs-/Textmarken    @tab @code{RehearsalMark}
3264 @item Legatobögen                     @tab @code{Slur}
3265 @item Text z. B. @code{^"text"}  @tab @code{TextScript}
3266 @item Bindebögen                      @tab @code{Tie}
3267 @item N-tolen                   @tab @code{TupletBracket}
3268 @end multitable
3269
3270
3271 @node Überlappende Notation in Ordnung bringen
3272 @subsection Überlappende Notation in Ordnung bringen
3273 @translationof Fixing overlapping notation
3274
3275 Hier soll nun gezeigt werden, wie die Eigenschaften, die im
3276 vorigen Abschnitt vorgestellt wurden, bei der Problemlösung
3277 mit sich überschneidenden Notationselementen eingesetzt
3278 werden können.
3279
3280 @menu
3281 * Die padding-Eigenschaft::
3282 * Die right-padding-Eigenschaft::
3283 * Die staff-padding-Eigenschaft::
3284 * Die self-alignment-X-Eigenschaft::
3285 * Die staff-position-Eigenschaft::
3286 * Die extra-offset-Eigenschaft::
3287 * Die positions-Eigenschaft::
3288 * Die force-hshift-Eigenschaft::
3289 @end menu
3290
3291 @node Die padding-Eigenschaft
3292 @unnumberedsubsubsec Die @code{padding}-Eigenschaft (auffüllen)
3293 @translationof The padding property
3294
3295 @cindex padding (Verschiebungs-Eigenschaft)
3296 @cindex Überschneidende Notation korrigieren
3297 @cindex Korrigieren von überschneidender Notation
3298
3299 Die @code{padding}-(Verschiebungs-)Eigenschaft kann benutzt
3300 werden, um den Abstand zwischen Symbolen zu vergrößern (oder
3301 zu verkleinern), die über oder unter den Noten gesetzt werden.
3302
3303 @cindex Script, Beispiel zur Veränderung
3304 @cindex Verschiebungs-Eigenschaft, Beispiel
3305 @cindex padding (Verschiebuns-Eigenschaft), Beispiel
3306
3307 @lilypond[quote,fragment,verbatim]
3308 c'2\fermata
3309 \override Script.padding = #3
3310 b2\fermata
3311 @end lilypond
3312
3313 @cindex MetronomMark, Beispiel zur Veränderung
3314 @cindex Verschiebungs-Eigenschaft, Beispiel
3315 @cindex padding (Verschiebuns-Eigenschaft), Beispiel
3316
3317 @lilypond[quote,fragment,verbatim]
3318 % This will not work, see below
3319 \override MetronomeMark.padding = #3
3320 \tempo 4 = 120
3321 c'1 |
3322 % This works
3323 \override Score.MetronomeMark.padding = #3
3324 \tempo 4 = 80
3325 d'1 |
3326 @end lilypond
3327
3328 Im zweiten Beispiel können Sie sehen, wie wichtig es ist den richtigen
3329 Kontext anzugeben.  Weil das @code{MetronomeMark}-Objekt
3330 sich im @code{Score}-Kontext befindet, werden Eigenschaftsänderungen
3331 im @code{Voice}-Kontext einfach ignoriert.  Für mehr Einzelheiten siehe
3332 @ruser{Eigenschaften verändern}.
3333
3334 Wenn die @code{padding}-Eigenschaft eines Objektes erhöht wird, das
3335 sich in einem Stapel von Objekten befindet, die nach ihrer
3336 Außersystempriorität (@code{outside-staff-priority}) positioniert werden,
3337 werden das Objekt und alle,  die sich außerhalb davon befinden,
3338 entsprechend verschoben.
3339
3340
3341 @node Die right-padding-Eigenschaft
3342 @unnumberedsubsubsec Die @code{right-padding}-Eigenschaft (rechts auffüllen)
3343 @translationof The right-padding property
3344
3345 @cindex Verschiebung nach links
3346 @cindex right-padding-Eigenschaft (Verschiebung nach links)
3347
3348 Die @code{right-padding}-Eigenschaft wirkt sich auf den Abstand
3349 zwischen einem Versetzungszeichen und der Note, auf das sie sich
3350 bezieht, aus.  Sie wird nicht sehr oft benötigt, aber die
3351 Standardanordnung kann für einige spezielle Versetzungszeichen-Glyphen
3352 oder Kombinationsglyphen,
3353 wie sie für Mikrotonale Musik benutzt werden, falsch sein.  Derartige
3354 Glyphen müssen notiert werden, indem man den Stencil des
3355 Versetzungszeichens mit einer Textbeschriftung (Markup) ersetzt,
3356 wie im folgenden Beispiel:
3357
3358 @cindex Versetzungszeichen, Beispiel zur Veränderung
3359 @cindex Accidental, Beispiel zur Veränderung
3360 @cindex Text-Eigenschaft, Beispiel
3361 @cindex stencil-Eigenschaft, Beispiel
3362 @cindex AccidentalPlacement, Beispiel zur Veränderung
3363 @cindex right-padding-Eigenschaft, Beispiel
3364 @cindex Verschiebung nach rechts (rigth-padding), Beispiel
3365
3366 @lilypond[quote,ragged-right,verbatim]
3367 sesquisharp = \markup { \sesquisharp }
3368  \relative {
3369   c''4
3370   % This prints a sesquisharp but the spacing is too small
3371   \once \override Accidental.stencil = #ly:text-interface::print
3372   \once \override Accidental.text = #sesquisharp
3373   cis4 c
3374   % This improves the spacing
3375   \once \override Score.AccidentalPlacement.right-padding = #0.6
3376   \once \override Accidental.stencil = #ly:text-interface::print
3377   \once \override Accidental.text = #sesquisharp
3378   cis4
3379 }
3380 @end lilypond
3381
3382 @noindent
3383 Dazu ist aber ein @code{\override}-Befehl für den Stencil des
3384 Versetzungszeichens nötig, der bisher nicht behandelt wurde.
3385 Der Typ des Stencils muss eine Prozedur sein, die hier geändert
3386 wurde, um den Inhalt der @code{text}-Eigenschaft des
3387 @code{Accidental} (Versetzungszeichen)-Objekts zu setzen.  Die
3388 @code{text}-Eigenschaft wiederum wird als @code{sesquisharp}-Glyph
3389 definiert.  Dieser Glyph wird dann weiter vom Notenkopf entfernt
3390 durch die Veränderung von @code{right-padding} mit einem
3391 @code{\override}-Befehl.
3392
3393 @node Die staff-padding-Eigenschaft
3394 @unnumberedsubsubsec The @code{staff-padding}-Eigenschaft (Systemfüllungseigenschaft)
3395 @translationof The staff-padding property
3396
3397 @cindex staff-padding-Eigenschaft
3398 @cindex Objekte an der Grundlinie ausrichten
3399 @cindex Ausrichten von Objekten an der Grundlinie
3400
3401 @code{staff-padding} kann
3402 verwendet werden um Objekte wie Dynamikzeichen an einer
3403 Grundlinie mit einem festen (Mindest-) Abstand zum System auszurichten,
3404 wenn keine anderen Notationsobjekte einen noch weiteren Abstand erfordern.
3405 Diese Verschiebung ist keine Eigenschaft
3406 von @code{DynamicText}, sondern von @code{DynamicLineSpanner}.
3407 Das liegt daran, dass die Grundlinie sich gleicherweise auf
3408 @strong{alle} Dynamikzeichen beziehen soll, also auch auf die,
3409 die als Strecker erstellt wurden.  Hier also die Lösung, die Dynamikzeichen
3410 aus dem Beispiel des vorigen Abschnitts auszurichten:
3411
3412 @cindex DynamikText, Beispiel zur Veränderung
3413 @cindex extra-spacing-width-Eigenschaft, Beispiel
3414 @cindex DynamicLineSpanner, Beispiel zur Veränderung
3415 @cindex staff-padding-Eigenschaft, Beispiel
3416
3417 @lilypond[quote,fragment,ragged-right,verbatim]
3418 \override DynamicLineSpanner.staff-padding = #3
3419 \relative { a'4\f b\mf a\p b\mp }
3420 @end lilypond
3421
3422
3423 @node Die self-alignment-X-Eigenschaft
3424 @unnumberedsubsubsec Die @code{self-alignment-X}-Eigenschaft (Selbstausrichtung-X-Eigenschaft)
3425 @translationof The self-alignment-X property
3426
3427 Das nächste Beispiel zeigt, wie man die Position einer
3428 Fingersatzbezeichnung relativ zu einem Notenhals justieren kann,
3429 indem dessen rechte Kante an dem Referenzpunkt der zugehörigen Note
3430 ausgerichtet wird:
3431
3432 @cindex StringNumber, Beispiel zur Veränderung
3433 @cindex self-alignment-X-Eigenschaft
3434 @cindex Selbstausrichtung-X-Eigenschaft
3435
3436 @lilypond[quote,fragment,ragged-right,verbatim]
3437 \voiceOne
3438 <a''\2>
3439 \once \override StringNumber.self-alignment-X = #RIGHT
3440 <a''\2>
3441 @end lilypond
3442
3443 @node Die staff-position-Eigenschaft
3444 @unnumberedsubsubsec Die @code{staff-position}-Eigenschaft (Position innerhalb des Systems)
3445 @translationof The staff-position property
3446
3447 @cindex staff-position-Eigenschaft
3448 @cindex Notensystem-Position-Eigenschaft
3449 @cindex Kollision von Objekten im System
3450 @cindex Zusammenstöße von Objekten im System
3451
3452 Mehrtaktpausen in einer Stimmen können mit Noten in anderen
3453 Stimmen kollidieren.  Da diese Pausen zentriert zwischen den
3454 Taktstriche gesetzt werden, würde es für LilyPond eine recht große
3455 Anstrengung bedeuten herauszufinden, welche Noten mit ihnen
3456 zusammenstoßen könnten, denn alle Kollisionsvermeidung
3457 für Noten und Pausen funktioniert nur für Noten bzw. Pausen, die
3458 zur selben Zeit auftreten.  Hier ein typisches Beispiel für eine
3459 Kollision dieser Art:
3460
3461 @lilypond[quote,verbatim,ragged-right]
3462 << \relative { c'4 c c c } \\ { R1 } >>
3463 @end lilypond
3464
3465 Die beste Lösung ist es hier, die Ganztaktpause nach unten zu
3466 schieben, denn die Pause ist in der zweiten Stimme.  Per
3467 Standardeinstellung für die zweite Stimme (@code{\voiceTwo},
3468 also die zweite Stimme in der
3469 @code{<<@{@dots{}@} \\ @{@dots{}@}>>}-Konstruktion) wird die
3470 Position auf dem System (@code{staff-position}) auf -4
3471 für @code{MultiMeasureRest}, in unserem Beispiel muss
3472 es also bspw. auf die Position @w{@code{-8}} gesetzt werden,
3473 d.h. vier halbe Notenlinienabstände weiter nach unten:
3474
3475 @cindex MultiMeasureRest, Beispiel zur Veränderung
3476 @cindex Ganztaktpausen, Beispiel zur Veränderung
3477 @cindex staff-position-Eigenschaft, Beispiel
3478
3479 @lilypond[quote,verbatim,ragged-right]
3480 <<
3481   \relative { c'4 c c c }
3482   \\
3483   \override MultiMeasureRest.staff-position = #-8
3484   { R1 }
3485 >>
3486 @end lilypond
3487
3488 Das ist besser, als etwa @code{extra-offset} zu benutzen, denn
3489 in unserem Fall wird die Hilfslinie der Pause automatisch gesetzt.
3490
3491 @node Die extra-offset-Eigenschaft
3492 @unnumberedsubsubsec Die @code{extra-offset}-Eigenschaft (Genaues Positionieren)
3493 @translationof The extra-offset property
3494
3495 @cindex extra-offset-Eigenschaft
3496 @cindex Zusätzlicher Abstand, Positionierung
3497 @cindex Positionierung von Objekten
3498 @cindex Objekte, Positionierung
3499
3500 Die @code{extra-offset}-Eigenschaft bietet vollständige Kontrolle
3501 über die Positionierung von Objekten in horizontaler und vertikaler
3502 Richtung.
3503
3504 Im Beispiel unten ist das zweite Fingersatzzeichen (@code{Fingering}) etwas nach
3505 links und 1,8 Notenlinienabstände nach unten verschoben:
3506
3507 @cindex Fingersatz, Beispiel zur Veränderung
3508 @cindex extra-offset-Eigenschaft, Beispiel
3509
3510 @lilypond[quote,fragment,verbatim]
3511 f'4-5
3512 \once \override Fingering.extra-offset = #'(-0.3 . -1.8)
3513 f'4-5
3514 @end lilypond
3515
3516
3517 @node Die positions-Eigenschaft
3518 @unnumberedsubsubsec Die @code{positions}-Eigenschaft (Ausrichtungseigenschaft)
3519 @translationof The positions property
3520
3521 @cindex positions-Eigenschaft
3522 @cindex Kontrolle über Triolen, Bögen und Balken manuell
3523 @cindex manuelle Kontrolle über Triolen, Bögen, Balken
3524 @cindex Balken, manuelle Kontrolle
3525 @cindex Bögen, manuelle Kontrolle
3526 @cindex Legatobögen, manuelle Kontrolle
3527 @cindex Phrasierungsbögen, manuelle Kontrolle
3528 @cindex Triolen-Klammer, manuelle Kontrolle
3529
3530 Die @code{positions}-Eigenschaft ermöglicht es, die vertikale Position
3531 und damit implizit die Neigung von N-tolen, Legato- und Phrasierungsbögen
3532 sowie Balken manuell zu steuern.
3533
3534 Im folgenden Beispiel überlappen der Legato- und er Phrasierungsbogen:
3535
3536 @lilypond[quote,verbatim,ragged-right]
3537 \relative { a'8 \( ( a'16 ) a \) }
3538 @end lilypond
3539
3540 @cindex Phrasierungsbogen, Beispiel zur Veränderung
3541 @cindex positions-Eigenschaft, Beispiel
3542 @cindex Positionierung, Beispiel
3543
3544 @noindent
3545 Ein Möglichkeit wäre es, die beiden Endpunkte des Phrasierungsbogen
3546 weiter nach oben zu verschieben.  Wir probieren einmal das linke
3547 Ende 2.5 Staff-Einheiten über die Mittellinie und das rechte Ende
3548 4.5 Einheiten darüber zu fixieren und überlassen es LilyPond, einen
3549 zu diesen Endpunkten passenden Phrasierungsbogen auszuwählen:
3550
3551 @lilypond[quote,verbatim,fragment,ragged-right]
3552 \once \override PhrasingSlur.positions = #'(2.5 . 4.5)
3553 a'8 \( ( a''16 ) a'' \)
3554 @end lilypond
3555
3556 Auf jeden Fall eine Verbesserung, aber warum das rechte Ende des
3557 Legatobogens nicht ein wenig nach unten verschieben?  Wenn Sie es
3558 versuchen werden sie feststellen, es ist auf diesem Wege nicht
3559 möglich, und das liegt daran, dass LilyPond von sich aus keinen
3560 Bogen erzeugt, der niedriger läge, als der, den es bereits auswählt.
3561 In solch einem Fall hat eine Änderung der @code{positions}-Eigenschaft
3562 keinerlei Auswirkung.  Allerdings @emph{können} Binde-, Legato- und
3563 Phrasierungsbögen bei Bedarf sehr exakt positioniert und auch geformt
3564 werden.  Unter @ruser{Bögen verändern} können sie lernen, wie.
3565
3566 Hier noch ein weiteres Beispiel.  Wie zu sehen ist,
3567 stößt der Balken mit den oberen Bögen zusammen:
3568
3569 @lilypond[quote,verbatim,ragged-right]
3570 {
3571   \time 4/2
3572   <<
3573     \relative { c'1~ 2. e8 f }
3574     \\
3575     \relative {
3576       e''8 e e e
3577       e e e e
3578       f2 g
3579     }
3580   >>
3581   <<
3582     \relative { c'1~ 2. e8 f }
3583     \\
3584     \relative {
3585       e''8 e e e
3586       e e e e
3587       f2 g
3588     }
3589   >>
3590 }
3591 @end lilypond
3592
3593 @noindent
3594 Das kann manuell gelöst werden, indem beide Enden des Balkens
3595 von ihrer Position 1.81 Notenlinienabstände unter der Mittellinie
3596 hoch geschoben werden, etwa auf 1:
3597
3598 @cindex Balken, Beispiel zur Veränderung
3599 @cindex positions-Eigenschaft, Beispiel
3600 @cindex Positionierung, Beispiel
3601
3602 @lilypond[quote,verbatim,ragged-right]
3603 {
3604   \time 4/2
3605   <<
3606     \relative { c'1~ 2. e8 f }
3607     \\
3608     \relative {
3609       \override Beam.positions = #'(-1 . -1)
3610       e''8 e e e
3611       e e e e
3612       f2 g
3613     }
3614   >>
3615   <<
3616     \relative { c'1~ 2. e8 f }
3617     \\
3618     \relative {
3619       e''8 e e e
3620       e e e e
3621       f2 g
3622       \revert Beam.positions
3623     }
3624   >>
3625 }
3626 @end lilypond
3627
3628 @noindent
3629 Hier ist zu beobachten, dass die Veränderung sich auch auf den
3630 die zweite Stimme des weiteren Taktes mit Achtelnoten auswirkt,
3631 während sie keine Auswirkung auf die Hälse der ersten Stimme hat.
3632 Sobald das override nicht mehr benötigt wird, sollte es wie
3633 zu sehen reverted werden.
3634
3635 @node Die force-hshift-Eigenschaft
3636 @unnumberedsubsubsec Die @code{force-hshift}-Eigenschaft (horizontale Verschiebunseigenschaft)
3637 @translationof The force-hshift property
3638
3639 @cindex force-hshift-Eigenschaft
3640 @cindex Vertikale Verschiebung erzwingen
3641
3642 An diesem Punkt können wir den letzten Feinschliff an unserem
3643 Chopin-Beispiel vornehmen, das wir behandelt haben in
3644 @ref{Ich höre Stimmen}.  Wir hatten es in folgende Form
3645 gebracht:
3646
3647 @lilypond[quote,verbatim,fragment,ragged-right]
3648 \new Staff \relative {
3649   \key aes \major
3650   <<
3651     { c''2 aes4. bes8 }
3652     \\
3653     { <ees, c>2 des }
3654     \\
3655     \\
3656     { aes'2 f4 fes }
3657   >> |
3658   <c ees aes c>1 |
3659 }
3660 @end lilypond
3661
3662 @noindent
3663 Die inneren Noten des ersten Akkordes (also das As in der vierten Stimme)
3664 müssen nicht mit shift verschoben aus der Noten-Kolumne der höheren Stimme
3665 verschoben werden, daher verwenden wir @code{\shiftOff}.
3666
3667 Im zweiten Akkord wollen wir, dass das F sich am As orientiert und die
3668 tiefste Note leicht nach rechts verschoben wird, damit ein Zusammenstoß
3669 der Hälse vermieden wird.  Das erreicht man mit @code{force-hshift} in
3670 @code{NoteColumn} des unteren Des, um es einen halben
3671 Notenlinienzwischenraum nach rechts zu verschieben und gleichzeitig
3672 @code{force-hshift} für das F auf Null.
3673 Ihnen ist sicher aufgefallen, dass wir @code{\once} verwenden damit
3674 die Veränderung nicht über den konkreten Fall hinaus wirkt, auch wenn
3675 im konkreten kleinen Beispiel @code{\once} und das zweite @code{\override}
3676 in der vierten Stimme weggelassen werden könnte.  Das wäre aber
3677 schlechter Stil.
3678
3679 Hier das Endergebnis:
3680
3681 @cindex Notenkolumne, Beispiel zur Veränderung
3682 @cindex force-hshift-Eigenschaft, Beispiel
3683 @cindex vertikale Verschiebung, Beispiel
3684
3685 @lilypond[quote,verbatim,fragment,ragged-right]
3686 \new Staff \relative {
3687   \key aes \major
3688   <<
3689     { c''2 aes4. bes8 }
3690     \\
3691     { <ees, c>2 \once \override NoteColumn.force-hshift = 0.5 des }
3692     \\
3693     \\
3694     { \once \shiftOff aes'2 \once \shiftOff f4 fes }
3695   >> |
3696   <c ees aes c>1 |
3697 }
3698 @end lilypond
3699
3700
3701 @node Beispiel aus dem Leben
3702 @subsection Beispiel aus dem Leben
3703 @translationof Real music example
3704
3705 Das Kapitel zu Optimierungen soll mit einem komplizierten Beispiel
3706 beendet werden, in dem verschiedene Optimierungen vorgenommen
3707 werden müssen, bis das Ergebnis gut aussieht.  Das Beispiel wurde
3708 ganz bewusst gewählt um die Benutzung der Notationsreferenz
3709 zu zeigen, wenn ungewöhnliche Notationsprobleme gelöst werden
3710 müssen.  Es ist nicht repräsentativ für normale Notationsprojekte,
3711 lassen Sie sich also nicht durch dieses Beispiel entmutigen!  Zum
3712 Glück sind Probleme wie die hier gezeigten nicht sehr häufig.
3713
3714 Das Beispiel stammt aus Chopins Premiére Ballade, Op. 23, Takte
3715 6--9, der Übergang vom Lento der Einleitung zum Moderato.
3716 Hier zunächst der Satz, wie er aussehen soll, allerdings ohne
3717 Dynamik, Fingersatz und Pedalbezeichnung, um das Beispiel nicht
3718 zu kompliziert zu machen.
3719
3720 @c The following should appear as music without code
3721 @c This example should not be indexed
3722 @c line-width ensures no break
3723 @lilypond[quote,ragged-right,line-width=6\in]
3724 rhMusic = \relative {
3725   \new Voice {
3726     r2 c''4.\( g8 |
3727     \once \override Tie.staff-position = #3.5
3728     bes1~ |
3729     \bar "||"
3730     \time 6/4
3731     \mergeDifferentlyHeadedOn
3732     \mergeDifferentlyDottedOn
3733     bes2.\tempo "Moderato" r8
3734     <<
3735       { c,8 d fis bes a }
3736       \new Voice {
3737         \voiceTwo
3738         c,8~
3739         % Reposition the c2 to the right of the merged note
3740         \once \override NoteColumn.force-hshift = #1.0
3741         % Move the c2 out of the main note column
3742         % so the merge will work
3743         \shiftOnn
3744         c2
3745       }
3746       \new Voice {
3747         \voiceThree
3748         s8
3749         % Stem on the d2 must be down to permit merging
3750         \stemDown
3751         % Stem on the d2 should be invisible
3752         \tweak Stem.transparent ##t
3753         d2
3754       }
3755       \new Voice {
3756         \voiceFour
3757         s4 fis4.
3758       }
3759     >> |
3760     \mergeDifferentlyHeadedOff
3761     \mergeDifferentlyDottedOff
3762     g2.\)
3763   }
3764 }
3765
3766 lhMusic = \relative {
3767   r2 <c' g ees>2( |
3768   <d g, d>1)\arpeggio |
3769   r2. d,,4 r4 r |
3770   r4
3771 }
3772
3773 \score {
3774   \new PianoStaff <<
3775     \new Staff = "RH"  <<
3776       \key g \minor
3777       \rhMusic
3778     >>
3779     \new Staff = "LH" <<
3780       \key g \minor
3781       \clef "bass"
3782       \lhMusic
3783     >>
3784   >>
3785 }
3786 @end lilypond
3787
3788 Die erste Überlegung ist, dass das System für die rechte Hand
3789 im dritten Takt vier Stimmen braucht.  Das sind die fünf
3790 Achtelnoten mit Balken, das übergebundene C, die Halbe D, die
3791 mit der Achtel D verschmolzen ist, und die punktierte Viertel
3792 Fis, die auch mit einer Achtelnote verschmolzen ist.  Alles
3793 andere ist eine einzige Stimme, es ist also am einfachsten, die
3794 zusätzlichen drei Stimmen nur zeitweise zu erstellen, wenn sie
3795 auftreten.  Wenn Sie vergessen haben, wie man das anstellt,
3796 schauen Sie sich nochmal den Abschnitt @ref{Ich höre Stimmen}
3797 und @ref{Stimmen explizit beginnen} an.  Hier wollen wir explizit
3798 begonnene Stimmen für die polyphone Stelle benutzen, weil LilyPond
3799 Kollisionen besser vermeidet, wenn alle Stimmen auf diese Weise
3800 explizit begonnen werden.
3801
3802
3803 Wir wollen anfange, indem wir die Noten in zwei Variablen
3804 notieren und dann die Systemstruktur in einer
3805 @code{\score}-Umgebung erstellen.  Das ist, was LilyPond
3806 erstellt:
3807
3808 @c line-width ensures no break
3809 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3810 rhMusic = \relative {
3811   \new Voice {
3812     r2 c''4. g8 |
3813     bes1~ |
3814     \time 6/4
3815     bes2. r8
3816     % Start polyphonic section of four voices
3817     <<
3818       { c,8 d fis bes a }  % continuation of main voice
3819       \new Voice {
3820         \voiceTwo
3821         c,8~ 2
3822       }
3823       \new Voice {
3824         \voiceThree
3825         s8 d2
3826       }
3827       \new Voice {
3828         \voiceFour
3829         s4 fis4.
3830       }
3831     >> |
3832     g2.  % continuation of main voice
3833   }
3834 }
3835
3836 lhMusic = \relative {
3837   r2 <c' g ees>2 |
3838   <d g, d>1 |
3839   r2. d,,4 r4 r |
3840   r4
3841 }
3842
3843 \score {
3844   \new PianoStaff <<
3845     \new Staff = "RH"  <<
3846       \key g \minor
3847       \rhMusic
3848     >>
3849     \new Staff = "LH" <<
3850       \key g \minor
3851       \clef "bass"
3852       \lhMusic
3853     >>
3854   >>
3855 }
3856 @end lilypond
3857
3858 Alle Noten sind richtig, aber die Positionierung sehr
3859 verbesserungsbedürftig.  Der Bindebogen kollidiert mit
3860 der veränderten Taktart zusammen, einige Noten werden nicht
3861 verschmolzen und einige Notationselemente fehlen ganz.
3862 Behandeln wir zunächst die einfacheren Dinge.  Der
3863 Balken kann durch eine manuelle Begrenzung einfach
3864 korrigiert werden, und auch der Legatobogen der linken
3865 Hand und der Phrasierungsbogen der rechten Hand
3866 sind schnell gesetzt, denn sie wurden schon in der
3867 Übung erklärt.  Damit haben wir folgendes Notenbild:
3868
3869 @c line-width ensures no break
3870 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3871 rhMusic = \relative {
3872   \new Voice {
3873     r2 c''4.\( g8 |
3874     bes1~ |
3875     \time 6/4
3876     bes2. r8
3877     % Start polyphonic section of four voices
3878     <<
3879       { c,8 d fis bes a }  % continuation of main voice
3880       \new Voice {
3881         \voiceTwo
3882         c,8~ 2
3883       }
3884       \new Voice {
3885         \voiceThree
3886         s8 d2
3887       }
3888       \new Voice {
3889         \voiceFour
3890         s4 fis4.
3891       }
3892     >> |
3893     g2.\)  % continuation of main voice
3894   }
3895 }
3896
3897 lhMusic = \relative {
3898   r2 <c' g ees>2( |
3899   <d g, d>1) |
3900   r2. d,,4 r4 r |
3901   r4
3902 }
3903
3904 \score {
3905   \new PianoStaff <<
3906     \new Staff = "RH"  <<
3907       \key g \minor
3908       \rhMusic
3909     >>
3910     \new Staff = "LH" <<
3911       \key g \minor
3912       \clef "bass"
3913       \lhMusic
3914     >>
3915   >>
3916 }
3917 @end lilypond
3918
3919 Der erste Takt stimmt jetzt schon.  Der zweite Takt enthält ein
3920 Arpeggio und wird mit einem doppelten Taktstrich beschlossen.
3921 Wie können wir diese notieren, denn sie sind im Handbuch zum
3922 Lernen nicht vorgekommen?  Hier brauchen wir jetzt die
3923 Notationsreferenz.  Ein Blick in den Index zeigt uns die
3924 Einträge für @qq{Arpeggio} und @qq{Taktstriche}: ein
3925 Arpeggio also erstellt man mit dem Befehl @code{\arpeggio}
3926 hinter einem Akkord und einen doppelten Taktstrich wird mit dem
3927 Befehl @code{\bar "||"} erstellt.  Das ist einfach.  Als nächstes
3928 muss der Zusammenstoß des Bindebogens mit der Taktartbezeichnung
3929 gelöst werden.  Das geht am besten, indem wir den Bogen nach
3930 oben verschieben.  Wie man Objekte verschiebt wurde schon
3931 behandelt in @ref{Verschieben von Objekten}, wo stand, dass Objekte
3932 die relativ zum System positioniert werden, vertikal verschoben werden
3933 können, indem ihre @code{staff-position}-Eigenschaft
3934 geändert wird, die in halben Notenlinienabständen relativ
3935 zur Mittellinie angegeben wird.  Dieser @code{\override}-Befehl
3936 also, direkt vor die erste über gebundene Note gestellt, verschiebt
3937 den Bindebogen (@code{tie}) 3,5 halbe Notenlinienabstände
3938 über die Mittellinie:
3939
3940 @code{\once \override Tie.staff-position = #3.5}
3941
3942 Damit ist auch der zweite Takt vollständig:
3943
3944 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
3945 rhMusic = \relative {
3946   \new Voice {
3947     r2 c''4.\( g8 |
3948     \once \override Tie.staff-position = #3.5
3949     bes1~ |
3950     \bar "||"
3951     \time 6/4
3952     bes2. r8
3953     % Start polyphonic section of four voices
3954     <<
3955       { c,8 d fis bes a }  % continuation of main voice
3956       \new Voice {
3957         \voiceTwo
3958         c,8~ 2
3959       }
3960       \new Voice {
3961         \voiceThree
3962         s8 d2
3963       }
3964       \new Voice {
3965         \voiceFour
3966         s4 fis4.
3967       }
3968     >> |
3969     g2.\)  % continuation of main voice
3970   }
3971 }
3972
3973 lhMusic = \relative {
3974   r2 <c' g ees>2( |
3975   <d g, d>1)\arpeggio |
3976   r2. d,,4 r4 r |
3977   r4
3978 }
3979
3980 \score {
3981   \new PianoStaff <<
3982     \new Staff = "RH"  <<
3983       \key g \minor
3984       \rhMusic
3985     >>
3986     \new Staff = "LH" <<
3987       \key g \minor
3988       \clef "bass"
3989       \lhMusic
3990     >>
3991   >>
3992 }
3993 @end lilypond
3994
3995 In Takt drei beginnt der Moderato-Abschnitt.  In der
3996 Übung wurde behandelt, wie man ein Tempobezeichnung mittels des
3997 @code{\tempo}-Befehls eingibt.  Damit ist das hinzufügen des
3998 @qq{Moderato} einfach.  Wie aber werden Noten
3999 verschmolzen?  Hier nehmen wir wieder die Notationsreferenz
4000 zu Hilfe.  Die Suche nach @qq{Verschmelzen} (engl. merge)
4001 im Index führt uns zu den Befehlen, um Noten mit
4002 unterschiedlichen Köpfen und unterschiedlichen Punkten
4003 zu verschmelzen, in @ruser{Auflösung von Zusammenstößen}.  In unserem
4004 Beispiel müssen sowohl unterschiedliche Köpfe also auch
4005 unterschiedliche Punktierung verschmolzen werden, wir
4006 brauchen also die Befehle
4007
4008 @example
4009 \mergeDifferentlyHeadedOn
4010 \mergeDifferentlyDottedOn
4011 @end example
4012
4013 @noindent
4014 aus der Notationsreferenz, die wir an den Beginn unseres
4015 Abschnittes stellen und
4016
4017 @example
4018 \mergeDifferentlyHeadedOff
4019 \mergeDifferentlyDottedOff
4020 @end example
4021
4022 @noindent
4023 um das Verhalten wieder auszuschalten. Das sieht so aus:
4024
4025 @c line-width ensures no break
4026 @lilypond[quote,ragged-right,line-width=6\in]
4027 rhMusic = \relative {
4028   \new Voice {
4029     r2 c''4.\( g8 |
4030     \once \override Tie.staff-position = #3.5
4031     bes1~ |
4032     \bar "||"
4033     \time 6/4
4034     bes2.\tempo "Moderato" r8
4035     \mergeDifferentlyHeadedOn
4036     \mergeDifferentlyDottedOn
4037     % Start polyphonic section of four voices
4038     <<
4039       { c,8 d fis bes a }  % continuation of main voice
4040       \new Voice {
4041         \voiceTwo
4042         c,8~ 2
4043       }
4044       \new Voice {
4045         \voiceThree
4046         s8 d2
4047       }
4048       \new Voice {
4049         \voiceFour
4050         s4 fis4.
4051       }
4052     >> |
4053     \mergeDifferentlyHeadedOff
4054     \mergeDifferentlyDottedOff
4055     g2.\)  % continuation of main voice
4056   }
4057 }
4058
4059 lhMusic = \relative {
4060   r2 <c' g ees>2( |
4061   <d g, d>1)\arpeggio |
4062   r2. d,,4 r4 r |
4063   r4
4064 }
4065
4066 \score {
4067   \new PianoStaff <<
4068     \new Staff = "RH"  <<
4069       \key g \minor
4070       \rhMusic
4071     >>
4072     \new Staff = "LH" <<
4073       \key g \minor
4074       \clef "bass"
4075       \lhMusic
4076     >>
4077   >>
4078 }
4079 @end lilypond
4080
4081 Mit diesen Veränderungen wurden die beiden Fis-Noten
4082 verschmolzen, aber nicht die zwei Ds.  Warum nicht?  Die
4083 Antwort befindet sich im gleicher Abschnitt der Notationsreferenz:
4084 Noten, die verschmolzen werden, müssen Hälse in entgegengesetzte
4085 Richtungen aufweisen und zwei Noten können nicht verschmolzen
4086 werden, wenn eine dritte Noten in der gleichen Kolumne
4087 stört.  In unserem Fall weisen beide Hälse nach oben und es
4088 befindet sich zur gleichen Zeit auch noch eine dritte Note, das C.
4089 Wie die Richtung von Hälsen geändert wird, wissen wir schon:
4090 mit @code{\stemDown}, und in der Notationsreferenz findet
4091 sich auch Information, wie das C verschoben werden kann: mit
4092 dem @code{\shift}-Befehl.  Aber welcher von ihnen?  Das C
4093 befindet sich in der zweiten Stimme, die @qq{shift off} hat,
4094 die zwei Ds sind in den Stimmen eins und drei, die @qq{shift
4095 off} bzw. @qq{shift on} haben.  Das C muss also noch eine
4096 Stufe weiter verschoben werden mit @code{\shiftOnn}, damit
4097 es die Verschmelzung der Ds nicht stört.  Das sieht jetzt so
4098 aus:
4099
4100 @cindex Bindebogen, Beispiel zur Veränderung
4101 @cindex staff-position-Eigenschaft, Beispiel
4102
4103 @c line-width ensures no break
4104 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
4105 rhMusic = \relative {
4106   \new Voice {
4107     r2 c''4.\( g8 |
4108     \once \override Tie.staff-position = #3.5
4109     bes1~ |
4110     \bar "||"
4111     \time 6/4
4112     bes2.\tempo "Moderato" r8
4113     \mergeDifferentlyHeadedOn
4114     \mergeDifferentlyDottedOn
4115     % Start polyphonic section of four voices
4116     <<
4117       { c,8 d fis bes a }  % continuation of main voice
4118       \new Voice {
4119         \voiceTwo
4120         % Move the c2 out of the main note column
4121         % so the merge will work
4122         c,8~ \shiftOnn c2
4123       }
4124       \new Voice {
4125         \voiceThree
4126         % Stem on the d2 must be down to permit merging
4127         s8 \stemDown d2
4128       }
4129       \new Voice {
4130         \voiceFour
4131         s4 fis4.
4132       }
4133     >> |
4134     \mergeDifferentlyHeadedOff
4135     \mergeDifferentlyDottedOff
4136     g2.\)  % continuation of main voice
4137   }
4138 }
4139
4140 lhMusic = \relative {
4141   r2 <c' g ees>2( |
4142   <d g, d>1)\arpeggio |
4143   r2. d,,4 r4 r |
4144   r4
4145 }
4146
4147 \score {
4148   \new PianoStaff <<
4149     \new Staff = "RH"  <<
4150       \key g \minor
4151       \rhMusic
4152     >>
4153     \new Staff = "LH" <<
4154       \key g \minor
4155       \clef "bass"
4156       \lhMusic
4157     >>
4158   >>
4159 }
4160 @end lilypond
4161
4162 Fast schon geschafft.  Nur noch ein Problem ist übrig: Der Hals nach
4163 unten des verschmolzenen sollte nicht da sein, und das C sähe
4164 besser auf der rechten Seite des Ds aus.  Beides können wir mit den
4165 gelernten Optimierungsmethoden erreichen. Den Hals machen
4166 wir durchsichtig und das C verschieben wir mit der
4167 @code{force-hshift}-Eigenschaft.  Hier ist das Endergebnis:
4168
4169 @cindex Notenkolumne, Beispiel zur Veränderung
4170 @cindex force-hshift-Eigenschaft, Beispiel
4171 @cindex Hals, Beispiel zur Veränderung
4172 @cindex Notenhals, Beispiel zur Veränderung
4173 @cindex transparent-Eigenschaft, Beispiel
4174
4175 @c line-width ensures no break
4176 @lilypond[quote,verbatim,ragged-right,line-width=6\in]
4177 rhMusic = \relative {
4178   \new Voice {
4179     r2 c''4.\( g8 |
4180     \once \override Tie.staff-position = #3.5
4181     bes1~ |
4182     \bar "||"
4183     \time 6/4
4184     bes2.\tempo "Moderato" r8
4185     \mergeDifferentlyHeadedOn
4186     \mergeDifferentlyDottedOn
4187     % Start polyphonic section of four voices
4188     <<
4189       { c,8 d fis bes a }  % continuation of main voice
4190       \new Voice {
4191         \voiceTwo
4192         c,8~
4193         % Reposition the c2 to the right of the merged note
4194         \once \override NoteColumn.force-hshift = #1.0
4195         % Move the c2 out of the main note column
4196         % so the merge will work
4197         \shiftOnn
4198         c2
4199       }
4200       \new Voice {
4201         \voiceThree
4202         s8
4203         % Stem on the d2 must be down to permit merging
4204         \stemDown
4205         % Stem on the d2 should be invisible
4206         \tweak Stem.transparent ##t
4207         d2
4208       }
4209       \new Voice {
4210         \voiceFour
4211         s4 fis4.
4212       }
4213     >> |
4214     \mergeDifferentlyHeadedOff
4215     \mergeDifferentlyDottedOff
4216     g2.\)  % continuation of main voice
4217   }
4218 }
4219
4220 lhMusic = \relative {
4221   r2 <c' g ees>2( |
4222   <d g, d>1)\arpeggio |
4223   r2. d,,4 r4 r |
4224   r4
4225 }
4226
4227 \score {
4228   \new PianoStaff <<
4229     \new Staff = "RH"  <<
4230       \key g \minor
4231       \rhMusic
4232     >>
4233     \new Staff = "LH" <<
4234       \key g \minor
4235       \clef "bass"
4236       \lhMusic
4237     >>
4238   >>
4239 }
4240 @end lilypond
4241
4242
4243 @node Weitere Optimierungen
4244 @section Weitere Optimierungen
4245 @translationof Further tweaking
4246
4247 @menu
4248 * Andere Benutzung von Optimierungen::
4249 * Variablen für Layout Anpassungen einsetzen::
4250 * Formatvorlagen::
4251 * Mehr Information::
4252 * Fortgeschrittene Optimierungen mit Scheme::
4253 @end menu
4254
4255 @node Andere Benutzung von Optimierungen
4256 @subsection Andere Benutzung von Optimierungen
4257 @translationof Other uses for tweaks
4258
4259 @menu
4260 * Noten zwischen unterschiedlichen Stimmen überbinden::
4261 * Eine Fermate in MIDI simulieren::
4262 @end menu
4263
4264 @cindex Transparente Objekte
4265 @cindex Entfernen von Objekten
4266 @cindex Verstecken von Objekten
4267 @cindex Unsichtbare Objekte
4268 @cindex transparent-Eigenschaft, Benutzung
4269 @cindex Objekte unsichtbar machen
4270 @cindex Objekte entfernen
4271 @cindex Objekte verstecken
4272
4273 @node Noten zwischen unterschiedlichen Stimmen überbinden
4274 @unnumberedsubsubsec Noten zwischen unterschiedlichen Stimmen überbinden
4275 @translationof Tying notes across voices
4276
4277 @cindex Noten zwischen Stimmen über binden
4278 @cindex Über binden von Noten zwischen Stimmen
4279
4280 Das nächste Beispiel zeigt, wie man Noten von verschiedenen
4281 Stimmen miteinander verknüpfen kann, indem man Bindebögen
4282 für Überbindungen benutzt.  Normalerweise können nur zwei
4283 Noten der gleichen Stimme über gebunden werden.  Wenn
4284 man zwei Stimmen benutzt, wobei die überbundenen Noten
4285 sich in der selben befinden,
4286
4287 @lilypond[quote]
4288 << { b'8~ 8\noBeam } \\ { b'8[ g'] } >>
4289 @end lilypond
4290
4291 @noindent
4292 und dann den ersten Hals nach oben unsichtbar macht,
4293 sieht es so aus, als ob die Überbindung zwischen
4294 den Stimmen stattfindet:
4295
4296 @cindex Hals, Beispiel zum Verstecken
4297 @cindex Notenhals, Beispiel zum Verstecken
4298 @cindex Fähnchen, Beispiel zum Verstecken
4299 @cindex transparent-Eigenschaft, Beispiel
4300 @funindex \omit
4301
4302 @lilypond[quote,verbatim]
4303 <<
4304   {
4305     \once \omit Stem
4306     \once \omit Flag
4307     b'8~ 8\noBeam
4308   }
4309 \\
4310   { b'8[ g'] }
4311 >>
4312 @end lilypond
4313
4314 @seealso
4315 Handbuch zum Lernen:
4316 @ref{Der once-Präfix,,Der @code{@bs{}once}-Präfix},
4317 @ref{Die stencil-Eigenschaft}.
4318
4319
4320 @node Eine Fermate in MIDI simulieren
4321 @unnumberedsubsubsec Eine Fermate in MIDI simulieren
4322 @translationof Simulating a fermata in MIDI
4323
4324 @cindex stencil-Eigenschaft, Benutzung
4325 @cindex Fermate, Benutzung in MIDI
4326 @cindex MIDI: Fermate erstellen
4327
4328 Für Objekte außerhalb des Notensystems ist es normalerweise
4329 besser, die @code{stencil}-Eigenschaft anstelle der
4330 @code{transparent}-Eigenschaft zu verändern, wenn man
4331 sie vom fertigen Notensatz entfernen will.  Indem die
4332 @code{stencil}-Eigenschaft auf falsch (@code{#f}) gesetzt
4333 wird, wird das entsprechende Objekt vollständig entfernt.
4334 Das bedeutet, dass es die Positionierung der anderen Objekte
4335 nicht beeinflusst.
4336
4337 Auf diese Art kann etwa das Tempo geändert werden, damit
4338 in der MIDI-Ausgabe eine Fermate zu hören ist, ohne dass
4339 im Notensatz etwas von diesen Tempoänderungen zu sehen
4340 ist.  Die Metronombezeichnung soll auch nicht die Position
4341 von Text an der gleichen Stelle oder die Abstände zwischen
4342 zwei Systemen beeinflussen.  Darum ist es am besten,
4343 @code{stencil} auf @code{#f} zu setzen.  Im Beispiel wird
4344 der Unterschied zwischen einem unsichtbaren Objekt und
4345 einem entfernten Objekt gezeigt:
4346
4347 @cindex Metronom-Bezeichnung, Beispiel zur Veränderung
4348 @cindex transparent-Eigenschaft, Beispiel
4349
4350 @lilypond[quote,verbatim,ragged-right]
4351 \score {
4352   \relative {
4353     % Visible tempo marking
4354     \tempo 4=120
4355     a'4 a a
4356     \once \hide Score.MetronomeMark
4357     % Invisible tempo marking to lengthen fermata in MIDI
4358     \tempo 4=80
4359     a4\fermata |
4360     % New tempo for next section
4361     \tempo 4=100
4362     a4 a a a |
4363   }
4364   \layout { }
4365   \midi { }
4366 }
4367 @end lilypond
4368
4369 @cindex Metronom-Bezeichnung, Beispiel zur Veränderung
4370 @cindex transparent-Eigenschaft, Beispiel
4371
4372 @lilypond[quote,verbatim,ragged-right]
4373 \score {
4374   \relative {
4375     % Visible tempo marking
4376     \tempo 4=120
4377     a'4 a a
4378     \once \omit Score.MetronomeMark
4379     % Invisible tempo marking to lengthen fermata in MIDI
4380     \tempo 4=80
4381     a4\fermata |
4382     % New tempo for next section
4383     \tempo 4=100
4384     a4 a a a |
4385   }
4386   \layout { }
4387   \midi { }
4388 }
4389 @end lilypond
4390
4391 @noindent
4392 Mit beiden Methoden wird die Tempobezeichnung entfernt, mit
4393 der die Fermate verlängert wird, und beide beeinflussen die
4394 MIDI-Ausgabe wie gewünscht.  Die unsichtbare Metronombezeichnung
4395 schiebt aber die folgende Bezeichnung in die Höhe, während
4396 das im zweiten Beispiel, in dem der @code{stencil} entfernt
4397 wurde, nicht passiert.
4398
4399 @seealso
4400 Glossar:
4401 @rglos{system}.
4402
4403
4404 @node Variablen für Layout Anpassungen einsetzen
4405 @subsection Variablen für Layout Anpassungen einsetzen
4406 @translationof Using variables for layout adjustments
4407
4408 @cindex Variablen, Benutzung zur Optimierung
4409 @cindex Optimierung mit Variablen
4410
4411 @code{\override}-Befehle sind oft lang und mühsam zu
4412 tippen, und sie müssen immer absolut richtig sein.  Wenn
4413 derselbe Befehl mehrere Male benutzt werden muss, lohnt
4414 es sich oft schon, eine Variable zu definieren, in der er
4415 sich befindet.
4416
4417 Als Beispiel sollen einige Worte im
4418 Gesangstext fett und kursiv hervorgehoben werden.
4419 Die Befehle @code{\italic} und @code{\bold} funktionieren
4420 im Gesangstext-Kontext nur, wenn sie gleichzeitig mit den Wörtern,
4421 auf die sie angewendet werden sollen, zusätzlich
4422 in eine @code{\markup}-Umgebung eingeschlossen
4423 werden. Durch diese Einbettung können einzelne Wörter nicht
4424 einfach zu einer Variable umgeformt werden.  Als
4425 Alternative versuchen wir, einen Befehl mit
4426 @code{\override} und @code{\revert} zu konstruieren.
4427
4428 @example
4429 @code{\override Lyrics.LyricText.font-shape = #'italic}
4430 @code{\override Lyrics.LyricText.font-series = #'bold}
4431
4432 @code{\revert Lyrics.LyricText.font-shape}
4433 @code{\revert Lyrics.LyricText.font-series}
4434 @end example
4435
4436 Das wäre natürlich noch viel mühsamer, wenn viele Wörter eine
4437 Hervorhebung benötigen.  Anstelle dieser Befehlsketten @emph{können}
4438 wir jedoch zwei Variablen definieren.  Mit ihnen und dem entsprechenden
4439 Wort in geschweiften Klammern erreichen wir den gewünschten Effekt.
4440 Ein weiterer Vorteil ist, dass in diesem Fall die Leerzeichen um die
4441 Punkte herum nicht benötigt werden, weil sie nicht innerhalb des
4442 @code{lyricmode}-Kontextes interpretiert werden.  Hier ein Beispiel;
4443 die Bezeichnungen können natürlich auch kürzer sein,
4444 um noch weniger schreiben zu müssen:
4445
4446 @cindex LyricText, Beispiel zur Veränderung
4447 @cindex Gesangstext, Beispiel zur Veränderung
4448 @cindex font-shape-Eigenschaft, Beispiel
4449 @cindex font-series-Eigenschaft, Beispiel
4450
4451 @lilypond[quote,verbatim]
4452 emphasize = {
4453   \override Lyrics.LyricText.font-shape = #'italic
4454   \override Lyrics.LyricText.font-series = #'bold
4455 }
4456 normal = {
4457   \revert Lyrics.LyricText.font-shape
4458   \revert Lyrics.LyricText.font-series
4459 }
4460
4461 global = { \key c \major \time 4/4 \partial 4 }
4462
4463 SopranoMusic = \relative { c'4 | e4. e8 g4 g    | a4   a   g  }
4464 AltoMusic    = \relative { c'4 | c4. c8 e4 e    | f4   f   e  }
4465 TenorMusic   = \relative  { e4 | g4. g8 c4.  b8 | a8 b c d e4 }
4466 BassMusic    = \relative  { c4 | c4. c8 c4 c    | f8 g a b c4 }
4467
4468 VerseOne = \lyrics {
4469   E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save,
4470 }
4471
4472 VerseTwo = \lyricmode {
4473   O | \once \emphasize Christ, whose voice the | wa -- ters heard,
4474 }
4475
4476 VerseThree = \lyricmode {
4477   O | \emphasize Ho -- ly Spi -- rit, | \normal who didst brood
4478 }
4479
4480 VerseFour = \lyricmode {
4481   O | \emphasize Tri -- ni -- ty \normal of | love and pow'r
4482 }
4483
4484 \score {
4485   \new ChoirStaff <<
4486     \new Staff <<
4487       \clef "treble"
4488       \new Voice = "Soprano"  { \voiceOne \global \SopranoMusic }
4489       \new Voice = "Alto" { \voiceTwo \AltoMusic }
4490       \new Lyrics \lyricsto "Soprano" { \VerseOne }
4491       \new Lyrics \lyricsto "Soprano" { \VerseTwo }
4492       \new Lyrics \lyricsto "Soprano" { \VerseThree }
4493       \new Lyrics \lyricsto "Soprano" { \VerseFour }
4494     >>
4495     \new Staff <<
4496       \clef "bass"
4497       \new Voice = "Tenor" { \voiceOne \TenorMusic }
4498       \new Voice = "Bass"  { \voiceTwo \BassMusic }
4499     >>
4500   >>
4501 }
4502 @end lilypond
4503
4504
4505 @node Formatvorlagen
4506 @subsection Formatvorlagen
4507 @translationof Style sheets
4508
4509 Die Ausgabe von LilyPond kann sehr stark verändert werden, siehe
4510 zu Einzelheiten @ref{Die Ausgabe verbessern}.  Aber was ist,
4511 wenn man mehrere Eingabedateien hat, die die gleichen Anpassungen
4512 erfahren sollen?  Oder wenn Sie einfach nur die Anpassungen von
4513 der eigentlichen Musik trennen wollen?  Das lässt sich recht einfach
4514 erreichen.
4515
4516 Schauen wir uns ein Beispiel an.  Sorgen Sie sich nicht, wenn Sie
4517 den Abschnitt mit den vielen @code{#()} nicht verstehen.  Das wird
4518 in @ref{Fortgeschrittene Optimierungen mit Scheme} erklärt.
4519
4520 @lilypond[quote,verbatim,ragged-right]
4521 mpdolce =
4522   \tweak self-alignment-X #-0.6
4523   #(make-dynamic-script
4524     #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4525
4526 inst =
4527 #(define-music-function
4528      (string)
4529      (string?)
4530    #{ <>^\markup \bold \box #string #})
4531
4532 \relative {
4533   \tempo 4=50
4534   a'4.\mpdolce d8 cis4--\glissando a |
4535   b4 bes a2 |
4536   \inst "Clarinet"
4537   cis4.\< d8 e4 fis |
4538   g8(\! fis)-. e( d)-. cis2 |
4539 }
4540 @end lilypond
4541
4542 Vielleicht können die Definitionen von @code{mpdolce} und @code{inst} noch
4543 etwas verbessert werden.
4544 Sie erstellen die gewünschte Ausgabe, aber wir wollen sie vielleicht
4545 auch in einem anderen Stück verwenden.  Wir könnten sie immer wieder
4546 kopieren und oben in jedes Stück einfügen, aber das ist sehr aufwändig.
4547 Dadurch werden die Definitionen auch in der Eingabedatei belassen,
4548 und ich finde diese @code{#()} irgendwie hässlich.  Verstecken
4549 wir sie also:
4550
4551 @example
4552 %%% in Datei "definitions.ily" speichern
4553 mpdolce =
4554   \tweak self-alignment-X #-0.6
4555   #(make-dynamic-script
4556     #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
4557
4558 inst =
4559 #(define-music-function
4560      (string)
4561      (string?)
4562    #@{ <>^\markup \bold \box #string #@})
4563 @end example
4564
4565 Diese Datei wir mit dem @code{\include}-Befehl ziemlich weit oben
4566 in der Datei eingefügt.  (Die Erweiterung @file{.ily} wird benutzt,
4567 um diese Datei als eine eingefügte, inkludierte zu kennzeichnen, die
4568 man nicht alleinstehend kompilieren kann).  Jetzt ändern wir die
4569 Noten (in der Datei @file{music.ly}).
4570
4571 @c  We have to do this awkward example/lilypond-non-verbatim
4572 @c  because we can't do the \include stuff in the manual.
4573
4574 @example
4575 \include "definitions.ily"
4576
4577 \relative @{
4578   \tempo 4=50
4579   a'4.\mpdolce d8 cis4--\glissando a |
4580   b4 bes a2 |
4581   \inst "Clarinet"
4582   cis4.\< d8 e4 fis |
4583   g8(\! fis)-. e( d)-. cis2 |
4584 @}
4585 @end example
4586
4587 @lilypond[quote,ragged-right]
4588 mpdolce =
4589   \tweak self-alignment-X #-0.6
4590   #(make-dynamic-script
4591     #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4592
4593 inst =
4594 #(define-music-function
4595      (string)
4596      (string?)
4597    #{ <>^\markup \bold \box #string #})
4598
4599 \relative {
4600   \tempo 4=50
4601   a'4.\mpdolce d8 cis4--\glissando a |
4602   b4 bes a2 |
4603   \inst "Clarinet"
4604   cis4.\< d8 e4 fis |
4605   g8(\! fis)-. e( d)-. cis2 |
4606 }
4607 @end lilypond
4608
4609 Das sieht schon besser aus, aber einige Änderungen könnten wir noch vornehmen.
4610 Das Glissando ist kaum sichtbar, machen wir es also etwas dicker und
4611 näher an den Notenkopf.  Die Metronombezeichnung soll über dem
4612 Schlüssel stehen, anstatt über der ersten Note.  Und schließlich
4613 mag mein Kompositionsprofessor keine @qq{C}-Taktangaben, das ändern
4614 wir also in @qq{4/4}.
4615
4616 Ändern Sie jetzt jedoch nicht @file{music.ly}.  Ändern Sie die
4617 @file{definitions.ily} mit dem Folgenden:
4618
4619 @example
4620 %%%  definitions.ily
4621 mpdolce =
4622   \tweak self-alignment-X #-0.6
4623   #(make-dynamic-script
4624     #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
4625
4626 inst =
4627 #(define-music-function
4628      (string)
4629      (string?)
4630    #@{ <>^\markup \bold \box #string #@})
4631
4632 \layout@{
4633   \context @{
4634     \Score
4635     \override MetronomeMark.extra-offset = #'(-5 . 0)
4636     \override MetronomeMark.padding = #'3
4637   @}
4638   \context @{
4639     \Staff
4640     \override TimeSignature.style = #'numbered
4641   @}
4642   \context @{
4643     \Voice
4644     \override Glissando.thickness = #3
4645     \override Glissando.gap = #0.1
4646   @}
4647 @}
4648 @end example
4649
4650 @lilypond[quote,ragged-right]
4651 mpdolce =
4652   \tweak self-alignment-X #-0.6
4653   #(make-dynamic-script
4654     #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4655
4656 inst =
4657 #(define-music-function
4658      (string)
4659      (string?)
4660    #{ <>^\markup \bold \box #string #})
4661
4662 \layout{
4663   \context {
4664     \Score
4665     \override MetronomeMark.extra-offset = #'(-5 . 0)
4666     \override MetronomeMark.padding = #'3
4667   }
4668   \context {
4669     \Staff
4670     \override TimeSignature.style = #'numbered
4671   }
4672   \context {
4673     \Voice
4674     \override Glissando.thickness = #3
4675     \override Glissando.gap = #0.1
4676   }
4677 }
4678
4679 \relative {
4680   \tempo 4=50
4681   a'4.\mpdolce d8 cis4--\glissando a |
4682   b4 bes a2 |
4683   \inst "Clarinet"
4684   cis4.\< d8 e4 fis |
4685   g8(\! fis)-. e( d)-. cis2 |
4686 }
4687 @end lilypond
4688
4689 Das sieht besser aus!  Aber nehmen wir an, Ich will dieses Stück publizieren.
4690 Mein Professor mag die @qq{C}-Taktangabe nicht, mir gefällt sie aber sehr
4691 gut.  Kopieren wir also die Datei @file{definitions.ily} nach
4692 @file{web-publish.ily} und verändern diese.  Weil die Noten als PDF
4693 auf dem Monitor dargestellt werden sollen, wird auch die Notengröße
4694 global geändert.
4695
4696 @example
4697 %%%  web-publish.ily
4698 mpdolce =
4699   \tweak self-alignment-X #-0.6
4700   #(make-dynamic-script
4701     #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
4702
4703 inst =
4704 #(define-music-function
4705      (string)
4706      (string?)
4707    #@{ <>^\markup \bold \box #string #@})
4708
4709 #(set-global-staff-size 23)
4710
4711 \layout@{
4712   \context @{
4713     \Score
4714     \override MetronomeMark.extra-offset = #'(-5 . 0)
4715     \override MetronomeMark.padding = #'3
4716   @}
4717   \context @{
4718     \Staff
4719   @}
4720   \context @{
4721     \Voice
4722     \override Glissando.thickness = #3
4723     \override Glissando.gap = #0.1
4724   @}
4725 @}
4726 @end example
4727
4728 @lilypond[quote,ragged-right]
4729 mpdolce =
4730   \tweak self-alignment-X #-0.6
4731   #(make-dynamic-script
4732     #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
4733
4734 inst =
4735 #(define-music-function
4736      (string)
4737      (string?)
4738    #{ <>^\markup \bold \box #string #})
4739
4740 #(set-global-staff-size 23)
4741
4742 \layout{
4743   \context { \Score
4744     \override MetronomeMark.extra-offset = #'(-5 . 0)
4745     \override MetronomeMark.padding = #'3
4746   }
4747   \context { \Voice
4748     \override Glissando.thickness = #3
4749     \override Glissando.gap = #0.1
4750   }
4751 }
4752
4753 \relative {
4754   \tempo 4=50
4755   a'4.\mpdolce d8 cis4--\glissando a |
4756   b4 bes a2 |
4757   \inst "Clarinet"
4758   cis4.\< d8 e4 fis |
4759   g8(\! fis)-. e( d)-. cis2 |
4760 }
4761 @end lilypond
4762
4763 In der Eingabedatei muss jetzt nur noch die Zeile
4764 @code{\include "definitions.ily"} mit
4765 @code{\include "web-publish.ily"} ersetzt werden.  Das könnte
4766 man natürlich noch besser machen.  Es könnte eine Datei
4767 @file{definitions.ily} mit allen Definitionen (also
4768 @code{mpdolce} und @code{inst}) geben, eine Datei
4769 @file{web-publish.ily}, die nur die @code{\layout}-Veränderung
4770 enthält und eine Datei @file{university.ily}, die nur die
4771 Prozedur enthält, die Ausgabe meinem Professor angenehm zu  machen.
4772 Der Anfang von @file{music.ly} würde dann folgendermaßen aussehen:
4773
4774 @example
4775 \include "definitions.ily"
4776
4777 %%%  nur eine der zwei Zeilen auskommentieren!
4778 \include "web-publish.ily"
4779 %\include "university.ily"
4780 @end example
4781
4782 Diese Herangehensweise kann auch schon nützlich sein, wenn man
4783 nur ein paar Stimmen schreiben will.  Ich habe eine ganze Anzahl
4784 an @qq{Formatvorlagen} (engl. Stylesheets) für meine Projekte.  Ich fange jede Datei mit
4785 der Zeile @code{\include "../global.ily"} an, die etwa folgendes
4786 einbindet:
4787
4788 @example
4789 %%%   global.ily
4790 \version @w{"@version{}"}
4791
4792 #(ly:set-option 'point-and-click #f)
4793
4794 \include "../init/init-defs.ly"
4795 \include "../init/init-layout.ly"
4796 \include "../init/init-headers.ly"
4797 \include "../init/init-paper.ly"
4798 @end example
4799
4800
4801
4802 @node Mehr Information
4803 @subsection Mehr Information
4804 @translationof Other sources of information
4805
4806 Die Programmreferenz enthält sehr viel Information über LilyPond, aber
4807 noch mehr Information findet sich in den internen
4808 LilyPond-Dateien.  Um sie erforschen zu können, müssen Sie erst
4809 das richtige Verzeichnis auf Ihrem System finden.  Die Position
4810 hängt a) davon ab, ob Ihre LilyPond-Installation mit der vorkompilierten
4811 Version von der LilyPond-Internetseite vorgenommen wurde oder Sie
4812 die Version durch Ihren Paketmanager installiert haben (also
4813 z. B. in einer GNU/Linux-Distribution oder unter fink oder cygwin
4814 installiert), und b) auf welchem Betriebssystem Sie das Programm
4815 benutzen:
4816
4817 @subsubsubheading Von lilypond.org heruntergeladen
4818
4819 @itemize @bullet
4820 @item GNU/Linux
4821
4822 Wechseln Sie in das Verzeichnis
4823 @example
4824 @file{@var{INSTALL_VERZ}/lilypond/usr/@/share/lilypond/current/}
4825 @end example
4826
4827 @item MacOS X
4828
4829 Wechseln Sie in das Verzeichnis
4830 @example
4831 @file{@var{INSTALL_VERZ}/LilyPond.app/Contents/@/Resources/share/lilypond/current/}
4832 @end example
4833
4834 indem Sie entweder mit dem Befehl @code{cd} vom Terminal aus
4835 in das Verzeichnis wechseln, oder mit Control-Klick auf das
4836 LilyPond-Programmsymbol gehen und @qq{Show Package Contents}
4837 auswählen.
4838
4839 @item Windows
4840
4841 Wechseln Sie mit dem Windows Explorer ins Verzeichnis
4842 @example
4843 @file{@var{INSTALL_VERZ}/LilyPond/usr/@/share/lilypond/current/}
4844 @end example
4845
4846 @end itemize
4847
4848 @subsubsubheading Mit einem Paket-Manager installiert oder selber aus den Quellen kompiliert
4849
4850 Wechseln Sie in das Verzeichnis
4851 @file{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, wobei
4852 @var{PREFIX} bei Ihrem Paket-Manager oder dem
4853 @code{configure}-Skript gesetzt wird, und @var{X.Y.Z}
4854 die LilyPond-Versionsnummer.
4855
4856 @smallspace
4857
4858 In diesem Ordner sind die zwei interessanten Unterordner:
4859
4860 @itemize
4861 @item @file{ly/} - beinhaltet Dateien im LilyPond-Format
4862 @item @file{scm/} - beinhaltet Dateien im Scheme-Format
4863 @end itemize
4864
4865 Schauen wir uns zuerst einige Dateien in @file{ly/} an.
4866 Öffnen Sie @file{ly/property-init.ly} in einem Texteditor.
4867 Der, den Sie normalerweise für @file{.ly}-Dateien benutzen,
4868 genügt.  Diese Datei enthält die Definitionen aller vordefinierten
4869 Befehle für LilyPond, wie etwa @code{\stemUp} und
4870 @code{\slurDotted}.  Sie können sehen, dass es sich um
4871 nichts mehr handelt als Definitionen von Variablen, die eine
4872 oder mehrere @code{\override}-Befehle enthalten.  Der
4873 Befehl @code{\tieDotted} etwa wird folgendermaßen definiert:
4874
4875 @example
4876 tieDotted = @{
4877   \override Tie.dash-period = #0.75
4878   \override Tie.dash-fraction = #0.1
4879 @}
4880 @end example
4881
4882 Wenn Sie diese Voreinstellungen der vordefinierten Befehl nicht
4883 mögen, können Sie sie ganz einfach umdefinieren, genauso wie
4884 jede andere Variable auch, indem Sie sie an den Anfang Ihrer
4885 Quelldatei schreiben.
4886
4887 Hier sind die wichtigsten Dateien, die sich im Ordner
4888 @file{ly/} befinden:
4889
4890 @multitable @columnfractions .4 .6
4891 @headitem Dateiname
4892   @tab Inhalt
4893 @item @file{ly/engraver-init.ly}
4894   @tab Definitionen von Engraver-Kontexten
4895 @item @file{ly/paper-defaults-init.ly}
4896   @tab Spezifikationen von Voreinstellungen für Papiermaße
4897 @item @file{ly/performer-init.ly}
4898   @tab Definitionen von Performer-Kontexten
4899 @item @file{ly/property-init.ly}
4900   @tab Definitionen aller vordefinierten Befehle
4901 @item @file{ly/spanner-init.ly}
4902   @tab Definitionen aller vordefinierten Strecker-Befehle
4903 @end multitable
4904
4905 Andere Einstellungen (wie die Definitionen von Beschriftungsbefehlen)
4906 sind in @file{.scm}-(Scheme)-Dateien gespeichert.  Die
4907 Scheme-Programmiersprache wird benutzt, um eine
4908 programmierbare Schnittstelle zu den internen Operationen von
4909 LilyPond zu haben.  Eine weitere Erklärung dieser Dateien ist
4910 im Moment außerhalb des Rahmens dieses Handbuchs, denn
4911 sie erfordern einige Kenntnis der Scheme-Sprache.  Die Warnung
4912 ist hier angebracht, dass des ein gutes technisches Verständnis
4913 oder sehr viel Zeit braucht, um Scheme und diese
4914 Dateien zu verstehen (siehe auch @rextend{Scheme-Tutorium}).
4915
4916 Wenn Sie sich mit Scheme auskennen, sind hier mögliche
4917 interessante Dateien:
4918
4919 @multitable @columnfractions .4 .6
4920 @headitem Dateiname
4921   @tab Inhalt
4922 @item @file{scm/auto-beam.scm}
4923   @tab Sub-Balken-Voreinstellungen
4924 @item @file{scm/define-grobs.scm}
4925   @tab Voreinstellungen für Grob-Eigenschaften
4926 @item @file{scm/define-markup-commands.scm}
4927   @tab Definition aller Markup-Beschriftungsbefehle
4928 @item @file{scm/midi.scm}
4929   @tab Voreinstellung für die MIDI-Ausgabe
4930 @item @file{scm/output-lib.scm}
4931   @tab Einstellungen mit Einfluss auf die Darstellung von Bunddiagrammen, Farben, Versetzungszeichen, Taktlinien usw.
4932 @item @file{scm/parser-clef.scm}
4933   @tab Definitionen der unterstützten Schlüssel
4934 @item @file{scm/script.scm}
4935   @tab Voreinstellungen für Artikulationszeichen
4936 @end multitable
4937
4938
4939 @node Fortgeschrittene Optimierungen mit Scheme
4940 @subsection Fortgeschrittene Optimierungen mit Scheme
4941 @translationof Advanced tweaks with Scheme
4942
4943 Auch wenn viele Sachen mit @code{\override} und @code{\tweak}
4944 möglich sind, gibt es eine sehr viel mächtigere Möglichkeit, die
4945 Arbeitsweise von LilyPond mit Hilfe der programmierbaren Schnittstelle
4946 zu beeinflussen.  Code, der in der Scheme-Programmiersprache
4947 geschrieben ist, kann direkt in die interne Satzmaschine von LilyPond
4948 eingefügt werden.  Natürlich brauchen Sie dazu wenigstens ein
4949 grundlegendes Verständnis von Scheme.  Eine Einleitung finden
4950 Sie in der @rextend{Scheme-Tutorium}.
4951
4952 Zur Illustration der vielen Möglichkeiten soll gezeigt werden, dass eine
4953 Eigenschaft nicht nur auf eine Konstante, sondern auch auf eine
4954 Scheme-Prozedur gesetzt werden kann, die dann jedes Mal
4955 aufgerufen wird, wenn die Eigenschaft von LilyPond benutzt
4956 wird.  Die Eigenschaft kann damit dynamisch auf einen Wert
4957 gesetzt werden, der durch die Prozedur jedes Mal neu bestimmt
4958 wird.  In diesem Beispiel wird die Farbe der Notenköpfe entsprechend
4959 zu ihrer Position innerhalb der Tonleiter gesetzt.
4960
4961 @cindex x11-Farben, Beispiel zur Benutzung
4962 @cindex Notenkopf, Beispiel zur Veränderung
4963 @cindex Farb-Eigenschaft, in Scheme-Prozedur gesetzt
4964
4965 @lilypond[quote,verbatim,ragged-right]
4966 #(define (color-notehead grob)
4967    "Color the notehead according to its position on the staff."
4968    (let ((mod-position (modulo (ly:grob-property grob 'staff-position)
4969                                7)))
4970      (case mod-position
4971        ;;   Return rainbow colors
4972        ((1) (x11-color 'red    ))  ; for C
4973        ((2) (x11-color 'orange ))  ; for D
4974        ((3) (x11-color 'yellow ))  ; for E
4975        ((4) (x11-color 'green  ))  ; for F
4976        ((5) (x11-color 'blue   ))  ; for G
4977        ((6) (x11-color 'purple ))  ; for A
4978        ((0) (x11-color 'violet ))  ; for B
4979        )))
4980
4981 \relative {
4982   % Arrange to obtain color from color-notehead procedure
4983   \override NoteHead.color = #color-notehead
4984   a2 b | c2 d | e2 f | g2 a |
4985 }
4986 @end lilypond
4987
4988 Weiter Beispiele, die die Benutzung dieser programmierbaren
4989 Schnittstelle zeigen, finden sich in @rextend{Callback-Funktionen}.