]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/de/notation/changing-defaults.itely
Doc-de: update to notation manual 4
[lilypond.git] / Documentation / de / notation / changing-defaults.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
2
3 @ignore
4     Translation of GIT committish: a0077273ac8bf29ae472c8712bc78a02d138f898
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.15.39"
12
13 @c Translators: Till Paala
14
15 @node Standardeinstellungen verändern
16 @chapter Standardeinstellungen verändern
17 @translationof Changing defaults
18
19 Das Ziel von LilyPonds Design ist es, von sich aus gut gesetzte Noten
20 zu produzieren.  Es kann aber trotzdem vorkommen, dass Sie diesen
21 Standardsatz ändern wollen.  Das Layout kann mithilfe einer recht
22 großen Anzahl von @qq{Schaltern und Knöpfen} kontrolliert werden.
23 Sie werden als @qq{Eigenschaften} (engl. properties)  bezeichnet.
24 Eine kurze Einführung und Übung, wie man auf diese Eigenschaften
25 zugreifen kann und sie verändern kann, findet sich im Handbuch
26 zum Lernen, siehe @rlearning{Die Ausgabe verändern}.  Das Kapitel
27 sollte zuerst gelesen werden.  In diesem Kapitel werden die gleichen
28 Themen behandelt, aber der Schwerpunkt liegt eher auf einer technischen
29 Darstellung.
30
31 @cindex Referenz der Interna
32 @cindex Internals Reference
33
34 Die definitive Beschreibung der unterschiedlichen Einstellmöglichenkeiten
35 findet sich in einem eigenen Dokument: @rinternalsnamed{Top,der Referenz
36 der Interna}.  Diese Referenz zeigt alle Variablen, Funktionen und Optionen,
37 die in LilyPond möglich sind.  Es existiert als ein HTML-Dokumente, das
38 sich
39 @c leave the @uref as one long line.
40 @uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/internals/,on@/-line},
41 aber auch lokal in das LilyPond-Dokumentationspaket integriert lesen lässt.
42
43 Intern benutzt LilyPond Scheme (ein LISP-Dialekt), um eine Infrastruktur
44 zur Verfügung zu stellen.  Wenn Layoutentscheidungen verändert werden
45 sollen, müssen auf die programminternen Prozesse zugegriffen werden,
46 wozu Scheme-Code benötigt wird.  Scheme-Abschnitte werden in einer
47 LilyPond-Quelldatei mit einer Raute@tie{}@code{#} begonnen.@footnote{@rextend{Scheme-Übung} enthält eine kurze Übung, wie
48 man Zahlen, Listen, Zeichenketten und Symbole in Scheme notiert.}
49
50
51 @menu
52 * Interpretationskontexte::
53 * Die Referenz der Programminterna erklärt::
54 * Eigenschaften verändern::
55 * Nützliche Konzepte und Eigenschaften::
56 * Fortgeschrittene Optimierungen::
57 * Musikfunktionen benutzen::
58 @end menu
59
60
61 @node Interpretationskontexte
62 @section Interpretationskontexte
63 @translationof Interpretation contexts
64
65 Dieser Abschnitt erklärt, was Kontexte sind und wie man sie
66 verändern kann.
67
68 @menu
69 * Was sind Kontexte?::
70 * Kontexte erstellen::
71 * Kontexte am Leben halten::
72 * Umgebungs-Plugins verändern::
73 * Die Standardeinstellungen von Kontexten ändern::
74 * Neue Kontexte definieren::
75 * Reihenfolge des Kontextlayouts::
76 @end menu
77
78
79 @seealso
80 Handbuch zum Lernen:
81 @rlearning{Kontexte und Engraver}.
82
83 Installierte Dateien:
84 @file{ly/engraver-init.ly},
85 @file{ly/performer-init.ly}.
86
87 Schnipsel:
88 @rlsr{Contexts and engravers}.
89
90 Referenz der Interna:
91 @rinternals{Contexts},
92 @rinternals{Engravers and Performers}.
93
94
95 @node Was sind Kontexte?
96 @subsection Was sind Kontexte?
97 @translationof Contexts explained
98
99 Kontexte sind hierarchisch geordnet:
100
101 @menu
102 * Score -- der Vater aller Kontexte::
103 * Oberste Kontexte -- Container für Systeme::
104 * Mittlere Kontexte -- Systeme::
105 * Unterste Kontexte -- Stimmen::
106 @end menu
107
108 @node Score -- der Vater aller Kontexte
109 @unnumberedsubsubsec Score -- der Vater aller Kontexte
110 @translationof Score - the master of all contexts
111
112 @code{Score} (Partitur) ist der höchste Notationskontext.  Kein anderer Kontext
113 kann einen @code{Score}-Kontext enthalten.  Im Normalfall kümmert
114 sich der @code{Score}-Kontext um die Verwaltung der Taktarten und sorgt
115 dafür, dass Elemente wie Schlüssel und Taktart- oder Tonartbezeichnungen
116 über die Systeme hinweg aneinander ausgerichtet sind.
117
118 Ein @code{Score}-Kontext wird eingerichtet, wenn eine
119 @code{\score @{@dots{}@}} oder @code{\layout @{@dots{}@}}-Umgebung
120 interpretiert wird.
121
122 @node Oberste Kontexte -- Container für Systeme
123 @unnumberedsubsubsec Oberste Kontexte -- Container für Systeme
124 @translationof Top-level contexts - staff containers
125
126 @c Remark for German translation
127 Diese Kontexte fassen Systeme zu Gruppen zusammen und werden darum hier
128 als Systemgruppen bezeichnet (engl. staffgroup).
129
130 @strong{@emph{StaffGroup}}
131
132 Gruppiert Systeme und fügt eine eckige Klammer auf der linken Seite
133 hinzu.  Die Taktstriche der enthaltenen Systeme werden vertikal
134 miteinander verbunden. @code{StaffGroup} besteht nur aus einer Ansammlung
135 von Systemen mit einer eckigen Klammer zu Beginn der Zeile und
136 durchgezogenen Taktstriche.
137
138 @strong{@emph{ChoirStaff}}
139
140 Entspricht @code{StaffGroup}, außer dass die Taktstriche der enthaltenen
141 Systeme nicht vertikal miteinander verbunden sind.
142
143 @strong{@emph{GrandStaff}}
144
145 Gruppiert Systeme mit einer geschweiften Klammer zur Linken.  Die
146 Taktlinien der enthaltenen Systeme werden vertikal verbunden.
147
148 @strong{@emph{PianoStaff}}
149
150 Entspricht @code{GrandStaff}, hat aber zusätzlich Unterstützung für
151 Instrumentenbezeichnungen zu Beginn jeder Systemgruppe.
152
153
154 @node Mittlere Kontexte -- Systeme
155 @unnumberedsubsubsec Mittlere Kontexte -- Systeme
156 @translationof Intermediate-level contexts - staves
157
158 Diese Kontexte stellen verschiedene Arten einzelner Notationssysteme
159 (engl. staff) dar.
160
161 @strong{@emph{Staff}}
162
163 Kümmert sich um Schlüssel, Taktstriche, Tonarten und Versetzungszeichen.
164 Er kann @code{Voice}-Kontexte enthalten.
165
166 @strong{@emph{RhythmicStaff}}
167
168 Entspricht @code{Staff}, aber dient zur Notation von Rhythmen: Tonhöhen
169 werden ignoriert und die Noten auf einer einzigen Linie ausgegeben.
170
171 @strong{@emph{TabStaff}}
172
173 Ein Kontext um Tabulaturen zu erstellen.  Die Standardeinstellung ist
174 eine Gitarrentabulatur mit sechs Notenlinien.
175
176 @strong{@emph{DrumStaff}}
177
178 Ein Kontext zur Notation von Perkussion.  Er kann
179 @code{DrumVoice}-Kontexte enthalten.
180
181 @strong{@emph{VaticanaStaff}}
182
183 Entspricht @code{Staff}, aber eignet sich besonders zum Notensatz des
184 Gregorianischen Chorals.
185
186 @strong{@emph{MensuralStaff}}
187
188 Entspricht @code{Staff}, aber eignet sich zum Notensatz von Noten in
189 der Mensuralnotation.
190
191
192 @node Unterste Kontexte -- Stimmen
193 @unnumberedsubsubsec Unterste Kontexte -- Stimmen
194 @translationof Bottom-level contexts - voices
195
196 Stimmen-(@code{Voice}-Kontexte initialisieren bestimmte Eigenschaften
197 und laden bestimmte Engraver.  Weil es sich bei Stimmen um die
198 untersten Kontexte handelt, können sie keine weiteren Kontexte enthalten.
199
200 @strong{@emph{Voice}}
201
202 Entspricht einer Stimme auf einem Notensystem.  Der Kontext kümmert sich
203 um die Umsetzung von Noten, Dynamikzeichen, Hälsen, Balken, diversen Texten,
204 Bögen und Pausen.  Wenn mehr als eine Stimme pro System benötigt wird,
205 muss dieser Kontext explizit initialisiert werden.
206
207 @strong{@emph{VaticanaVoice}}
208
209 Entspricht @code{Voice}, aber eignet sich besonders zum Notensatz
210 des Gregorianischen Chorals.
211
212 @strong{@emph{MensuralVoice}}
213
214 Entspricht @code{Voice}, aber mit Änderungen, um Mensuralnotation
215 setzen zu können.
216
217 @strong{@emph{Lyrics}}
218
219 Entspricht einer Stimme mit Gesangstext.  Kümmert sich um den Satz
220 des Gesangstextes auf einer Zeile.
221
222 @strong{@emph{DrumVoice}}
223
224 Der Stimmenkontext in einem Perkussionssystem.
225
226 @strong{@emph{FiguredBass}}
227
228 Der Kontext, in dem Generalbassziffern (@code{BassFigure}-Objekte)
229 gesetzt werden, die in der @code{\figuremode}-Umgebung
230 notiert werden.
231
232 @strong{@emph{TabVoice}}
233
234 Dieser Stimmenkontext wird in einer Tabulatur (@code{TabStaff}-Kontext)
235 benutzt.  Er wird normalerweise implizit erstellt.
236
237 @strong{@emph{CueVoice}}
238
239 Ein Stimmenkontext, der Noten in reduzierter Größe ausgibt und
240 vor allem dazu da ist, Stichnoten zu setzen.  Siehe auch
241 @ref{Stichnoten formatieren}.  Wird normalerweise implizit erstellt,
242 wenn Stichnoten gesetzt werden.
243
244
245 @strong{@emph{ChordNames}}
246
247 Ausgabe von Akkordsymbolen.
248
249
250 @node Kontexte erstellen
251 @subsection Kontexte erstellen
252 @translationof Creating contexts
253
254 In Partituren mit einer Stimme und einem System werden die Kontexte
255 normalerweise automatisch erstellt.  In komplizierteren Partituren
256 muss man sie aber direkt erstellen.  Es gibt drei Möglichkeiten,
257 Kontexte zu erstellen:
258
259 @funindex \new
260 @funindex \context
261 @funindex new
262 @funindex context
263
264 @cindex neue Kontexte
265 @cindex Kontexte erstellen
266 @cindex eigene Kontexte erstellen
267
268 @itemize
269
270 @item
271 Der einfachste Befehl ist @code{\new}.  Er wird zusammen mit dem
272 Kontextnamen vor einem musikalischen Ausdruck eingesetzt, etwa
273
274 @example
275 \new @var{Kontext} @var{musik. Ausdruck}
276 @end example
277
278 @noindent
279 wobei @var{Kontext} eine Kontextbezeichnung (wie @code{Staff} oder
280 @code{Voice}) ist.  Dieser Befehl erstellt einen neuen Kontext und
281 beginnt mit der Auswertung von @var{musik. Ausdruck} innerhalb
282 dieses Kontextes.
283
284 Eine praktische Anwendung von @code{\new} ist eine Partitur mit vielen
285 Systemen.  Jede Stimme wird auf einem eigenen System notiert, das
286 mit @code{\new Staff} begonnen wird.
287
288 @lilypond[quote,verbatim,relative=2,ragged-right]
289 <<
290   \new Staff { c4 c }
291   \new Staff { d4 d }
292 >>
293 @end lilypond
294
295 Der @code{\new}-Befehl kann den Kontext auch benennen:
296
297 @example
298 \new @var{Kontext} = @var{ID} @var{musik. Ausdruck}
299 @end example
300
301 Dieser vom Benutzer definierte Name wird aber auch nur wirklich
302 benutzt, wenn nicht vorher schon der gleiche Name definiert worden
303 ist.
304
305 @item
306 Ähnlich dem @code{\new}-Befehl wird auch mit dem @code{\context}-Befehl
307 ein musikalischer Ausdruck in einen Kontext umgeleitet.  Diesem
308 Kontext wird ein expliziter Name zugewiesen.  Die Syntax lautet:
309
310 @example
311 \context @var{Kontext} = @var{ID} @var{musik. Ausdruck}
312 @end example
313
314 Diese Art von Befehl sucht nach einem existierenden Kontext vom Typus
315 @var{Kontext} mit der Bezeichnung @var{ID}.  Wenn ein derartiger
316 Kontext nicht existiert, wird ein neuer Kontext mit der entsprechenden
317 Bezeichnung erstellt.  Das ist nützlich, wenn auf den Kontext später
318 zurückverwiesen werden soll.  Um etwa Gesangstext zu einer Melodie
319 hinzuzufügen, wird die Melodie in einem bezeichneten Kontext
320 notiert:
321
322 @example
323 \context Voice = "@b{Tenor}" @var{musik. Ausdruck}
324 @end example
325
326 @noindent
327 sodass der Text an den Noten ausgerichtet werden kann:
328
329 @example
330 \new Lyrics \lyricsto "@b{Tenor}" @var{Gesangstext}
331 @end example
332
333
334 Eine andere Möglichkeit für bezeichnete Kontexte ist es, zwei
335 unterschiedliche musikalische Ausdrücke in einen Kontext zu
336 verschmelzen.  Im nächsten Beispiel werden Artikulationszeichen
337 und Noten getrennt notiert:
338
339 @example
340 Noten = @{ c4 c4 @}
341 Artik = @{ s4-. s4-> @}
342 @end example
343
344 @noindent
345 Dann werden sie kombiniert, indem sie dem selben @code{Voice}-Kontext
346 zugewiesen werden:
347
348 @example
349 <<
350   \new Staff \context Voice = "A" \Noten
351   \context Voice = "A" \Artik
352 >>
353 @end example
354
355 @lilypond[quote,ragged-right]
356 music = { c4 c4 }
357 arts = { s4-. s4-> }
358 \relative c'' <<
359   \new Staff \context Voice = "A" \music
360   \context Voice = "A" \arts
361 >>
362 @end lilypond
363
364 Durch diesen Mechanismus ist es möglich eine Urtextausgabe zu
365 erstellen, mit der optionalen Möglichkeit, bestimmte zusätzliche
366 Artikulationszeichen zu den gleichen Noten hinzuzufügen und so
367 eine editierte Ausgabe zu erhalten.
368
369 @cindex Kontexte erstellen
370
371 @item
372 Der dritte Befehl, um Kontexte zu erstellen, ist:
373
374 @example
375 \context @var{Kontext} @var{musik. Ausdruck}
376 @end example
377
378 @noindent
379 Dies entspricht dem @code{\context} mit @code{= @var{ID}}, aber hier
380 wird ein beliebiger Kontext des Typs @var{Kontext} gesucht und der
381 musikalische Ausdruck darin ausgewertet, unabhängig von der Bezeichnung,
382 die dem Kontext gegeben wurde.
383
384 Diese Variante wird bei musikalischen Ausdrücken benutzt, die auf
385 verschiedenen Ebenen interpretiert werden können.  Beispielsweise
386 der @code{\applyOutput}-Befehl (siehe
387 @rextend{Eine Funktion auf alle Layout-Objekte anwenden}).  Ohne einen
388 expliziten @code{\context} wird die Ausgabe normalerweise einem
389 @code{Voice}-Kontext zugewiesen:
390
391 @example
392 \applyOutput #'@var{Kontext} #@var{Funktion}   % auf Voice anwenden
393 @end example
394
395 Damit aber die Funktion auf @code{Score}- oder @code{Staff}-Ebene
396 interpretiert wird, muss folgende Form benutzt werden:
397
398 @example
399 \applyOutput #'Score #@var{Funktion}
400 \applyOutput #'Staff #@var{Funktion}
401 @end example
402
403 @end itemize
404
405
406
407 @node Kontexte am Leben halten
408 @subsection Kontexte am Leben halten
409 @translationof Keeping contexts alive
410
411 @cindex Kontexte, am Leben erhalten
412 @cindex Kontexte, Lebensdauer
413
414 Kontexte werden normalerweise am ersten musikalischen Moment
415 beendet, an dem sie nichts mehr zu tun haben.  Ein
416 @code{Voice}-Kontext stirbt also sofort, wenn keine Ereignisse
417 mehr auftreten, @code{Staff}-Kontexte sobald alle in ihnen
418 enthaltenen @code{Voice}-Kontexte keine Ereignisse mehr aufweisen
419 usw.  Das kann Schwierigkeiten ergeben, wenn auf frühere
420 Kontexte verwiesen werden soll, die in der Zwischenzeit schon
421 gestorben sind, beispielsweise wenn man Systemwechsel mit
422 @code{\change}-Befehlen vornimmt, wenn Gesangstext einer
423 Stimme mit dem @code{\lyricsto}-Befehl zugewiesen wird oder
424 wenn weitere musikalische Ereignisse zu einem früheren Kontext
425 hinzugefügt werden sollen.
426
427 Es gibt eine Ausnahme dieser Regel: genau ein @code{Voice}-Kontext
428 innerhalb eines @code{Staff}-Kontextes oder in einer
429 @code{<<...>>}-Konstruktion bleibt immer erhalten bis zum Ende
430 des @code{Staff}-Kontextes oder der @code{<<...>>}-Konstruktion, der ihn einschließt, auch wenn es Abschnitte gibt, in der er nichts zu
431 tun hat.  Der Kontext, der erhalten bleibt ist immer der erste,
432 der in der ersten enthaltenden @code{@{...@}}-Konstruktion
433 angetroffen wird, wobei @code{<<...>>}-Konstruktionen ignoriert
434 werden.
435
436 Jeder Kontext kann am Leben gehalten werden, indem man sicherstellt
437 dass er zu jedem musikalischen Moment etwas zu tun hat.
438 @code{Staff}-Kontexte werden am Leben gehalten, indem man sicherstellt,
439 dass eine der enthaltenen Stimmen am Leben bleibt.  Eine Möglichkeit,
440 das zu erreichen, ist es, unsichtbare Pause zu jeder Stimme
441 hinzuzufügen, die am Leben gehalten werden soll.  Wenn mehrere
442 Stimmen sporadisch benutzt werden sollen, ist es am sichersten,
443 sie alle am Leben zu halten und sich nicht auf die Ausnahmeregel
444 zu verlassen, die im vorigen Abschnitt dargestellt wurde.
445
446 Im folgenden Beispiel werden sowohl Stimme A als auch B auf diese
447 Weise für die gesamte Dauer des Stückes am Leben gehalten.
448
449 @lilypond[quote,verbatim]
450 musicA = \relative c'' { d4 d d d }
451 musicB = \relative c'' { g4 g g g }
452 keepVoicesAlive = {
453   <<
454     \new Voice = "A" { s1*5 }  % Keep Voice "A" alive for 5 bars
455     \new Voice = "B" { s1*5 }  % Keep Voice "B" alive for 5 bars
456   >>
457 }
458
459 music = {
460   \context Voice = "A" {
461     \voiceOneStyle
462     \musicA
463   }
464   \context Voice = "B" {
465     \voiceTwoStyle
466     \musicB
467   }
468   \context Voice = "A" { \musicA }
469   \context Voice = "B" { \musicB }
470   \context Voice = "A" { \musicA }
471 }
472
473 \score {
474   \new Staff <<
475     \keepVoicesAlive
476     \music
477   >>
478 }
479 @end lilypond
480
481 @cindex Gesangstext, an einer sporadischen Melodie ausrichten
482
483 Das nächste Beispiel zeigt eine Melodie, die zeitweise unterbrochen
484 wird und wie man den entsprechenden Gesangstext mit ihr verknüpfen
485 kann, indem man die Stimme am Leben hält.  In wirklichen Situationen
486 würden Begleitung und Melodie natürlich aus mehreren Abschnitten bestehen.
487
488 @lilypond[quote,verbatim]
489 melody = \relative c'' { a4 a a a }
490 accompaniment = \relative c' { d4 d d d }
491 words = \lyricmode { These words fol -- low the mel -- o -- dy }
492 \score {
493   <<
494     \new Staff = "music" {
495       <<
496         \new Voice = "melody" {
497           \voiceOne
498           s1*4  % Keep Voice "melody" alive for 4 bars
499         }
500         {
501           \new Voice = "accompaniment" {
502             \voiceTwo
503             \accompaniment
504           }
505           <<
506             \context Voice = "melody" { \melody }
507             \context Voice = "accompaniment" { \accompaniment }
508           >>
509           \context Voice = "accompaniment" { \accompaniment }
510           <<
511             \context Voice = "melody" { \melody }
512             \context Voice = "accompaniment" { \accompaniment }
513           >>
514         }
515       >>
516     }
517     \new Lyrics \with { alignAboveContext = #"music" }
518     \lyricsto "melody" { \words }
519   >>
520 }
521 @end lilypond
522
523 Eine Alternative, die in manchen Umständen besser geeignet sein kann,
524 ist es, einfach unsichtbare Pausen einzufügen, um die Melodie
525 mit der Begleitung passend auszurichten:
526
527 @lilypond[quote,verbatim]
528 melody = \relative c'' {
529   s1  % skip a bar
530   a4 a a a
531   s1  % skip a bar
532   a4 a a a
533 }
534 accompaniment = \relative c' {
535   d4 d d d
536   d4 d d d
537   d4 d d d
538   d4 d d d
539 }
540 words = \lyricmode { These words fol -- low the mel -- o -- dy }
541
542 \score {
543   <<
544     \new Staff = "music" {
545       <<
546         \new Voice = "melody" {
547           \voiceOne
548           \melody
549         }
550         \new Voice = "accompaniment" {
551           \voiceTwo
552           \accompaniment
553         }
554       >>
555     }
556     \new Lyrics \with { alignAboveContext = #"music" }
557     \lyricsto "melody" { \words }
558   >>
559 }
560 @end lilypond
561
562
563
564 @node Umgebungs-Plugins verändern
565 @subsection Umgebungs-Plugins verändern
566 @translationof Modifying context plug-ins
567
568 Notationskontexte (wie @code{Score} oder @code{Staff}) speichern
569 nicht nur Eigenschaften, sie enthalten auch Plugins (@qq{engraver}
570 genannt), die die einzelnen Notationselemente erstellen.  Ein
571 @code{Voice}-Kontext enthält beispielsweise einen
572 @code{Note_heads_engraver}, der die Notenköpfe erstellt, und ein
573 @code{Staff}-Kontext einen @code{Key_engraver}, der die
574 Vorzeichen erstellt.
575
576 Eine vollständige Erklärung jedes Plugins findet sich in
577 @ifhtml
578 @rinternals{Engravers and Performers}.
579 @end ifhtml
580 @ifnothtml
581 Referenz der Interna: @expansion{} Translation @expansion{} Engravers.
582 @end ifnothtml
583 Alle Kontexte sind erklärt in
584 @ifhtml
585 @rinternals{Contexts},
586 @end ifhtml
587 @ifnothtml
588 Referenz der Interna: @expansion{} Translation @expansion{} Context,
589 @end ifnothtml
590 wobei die in diesem Kontext vorkommenden Engraver aufgelistet sind.
591
592 Es kann teilweise nötig sein, diese Engraver umzupositionieren.  Das
593 geschieht, indem man einen neuen Kontext mit @code{\new} oder
594 @code{\context} beginnt und ihn dann verändert:
595
596 @funindex \with
597 @funindex with
598
599 @example
600 \new @var{context} \with @{
601   \consists @dots{}
602   \consists @dots{}
603   \remove @dots{}
604   \remove @dots{}
605   @emph{etc.}
606 @}
607 @{
608   @emph{..Noten..}
609 @}
610 @end example
611
612 @noindent
613 @dots{} steht hier für die Bezeichnung des Engravers.  @code{\consists}
614 fügt einen Engraver hinzu und @code{\remove} entfernt ihn.
615 Es folgt ein einfaches Beispiel, in dem der
616 @code{Time_signature_engraver} (Engraver für den Takt) und der
617 @code{Clef_engraver} (Engraver für den Schlüssel) aus dem
618 @code{Staff}-Kontext entfernt werden:
619
620 @lilypond[quote,relative=1,verbatim]
621 <<
622   \new Staff {
623     f2 g
624   }
625   \new Staff \with {
626      \remove "Time_signature_engraver"
627      \remove "Clef_engraver"
628   } {
629     f2 g2
630   }
631 >>
632 @end lilypond
633
634 Das zweite Notensystem enthält keine Taktangabe und keinen Notenschlüssel.
635 Das ist eine recht brutale Methode, Objekte zu verstecken, weil es sich
636 auf das gesamte System auswirkt.  Diese Methode beeinflusst auch die
637 Platzaufteilung, was erwünscht sein kann.  Vielfältigere Methoden,
638 mit denen Objekte unsichtbar gemacht werden können, finden sich in
639 @rlearning{Sichtbarkeit und Farbe von Objekten}.
640
641 Das nächste Beispiel zeigt eine Anwendung in der Praxis.  Taktstriche
642 und Taktart werden normalerweise in einer Partitur synchronisiert.  Das
643 geschieht durch @code{Timing_translator} und @code{Default_bar_line_engraver}.
644 Diese Plugins sorgen sich um die Verwaltung der Taktzeiten und die
645 Stelle innerhalb des Taktes, zu dem eine Note erscheint usw.  Indem
646 man diese Engraver aus dem @code{Score}-Kontext in den @code{Staff}-Kontext
647 verschiebt, kann eine Partitur erstellt werden, in welcher
648 jedes System eine unterschiedliche Taktart hat:
649
650 @cindex polymetrische Partitur
651 @cindex Taktarten, mehrere in Partitur
652 @cindex Taktarten, unterschiedliche per System
653
654 @lilypond[quote,verbatim]
655 \score {
656   <<
657     \new Staff \with {
658       \consists "Timing_translator"
659       \consists "Default_bar_line_engraver"
660     } {
661         \time 3/4
662         c4 c c c c c
663     }
664   \new Staff \with {
665     \consists "Timing_translator"
666     \consists "Default_bar_line_engraver"
667   } {
668       \time 2/4
669       c4 c c c c c
670   }
671 >>
672 \layout {
673   \context {
674     \Score
675     \remove "Timing_translator"
676     \remove "Default_bar_line_engraver"
677     }
678   }
679 }
680 @end lilypond
681
682 @knownissues
683
684 Die Reihenfolge, in der die Engraver definiert werden,
685 ist die Reihenfolge, in welcher sie aufgerufen werden, um
686 ihre Verarbeitung vorzunehmen.  Normalerweise spielt die
687 Reihenfolge, in welcher die Engraver angegeben werden,
688 keine Rolle, aber in einigen Spezialfällen
689 ist die Reihenfolge sehr wichtig.  Das kann beispielsweise
690 vorkommen, wenn ein Engraver eine Eigenschaft erstellt und
691 ein anderer von ihr liest, oder ein Engraver erstellt ein
692 Grob und ein anderer wertet es aus.
693
694 Folgende Reihenfolgen müssen beachtet werden:
695
696 @itemize
697 @item
698 der @code{Bar_engraver} muss normalerweise zuerst kommen,
699
700 @item
701 der @code{New_fingering_engraver} muss vor dem
702 @code{Script_column_engraver} kommen,
703
704 @item
705 der @code{Timing_translator} muss vor dem @code{Bar_number_engraver}
706 kommen.
707 @end itemize
708
709 @seealso
710 Installlierte Dateien:
711 @file{ly/engraver-init.ly}.
712
713
714 @node Die Standardeinstellungen von Kontexten ändern
715 @subsection Die Standardeinstellungen von Kontexten ändern
716 @translationof Changing context default settings
717
718 @cindex Standardkontexteigenschaften, ändern
719 @cindex Kontexteigenschaften, Einstellungen ändern
720
721 Kontext- und Grob-Eigenschaften können mit den Befehlen @code{\set}
722 und @code{\override} verändert werden, wie beschrieben in
723 @ref{Eigenschaften verändern}.  Diese Befehle erstellen musikalische
724 Ereignisse, damit die Veränderungen zum Zeitpunkt der Verarbeitung
725 in den Noten erscheinen.
726
727 Dieser Abschnitt hingegen erklärt, wie man die @emph{Standardwerte} von
728 Kontext- und Grob-Eigenschaften zum Zeitpunkt, an dem der Kontext erstellt
729 wird, verändert.  Es gibt hierzu zwei Möglichkeiten.  Die eine verändert
730 die Standardeinstellungen aller Kontexte eines bestimmten Typs, die andere
731 verändert die Standardwerte nur eines bestimmten Kontextes.
732
733 @menu
734 * Alle Kontexte des gleichen Typs verändern::
735 * Nur einen bestimmten Kontext verändern::
736 * Rangfolge von Kontextwerten::
737 @end menu
738
739 @node Alle Kontexte des gleichen Typs verändern
740 @unnumberedsubsubsec Alle Kontexte des gleichen Typs verändern
741 @translationof Changing all contexts of the same type
742
743 @cindex \context in \layout-Umgebung
744 @funindex \context
745 @funindex \layout
746
747
748
749 @node Nur einen bestimmten Kontext verändern
750 @unnumberedsubsubsec Nur einen bestimmten Kontext verändern
751 @translationof Changing just one specific context
752
753
754
755 @node Rangfolge von Kontextwerten
756 @unnumberedsubsubsec Rangfolge von Kontextwerten
757 @translationof Order of precedence
758
759  
760
761 @node Neue Kontexte definieren
762 @subsection Neue Kontexte definieren
763 @translationof Defining new contexts
764
765 @cindex Kontexte, neue definieren
766 @cindex Engraver, in Kontexte einfügen
767
768 @funindex \alias
769 @funindex alias
770 @funindex \name
771 @funindex name
772 @funindex \type
773 @funindex type
774 @funindex \consists
775 @funindex consists
776 @funindex \accepts
777 @funindex accepts
778 @funindex \denies
779 @funindex denies
780
781 Bestimme Kontexte, wie @code{Staff} oder @code{Voice}, werden
782 erstellt, indem man sie mit einer Musikumgebung aufruft.  Es ist
783 aber auch möglich, eigene neue Kontexte zu definieren, in denen
784 dann unterschiedliche Engraver benutzt werden.
785
786 Das folgende Beispiel zeigt, wie man etwa @code{Voice}-Kontexte
787 von Grund auf neu bauen kann.  Ein derartiger Kontext ähnelt
788 @code{Voice}, es werden aber nur zentrierte Schrägstriche als
789 Notenköpfe ausgegeben.  Das kann benutzt werden, um Improvisation
790 in Jazzmusik anzuzeigen.
791
792 @c KEEP LY
793 @lilypond[quote,ragged-right]
794 \layout { \context {
795   \name ImproVoice
796   \type "Engraver_group"
797   \consists "Note_heads_engraver"
798   \consists "Rhythmic_column_engraver"
799   \consists "Text_engraver"
800   \consists Pitch_squash_engraver
801   squashedPosition = #0
802   \override NoteHead #'style = #'slash
803   \override Stem #'transparent = ##t
804   \override Flag #'transparent = ##t
805   \alias Voice
806 }
807 \context { \Staff
808   \accepts "ImproVoice"
809 }}
810
811 \relative c'' {
812   a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
813    c4 c^"ausziehen" c_"während des Spiels :)" c }
814   a1
815 }
816 @end lilypond
817
818 Diese Einstellungen werden innerhalb der @code{\context}-Umgebung
819 innerhalb der @code{\layout}-Umgebung definiert:
820
821 @example
822 \layout @{
823   \context @{
824     @dots{}
825   @}
826 @}
827 @end example
828
829 Der Beispielcode des folgenden Abschnittest muss anstelle der Punkte
830 im vorigen Beispiel eingesetzt werden.
831
832 Zuerst ist es nötig eine Bezeichnung für den neuen Kontext zu
833 definieren:
834
835 @example
836 \name ImproVoice
837 @end example
838
839 Weil dieser neue Kontext ähnlich wie @code{Voice} ist, sollen die Befehle,
840 die in @code{Voice}-Kontexten funktionieren, auch
841 in dem neuen Kontext funktionieren.  Das wird erreicht, indem der
842 Kontext als Alias @code{Voice} erhält:
843
844 @example
845 \alias Voice
846 @end example
847
848 Der Kontext gibt Noten und Text aus, darum müssen wir die Engraver
849 hinzufügen, die für diese Aktionen zuständig sind:
850
851 @example
852 \consists Note_heads_engraver
853 \consists Text_engraver
854 @end example
855
856 @noindent
857 aber die Noten sollen nur auf der mittleren Linie ausgegeben werden:
858
859 @example
860 \consists Pitch_squash_engraver
861 squashedPosition = #0
862 @end example
863
864 Der @code{Pitch_squash_engraver} verändert Notenköpfe (die vom
865 @code{Note_heads_engraver} erstellt werden) und setzt ihre vertikale
866 Position auf den Wert von @code{squashedPosition}, in diesem Fall ist
867 das die Mittellinie.
868
869 Die Noten sehen wie ein Querstrich aus und haben keine Hälse:
870
871 @example
872 \override NoteHead #'style = #'slash
873 \override Stem #'transparent = ##t
874 \override Flag #'transparent = ##t
875 @end example
876
877 Alle diese Engraver müssen zusammenarbeiten, und das wird erreicht mit
878 einem zusätzlichen Plugin, das mit dem Befehl @code{\type} gekennzeichnet
879 werden muss.  Dieser Typ solle immer @code{Engraver_group} lauten:
880
881 @example
882 \type "Engraver_group"
883 @end example
884
885 Alles zusammen haben wir folgende Einstellungen:
886
887 @example
888 \context @{
889   \name ImproVoice
890   \type "Engraver_group"
891   \consists "Note_heads_engraver"
892   \consists "Text_engraver"
893   \consists Pitch_squash_engraver
894   squashedPosition = #0
895   \override NoteHead #'style = #'slash
896   \override Stem #'transparent = ##t
897   \override Flag #'transparent = ##t
898   \alias Voice
899 @}
900 @end example
901
902 @funindex \accepts
903 @funindex accepts
904
905 Kontexte sind hierarchisch.  Wie wollen, dass @code{ImproVoice}
906 sich als Unterkontext von @code{Staff} erkennt, wie eine normale
907 Stimme.  Darum wird die Definition von @code{Staff} mit dem
908 @code{\accepts}-Befehl verändert:
909
910 @example
911 \context @{
912   \Staff
913   \accepts ImproVoice
914 @}
915 @end example
916
917 @funindex \denies
918 @funindex denies
919
920 Das Gegenteil von @code{\accepts} ist @code{\denies} (verbietet), was
921 manchmal gebraucht werden kann, wenn schon existierende Kontext-Definitionen
922 wieder benutzt werden sollen.
923
924 Beide Definitionen müssen in die @code{\layout}-Umgebung geschrieben
925 werden:
926
927 @example
928 \layout @{
929   \context @{
930     \name ImproVoice
931     @dots{}
932   @}
933   \context @{
934     \Staff
935     \accepts "ImproVoice"
936   @}
937 @}
938 @end example
939
940 Jetzt kann die Notation zu Beginn des Abschnitts folgendermaßen
941 notiert werden:
942
943 @example
944 \relative c'' @{
945   a4 d8 bes8
946   \new ImproVoice @{
947     c4^"ad lib" c
948     c4 c^"ausziehen"
949     c c_"während des Spielens :)"
950   @}
951   a1
952 @}
953 @end example
954
955
956 @node Reihenfolge des Kontextlayouts
957 @subsection Reihenfolge des Kontextlayouts
958 @translationof Context layout order
959
960 @cindex Kontext, Layoutreihenfolge
961 @funindex \accepts
962 @funindex \denies
963
964 Kontexte werden in einer Systemgruppe normalerweise von oben nach
965 unten positioniert in der Reihenfolge, wie sie in der Quelldatei
966 auftreten.  Wenn Kontext verschachtelt ewrden, enthält der äußere
967 Kontexte geschachtelte innere Kontexte, wie in der Quelldatei
968 angegeben, vorausgesetzt, die inneren Kontexte befinden sich auch
969 in der @qq{accepts}-Liste.  Geschachtelte Kontexte, die nicht
970 in dieser @qq{accepts}-Liste enthalten sind, werden unterhalb
971 des äußeren Kontextes neu positioniert, anstatt innerhalb von ihm
972 gesetzt zu werden.
973
974 Die @qq{accepts}-Liste eines Kontextes kann mit dem Befehlen
975 @code{\accepts} und @code{\denies} verändert werden.  @code{\accepts} 
976 fügt einen Kontext zur @qq{accepts}-Liste, und @code{\denies}
977 entfernt einen Kontext aus der Liste.  Akkordbezeichnungen sollen
978 beispielsweise normalerweise nicht innerhalb eines @code{Staff}-Kontextes
979 geschachtelt werden, sodass der @code{ChordNames}-Kontext nicht
980 automatisch in der @qq{accepts}-Liste des @code{Staff}-Kontextes
981 geführt ist.  Wenn er aber benötigt wird, kann er hinzugefügt werden:
982
983 @lilypond[verbatim,quote]
984 \score {
985   \new Staff {
986     c' d' e' f'
987     \chords { d1:m7 b1:min7.5- }
988   }
989 }
990 @end lilypond
991
992 @lilypond[verbatim,quote]
993 \score {
994   \new Staff {
995     c' d' e' f'
996     \chords { d1:m7 b1:min7.5- }
997   }
998   \layout {
999     \context {
1000       \Staff
1001       \accepts "ChordNames"
1002     }
1003   }
1004 }
1005 @end lilypond
1006
1007 @code{\denies} wird vorrangig eingesetzt, wenn ein neuer Kontext
1008 basierend auf einem existierenden erstellt wird, aber sein 
1009 Schachtelungsverhalten sich unterscheidet.  Der
1010 @code{VaticanaStaff}-Kontext beispielsweise basiert auf dem
1011 @code{Staff}-Kontext, hat aber den @code{VaticanaVoice}-Kontext
1012 anstellt des @code{Voice}-Kontexts in seiner @qq{accepts}-Liste.
1013
1014 Zur Erinnerung: ein Kontext wird automatisch erstellt, wenn ein
1015 Befehl auftritt, der in den aktuellen Kontexten nicht enthalten
1016 sein kann.  Dass kann zu unerwarteten neuen Systemgruppen oder Partituren
1017 führen.
1018
1019 @seealso
1020 Handbuch zur Benutzung:
1021 @rprogram{Ein zusätzliches System erscheint}.
1022
1023 Installierte Dateien:
1024 @file{ly/engraver-init.ly}.
1025
1026
1027 @node Die Referenz der Programminterna erklärt
1028 @section Die Referenz der Programminterna erklärt
1029 @translationof Explaining the Internals Reference
1030
1031 @menu
1032 * Zurechtfinden in der Programmreferenz::
1033 * Layout-Schnittstellen::
1034 * Die Grob-Eigenschaften::
1035 * Benennungskonventionen::
1036 @end menu
1037
1038
1039 @node Zurechtfinden in der Programmreferenz
1040 @subsection Zurechtfinden in der Programmreferenz
1041 @translationof Navigating the program reference
1042
1043 Arbeit mit der Referenz der Interna soll hier an
1044 einigen Beispiel illustriert werden.  Die Referenz
1045 der Interna existiert nur auf Englisch,
1046 darum sind auch die Beispiele dieses Abschnittes nicht
1047 übersetzt.
1048
1049 Folgende Aufgabe wird bearbeitet:  Der Fingersatz aus dem Beispiel
1050 unten soll verändert werden:
1051
1052 @lilypond[quote,relative=2,verbatim]
1053 c-2
1054 \stemUp
1055 f
1056 @end lilypond
1057
1058 In der Dokumentation über Fingersatz (in
1059 @ref{Fingersatzanweisungen}) gibt es folgenden Abschnitt:
1060
1061 @quotation
1062 @strong{Siehe auch:}
1063
1064 Referenz der Interna: @rinternals{Fingering}.
1065
1066 @end quotation
1067
1068 @c all ignored text just left out
1069
1070 @ifnothtml
1071 Die Referenz der Interna gibt es als HTML-Dokument.  Sie sollten sie als
1072 HTML-Dokument lesen, entweder online oder indem Sie die HTML-Dokumentation
1073 herunterladen.  Dieser Abschnitt ist sehr viel schwieriger zu verstehen,
1074 wenn Sie die PDF-Version verwenden.
1075 @end ifnothtml
1076
1077 Gehen Sie über diesen Link zum Abschnitt @rinternals{Fingering}.
1078 Oben auf der Seite findet sich:
1079
1080 @quotation
1081 Fingering objects are created by: @rinternals{Fingering_engraver} and
1082 @rinternals{New_fingering_engraver}.
1083 @end quotation
1084
1085 Indem Sie die Links in der Referenz der Interna folgen, können Sie
1086 verfolgen, wie LilyPond intern arbeitet:
1087
1088 @itemize
1089
1090 @item @rinternals{Fingering}:
1091 @rinternals{Fingering} objects are created by:
1092 @rinternals{Fingering_engraver}
1093
1094 @item @rinternals{Fingering_engraver}:
1095 Music types accepted: @rinternals{fingering-event}
1096
1097 @item @rinternals{fingering-event}:
1098 Music event type @code{fingering-event} is in Music expressions named
1099 @rinternals{FingeringEvent}
1100 @end itemize
1101
1102 @c translation of the above
1103 Fingersatz-Objekte werden also durch den @code{Fingering_engraver}
1104 erstellt, welcher folgende Musikereignistypen akzeptiert:
1105 @code{fingering-event}.  Ein Musikereignis vom Typ
1106 @code{fingering-event} ist ein musikalischer Ausdruck mit der
1107 Bezeichnung @rinternals{FingeringEvent}.
1108
1109 Dieser Pfad geht genau die entgegengesetzte Richtung von LilyPonds
1110 Wirkungsweise: er beginnt bei der graphischen Ausgabe und
1111 arbeitet sich voran zur Eingabe.  Man könnte auch mit einem
1112 Eingabe-Ereignis starten und dann die Links zurückverfolgen,
1113 bis man zum Ausgabe-Objekt gelangt.
1114
1115
1116 Die Referenz der Interna kann auch wie ein normales Dokument
1117 durchsucht werden.  Sie enthält Kapitel über
1118 @ifhtml
1119 @rinternals{Music definitions},
1120 @end ifhtml
1121 @ifnothtml
1122 @code{Music definitions},
1123 @end ifnothtml
1124 über @rinternals{Translation} und @rinternals{Backend}.  Jedes
1125 Kapitel listet alle die Definitionen und Eigenschaften auf,
1126 die benutzt und verändert werden können.
1127
1128
1129 @node Layout-Schnittstellen
1130 @subsection Layout-Schnittstellen
1131 @translationof Layout interfaces
1132
1133 @cindex Layout-Schnittstelle
1134 @cindex Schnittstelle, Layout-
1135 @cindex Grob
1136
1137 Die HTML-Seite, die im vorigen Abschnitt betrachtet wurde,
1138 beschreibt ein Layoutobjekt mit der Bezeichnung
1139 @code{Fingering}.  Ein derartiges Objekt ist ein Symbol
1140 in der Partitur.  Es hat Eigenschaften, die bestimmte
1141 Zahlen speichern (wie etwa Dicke und Richtung), aber auch
1142 Weiser auf verwandte Objekte.  Ein Layoutobjekt wird auch
1143 als @qq{Grob} bezeichnet, die Abkürzung für @emph{Gr}aphisches
1144 @emph{Ob}jekt.  Mehr Information zu Grobs findet sich in
1145 @rinternals{grob-interface}.
1146
1147 Die Seite zu @code{Fingering} enthält Definitionen für das
1148 @code{Fingering}-Objekt.  Auf der Seite steht etwa:
1149
1150 @quotation
1151 @code{padding} (dimension, in staff space):
1152
1153 @code{0.5}
1154 @end quotation
1155
1156 @noindent
1157 was bedeutet, dass der Abstand zu anderen Objekten mindestens
1158 0.5 Notenlinienabstände beträgt.
1159
1160 Jedes Layoutobjekt kann mehrere Funktionen sowohl als typographisches
1161 als auch als Notationselement einnehmen.  Das Fingersatzobjekt
1162 beispielsweise hat folgende Aspekte:
1163
1164 @itemize
1165 @item
1166 Seine Größe ist unabhängig von der horizontalen Platzaufteilung,
1167 anders als etwa bei Legatobögen.
1168
1169 @item
1170 Es handelt sich um Text, normalerweise sehr kurz.
1171
1172 @item
1173 Dieser Text wird durch ein Glyph einer Schriftart gesetzt,
1174 anders als bei Legatobögen.
1175
1176 @item
1177 Der Mittelpunkt des Symbols sollte horizontal mit dem
1178 Mittelpunkt des Notenkopfes ausgerichtet werden.
1179
1180 @item
1181 Vertikal wird das Objekt neben die Note und das Notensystem
1182 gesetzt.
1183
1184 @item
1185 Die vertikale Position wird auch mit anderen Textelementen
1186 abgeglichen.
1187
1188 @end itemize
1189
1190 Jeder dieser Aspekte findet sich in sogenannten Schnittstellen
1191 (engl. interface), die auf der @rinternals{Fingering}-Seite
1192 unten aufgelistet sind:
1193
1194 @quotation
1195 This object supports the following interfaces:
1196 @rinternals{item-interface},
1197 @rinternals{self-alignment-interface},
1198 @rinternals{side-position-interface}, @rinternals{text-interface},
1199 @rinternals{text-script-interface}, @rinternals{font-interface},
1200 @rinternals{finger-interface}, and @rinternals{grob-interface}.
1201 @end quotation
1202
1203 Ein Klick auf einen der Links öffnet die Seite der entsprechenden
1204 Schnittstelle.  Jede Schnittstelle hat eine Anzahl von Eigenschaften.
1205 Einige sind nicht vom Benutzer zu beeinflussen (@qq{interne
1206 Eigenschaften}), andere aber können verändert werden.
1207
1208 Es wurde immer von einem @code{Fingering}-Objekt gesprochen, aber
1209 eigentlich handelt es sich nicht um sehr viel.  Die Initialisierungsdatei
1210 @file{scm/define-grobs.scm} zeigt den Inhalt dieses @qq{Objekts}
1211 (zu Information, wo diese Dateien sich finden siehe
1212 @rlearning{Mehr Information}):
1213
1214 @example
1215 (Fingering
1216   . ((padding . 0.5)
1217      (avoid-slur . around)
1218      (slur-padding . 0.2)
1219      (staff-padding . 0.5)
1220      (self-alignment-X . 0)
1221      (self-alignment-Y . 0)
1222      (script-priority . 100)
1223      (stencil . ,ly:text-interface::print)
1224      (direction . ,ly:script-interface::calc-direction)
1225      (font-encoding . fetaText)
1226      (font-size . -5)           ; don't overlap when next to heads.
1227      (meta . ((class . Item)
1228      (interfaces . (finger-interface
1229                     font-interface
1230                     text-script-interface
1231                     text-interface
1232                     side-position-interface
1233                     self-alignment-interface
1234                     item-interface))))))
1235 @end example
1236
1237 @noindent
1238 Wie man sehen kann, ist das Fingersatzobjekt nichts anderes als
1239 eine Ansammlung von Variablen, und die Internetseite der
1240 Referenz der Interna ist direkt aus diesen Anweisungen generiert.
1241
1242
1243 @node Die Grob-Eigenschaften
1244 @subsection Die Grob-Eigenschaften
1245 @translationof Determining the grob property
1246
1247 Die Position der @b{2} aus dem Beispiel unten soll also geändert werden:
1248
1249 @lilypond[quote,relative=2,verbatim]
1250 c-2
1251 \stemUp
1252 f
1253 @end lilypond
1254
1255 Weil die @b{2} vertikal an der zugehörigen Note ausgerichtet ist,
1256 müssen wir uns mit der Schnittstelle auseinander setzen, die diese
1257 Positionierung veranlasst.  Das ist hier @code{side-position-interface}.
1258 Auf der Seite für diese Schnittstelle heißt es:
1259
1260 @quotation
1261 @code{side-position-interface}
1262
1263 Position a victim object (this one) next to other objects (the
1264 support).  The property @code{direction} signifies where to put the
1265 victim object relative to the support (left or right, up or down?)
1266 @end quotation
1267
1268 @cindex Verschiebung
1269
1270 @noindent
1271 Darunter wird die Variable @code{padding} (Verschiebung) beschrieben:
1272
1273 @quotation
1274 @table @code
1275 @item padding
1276 (dimension, in staff space)
1277
1278 Add this much extra space between objects that are next to each other.
1279 @end table
1280 @end quotation
1281
1282 Indem man den Wert von @code{padding} erhöht, kann die Fingersatzanweisung
1283 weiter weg von der Note gesetzt werden.  Dieser Befehl beispielsweise
1284 fügt drei Notenlinienzwischenräume zwischen die Zahl und den Notenkopf:
1285
1286 @example
1287 \once \override Voice.Fingering #'padding = #3
1288 @end example
1289
1290 Wenn dieser Befehl in den Quelltext eingefügt wird, bevor der
1291 Fingersatz notiert ist, erhält man folgendes:
1292
1293 @lilypond[quote,relative=2,verbatim]
1294 \once \override Voice.Fingering #'padding = #3
1295 c-2
1296 \stemUp
1297 f
1298 @end lilypond
1299
1300 In diesem Fall muss die Veränderung speziell für den @code{Voice}-Kontext
1301 definiert werden.  Das kann auch aus der Referenz der Interna entnommen
1302 werden, da die Seite des @rinternals{Fingering_engraver} schreibt:
1303
1304 @quotation
1305 Fingering_engraver is part of contexts: @dots{} @rinternals{Voice}
1306 @end quotation
1307
1308
1309 @node Benennungskonventionen
1310 @subsection Benennungskonventionen
1311 @translationof Naming conventions
1312
1313 Die Bezeichnungen für Funktionen, Variablen, Engraver und Objekte
1314 folgen bestimmten Regeln:
1315
1316 @itemize
1317
1318 @item
1319     Scheme-Funktionen: kleinbuchstaben-mit-bindestrichen
1320
1321 @item
1322     Scheme-Funktionen: ly:plus-scheme-stil
1323
1324 @item
1325     Musikalische Ereignisse, Musikklassen und Musikeigenschaften: wie-scheme-funktionen
1326
1327 @item
1328     Grob-Schnittstellen: scheme-stil
1329
1330 @item
1331     backend-Eigenschaften: scheme-stil (aber X und Y)
1332
1333 @item
1334     Kontexte: Großbuchstabe, oder GroßbuchstabeZwischenWörtern (CamelCase)
1335
1336 @item
1337     Kontext-Eigenschaften: kleinbuchstabeMitFolgendenGroßbuchstaben
1338
1339 @item
1340     Engraver:  Großbuchstabe_gefolgt_von_kleinbuchstaben_mit_unterstrichen
1341 @end itemize
1342
1343 @c todos left out
1344
1345
1346 @node Eigenschaften verändern
1347 @section Eigenschaften verändern
1348 @translationof Modifying properties
1349
1350 @menu
1351 * Grundlagen zum Verändern von Eigenschaften::
1352 * Der set-Befehl::
1353 * Der override-Befehl::
1354 * Der tweak-Befehl::
1355 * set versus override::
1356 * Alisten verändern::
1357 @end menu
1358
1359
1360 @node Grundlagen zum Verändern von Eigenschaften
1361 @subsection Grundlagen zum Verändern von Eigenschaften
1362 @translationof Overview of modifying properties
1363
1364 Jeder Kontext ist verantwortlich für die Erstellung bestimmter
1365 graphischer Objekte.  Die Einstellungen für diese Objekte werden
1366 auch in dem Kontext gespeichert.  Wenn man diese Einstellungen
1367 verändert, kann die Erscheinung der Objekte geändert werden.
1368
1369 Es gibt zwei unterschiedliche Eigenschaftenarten, die in Kontexten
1370 gespeichert werden: Kontexteigenschaften und Grob-Eigenschaften.
1371 Kontexteigenschaften sind Eigenschaften, die sich auf den gesamten Kontext
1372 beziehen und seine Darstellung beinflussen.  Grob-Eigenschaften dagegen
1373 wirken sich nur auf bestimmte graphische Objekte aus, die in einem
1374 Kontext dargestellt werden.
1375
1376 Die @code{\set}- und @code{\unset}-Befehle werden benutzt, um die Werte
1377 von Kontexteigenschaften zu ändern.  Die Befehle @code{\override} und
1378 @code{\revert} hingegen verändern die Werte von Grob-Eigenschaften.
1379
1380 @ignore
1381 Die Syntax hierzu lautet:
1382
1383 @example
1384 \override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #@var{Wert}
1385 @end example
1386
1387
1388 @var{Bezeichnung} ist die Bezeichnung eines graphischen Objekts,
1389 wie @code{Stem} (Hals) oder @code{NoteHead} (Notenkopf), und
1390 @var{Eigenschaft} ist eine interne Variable des Formatierungssystems
1391 (eine @qq{Grob-Eigenschaft} oder @qq{Layout-Eigenschaft}).  Diese
1392 Eigenschaft ist ein Symbol, muss also mit einem Anführungsstrich
1393 versehen werden.  Wie die Felder @var{Bezeichnung}, @var{Eigenschaft}
1394 und @var{Wert} richtig gefüllt werden, zeigt der Abschnitt
1395 @ref{Eigenschaften verändern}.  Hier wird nur die Funktionalität des
1396 Befehls betrachtet.
1397
1398 Der Befehl
1399
1400 @verbatim
1401 \override Staff.Stem #'thickness = #4.0
1402 @end verbatim
1403
1404 @noindent
1405 bewirkt, dass der Notenhals dicker gesetzt wird (Standard ist
1406 1.3, die Dicke der Notenlinie entspricht dem Wert 1).  Da der
1407 Befehl den Kontext @code{Staff} angibt, wirkt er sich nur auf
1408 das gerade aktuelle Notensystem aus.  Andere Systeme behalten
1409 ihr normales Aussehen.  Hier ein Beispiel mit diesem Befehl:
1410
1411 @lilypond[quote,verbatim,relative=2]
1412 c4
1413 \override Staff.Stem #'thickness = #4.0
1414 c4
1415 c4
1416 c4
1417 @end lilypond
1418
1419 Der @code{\override}-Befehl verändert die Definitionen von
1420 @code{Stem} (Hals) innerhalb des aktuellen @code{Staff}
1421 (Notensystems).  Nachdem der Befehl gelesen wurde, werden
1422 alle Hälse dicker gesetzt.
1423
1424 Wie auch bei dem @code{\set}-Befehl kann auch hier der
1425 Kontext ausgelassen werden, wobei dann immer implizit der
1426 @code{Voice}-Kontext angenommen wird.  Mit einem zusätzlichen
1427 @code{\once} wirkt sich die Änderung nur einmal aus:
1428
1429 @lilypond[quote,verbatim,relative=2]
1430 c4
1431 \once \override Stem #'thickness = #4.0
1432 c4
1433 c4
1434 @end lilypond
1435
1436 Der @code{\override}-Befehl muss geschrieben sein, bevor das Objekt
1437 begonnen wird.  Wenn also ein @emph{Strecker}-Objekt wie etwa
1438 ein Bogen verändert werden soll, muss der @code{\override}-Befehl
1439 schon geschrieben werden, bevor das Objekt begonnen wird.  In dem
1440 folgenden Beispiel
1441
1442 @lilypond[quote,verbatim,relative=2]
1443 \override Slur #'thickness = #3.0
1444 c8[( c
1445 \override Beam #'beam-thickness = #0.6
1446 c8 c])
1447 @end lilypond
1448
1449 @noindent
1450 ist der Bogen dicker, der Balken aber nicht.  Das liegt daran, dass der Befehl
1451 zum Ändern des @code{Beam}-Objekts erst gesetzt wurde, nachdem der Balken
1452 schon begonnen hat.
1453
1454 Der @code{\revert}-Befehl macht alle Änderungen rückgängig, die mit einem
1455 @code{\override}-Befehl vorgenommen worden sind, dabei werden allerdings
1456 nur Einstellungen betroffen, die sich im gleichen Kontext befinden.  Der
1457 @code{\revert}-Befehl des folgenden Beispiels bewirkt also gar nichts,
1458 weil er für den falschen Kontext gefordert wird.
1459
1460 @example
1461 \override Voice.Stem #'thickness = #4.0
1462 \revert Staff.Stem #'thickness
1463 @end example
1464
1465 Einige veränderbare Optionen werden als Untereigenschaften (engl.
1466 subproperties) bezeichnet und befinden sich innerhalb von den
1467 normalen Eigenschaften.  Wenn man sie verändern will, nimmt der
1468 Befehl folgende Form an:
1469
1470 @c leave this as a long long
1471 @example
1472 \override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} #'@var{Untereigenschaft} = #@var{Wert}
1473 @end example
1474
1475 @noindent
1476 wie beispielsweise
1477
1478 @example
1479 \override Stem #'(details beamed-lengths) = #'(4 4 3)
1480 @end example
1481 @end ignore
1482
1483 @seealso
1484 Referenz der Interna:
1485 @rinternals{OverrideProperty},
1486 @rinternals{RevertProperty},
1487 @rinternals{PropertySet},
1488 @rinternals{Backend},
1489 @rinternals{All layout objects}.
1490
1491
1492 @knownissues
1493
1494 Das Back-end ist nicht sehr streng bei der Überprüfung
1495 der Typen von Objekteigenschaften.  Auf sich selbst verweisende
1496 Bezüge in Scheme-Werten der Eigenschaften können Verzögerung
1497 oder einen Absturz des Programms hervorrufen.
1498
1499
1500
1501 @node Der set-Befehl
1502 @subsection Der @code{@bs{}set}-Befehl
1503 @translationof The set command
1504
1505 @cindex Eigenschaften
1506 @cindex Verändern von Eigenschaften
1507
1508 @funindex \set
1509 @funindex set
1510
1511 Jeder Kontext kann unterschiedliche @emph{Eigenschaften} besitzen,
1512 Variablen, die in diesem Kontext definiert sind.  Sie können
1513 während der Interpretation des Kontextes verändert werden.  Hierzu
1514 wird der @code{\set}-Befehl eingesetzt:
1515
1516 @example
1517 \set @var{Kontext}.@var{Eigenschaft} = #@var{Wert}
1518 @end example
1519
1520 @var{Wert} ist ein Scheme-Objekt, weshalb ihm@tie{}@code{#} vorangestellt
1521 werden muss.
1522
1523 Kontexteigenschaften werden üblicherweise mit @code{kleinGroßbuchstabe}
1524 benannt.  Sie kontrollieren vor allem die Übersetzung von Musik in
1525 Notation, wie etwa @code{localKeySignature}, welche bestimmt, wann
1526 ein Taktstrich gesetzt werden muss.  Kontexteigenschaften können
1527 ihren Wert mit der Zeit ändern, während eine Notationsdatei interpretiert
1528 wird.  Ein gutes Beispiel dafür ist @code{measurePosition}, was die
1529 Position der Noten im Takt angibt.  Kontexteigenschaften werden mit dem
1530 @code{\set}-Befehl verändert.
1531
1532 Mehrtaktpausen etwa können in einen Takt zusammengefasst werden, wenn die
1533 Kontexteigenschaft @code{skipBars} (Takte überspringen) auf @code{#t}
1534 (wahr) gesetzt wird:
1535
1536 @lilypond[quote,verbatim,relative=2]
1537 R1*2
1538 \set Score.skipBars = ##t
1539 R1*2
1540 @end lilypond
1541
1542 Wenn das @var{Kontext}-Argument ausgelassen wird, bezieht sich
1543 der Befehl auf den gerade aktiven unterstmöglichen Kontext,
1544 üblicherweise @code{ChordNames}, @code{Voice} oder
1545 @code{Lyrics}.
1546
1547 @lilypond[quote,verbatim,relative=2]
1548 \set Score.autoBeaming = ##f
1549 <<
1550   {
1551     e8 e e e
1552     \set autoBeaming = ##t
1553     e8 e e e
1554   } \\ {
1555     c8 c c c c8 c c c
1556   }
1557 >>
1558 @end lilypond
1559
1560 Die Änderung wird zur Laufzeit während der Musik interpretiert, sodass
1561 diese Einstellung sich nur auf die zweite Gruppe von Achteln auswirkt.
1562
1563 Dabei gilt zu beachten, dass der unterste Kontext nicht immer die
1564 Eigenschaft enthält, die verändert werden soll.  Wenn man
1565 beispielsweise @code{skipBars} aus dem oberen Beispiel
1566 ohne Angabe des Kontextes zu verändern sucht, hat der Befehl
1567 keine Auswirkung, weil er sich auf den @code{Voice}-Kontext
1568 bezieht, die Eigenschaft sich aber im @code{Score}-Kontext
1569 befindet:
1570
1571 @lilypond[quote,verbatim,relative=2]
1572 R1*2
1573 \set skipBars = ##t
1574 R1*2
1575 @end lilypond
1576
1577 Kontexte sind hierarchisch angeordnet.  Wenn ein übergeordneter
1578 Kontext angegeben wird, etwa @code{Staff}, dann beziehen sich
1579 die Änderungen auf alle Stimmen (@code{Voice}), die in diesem
1580 Kontext enthalten sind.
1581
1582 @funindex \unset
1583 @funindex unset
1584
1585 Es gibt auch einen @code{\unset}-Befehl:
1586
1587 @example
1588 \unset @var{Kontext}.@var{Eigenschaft}
1589 @end example
1590
1591 @noindent
1592 der bewirkt, dass die vorgenommenen Definitionen für @var{Eigenschaft}
1593 entfernt werden.  Dieser Befehl macht nur Einstellungen im richtigen
1594 Kontext rückgängig.  Wenn also im @code{Staff}-Kontext die
1595 Bebalkung ausgeschaltet wird:
1596
1597 @lilypond[quote,verbatim,relative=2]
1598 \set Score.autoBeaming = ##t
1599 <<
1600   {
1601     \unset autoBeaming
1602     e8 e e e
1603     \unset Score.autoBeaming
1604     e8 e e e
1605   } \\ {
1606     c8 c c c c8 c c c
1607   }
1608 >>
1609 @end lilypond
1610
1611 Wie für @code{\set} muss das @var{Kontext}-Argument für den untersten
1612 Kontext nicht mitangegeben werden.  Die zwei Versionen
1613
1614 @example
1615 \set Voice.autoBeaming = ##t
1616 \set autoBeaming = ##t
1617 @end example
1618
1619 verhalten sich gleich, wenn die gegenwärtige Basis der
1620 @code{Voice}-Kontext ist.
1621
1622 @funindex \once
1623 @funindex once
1624
1625 Einstellungen, die nur einmal vorgenommen werden sollen, können
1626 mit @code{\once} notiert werden, etwa:
1627
1628 @lilypond[quote,verbatim,relative=2]
1629 c4
1630 \once \set fontSize = #4.7
1631 c4
1632 c4
1633 @end lilypond
1634
1635 Eine vollständige Beschreibung aller vorhandenen Kontexteigenschaften
1636 findet sich in der Referenz der Interna, siehe
1637 @ifhtml
1638 @rinternals{Tunable context properties}.
1639 @end ifhtml
1640 @ifnothtml
1641 @qq{Translation @expansion{} Tunable context properties}.
1642 @end ifnothtml
1643
1644 @seealso
1645
1646 Internals Reference:
1647
1648 @rinternals{Tunable context properties}.
1649
1650
1651
1652 @node Der override-Befehl
1653 @subsection Der @code{\\override}-Befehl
1654 @translationof The override command
1655
1656 @cindex Grob-Eigenschaften
1657 @cindex Eigenschaften von Grob
1658 @cindex graphische Objekte, Eigenschaften
1659
1660 @funindex \override
1661 @funindex override
1662
1663 Es gibt eine besondere Art von Kontexteigenschaft: die Grob-Beschreibung.
1664 Grob-Beschreibungen werden mit @code{GroßGroßbuchstabe} benannt.  Sie
1665 enthalten @qq{Standardeinstellungen} für ein bestimmtes Grob als eine
1666 assoziative Liste.  Siehe @file{scm/define-grobs.scm} für die
1667 Einstellungen aller Grob-Beschreibungen.  Grob-Beschreibungen werden
1668 mit @code{\override} verändert.
1669
1670 @code{\override} ist eigentlich eine Kurzform, der Befehl
1671
1672 @example
1673 \override @var{Kontext}.@var{GrobBezeichnung} #'@var{Eigenschaft} = #@var{Wert}
1674 @end example
1675
1676 ist äquivalent zu
1677
1678 @example
1679 \set @var{Kontext}.@var{GrobBezeichnung}  =
1680   #(cons (cons '@var{Eigenschaft} @var{Wert})
1681          <vorheriger Wert von @var{Kontext}.@var{GrobBezeichnung}>)
1682 @end example
1683
1684 Der Wert von @code{Kontext}.@code{GrobBezeichnung} (die assoz. Liste @qq{alist}) wird benutzt um die Eigenschaften von individuellen Grobs
1685 zu initialisieren.  Grobs haben Eigenschaften, die im Scheme-Stil mit
1686 @code{bindestrich-wörtern} benannt sind.  Diese Werte der Grob-Eigenschaften
1687 verändern sich während des Notensetzens:  LilyPonds Notensatz heißt im
1688 Grunde, die Eigenschaften mit Callback-Fuktionen auszurechnen.
1689
1690 Beispielsweise kann die Dicke eines Notenhalses verändert werden, indem
1691 man die @code{thickness}-Eigenschaft des @code{Stem}-Objekts verändert:
1692
1693 @lilypond[quote, verbatim, relative=2]
1694 c4 c
1695 \override Voice.Stem #'thickness = #3.0
1696 c4 c
1697 @end lilypond
1698
1699 Wenn kein Kontext angegeben wird, wird der tiefste aktuelle Kontext
1700 benutzt:
1701
1702 @lilypond[quote, verbatim, relative=2]
1703 { \override Staff.Stem #'thickness = #3.0
1704   <<
1705     {
1706       e4 e
1707       \override Stem #'thickness = #0.5
1708       e4 e
1709     } \\ {
1710       c4 c c c
1711     }
1712   >>
1713 }
1714 @end lilypond
1715
1716 @cindex rückgängig machen von Kontextveränderungen
1717 @cindex Kontextveränderungen rückgängig machen
1718 @cindex override rückgängig machen
1719 @cindex \override rückgängig machen
1720
1721 @funindex \revert
1722 @funindex revert
1723
1724 Die Auswirkungen von @code{\override} können mit @code{\revert} wieder
1725 rückgängig gemacht werden:
1726
1727 @lilypond[quote, verbatim, relative=2]
1728 c4
1729 \override Voice.Stem #'thickness = #3.0
1730 c4 c
1731 \revert Voice.Stem #'thickness
1732 c4
1733 @end lilypond
1734
1735 Die Auswirkungen von @code{\override} und @code{\revert} wirken sich auf alle
1736 Grobs im entsprechenden Kontext aber der Stelle aus, an der sie gesetzt werden:
1737
1738 @lilypond[quote, verbatim, relative=2]
1739 {
1740   <<
1741     {
1742       e4
1743       \override Staff.Stem #'thickness = #3.0
1744       e4 e e
1745     } \\ {
1746       c4 c c
1747       \revert Staff.Stem #'thickness
1748       c4
1749     }
1750   >>
1751 }
1752 @end lilypond
1753
1754 @cindex Veränderung von Kontexten nur einmal
1755 @cindex Einmal verändern von Kontexten
1756 @cindex Kontexte, einmal verändern
1757 @cindex \override, nur einmal
1758
1759 @funindex \once
1760 @funindex once
1761
1762 @code{\once} kann zusammen mit @code{\override} benutzt werden,
1763 um nur den aktuellen Zeitwert zu verändern:
1764
1765 @lilypond[quote, verbatim, relative=2]
1766 {
1767   <<
1768     {
1769       \override Stem #'thickness = #3.0
1770       e4 e e e
1771     } \\ {
1772       c4
1773       \once \override Stem #'thickness = #3.0
1774       c4 c c
1775     }
1776   >>
1777 }
1778 @end lilypond
1779
1780
1781 @ignore
1782 @cindex Referenz der Interna
1783 @cindex Grafische Objekte, Finden
1784 @cindex Finden von graphischen Objekten
1785 @cindex Beschreibung von graphischen Objekten
1786 @cindex Grafische Objekte, Beschreibung
1787 @cindex Grob, Beschreibung
1788 @cindex Veränderungen der Einstellungen
1789 @cindex Einstellungen verändern
1790
1791 @funindex override
1792 @funindex \override
1793
1794 Viele Eigenschaften können unabhängig von der Art der Daten, die
1795 sie enthalten, ausgeschaltet werden, indem man sie als @qq{falsch}
1796 (@code{#f}) definiert.  Dadurch wird diese Eigenschaft von LilyPond
1797 ignoriert.  Das ist insbesondere nützlich, wenn man Grob-Eigenschaften
1798 ausschalten will, die Probleme verursachen.
1799 @end ignore
1800
1801
1802 @seealso
1803
1804 Referenz der Interna:
1805 @rinternals{Backend}.
1806
1807
1808 @node Der tweak-Befehl
1809 @subsection Der @code{\\tweak}-Befehl
1810 @translationof The tweak command
1811
1812 @funindex \tweak
1813 @funindex tweak
1814
1815 @cindex Optimieren
1816
1817 Wenn man Grob-Eigenschaften mit @code{\override} verändert, verändern sich
1818 alle fraglichen Objekte zu dem gegebenen musikalischen Moment.  Manchmal
1819 will man allerdings nur ein Grob verändern, anstatt allen Grobs des
1820 aktuellen Kontextes.  Das kann mit dem @code{\tweak}-Befehl erreicht
1821 werden, mit dem man Optimierungen vornehmen kann:
1822
1823 @example
1824 \tweak #'@code{grob-eigenschaft} #@code{Wert}
1825 @end example
1826
1827 Der @code{\tweak}-Befehl wirkt sich auf das Objekt aus, dass direkt auf
1828 @code{Wert} folgt.
1829
1830 @ignore
1831 In einigen Fällen ist es möglich, mit einem abgekürzten Befehl
1832 graphische Objekte zu verändern.  Wenn Objekte direkt von einem
1833 Element des Quelltextes erstellt werden, kann der @code{\tweak}-Befehl
1834 eingesetzt werden:
1835
1836 @lilypond[relative=2,verbatim]
1837 < c
1838   \tweak #'color #red
1839   d
1840   g
1841   \tweak #'duration-log #1
1842   a
1843 > 4
1844 -\tweak #'padding #8
1845 -^
1846 @end lilypond
1847
1848 @cindex Akkord, eine Note verändern
1849
1850 Die hauptsächliche Benutzung von @code{\tweak} ist dann, wenn
1851 man nur ein Element von einer Ansammlung an Elementen verändern
1852 will, die alle zum gleichen musikalischen Moment beginnen.  Das
1853 kann eine Noten in einem Akkord sein, oder eine von mehreren
1854 Triolenklammern, die zur gleichen Zeit beginnen.
1855
1856 Eine Einleitung der Syntax für den @code{\tweak}Befehl findet
1857 sich in @rlearning{Optimierungsmethoden}.
1858
1859 Der @code{\tweak}-Befehl verändert die Eigenschaft des folgenden
1860 Objekts direkt, ohne dass die Bezeichnung des Objekts (Grobs) oder
1861 des Kontextes angegeben werden muss.  Damit das funktioniert, muss
1862 das Objekt direkt auf den @code{\tweak}-Befehl folgen, auf das
1863 er sich auswirken soll.  Das ist in manchen Fällen nicht gegeben,
1864 da viele Objekte durch LilyPond automatisch eingesetzt werden.
1865 Wenn etwa eine Note interpretiert wird, die nicht Teil eines
1866 Akkords ist, fügt LilyPond implizit einen @code{ChordEvent}
1867 vor die Note ein, sodass der @code{\tweak}-Befehl von der
1868 Note getrennt wird.  Wenn aber Akkord-Klammern um die Note
1869 und den @code{\tweak}-Befehl gesetzt werden, folgt der
1870 @code{ChordEvent} auf den @code{\tweak}-Befehl und befindet
1871 sich deshalb direkt vor der Note, auf die er einwirken soll,
1872 sodass die Veränderung funktioniert.
1873
1874 An einem Beispiel demonstriert:  Das funktioniert:
1875
1876
1877 @lilypond[relative=2,verbatim,quote]
1878 <\tweak #'color #red c>4
1879 @end lilypond
1880
1881 @noindent
1882 und das nicht:
1883
1884 @lilypond[relative=2,verbatim,quote]
1885 \tweak #'color #red c4
1886 @end lilypond
1887
1888 @end ignore
1889
1890 Eine Einleitung der Syntax und Benutzungen des @code{\tweak}-(Optimierungs)-Befehls findet sich in @rlearning{Optimierungsmethoden}.
1891
1892 Wenn mehrere gleichartige Elemente zum gleichen musikalischen
1893 Moment auftreten, kann der @code{\override}-Befehl nicht
1894 benutzt werden, um nur einen von ihnen zu verändern: hier braucht
1895 man den @code{\tweak}-Befehl.  Elemente, die mehrfach zum
1896 gleichen musikalischen Moment auftreten können sind unter Anderem:
1897
1898 @c TODO expand to include any further uses of \tweak
1899 @itemize
1900 @item Notenköpfe von Noten innerhalb eines Akkordes
1901 @item Artikulationszeichen an einer einzelnen Note
1902 @item Bindebögen zwischen Noten eines Akkordes
1903 @item Llammern für rhythmische Verhältnisse (wie Triolen), die zur gleichen Zeit beginnen
1904 @end itemize
1905
1906 @c TODO add examples of these
1907
1908 @cindex Akkord, eine Noten verändern
1909
1910 In diesem Beispiel wird die Farbe eines Notenkopfes und die Art eines
1911 anderen Notenkopfes innerhalb eines Akkordes verändert:
1912
1913 @lilypond[relative=2,verbatim,quote]
1914 < c
1915   \tweak #'color #red
1916   d
1917   g
1918   \tweak #'duration-log #1
1919   a
1920 > 4
1921 @end lilypond
1922
1923 @code{\tweak} kann auch benutzt werden, um Bögen zu verändern:
1924
1925 @lilypond[verbatim,quote,relative=1]
1926 c-\tweak #'thickness #5 ( d e f)
1927 @end lilypond
1928
1929 Damit der @code{\tweak}-Befehl funktioniert, muss er direkt vor dem
1930 Objekt stehen, auf das er sich bezieht.  Manchmal kommt es vor, dass
1931 LilyPond während der Kompilierung der Datei zusätzliche Elemente
1932 einfügt, die dann zwischen der Optimierung und dem Objekt stehen.
1933 Noten, auch einzlene Noten, werden beispielsweise intern von LilyPond
1934 immer wie Akkorde behandelt, sodass auch ein @code{\tweak}-Befehl
1935 für eine einzelne Note innerhalb von Akkordzeichen notiert werden
1936 muss:
1937
1938 @lilypond[relative=2,verbatim,quote]
1939 \tweak #'color #red c4
1940 <\tweak #'color #red c>4
1941 @end lilypond
1942
1943 Der @code{\tweak}-Befehl kann @emph{nicht} eingesetzt werden, um
1944 Elemente zu verändern, die sich nicht direkt im Notentext befinden.
1945 Insbesondere Hälse, Balken oder Versetzungszeichen lassen sich nicht
1946 beeinflussen, weil diese später durch den Notenkopf erstellt werden
1947 und nicht direkt durch
1948 den Quelltext.  @code{\tweak} kann auch nicht verwendet werden,
1949 um Schlüssel oder Taktarten zu verändern, denn sie werden von
1950 dem @code{\tweak}-Befehl während der Interpretation durch
1951 automatisches Einfügen von zusätzlichen Kontextelementen getrennt.
1952
1953 Mehrere @code{\tweak}-Befehle können vor ein Notationselement
1954 gesetzt werden und alle werden interpretiert:
1955
1956 @lilypond[verbatim,quote,relative=1]
1957 c
1958 -\tweak #'style #'dashed-line
1959 -\tweak #'dash-fraction #0.2
1960 -\tweak #'thickness #3
1961 -\tweak #'color #red
1962  \glissando
1963 f'
1964 @end lilypond
1965
1966 Der Strom der musikalischen Ereignisse (engl. music stream), der aus
1967 dem Quelltext erstellt wird, und zu dem auch die automatisch eingefügten
1968 Elemente gehören, kann betrachtet werden, siehe
1969 @rextend{Musikalische Funktionen darstellen}.  Das kann nützlich sein,
1970 wenn man herausfinden will, was mit dem @code{\tweak}-Befehl
1971 verändert werden kann.
1972
1973 @seealso
1974 Handbuch zum Lernen:
1975 @rlearning{Optimierungsmethoden}.
1976
1977 Erweitern:
1978 @rextend{Musikalische Funktionen darstellen}.
1979
1980 @knownissues
1981
1982 @cindex tweak-Befehl in einer Variable
1983 @cindex Variable, tweak-Befehl benutzen
1984 @cindex Optimierung innerhalb einer Variable
1985
1986 Der @code{\tweak}-Befehl kann nicht innerhalb von einer Variable eingesetzt werden.
1987
1988 @cindex tweaks-Befehl in Gesangstext
1989 @cindex lyrics und tweak-Befehl
1990 @cindex Gesangstext und tweak-Befehl
1991
1992 Der @code{\tweak}-Befehl kann nicht innerhalb von @code{\lyricmode} eingesetzt werden.
1993
1994 @cindex Kontrollpunkte und tweak
1995 @cindex tweak und Kontrollpunkte
1996
1997 Der @code{\tweak}-Befehl kann nicht benutzt werden, um die Kontrollpunkte
1998 eines von mehreren Bindebögen eines Akkorden zu verändern. Anstelle dessen
1999 wird der erste Bogen verändert, der in der Eingabedatei auftritt.
2000
2001
2002 @node set versus override
2003 @subsection @code{\\set} versus @code{\\override}
2004 @translationof set versus override
2005
2006 @c TODO: überflüssig?
2007
2008 @ignore
2009 Es wurden zwei unterschiedliche Methoden vorgestellt, mit denen
2010 Eigenschaften verändert werden können: @code{\set} und
2011 @code{\override}.  Im Grunde genommen gibt es auch zwei
2012 unterschiedliche Arten von Eigenschaften.
2013
2014 Kontexte können Eigenschaften haben, deren Bezeichnungen
2015 üblicherweise dem Schema @code{kleinGroß} folgen.  Derartige
2016 Eigenschaften sind vor allen Dingen für die Übersetzung der
2017 Musik in Notation zuständig, beispielsweise @code{localKeySignature}
2018 (um zu bestimmen, ob Versetzungszeichen ausgegeben werden
2019 müssen), @code{measurePosition} (um zu bestimmen, ob eine
2020 Taktlinie gesetzt werden muss).  Kontexteigenschaften können
2021 ihren Wert verändern, während ein Musikstück ausgewertet wird;
2022 @code{measurePosition} (Taktposition) ist ein gutes Beispiel
2023 hierfür.  Kontexteigenschaften werden mit dem Befehl @code{\set}
2024 verändert.
2025
2026 Dann gibt es einen Spezialtyp der Kontexeigenschaften: die
2027 Elementbeschreibung.  Diese Eigenschaften werden mit
2028 @code{GroßGroß} benannt (beginnen also auch mit einem
2029 Großbuchstaben).  Sie beinhalten die Standardeinstellungen
2030 für die besagten graphischen Objekte in Form einer
2031 Assosiationsliste.  Siehe auch die Datei @file{scm/define-grobs.scm}
2032 für ein Beispiel zu diesen Einstellungen.  Elementbeschreibungen
2033 können mit dem Befehl @code{\override} verändert werden.
2034
2035 @code{\override} ist eigentlich eine Abkürzung:
2036
2037 @example
2038 \override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #@var{Wert}
2039 @end example
2040
2041 @noindent
2042 entspricht mehr oder weniger:
2043
2044 @c  leave this long line -gp
2045 @example
2046 \set @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #(cons (cons '@var{Eigenschaft} @var{Wert}) <voriger Wert von @var{Kontext})
2047 @end example
2048
2049 Der Wert von @code{context} (die @qq{alist}) wird benutzt, um
2050 die Eigenschaften von einzelnen Grobs zu initiieren.  Grobs haben
2051 auch Eigenschaften, die im Scheme-Stil benannt werden, also
2052 @code{wort-mit-bindestrich}.  Die Werte der Grob-Eigenschaften
2053 ändern sich während des Formatierungsprozesses: Formatierung
2054 läuft im Prinzip darauf hinaus, Eigenschaften zu errechnen, indem
2055 Callback-Funktionen eingesetzt werden.
2056
2057 @code{fontSize} ist eine besondere Eigenschaft: sie entspricht
2058 @code{\override ... #'font-size} für alle möglichen Objekte.
2059 Weil es sich hier um eine globale Änderung handelt, wurde
2060 die spezielle Form (die mit @code{\set} verändert wird) erstellt.
2061 @end ignore
2062
2063
2064 @node Alisten verändern
2065 @subsection Alisten verändern
2066 @translationof Modifying alists
2067
2068 Einige vom Benutzer einstellbare Eigenschaften sind intern als
2069 @emph{alists} (Assoziative Listen) dargestellt, die Paare von
2070 Schlüsseln und Werten speichern.  Die Struktur einer Aliste ist:
2071
2072 @example
2073 '((@var{Schlüssel1} . @var{Wert1})
2074   (@var{Schlüssel2} . @var{Wert2})
2075   (@var{Schlüssel3} . @var{Wert3})
2076   @dots{})
2077 @end example
2078
2079 Wenn eine Aliste eine Grob-Eigenschaft oder eine Variable der
2080 @code{\paper}-Umgebung ist, können ihre Schlüssel einzeln verändert
2081 werden, ohne andere Schlüssel zu beeinflussen.
2082
2083 Um beispielsweise den Freiraum zwischen benachbarten Systemen
2084 in einer Systemgruppe zu verkleinern, kann man die
2085 @code{staff-staff-spacing}-Eigenschaft des
2086 +@code{StaffGrouper}-Grobs benutzen.  Die Eigenschaft ist eine
2087 Aliste mit vier Schlüsseln: : @code{basic-distance} (Grund-Abstand),
2088 @code{minimum-distance} (minimaler Abstand), @code{padding} (Verschiebung)
2089 und @code{stretchability} (Dehnbarkeit).  Die Standardwerte dieser
2090 Eigenschaft finden sich im Abschnitt @qq{Backend} der Referenz der
2091 Interna (siehe @rinternals{StaffGrouper}):
2092
2093 @example
2094 '((basic-distance . 9)
2095   (minimum-distance . 7)
2096   (padding . 1)
2097   (stretchability . 5))
2098 @end example
2099
2100 Eine Möglichkeit, die Systemen dichter zueinander zu zwingen,
2101 ist es, der Wert des  @code{basic-distance}-Schlüssels (@code{9}) zu
2102 verändern, sodass der den gleichen Wert wie
2103 @code{minimum-distance} (@code{7}) hat.  Um einen einzelnen
2104 Schlüssel zu verändern, wird ein geschachtelter Aufruf benutzt:
2105
2106 @lilypond[quote,verbatim]
2107 % default space between staves
2108 \new PianoStaff <<
2109   \new Staff { \clef treble c''1 }
2110   \new Staff { \clef bass   c1   }
2111 >>
2112
2113 % reduced space between staves
2114 \new PianoStaff \with {
2115   % this is the nested declaration
2116   \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7
2117 } <<
2118   \new Staff { \clef treble c''1 }
2119   \new Staff { \clef bass   c1   }
2120 >>
2121 @end lilypond
2122
2123 Wenn man diese Art des geschachtelten Aufrufs einsetzt, wird der
2124 spezifische Schlüssel (@code{basic-distance} im obigen Beispiel) verändert,
2125 ohne dass sich andere Wert für die gleiche Eigenschaft ändern würden.
2126
2127 Nun sollen die Systeme so dicht wie möglich gesetzt werden, ohne das
2128 Überlappungen vorkommen.  Die einfachste Möglichkeit, das zu tun, wäre
2129 es, alle vier Wert auf 0 zu setzen.  Man muss jedoch nicht vier
2130 Werte definieren, sondern die Eigenschaft
2131 kann mit einem Aufruf als Aliste vollständig verändert werden:
2132
2133 @lilypond[quote,verbatim]
2134 \new PianoStaff \with {
2135   \override StaffGrouper #'staff-staff-spacing =
2136     #'((basic-distance . 0)
2137        (minimum-distance . 0)
2138        (padding . 0)
2139        (stretchability . 0))
2140 } <<
2141   \new Staff { \clef treble c''1 }
2142   \new Staff { \clef bass   c1   }
2143 >>
2144 @end lilypond
2145
2146 Dabei sollte beachtet werden, dass alle Schlüssel, die bei dieser
2147 Weise des Aufrufs nicht explizit aufgelistet sind, auf den Standardwert
2148 gesetzt werden, den sie hätten, wenn sie nicht definiert werden.
2149 Im Falle von @code{staff-staff-spacing} würden alle nicht genannten
2150 Schlüsselwerte auf 0 gesetzt (außer @code{stretchability}, welche immer
2151 den Wert von @code{space} hat, wenn sie nicht definiert ist).  Somit sind
2152 folgende Aufrufe äquivalent:
2153
2154 @example
2155 \override StaffGrouper #'staff-staff-spacing =
2156   #'((basic-distance . 7))
2157
2158 \override StaffGrouper #'staff-staff-spacing =
2159   #'((basic-distance . 7)
2160      (minimum-distance . 0)
2161      (padding . 0)
2162      (stretchability . 7))
2163 @end example
2164
2165 Eine möglicherweise ungewollte Konsequenz hiervon ist, dass alle
2166 Standardwerte, die etwa in einer Initialisierungsdatei
2167 zu Beginn einer LilyPond-Partitur geladen werden, nach dem Aufruf
2168 rückgängig gemacht werden.  Im obigen Beispiel werden die
2169 initialisierten Standardwerte für @code{padding} und @code{minimum-distance}
2170 (definiert in @file{scm/define-grobs.scm}) auf den Standard zurückgesetzt,
2171 den sie uninitialisiert hätten (0 in beiden Fällen).  Wenn eine Eigenschaft oder
2172 Variable in Form einer Aliste (jeder Größe) definiert wird, werden
2173 immer alle Schlüsselwerte auf den uninitialisierten Zustand zurückgesetzt.
2174 Es ist also sicherer, geschachtelte Aufrufe zu benutzen, wenn man nicht
2175 bewusst alle Werte zurücksetzen will.
2176
2177 @warning{Geschachtelte Aufrufe funktionieren nicht mit
2178 Kontexteigenschaften (wie etwa @code{beamExceptions}, @code{keySignature},
2179 @code{timeSignatureSettings}, usw.)  Diese Eigenschaften können
2180 nur verändert werden, indem man sie vollständig als Alisten umdefiniert.}
2181
2182
2183 @node Nützliche Konzepte und Eigenschaften
2184 @section Nützliche Konzepte und Eigenschaften
2185 @translationof Useful concepts and properties
2186
2187 @menu
2188 * Eingabe-Modi::
2189 * Richtung und Platzierung::
2190 * Abstände und Maße::
2191 * Eigenschaften des Staff-Symbols::
2192 * Strecker::
2193 * Sichtbarkeit von Objekten::
2194 * Linienstile::
2195 * Drehen von Objekten::
2196 @end menu
2197
2198
2199 @node Eingabe-Modi
2200 @subsection Eingabe-Modi
2201 @translationof Input modes
2202
2203 Die Art, wie die Notation einer Eingabedatei interpretiert
2204 wird, hängt vom aktuellen Eingabemodus ab.
2205
2206 @strong{Chord (Akkordmodus)}
2207
2208 Man erreicht ihn durch den Befehl @code{\chordmode}.  Hierdurch
2209 wird die Eingabe entsprechend der Syntax der Akkordnotation
2210 interpretiert, siehe @ref{Notation von Akkorden}.  Akkorde werden als
2211 Noten auf einem System dargestellt.
2212
2213 Der Akkordmodus wird auch mit dem Befehl @code{\chords} initiiert.
2214 Dadurch wird gleichzeitig ein neuer @code{ChordNames}-Kontext
2215 erstellt, die Eingabe entsprechend der Syntax der Akkordnotation
2216 interpretiert und als Akkordbezeichnungen in einem
2217 @code{ChordNames}-Kontext dargestellt. Siehe @ref{Akkordbezeichnungen drucken}.
2218
2219 @strong{Drum (Schlagzeugmodus)}
2220
2221 Man erreicht ihn mit dem Befehl @code{\drummode}.  Die Eingabe
2222 wird entsprechend der Syntax der Schlagzeugnotation interpretiert,
2223 siehe @ref{Grundlagen der Schlagzeugnotation}.
2224
2225 Der Schlagzeugmodus wird auch mit dem Befehl @code{\drums} aktiviert.
2226 Dadurch wird gleichzeitig ein neuer @code{DrumStaff}-Kontext
2227 erstellt, die Eingabe entsprechend der Syntax der Schlagzeugnotation
2228 interpretiert und als Schlagzeugsymbole auf einem Schlagzeugsystem
2229 dargestellt.  Siehe @ref{Grundlagen der Schlagzeugnotation}.
2230
2231 @strong{Figure (Ziffernmodus)}
2232
2233 Man erreicht ihn mit dem Befehl @code{\figuremode}.  Die Eingabe
2234 wird entsprechend der Syntax für Generalbass interpretiert, siehe
2235 @ref{Eingabe des Generalbass'}.
2236
2237 Der Ziffernmodus wird auch mit dem Befehl @code{\figures} aktiviert.
2238 Dadurch wird gleichzeitig ein neuer @code{FiguredBass}-Kontext
2239 erstellt, die Eingabe entsprechend der Syntax für Generalbass
2240 interpretiert und als Generalbassziffern im @code{FiguredBass}-Kontext
2241 dargestellt.  Siehe @ref{Grundlagen des Bezifferten Basses}.
2242
2243 @strong{Fret/tab (Griffsymbol-/Tabulaturmodus)}
2244
2245 Es gibt keinen besonderen Eingabemodus für Griffsymbole und
2246 Tabulaturen.
2247
2248 Um Tabulaturen zu erstellen, werden Noten oder Akkorde im
2249 Notenmodus notiert und dann in einem @code{TabStaff}-Kontext
2250 interpretiert, siehe
2251 @ref{Standardtabulaturen}.
2252
2253 Um Griffsymbole oberhalb eines Notensystems zu erstellen, gibt
2254 es zwei Möglichkeiten.  Man kann den @code{FretBoards}-Kontext
2255 einsetzen (siehe @ref{Automatische Bund-Diagramme}) oder sie können
2256 als Beschriftung über den Noten eingefügt werden, indem man
2257 den @code{\fret-diagram}-Befehl einsetzt (siehe
2258 @ref{Bund-Diagramm-Beschriftung}).
2259
2260 @strong{Lyrics (Gesangstextmodus)}
2261
2262 Man erreicht ihn mit dem Befehl @code{\lyricmode}.  Die Eingabe
2263 wird entsprechend der Syntax für Silben eines Gesangstextes
2264 interpretiert, wobei optional Dauern und verknüpfte
2265 Gesangstextveränderer möglich  sind, siehe @ref{Notation von Gesang}.
2266
2267 Der Gesangstextmodus wird auch durch den Befehl @code{\addlyrics}
2268 aktiviert.  Dadurch wird auch ein neuer @code{Lyrics}-Kontext
2269 erstellt und ein impliziter @code{\lyricsto}-Befehl, der den
2270 nachfolgenden Gesangstext mit der vorhergehenden Musik verknüpft.
2271
2272 @strong{Markup (Textbeschriftungsmodus)}
2273
2274 Man erreicht ihn mit dem Befehl @code{\markup}.  Die Eingabe wird
2275 entsprechend der Syntax für Textbeschriftung interpretiert, siehe
2276 @ref{Textbeschriftungsbefehle}.
2277
2278 @c silly work-around for texinfo broken-ness
2279 @c (@strong{Note...} causes a spurious cross-reference in Info)
2280 @b{Note (Notenmodus)}
2281
2282 Das ist der Standardmodus.  Er kann auch mit dem Befehl
2283 @code{\notemode} gefordert werden.  Die Eingabe wird als Tonhöhen,
2284 Dauern, Beschriftung usw. interpretiert und als musikalische
2285 Notation auf einem Notensystem gesetzt.
2286
2287 Es ist normalerweise nicht nötig, den Notenmodus extra anzugeben,
2288 aber es kann in bestimmten Situationen durchaus nützlich sein,
2289 etwa wenn man in einem Gesangstext-, Akkord- oder einem anderen
2290 Modus arbeitet aber ein Zeichen braucht, das nur im Notenmodus
2291 benutzt werden kann.
2292
2293 Um etwa Dynamikzeichen vor die Nummern von unterschiedlichen
2294 Strophen zu setzen, muss man den Notenmodus betreten:
2295
2296 @lilypond[verbatim,relative=2,quote]
2297 { c4 c4 c4 c4 }
2298 \addlyrics {
2299   \notemode{ \set stanza = \markup{ \dynamic f 1. } }
2300   To be sung loudly
2301 }
2302 \addlyrics {
2303   \notemode{ \set stanza = \markup{ \dynamic p 2. } }
2304   To be sung quietly
2305 }
2306 @end lilypond
2307
2308
2309 @node Richtung und Platzierung
2310 @subsection Richtung und Platzierung
2311 @translationof Direction and placement
2312
2313 Die Platzierung und Richtung von Objekten ist im Notensatz oft durch eine
2314 enge Auswahl begrenzt: Notenhälse beispielsweise können entweder nach
2315 oben oder nach unten zeigen, Gesangstext, Dynamikzeichen und andere
2316 Ausdrucksbezeichnungen können über oder unter dem System gesetzt werden,
2317 Text kann rechts, links oder mittig ausgerichtet werden usw.  Die meisten
2318 dieser Entscheidungen können LilyPond direkt überlassen werden; in
2319 einigen Fällen kann es allerdings nötig sein, eine bestimmte Richtung
2320 oder eine Position zu erzwingen.
2321
2322 @strong{Richtungseinstellung von Artikulationszeichen}
2323
2324 Standardmäßig sind bestimmte Objekte immer nach oben oder unten ausgerichtet,
2325 wie Dynamikzeichen oder Fermaten, während andere Objekte zwischen
2326 oben und unten wechseln, was vor allem von der Richtung der Notenhälse
2327 abhängt und etwa Bögen und Akzente betrifft.
2328
2329 Die Standardeinstellungen können verändert werden, indem dem
2330 Artikulationszeichen ein Ausrichtungsmarkierer vorangeht.  Drei
2331 derartige Ausrichtungsmarkierer sind vorhanden:  @code{^} (bedeutet @qq{nach oben}), @code{_}
2332 (bedeutet @qq{nach unten}) bzw. @code{-} (bedeutet @qq{Standardrichtung}
2333 benutzen) normalerweise weggelassen werden.  In diesem Fall wird
2334 @code{-} angenommen.  Eine Richtungsanweisung ist jedoch
2335 @strong{immer} erforderlich vor
2336
2337 @itemize
2338 @item @code{\tweak}-Befehlen
2339 @item @code{\markup}-(Textbeschriftungs-)Befehlen
2340 @item @code{\tag}-Befehlen
2341 @item Textbeschriftungen in reiner Textform, wie etwa @code{-"string"}
2342 @item Fingersatzanweisungen: @w{@code{-1}}
2343 @item Abkürzungen von Artikulationen, wie @w{@code{-.}}, @w{@code{->}}, @w{@code{--}}
2344 @end itemize
2345
2346 Ausrichtungsmarkierer haben nur eine Auswirkung auf die nächste Note:
2347
2348 @lilypond[verbatim,quote,relative=2]
2349 c2( c)
2350 c2_( c)
2351 c2( c)
2352 c2^( c)
2353 @end lilypond
2354
2355
2356 @strong{Die @code{direction}-(Richtungs-)Eigenschaft}
2357
2358 Die Position oder Richtung vieler Layoutobjekte wird von der
2359 @code{direction}-Eigenschaft kontrolliert.
2360
2361 Der Wert der @code{direction}-Eigenschaft kann auf den Wert
2362 @code{1} gesetzt werden, was gleichbedeutend mit @qq{nach oben}
2363 bzw. @qq{oberhalb} ist, oder auf den Wert @w{@code{-1}}, was
2364 @qq{nach unten} bzw. @qq{unterhalb} bedeutet.  Die Symbole
2365 @code{UP} und @code{DOWN} können anstelle von @code{1}
2366 und @w{@code{-1}} benutzt werden.  Die Standardausrichtung kann
2367 angegeben werden, indem @code{direction} auf den Wert
2368 @code{0} oder @code{CENTER} gesetzt wird.  In vielen Fällen
2369 bestehen auch vordefinierte Befehle, mit denen die Ausrichtung
2370 bestimmt werden kann.  Sie haben die Form
2371
2372 @noindent
2373 @code{\xxxUp}, @code{xxxDown}, @code{xxxNeutral}
2374
2375 @noindent
2376 wobei @code{xxxNeutral} bedeutet: @qq{Benutze die
2377 Standardausrichtung}.  Siehe auch
2378 @rlearning{within-staff (Objekte innerhalb des Notensystems)}.
2379
2380 In wenigen Fällen, von denen Arpeggio das einzige häufiger
2381 vorkommende Beispiel darstellt, entscheidet der Wert von
2382 @code{direction}, ob das Objekt auf der rechten oder linken
2383 Seite das Ursprungsobjektes ausgegeben wird.  In diesem Fall
2384 bedeutet @w{@code{-1}} oder @code{LEFT} @qq{auf der linken Seite}
2385 und @code{1} oder @code{RIGHT} @qq{auf der rechten Seite}.  @code{0}
2386 oder @code{CENTER} bedeutet @qq{benutze Standardausrichtung}.
2387
2388 @c ignore left out
2389 Diese Ausrichtungsanzeigen wirken sich auf alle Noten aus, bis sie
2390 rückgängig gemacht werden:
2391
2392 @lilypond[verbatim,quote,relative=2]
2393 c2( c)
2394 \slurDown
2395 c2( c)
2396 c2( c)
2397 \slurNeutral
2398 c2( c)
2399 @end lilypond
2400
2401 In polyphoner Musik ist es normalerweise besser, eine explizite
2402 Stimme (@code{voice} zu erstellen, als die Richtung eines Objektes zu
2403 ändern.  Zu mehr Information siehe @ref{Mehrere Stimmen}.
2404
2405 @seealso
2406 Handbuch zum Lernen:
2407 @rlearning{within-staff (Objekte innerhalb des Notensystems)}.
2408
2409 Notationsreferenz:
2410 @ref{Mehrere Stimmen}.
2411
2412
2413 @node Abstände und Maße
2414 @subsection Abstände und Maße
2415 @translationof Distances and measurements
2416
2417 @cindex Abstände, absolut
2418 @cindex Abstände, skaliert
2419
2420 @funindex \mm
2421 @funindex \cm
2422 @funindex \in
2423 @funindex \pt
2424
2425 In LilyPond gibt es zwei Arten von Abständen: absolute und
2426 skalierte.
2427
2428 Absolute Abstände werden benutzt, um Ränder, Einzüge und andere
2429 Einzelheiten des Seitenlayouts zu bestimmen.  Sie sind in den
2430 Standardeinstellungen in Millimetern definiert.  Abstände können
2431 auch in anderen Einheiten definiert werden, indem folgende
2432 Befehle auf die Zahl folgen: @code{\mm}, @code{\cm},
2433 @code{\in}@tie{}(Zoll=2,54 cm) und @code{\pt}@tie{}(Punkte, 1/72.27
2434 eines Zolls).  Abstände des Seitenlayouts können auch in
2435 skalierbaren Einheiten (siehe folgenden Absatz) definiert
2436 werden, indem man den Befehl @code{\staff-space} an die
2437 Zahl hängt.  Das Seitenlayout ist genauer beschrieben in
2438 @ref{Seitenlayout}.
2439
2440 Skalierbare Abstände werden immer in Einheiten von
2441 Notenlinienabständen angegeben, oder seltener in halben
2442 Notenlinienabständen.  Ein Notenlinienabstand ist der
2443 Abstand zwischen zwei benachbarten Linien eines Notensystems.
2444 Der Standardwert dieser Einheit kann global geändert werden,
2445 indem man die globale Notensystemgröße ändert, oder sie
2446 kann lokal geändert werden, indem man die Eigenschaft
2447 @code{staff-space} des @code{StaffSymbol}-Objekts mit
2448 @code{\override} verändert.  Skalierte Abstände verändern
2449 sich automatisch entsprechend, wenn der Notenlinienabstand
2450 entweder global oder lokal verändert wird, aber Schriftarten
2451 verändern ihre Größe nur, wenn der Notenlinienabstand
2452 global verändert wird.  Mit dem globalen Notenlinienabstand
2453 kann man also auf einfach Art und Weise die gesamte Größe
2454 einer Partitur verändern.  Zu Methoden, wie der globale
2455 Notenlinienabstand verändert werden kann, siehe
2456 @ref{Die Notensystemgröße einstellen}.
2457
2458 @funindex magstep
2459
2460 Wenn nur eine ein Abschnitt einer Partitur in einer anderen
2461 Größe erscheinen soll, etwa ein Ossia-Abschnitt in einer
2462 Fußnote, kann die globale Notensystemgröße nicht einfach
2463 geändert werden, weil sich diese Änderung auf die gesamte Partitur
2464 auswirken würde.  In derartigen Fällen muss die Größenänderung
2465 vorgenommen werden, indem man sowohl die
2466 @code{staff-space}-Eigenschaft von @code{StaffSymbol} als auch
2467 die Größe der Schriftarten verändert.  Eine Scheme-Funktion,
2468 @code{magstep}, kann von einer Schriftartveränderung zu der
2469 entsprechenden Veränderung in @code{staff-space} (Notenlinienabständen)
2470 konvertieren.  Zu einer Erklärung und Beispielen zu ihrer
2471 Verwendung siehe @rlearning{Länge und Dicke von Objekten}.
2472
2473
2474 @seealso
2475 Handbuch zum Lernen:
2476 @rlearning{Länge und Dicke von Objekten}.
2477
2478 Notationsreferenz:
2479 @ref{Seitenlayout},
2480 @ref{Die Notensystemgröße einstellen}.
2481
2482
2483 @node Eigenschaften des Staff-Symbols
2484 @subsection Eigenschaften des Staff-Symbols
2485 @translationof Staff symbol properties
2486
2487 @cindex Anpassen von staff symbol
2488 @cindex Notensystem, anpassen
2489 @cindex Veränderung des Notensystems
2490
2491 Die vertikale Position der Notenlinien und die Anzahl der
2492 Notenlinien kann gleichzeitig definiert werden.  Wie das
2493 folgende Beispiel zeigt, werden Notenpositionen nicht
2494 durch die Position der Notenlinien verändert:
2495
2496 @warning{Die @code{'line-positions}-Eigenschaft
2497 verändert die @code{'line-count}-Eigenschaft.  Die
2498 Anzahl der Notenlinien wird implizit definiert durch
2499 die Anzahl der Elemente in der Liste der Werte von
2500 @code{'line-positions}.}
2501
2502 @lilypond[verbatim,quote,relative=1]
2503 \new Staff \with {
2504   \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7)
2505 }
2506 { a4 e' f b | d1 }
2507 @end lilypond
2508
2509 Die Breite eines Notensystems kann verändert werden.  Die Einheit
2510 ist in Notenlinienabständen.  Die Abstände von Objekten
2511 in diesem Notensystem wird durch diese Einstellung nicht
2512 beeinflusst.
2513
2514 @lilypond[verbatim,quote,relative=1]
2515 \new Staff \with {
2516   \override StaffSymbol #'width = #23
2517 }
2518 { a4 e' f b | d1 }
2519 @end lilypond
2520
2521
2522 @node Strecker
2523 @subsection Strecker
2524 @translationof Spanners
2525
2526 Viele Objekte der Musiknotation erstrecken sich über mehrere
2527 Objekte oder gar mehrere Takte.  Beispiele hierfür sind etwa
2528 Bögen, Balken, Triolenklammern, Volta-Klamern in Wiederholungen,
2529 Crescendo, Triller und Glissando.  Derartige Objekte werden
2530 als @qq{Strecker} bezeichnet.  Sie haben spezielle Eigenschaften,
2531 mit welchen ihre Eigenschaften und ihr Verhalten beeinflusst
2532 werden kann.  Einige dieser Eigenschaften gelten für alle
2533 Strecker, andere beschränken sich auf eine Untergruppe der
2534 Strecker.
2535
2536 Alle Strecker unterstützen das @code{spanner-interface}
2537 (Strecker-Schnittstelle).
2538 Ein paar, insbesondere die, die zwischen zwei Objekten eine
2539 gerade Linie ziehen, unterstützen auch das
2540 @code{line-spanner-interface} (Strecker-Linienschnittstelle).
2541
2542
2543 @unnumberedsubsubsec Das @code{spanner-interface} benutzen
2544
2545 Diese Schnittstelle stellt zwei Eigenschaften zur Verfügung,
2546 die sich auf mehrere Strecker auswirken:
2547
2548 @strong{@i{Die @code{minimum-length}-Eigenschaft}}
2549
2550 Die Mindestlänge eines Streckers wird durch die
2551 @code{minimum-length}-Eigenschaft definiert.  Wenn diese
2552 Eigenschaft vergrößert wird, muss in den meisten Fällen
2553 auch der Abstand der Noten zwischen den zwei Endpunkten
2554 eines Streckers verändert werden.  Eine Veränderung dieser
2555 Eigenschaft hat jedoch auf die meisten Strecker keine Auswirkung,
2556 weil ihre Länge aus anderen Berechnungen hervorgeht.
2557 Einige Beispiele, wo die Eigenschaft benutzt wird, sind
2558 unten dargestellt.
2559
2560 @lilypond[verbatim,quote,relative=2]
2561 a~a
2562 a
2563 % increase the length of the tie
2564 -\tweak #'minimum-length #5
2565 ~a
2566 @end lilypond
2567
2568 @lilypond[verbatim,quote,relative=2]
2569 a1
2570 \compressFullBarRests
2571 R1*23
2572 % increase the length of the rest bar
2573 \once \override MultiMeasureRest #'minimum-length = #20
2574 R1*23
2575 a1
2576 @end lilypond
2577
2578 @lilypond[verbatim,quote,relative=2]
2579 a \< a a a \!
2580 % increase the length of the hairpin
2581 \override Hairpin #'minimum-length = #20
2582 a \< a a a \!
2583 @end lilypond
2584
2585 Diese Veränderung kann auch eingesetzt werden, um die Länge
2586 von Legato- und Phrasierungsbögen zu verändern:
2587
2588 @lilypond[verbatim,quote,relative=2]
2589 a( a)
2590 a
2591 -\tweak #'minimum-length #5
2592 ( a)
2593
2594 a\( a\)
2595 a
2596 -\tweak #'minimum-length #5
2597 \( a\)
2598 @end lilypond
2599
2600 Im Falle einiger Layoutobjekte wirkt sich die
2601 @code{minimum-length}-Eigenschaft erst dann aus, wenn die
2602 @code{set-spacing-rods}-Prozedur explizit aufgerufen wird.
2603 Um das zu tun, sollte die @code{springs-and-rods}-Eigenschaft
2604 auf @code{ly:spanner::set-spacing-rods} gesetzt werden.  Die
2605 Mindestlänge eines Glissandos etwa wird erst aktiv, wenn
2606 die @code{springs-and-rods}-Eigenschaft gesetzt ist:
2607
2608 @lilypond[verbatim,quote,relative=1]
2609 % default
2610 e \glissando c'
2611
2612 % not effective alone
2613 \once \override Glissando #'minimum-length = #20
2614 e, \glissando c'
2615
2616 % effective only when both overrides are present
2617 \once \override Glissando #'minimum-length = #20
2618 \once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
2619 e, \glissando c'
2620 @end lilypond
2621
2622 Das gilt auch für das @code{Beam}-(Balken-)Objekt:
2623
2624 @lilypond[verbatim,quote,relative=1]
2625 % not effective alone
2626 \once \override Beam #'minimum-length = #20
2627 e8 e e e
2628
2629 % effective only when both overrides are present
2630 \once \override Beam #'minimum-length = #20
2631 \once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods
2632 e8 e e e
2633 @end lilypond
2634
2635 @strong{@i{Die @code{to-barline}-Eigenschaft}}
2636
2637 Die zweite nützliche Eigenschaft des @code{spanner-interface} ist
2638 @code{to-barline} (bis zum Taktstrich).  In den Standardeinstellungen
2639 ist diese Eigenschaft auf @qq{wahr} gesetzt, was bedeutet, dass
2640 ein Strecker, etwa eine Crescendo-Klammer, der an der ersten Noten
2641 eines Taktes beendet wird, sich nur bis zum vorhergehenden
2642 Taktstrich erstreckt.  Wenn die Eigenschaft auf @qq{falsch} gesetzt
2643 wird, erstrecken sich die Strecker entsprechend über die Taktlinie
2644 hinüber und enden erst an der entsprechenden Note:
2645
2646 @lilypond[verbatim,quote,relative=2]
2647 a \< a a a a \! a a a \break
2648 \override Hairpin #'to-barline = ##f
2649 a \< a a a a \! a a a
2650 @end lilypond
2651
2652 Diese Eigenschaft wirkt sich nicht auf alle Strecker aus.  Im Falle
2653 von Legato- oder Phrasierungsbögen etwa hat diese Eigenschaft
2654 keinen Effekt.  Das gilt auch für alle anderen Streckern, bei
2655 denen es nicht sinnvoll währe, sie an einer Taktlinie abzuschließen.
2656
2657
2658 @unnumberedsubsubsec Das @code{line-spanner-interface} benutzen
2659
2660 Objekte, die das @code{line-spanner-interface} unterstützen,
2661 sind unter Anderem:
2662
2663 @itemize
2664 @item @code{DynamicTextSpanner}
2665 @item @code{Glissando}
2666 @item @code{TextSpanner}
2667 @item @code{TrillSpanner}
2668 @item @code{VoiceFollower}
2669 @end itemize
2670
2671 Die Routine, die das Setzen der Matrizen dieser Strecker
2672 hervorruft, ist @code{ly:line-interface::print}.  Diese
2673 Routine bestimmt die exakte Position der zwei Endpunkte
2674 und zeichnet eine Linie zwischen ihnen, in dem erforderlichen
2675 Stil.  Die Position der zwei Endpunkte des Streckers wird
2676 in Echtzeit errechnet, aber es ist möglich, ihre
2677 Y-Koordinaten zu verändern.  Die Eigenschaften, die angegeben
2678 werden müssen, sind zwei Ebenen in der Objekthierarchie
2679 tiefer angeordnet, aber die Syntax des @code{\override}-Befehls
2680 ist ziemlich einfach:
2681
2682 @lilypond[relative=2,quote,verbatim]
2683 e2 \glissando b
2684 \once \override Glissando #'(bound-details left Y) = #3
2685 \once \override Glissando #'(bound-details right Y) = #-2
2686 e2 \glissando b
2687 @end lilypond
2688
2689 Die Einheiten für die @code{Y}-Eigenschaft werden in
2690 Notenlinienabständen angegeben, wobei die Mittellinie des
2691 Notensystems die Null darstellt.  Für das Glissando ist
2692 der Wert von @code{Y} am entsprechenden X-Koordinatenpunkt
2693 entsprechend dem Mittelpunkt des Notenkopfes, wenn die
2694 Linie bis in die Noten hinein weitergeführt werden würde.
2695
2696 Wenn @code{Y} nicht gesetzt wird, wird der Wert aus der
2697 vertikalen Position des entsprechenden Anknüpfpunkts des
2698 Streckers errechnet.
2699
2700 Im Fall eines Zeilenumbruchs werden die Werte der Endpunkte
2701 in den Unterlisten @code{left-broken} bzw. @code{right-broken}
2702 von @code{bound-details} abgelegt.  Zum Beispiel:
2703
2704 @lilypond[relative=2,ragged-right,verbatim,quote]
2705 \override Glissando #'breakable = ##t
2706 \override Glissando #'(bound-details right-broken Y) = #-3
2707 c1 \glissando \break
2708 f1
2709 @end lilypond
2710
2711 Eine Anzahl weitere Eigenschaft der @code{left}- und
2712 @code{right}-Unterlisten der @code{bound-details}-Eigenschaft
2713 kann auf gleiche Weise wie  @code{Y} verändert werden:
2714
2715 @table @code
2716 @item Y
2717 Hiermit wird der Y-Koordinationspunkt des Endpunktes in
2718 Notenlinienabständen vom Mittelpunkt des Notensystems
2719 ausgehend angegeben.  Der Endpunkt ist normalerweise
2720 der Mittelpunkt des Elternobjektes, sodass Glissandos
2721 vertikal auf den Mittelpunkt eines Notenkopfes weist.
2722
2723 Für horizontale Strecker, wie Textstrecker und Trillerstrecker
2724 ist sein Wert mit 0 definiert.
2725
2726 @item attach-dir
2727 Das entscheidet, wo die Linie auf der X-Achse beginnt und endet,
2728 relativ zum Elternobjekt.  Ein Wert @w{@code{-1}} (oder
2729 @code{LEFT}) lässt die Linie an der linken Seite der Noten
2730 beginnen/enden, mit der sie verknüpft ist.
2731
2732 @item X
2733 Das ist der absolute X-Koordinatenpunkt des Endpunktes.  Der
2734 Wert wird normalerweise in Echtzeit errechnet, und ihn zu
2735 verändern ist normalerweise nicht nützlich.
2736
2737 @item stencil
2738 Linienstrecker können Symbole am Ende oder zu Anfang des
2739 Streckers haben, die in dieser Untereigenschaft definiert
2740 werden.  Die Eigenschaft ist für interne Benutzung, es
2741 wird empfohlen, die Eigenschaft @code{text} zu benutzen.
2742
2743 @item text
2744 Das ist eine Textbeschriftung, die ausgewertet wird und die
2745 @code{stencil}-Eigenschaft überschreibt.  Sie wird eingesetzt,
2746 um @i{cresc.}, @i{tr} oder andere Texte an horizontale
2747 Strecker zu setzen.
2748
2749 @lilypond[quote,ragged-right,relative=2,verbatim]
2750 \override TextSpanner #'(bound-details left text)
2751    = \markup { \small \bold Slower }
2752 c2\startTextSpan b c a\stopTextSpan
2753 @end lilypond
2754
2755 @item stencil-align-dir-y
2756 @item stencil-offset
2757 Wenn keine dieser beiden Eigenschaften gesetzt wird, wird
2758 die Matrize (engl. stencil) einfach am Endpunkt des Streckers,
2759 auf seiner Mittellinie (wie durch @code{X} und @code{Y}
2760 definiert) zentriert, ausgegeben.  Wenn entweder
2761 @code{stencil-align-dir-y} oder @code{stencil-offset}
2762 gesetzt werden, wird das Symbol am Rand vertikal entsprechend
2763 des Endpunktes der Linie verschoben:
2764
2765 @lilypond[relative=1,quote,verbatim]
2766 \override TextSpanner
2767   #'(bound-details left stencil-align-dir-y) = #-2
2768 \override TextSpanner
2769   #'(bound-details right stencil-align-dir-y) = #UP
2770
2771 \override TextSpanner
2772   #'(bound-details left text) = #"ggg"
2773 \override TextSpanner
2774   #'(bound-details right text) = #"hhh"
2775 c4^\startTextSpan c c c \stopTextSpan
2776 @end lilypond
2777
2778 Dabei sollte beachtet werden, dass negative Werte das Objekt
2779 nach @emph{oben} verschieben, anders als man erwarten könnte,
2780 weil der Wert @w{@code{-1}} oder @code{DOWN} bedeutet, dass
2781 die @emph{Unterkante} des Textes mit der Streckerlinie
2782 ausgerichtet wird.  Ein Wert @code{1} oder @code{UP}
2783 richtet die Oberkante des Textes mit der Streckerlinie aus.
2784
2785 @item arrow
2786 Wenn diese Untereigenschaft auf @code{#t} gesetzt wird,
2787 wird ein Pfeilkopf am Ende der Linie erstellt.
2788
2789 @item padding
2790 Diese Eigenschaft kontrolliert den Abstand zwischen
2791 dem angegebenen Endpunkt der Linie und dem wirklichen Ende.
2792 Ohne Füllung (engl. padding) würde ein Glissando in der
2793 Mitte eines Notenkopfes beginnen und enden.
2794
2795 @end table
2796
2797 Die musikalische Funktion @code{\endSpanners} beschließt
2798 den Strecker, der an der direkt folgenden Note beginnt,
2799 bevor er eigentlich zu ende wäre.  Er wird exakt nach
2800 einer Note beendet, oder am nächsten Taktstrich, wenn
2801 @code{to-barline} auf wahr gesetzt ist und eine Taktlinie
2802 vor der nächsten Note erscheint.
2803
2804 @lilypond[verbatim,quote,ragged-right,relative=2]
2805 \endSpanners
2806 c2 \startTextSpan c2 c2
2807 \endSpanners
2808 c2 \< c2 c2
2809 @end lilypond
2810
2811 Wenn man @code{\endSpanners} benutzt, ist es nicht
2812 nötig, den Befehl \startTextSpan mit \stopTextSpan
2813 zu beenden, und es ist auch nicht nötig, Crescendo-Klammern
2814 mit @code{\!} zu beenden.
2815
2816
2817 @seealso
2818 Referenz der Interna:
2819 @rinternals{TextSpanner},
2820 @rinternals{Glissando},
2821 @rinternals{VoiceFollower},
2822 @rinternals{TrillSpanner},
2823 @rinternals{line-spanner-interface}.
2824
2825
2826 @node Sichtbarkeit von Objekten
2827 @subsection Sichtbarkeit von Objekten
2828 @translationof Visibility of objects
2829
2830 @cindex Objekte, Sichtbarkeit
2831 @cindex Grobs, Sichtbarkeit
2832 @cindex Sichtbarkeit von Objekten
2833
2834 Die Sichtbarkeit von Layout-Objekten kann auf vier Arten
2835 kontrolliert werden: Ihre Matrizen (engl stencil) können
2836 entfernt werden, sie können unsichtbar gemacht werden,
2837 sie können weiß eingefärbt werden und ihre
2838 @code{break-visibility}-Eigenschaft kann verändert werden.
2839 Die ersten drei Möglichkeiten beziehen sich auf alle
2840 Layout-Objekte, die letzte nur auf einige wenige, nämlich
2841 die @emph{zerteilbaren} Objekte.  Das Handbuch zum Lernen
2842 führt in alle vier Möglichkeiten ein, siehe
2843 @rlearning{Sichtbarkeit und Farbe von Objekten}.
2844
2845 Es gibt auch einige weitere Techniken, die sich nur auf
2846 bestimmte Layout-Objekte beziehen.  Sie werden im letzten
2847 Abschnitt behandelt.
2848
2849 @menu
2850 * Einen stencil entfernen::
2851 * Objekten unsichtbar machen::
2852 * Objekte weiß malen::
2853 * break-visibility (unsichtbar machen) benutzen::
2854 * Besonderheiten::
2855 @end menu
2856
2857
2858 @node Einen stencil entfernen
2859 @unnumberedsubsubsec Einen @code{stencil} entfernen
2860 @translationof Removing the stencil
2861
2862 @cindex stencil, entfernen
2863 @cindex Matrize, entfernen
2864 @cindex Stempel (stencil), entfernen
2865 @cindex Entfernen eines Stencil
2866
2867 Jedes Layout-Objekt hat eine Matrizen-(stencil)-Eigenschaft.
2868 Sie ist normalerweise definiert als die Funktion, die das
2869 entsprechende Objekt zeichnet.  Wenn die Eigenschaft mit
2870 @code{\override} auf @code{#f} gesetzt wird, wird keine
2871 Funktion aufgerufen und also auch kein Objekt gezeichnet.
2872 Das Standardverhalten kann mit dem Befehl @code{\revert}
2873 wieder hergestellt werden.
2874
2875 @lilypond[quote,verbatim,relative=1]
2876 a1 a
2877 \override Score.BarLine #'stencil = ##f
2878 a a
2879 \revert Score.BarLine #'stencil
2880 a a a
2881 @end lilypond
2882
2883
2884 @node Objekten unsichtbar machen
2885 @unnumberedsubsubsec Objekten unsichtbar machen
2886 @translationof Making objects transparent
2887
2888 @cindex transparent, Objekte
2889 @cindex unsichtbar, Objekte
2890 @cindex durchsichtig, Objekte
2891
2892 Jedes Layout-Objekt hat eine Durchsichtigkeits-Eigenschaft
2893 (@code{'transparent}),
2894 die normalerweise auf den Wert @code{#f} gesetzt ist.  Wenn
2895 sie auf @code{#t} gesetzt wird, nimmt das Objekt immer noch
2896 den entsprechenden Platz ein, ist aber unsichtbar.
2897
2898 @lilypond[quote,verbatim,relative=2]
2899 a4 a
2900 \once \override NoteHead #'transparent = ##t
2901 a a
2902 @end lilypond
2903
2904
2905 @node Objekte weiß malen
2906 @unnumberedsubsubsec Objekte weiß malen
2907 @translationof Painting objects white
2908
2909 @cindex Objekte, einfärben
2910 @cindex Färben von Objekten
2911 @cindex Einfärben von Objekten
2912 @cindex Ebenen (layer)
2913 @cindex layer (Ebenen)
2914 @cindex Druckreihenfolge
2915 @cindex Objekte verändern
2916 @cindex verändern von Objekten
2917 @cindex Grobs, verändern
2918
2919 Alle Layout-Objekte haben eine Farb-(color)-Eigenschaft, die
2920 normalerweise schwarz (@code{black}) definiert ist.  Wenn
2921 sie nach weiß (@code{white}) verändert wird, kann man das
2922 Objekt nicht mehr vom weißen Hintergrund unterscheiden.
2923 Wenn das Objekt jedoch andere Objekte überschneidet, wird
2924 die Farbe der Überschneidungen von der Reihenfolge entschieden,
2925 in welcher die Objekte gesetzt werden.  Es kann also vorkommen,
2926 dass man die Umrisse des weißen Objektes erahnen kann, wie
2927 in diesem Beispiel:
2928
2929 @lilypond[quote,verbatim,relative=2]
2930 \override Staff.Clef #'color = #white
2931 a1
2932 @end lilypond
2933
2934 Das kann man vermeiden, indem man die Satzreihenfolge der Objekte
2935 verändert.  Alle Layout-Objekte haben eine @code{layer}-Eigenschaft,
2936 die auf eine ganze Zahl gesetzt sein muss.  Objekte mit der
2937 niedrigsten Zahl in der @code{layer}-Eigenschaft werden zuerst
2938 gesetzt, dann die nächsten Objekte in ansteigender Ordnung.  Objekte
2939 mit höheren Werten überschneiden also Objekte mit niedrigeren
2940 Werten.  Die meisten Objekte bekommen den Wert @code{1} zugewiesen,
2941 einige wenige Objekte, unter die auch @code{StaffSymbol} (die
2942 Notenlinien) gehört, jedoch den Wert @code{0}.  Die Reihenfolge,
2943 in der Objekte mit demselben Wert gesetzt werden, ist nicht
2944 definiert.
2945
2946 Im oberen Beispiel wird der weiße Schlüssel, der einen Wert von
2947 @code{1} für @code{layer} hat, nach den Notenlinien gesetzt
2948 (die einen Wert von @code{0} für @code{layer} haben) und
2949 überschneidet sie also.  Um das zu ändern, muss dem @code{Clef}-Objekt
2950 (Notenschlüssel) ein niedrigerer Wert, etwa @w{@code{-1}}, gegeben
2951 werden, sodass es früher gesetzt wird:
2952
2953 @lilypond[quote,verbatim,relative=2]
2954 \override Staff.Clef #'color = #white
2955 \override Staff.Clef #'layer = #-1
2956 a1
2957 @end lilypond
2958
2959
2960 @node break-visibility (unsichtbar machen) benutzen
2961 @unnumberedsubsubsec @code{break-visibility} (unsichtbar machen) benutzen
2962 @translationof Using break-visibility
2963
2964 @funindex break-visibility
2965
2966 @cindex break-visibility
2967
2968 Die meisten Layout-Objekte werden nur einmal gesetzt, aber
2969 einige, wie Taktstriche, Schlüssel, Taktartbezeichnung und
2970 Tonartvorzeichen, müssen mehrmals gesetzt werden, wenn
2971 die Zeile gewechselt wird: einmal am Ende des oberen Systems
2972 und ein zweites Mal zu Beginn des nächsten Systems.
2973 Derartige Objekte werden als @emph{trennbar} bezeichnet
2974 und haben eine Eigenschaft, die @code{break-visibility}-Eigenschaft,
2975 mit der ihre Sichtbarkeit an allen drei Positionen, an denen
2976 sie auftreten können, kontrolliert werden kann: zu Beginn
2977 einer Zeile, innerhalb einer Zeile, wenn sie verändert werden,
2978 und am Ende einer Zeile, wenn die Änderung hier stattfindet.
2979
2980 Die Taktart wird beispielsweise standardmäßig nur zu Beginn des
2981 ersten Systems gesetzt, aber an anderen Stellen nur, wenn sie
2982 sich ändert.  Wenn diese Änderung am Ende eines Systems auftritt,
2983 wird die neue Taktart am Ende des aktuellen Systems als auch
2984 zu Beginn des nächsten Systems gesetzt.
2985
2986 Dieses Verhalten wird von der @code{break-visibility}-Eigenschaft
2987 kontrolliert, die erklärt wird in
2988 @c Leave this ref on a newline - formats incorrectly otherwise -td
2989 @rlearning{Sichtbarkeit und Farbe von Objekten}.  Die Eigenschaft
2990 braucht einen Vektor von drei Booleschen Werten, die in ihrer
2991 Reihenfolge bestimmte, ob das Objekt a) zu Ende der Zeile,
2992 b) innerhalb einer Zeile oder c) zu Beginn einer Zeile gesetzt
2993 wird.  Oder, genauer gesagt, vor einem Zeilenumbruch, an Stellen,
2994 wo kein Zeilenumbruch auftritt oder nach einem Zeilenumbruch.
2995
2996 Die acht möglichen Kombinationen können auch durch vordefinierte
2997 Funktionen bestimmt werden, welche in der Datei @file{scm/output-lib.scm}
2998 definiert sind.  Die letzten drei Spalten der folgenden Tabelle
2999 zeigen an, ob das Layout-Objekt an einer bestimmten Position
3000 sichtbar sein wird oder nicht:
3001
3002 @multitable {@code{begin-of-line-invisible}} {@code{'#(#t #t #t)}} {ja} {ja} {ja}
3003 @headitem Funktion                   @tab Vektor                  @tab Vor @tab kein    @tab Nach
3004 @headitem Form                       @tab Form                    @tab Umbruch  @tab Umbruch    @tab Umbruch
3005
3006 @item @code{all-visible}             @tab @code{'#(#t #t #t)}     @tab ja    @tab ja      @tab ja
3007 @item @code{begin-of-line-visible}   @tab @code{'#(#f #f #t)}     @tab nein  @tab nein       @tab ja
3008 @item @code{center-visible}          @tab @code{'#(#f #t #f)}     @tab nein    @tab ja      @tab nein
3009 @item @code{end-of-line-visible}     @tab @code{'#(#t #f #f)}     @tab ja   @tab nein       @tab nein
3010 @item @code{begin-of-line-invisible} @tab @code{'#(#t #t #f)}     @tab ja    @tab ja       @tab nein
3011 @item @code{center-invisible}        @tab @code{'#(#t #f #t)}     @tab ja    @tab nein       @tab ja
3012 @item @code{end-of-line-invisible}   @tab @code{'#(#f #t #t)}     @tab nein     @tab ja     @tab ja
3013 @item @code{all-invisible}           @tab @code{'#(#f #f #f)}     @tab nein   @tab nein       @tab nein
3014 @end multitable
3015
3016 Die Standardeinstellungen von @code{break-visibility} hängen vom
3017 Layout-Objekt ab.  Die folgende Tabelle zeigt alle wichtigen Layout-Objekte,
3018 die mit @code{break-visibility} verändert werden können und die
3019 jeweiligen Standardeinstellungen der Eigenschaft:
3020
3021 @multitable @columnfractions .3 .3 .4
3022
3023 @headitem Layout-Objekt   @tab Normaler Kontext  @tab Standardeinstellung
3024
3025 @c omit Ambitus as it appears not to be affected by break-visibility -td
3026 @c @item @code{Ambitus}          @tab as specified   @tab @code{begin-of-line-visible}
3027 @item @code{BarLine} (Taktstrich)            @tab @code{Score}          @tab calculated
3028 @item @code{BarNumber} (Taktzahl)          @tab @code{Score}          @tab @code{begin-of-line-visible}
3029 @c omit the following item until it can be explained -td
3030 @c @item @code{BreakAlignGroup}  @tab @code{Score}          @tab calculated
3031 @item @code{BreathingSign} (Atemzeichen)       @tab @code{Voice}          @tab @code{begin-of-line-invisible}
3032 @item @code{Clef}  (Schlüssel)              @tab @code{Staff}          @tab @code{begin-of-line-visible}
3033 @item @code{Custos}              @tab @code{Staff}          @tab @code{end-of-line-visible}
3034 @item @code{DoublePercentRepeat} (Doppel-Prozent-Wiederholung @tab @code{Voice}          @tab @code{begin-of-line-invisible}
3035 @c omit KeyCancellation until it can be explained -td
3036 @c @item @code{KeyCancellation}  @tab ??             @tab @code{begin-of-line-invisible}
3037 @item @code{KeySignature} (Tonart)       @tab @code{Staff}          @tab @code{begin-of-line-visible}
3038 @c omit LeftEdge until it can be explained -td
3039 @c @item @code{LeftEdge}         @tab @code{Score}          @tab @code{center-invisible}
3040 @item @code{OctavateEight} (Oktavierungs-Acht)      @tab @code{Staff}          @tab @code{begin-of-line-visible}
3041 @item @code{RehearsalMark} (Übungszeichen)      @tab @code{Score}          @tab @code{end-of-line-invisible}
3042 @item @code{TimeSignature} (Taktart)      @tab @code{Staff}          @tab @code{all-visible}
3043
3044 @end multitable
3045
3046 Das Beispiel unten zeigt die Verwendung der Vektor-Form um die
3047 Sichtbarkeit von Taktlinien zu bestimmten:
3048
3049 @lilypond[quote,verbatim,relative=1,ragged-right]
3050 f4 g a b
3051 f4 g a b
3052 % Remove bar line at the end of the current line
3053 \once \override Score.BarLine #'break-visibility = #'#(#f #t #t)
3054 \break
3055 f4 g a b
3056 f4 g a b
3057 @end lilypond
3058
3059 Obwohl alle drei Bestandteile des Vektors, mit denen
3060 @code{break-visibility} definiert wird, vorhanden sein
3061 müssen, haben nicht alle eine Auswirkung auf jedes
3062 Layout-Objekt, und einige Kombinationen können sogar
3063 Fehler hervorrufen.  Es gelten die folgenden Einschränkungen:
3064
3065 @itemize @bullet
3066 @item
3067 Taktstriche können nicht zu Beginn einer Zeile gesetzt werden.
3068
3069 @item
3070 Eine Taktzahl kann nicht zu Beginn der ersten Zeile gesetzt
3071 werden, außer wenn er nicht 1 ist.
3072
3073 @item
3074 Schlüssel -- siehe unten.
3075
3076 @item
3077 Doppel-Prozent-Wiederholungen werden entweder alle ausgegeben
3078 oder alle unterdrückt.  Mit @code{begin-of-line-invisible} werden
3079 sie ausgegeben, mit @code{all-invisible} unterdrückt.
3080
3081 @item
3082 Tonart -- siehe unten.
3083
3084 @item
3085 Oktavierungs-Acht -- siehe unten.
3086
3087 @end itemize
3088
3089
3090 @node Besonderheiten
3091 @unnumberedsubsubsec Besonderheiten
3092 @translationof Special considerations
3093
3094 @strong{@emph{Sichtbarkeit nach expliziten Änderungen}}
3095
3096 @cindex Tonart, Sichtbarkeit nach expliziter Änderung
3097 @cindex Schlüssel, Sichtbarkeit nach expliziter Änderung
3098
3099 @funindex explicitKeySignatureVisibility
3100 @funindex explicitClefVisibility
3101
3102 Die @code{break-visibility}-Eigenschaft kontrolliert die Sichtbarkeit
3103 von Tonarten und Schlüsseländerungen nur zu Beginn einer Zeile,
3104 d.h. nach einem Zeilenumbruch.  Sie hat keinen Einfluss auf die
3105 Sichtbarkeit von Tonarten bzw. Schlüsseln, die nach einer
3106 expliziten Tonart- oder Schlüsseländerung in oder am Ende einer
3107 Zeile angezeigt werden.  Im nächsten Beispiel ist die Tonartangabe
3108 nach dem expliziten Wechsel zu B-Dur immer noch sichtbar, obwohl
3109 @code{all-invisible} eingesetzt wurde:
3110
3111 @lilypond[quote,verbatim,relative=1,ragged-right]
3112 \key g \major
3113 f4 g a b
3114 % Try to remove all key signatures
3115 \override Staff.KeySignature #'break-visibility = #all-invisible
3116 \key bes \major
3117 f4 g a b
3118 \break
3119 f4 g a b
3120 f4 g a b
3121 @end lilypond
3122
3123 Die Sichtbarkeit derartiger expliziter Tonart- und Schlüsseländerungen
3124 wird von den @code{explicitKeySignatureVisibility}- und
3125 @code{explicitClefVisibility}-Eigenschaften kontrolliert.  Sie
3126 entsprechen der @code{break-visibility}-Eigenschaft und beide
3127 brauchen drei Boolesche Werte bzw. die oben aufgelisteten vordefinierten
3128 Funktionen als Argument, genau wie @code{break-visibility}.
3129 Beide sind Eigenschaft des @code{Staff}-Kontextes, nicht der
3130 Layout-Objekte selber, weshalb sie mit dem Befehl @code{\set}
3131 eingesetzt werden.  Beide sind standardmäßig auf die Funktion
3132 @code{all-visible} gesetzt.  Diese Eigenschaften kontrollieren nur
3133 die Sichtbarkeit von Tonarten bzw. Schlüssel, die von expliziten
3134 Änderungen herrühren, und haben keinen Einfluss auf Tonarten und
3135 Schlüssel zu Beginn einer Zeile -- um diese zu beeinflussen, muss
3136 @code{break-visibility} benutzt werden.
3137
3138 @lilypond[quote,verbatim,relative=1,ragged-right]
3139 \key g \major
3140 f4 g a b
3141 \set Staff.explicitKeySignatureVisibility = #all-invisible
3142 \override Staff.KeySignature #'break-visibility = #all-invisible
3143 \key bes \major
3144 f4 g a b \break
3145 f4 g a b
3146 f4 g a b
3147 @end lilypond
3148
3149 @strong{@emph{Sichtbarkeit von erinnernden Versetzungszeichen}}
3150
3151 Um erinnernde Versetzungszeichen zu entfernen, die nach einer
3152 expliziten Tonartänderung auftreten, muss die @code{Staff}-Eigenschaft
3153 @code{printKeyCancellation} auf @code{#f} gesetzt werden:
3154
3155 @lilypond[quote,verbatim,relative=1,ragged-right]
3156 \key g \major
3157 f4 g a b
3158 \set Staff.explicitKeySignatureVisibility = #all-invisible
3159 \set Staff.printKeyCancellation = ##f
3160 \override Staff.KeySignature #'break-visibility = #all-invisible
3161 \key bes \major
3162 f4 g a b \break
3163 f4 g a b
3164 f4 g a b
3165 @end lilypond
3166
3167 Mit diesen Veränderungen bleiben nur noch die Versetzungszeichen
3168 vor den Noten übrig um den Wechsel der Tonart anzuzeigen.
3169
3170 @strong{@emph{Automatische Takte}}
3171
3172 @funindex automaticBars
3173
3174 @cindex Taktstriche, unterdrücken
3175
3176 Ein Sonderfall sind die automatischen Taktstriche, die mit der
3177 Eigenschaft @code{automaticBars} im @code{Score}-Kontext
3178 ausgeschaltet werden können.  Wenn sie auf @code{#f} gesetzt
3179 ist, werden Taktstrich nicht automatisch ausgegeben sondern
3180 müssen explizit mit dem @code{\bar}-Befehl eingegeben werden.
3181 Anders als bei dem @code{\cadenzaOn}-Befehl werden die Takte
3182 allerdings immer noch gezählt.  Takterstellung wird später
3183 wieder mit diesem Zahl aufgenommen, wenn die Eigenschaft
3184 wieder auf @code{#t} gesetzt wird.  Wenn sie den Wert @code{#f}
3185 hat, können Zeilenumbrüche nur an expliziten @code{\bar}-Befehlen
3186 auftreten.
3187
3188 @c TODO Add example
3189
3190 @strong{@emph{Oktavierte Schlüssel}}
3191
3192 @cindex oktavierte Schlüssel, Sichtbarkeit
3193 @cindex Sichtbarkeit von oktavierten Schlüsseln
3194 @cindex Schlüssel, Sichtbarkeit der Oktavierung
3195
3196 Das kleine Oktavierungssymbol von oktavierten Notenschlüsseln
3197 wird durch das @code{OctavateEight}-Layout-Objekt erstellt.
3198 Seine Sichtbarkeit wird automatisch vom @code{Clef}-Objekt
3199 geerbt, sodass Veränderungen von @code{break-visibility}
3200 des @code{OctavateEight}-Layout-Objekts nicht auch noch
3201 für unsichtbare Schlüssel zusätzlich vorgenommen werden müssen.
3202
3203 Bei expliziten Schlüsseländerungn kontrolliert die
3204 @code{explicitClefVisibility}-Eigenschaft wohl das
3205 Schlüsselsymbol als auch das damit verknüpfte Oktavierungssymbol.
3206
3207 @seealso
3208 Handbuch zum Lernen:
3209 @rlearning{Sichtbarkeit und Farbe von Objekten}.
3210
3211
3212 @node Linienstile
3213 @subsection Linienstile
3214 @translationof Line styles
3215
3216 Einige Aufführungsanweisungen (z. B. @i{rallentando} und
3217 @i{accelerando} oder Triller werden als Text gesetzt und
3218 möglicherweise über mehrere Takte mit Linien fortgeführt,
3219 die teilweise gestrichelt oder gewellt sind.
3220
3221 Alle benutzen die gleichen Routinen wie das Glissando,
3222 um Text und Linien zu produzieren, weshalb auch eine
3223 Veränderungen der Erscheinung auf gleiche Weise vonstatten
3224 geht.  Die Ausgabe erfolgt durch einen Strecker (engl. spanner), und
3225 die Routine, die ihn setzt, heißt @code{ly:line-interface::print}.
3226 Diese Routine bestimmt die exakte Position von zwei
3227 @i{Strecker-Punkten} und zeichnet eine Linie zwischen sie
3228 im gewünschten Linienstil.
3229
3230 Hier einige Beispiele, welche Linienstile möglich sind
3231 und wie sie verändert werden können:
3232
3233 @lilypond[relative=2,ragged-right,verbatim,quote]
3234 d2 \glissando d'2
3235 \once \override Glissando #'style = #'dashed-line
3236 d,2 \glissando d'2
3237 \override Glissando #'style = #'dotted-line
3238 d,2 \glissando d'2
3239 \override Glissando #'style = #'zigzag
3240 d,2 \glissando d'2
3241 \override Glissando #'style = #'trill
3242 d,2 \glissando d'2
3243 @end lilypond
3244
3245 Die Position der Endpunkte des Streckers werden in
3246 Realzeit für jedes graphische Objekt errechnet, aber
3247 es ist möglich, sie manuell vorzugeben:
3248
3249 @c TODO Complete
3250 @lilypond[relative=2,ragged-right,verbatim,quote]
3251 e2 \glissando f
3252 \once \override Glissando #'(bound-details right Y) = #-2
3253 e2 \glissando f
3254 @end lilypond
3255
3256 Der Wert von @code{Y} wird für den rechten Endpunkt auf
3257 @w{@code{-2}} gesetzt.  Die linke Seite kann ähnlich angepasst
3258 werden, indem man @code{left} anstelle von @code{right} angibt.
3259
3260 Wenn @code{Y} nicht gesetzt ist, wird der Wert ausgehend von
3261 der vertikalen Position der linken und rechten Anbindepunkte
3262 des Streckers errechnet.
3263
3264 Andere Anpassungen der Strecker sind auch möglich, für Einzelheiten
3265 siehe @ref{Strecker}.
3266
3267
3268 @node Drehen von Objekten
3269 @subsection Drehen von Objekten
3270 @translationof Rotating objects
3271
3272 Layout-Objekte und Textbeschriftungselemente können zu einem
3273 beliebigen Winkel um einen beliebigen Punkt herum gedreht
3274 werden, aber die Methode, mit der die Änderung vorgenommen
3275 werden muss, unterscheidet sich je nach Objekt.
3276
3277 @menu
3278 * Drehen von Layout-Objekten::
3279 * Textbeschriftung drehen::
3280 @end menu
3281
3282 @node Drehen von Layout-Objekten
3283 @unnumberedsubsubsec Drehen von Layout-Objekten
3284 @translationof Rotating layout objects
3285
3286 @cindex Drehen von Objekten
3287 @cindex Objekte, Drehen
3288
3289 Alle Layout-Objekte, die das @code{grob-interface} unterstützen,
3290 können gedreht werden, indem man ihre @code{rotation}-Eigenschaft
3291 einstellt.  Sie erhält eine Liste mit drei Einträgen: den
3292 Winkel der Drehung gegen den Uhrzeiger sowie die X- und
3293 Y-Koordinaten des Punktes relativ zum Referenzpunkt des Objekts,
3294 um welchen herum die Drehung stattfinden soll.  Der Winkel
3295 der Drehung wird in Grad angegeben, die Koordinaten in
3296 Notenlinienzwischenräumen.
3297
3298 Der Winkel der Drehung und die Koordinaten des Drehpunktes müssen
3299 durch Ausprobieren herausgefunden werden.
3300
3301 @cindex Crescendoklammern, gedreht
3302 @cindex gedrehte Crescendoklammern
3303 @cindex schräge Crescendoklammern
3304 @cindex Klammern, Crescendo, schräg
3305
3306 Es gibt nur wenige Situationen, in welchen die Drehung eines
3307 Layout-Objektes sinnvoll ist.  Das folgende Beispiel zeigt
3308 eine sinnvolle Anwendung:
3309
3310 @lilypond[quote,verbatim,relative=1]
3311 g4\< e' d' f\!
3312 \override Hairpin #'rotation = #'(20 -1 0)
3313 g,,4\< e' d' f\!
3314 @end lilypond
3315
3316
3317 @node Textbeschriftung drehen
3318 @unnumberedsubsubsec Textbeschriftung drehen
3319 @translationof Rotating markup
3320
3321 Jede Textbeschriftung kann gedreht werden, indem vor die Anweisung
3322 der Befehl @code{\rotate} gesetzt wird.  Der Befehl hat zwei
3323 Argumente:  Den Winkel der Drehung in Grad gegen den Uhrzeiger und
3324 der Text, der gedreht dargestllt werden soll.  Die Ausdehnung des
3325 Textes wird nicht gedreht, sie erhält ihren Wert von den Extrempunkten
3326 der x- und y-Koordinaten des gedrehten Textes.  Im folgenden
3327 Beispiel wird die @code{outside-staff-priority}-Eigenschaft auf
3328 @code{#f} gesetzt, damit automatische Zusammenstöße nicht verhindert
3329 werden, wodurch andernfalls einige der Texte zu hoch geschoben werden
3330 würden.
3331
3332 @lilypond[quote,verbatim,relative=1]
3333 \override TextScript #'outside-staff-priority = ##f
3334 g4^\markup { \rotate #30 "a G" }
3335 b^\markup { \rotate #30 "a B" }
3336 des^\markup { \rotate #30 "a D-Flat" }
3337 fis^\markup { \rotate #30 "an F-Sharp" }
3338 @end lilypond
3339
3340
3341 @node Fortgeschrittene Optimierungen
3342 @section Fortgeschrittene Optimierungen
3343 @translationof Advanced tweaks
3344
3345 Dieser Abschnitt behandelt verschiedene Möglichkeiten, das
3346 Aussehen des Notenbildes zu polieren.
3347
3348 @menu
3349 * Objekte ausrichten::
3350 * Vertikale Gruppierung der grafischen Objekte („grob“s)::
3351 * stencils verändern::
3352 * Formen verändern::
3353 * Reine und unreine Container::
3354 @end menu
3355
3356
3357 @seealso
3358 Handbuch zum Lernen:
3359 @rlearning{Die Ausgabe verändern},
3360 @rlearning{Mehr Information}.
3361
3362 Notationsreferenz:
3363 @ref{Die Referenz der Programminterna erklärt},
3364 @ref{Eigenschaften verändern}.
3365
3366 Erweitern:
3367 @rextend{Schnittstellen für Programmierer}.
3368
3369 Installierte Dateien:
3370 @file{scm/define-grobs.scm}.
3371
3372 Schnipsel:
3373 @rlsr{Tweaks and overrides}.
3374
3375 Referenz der Interna:
3376 @rinternals{All layout objects}.
3377
3378
3379 @node Objekte ausrichten
3380 @subsection Objekte ausrichten
3381 @translationof Aligning objects
3382
3383 Graphische Objekte, die das @code{self-alignment-interface} und/obder
3384 das @code{side-position-interface} unterstützen, können an einem
3385 vorher gesetzten Objekt auf verschiedene Weise ausgerichtet werden.
3386 Eine Liste derartiger Objekte findet sich in
3387 @rinternals{self-alignment-interface} und @rinternals{side-position-interface}.
3388
3389 Alle graphischen Objekte haben einen Referenzpunkt, eine horizontale
3390 Ausdehnung und eine vertikale Ausdehnung.  Die horizontale Ausdehnung ist
3391 ein Zahlenpaar, mit dem die Verschiebung der rechten und linken Ecken
3392 ausgehend vom Referenzpunkt angegeben werden, wobei Verschiebungen
3393 nach links mit negativen Zahlen notiert werden.  Die vertikale Ausdehnung
3394 ist ein Zahlenpaar, das die Verschiebung der unteren und oberen
3395 Ränder vom Referenzpunkt ausgehend angibt, wobei Verschiebungen nach
3396 unten mit negativen Zahlen notiert werden.
3397
3398 Die Position eines Objektes auf dem Notensystem wird mit Werten
3399 von @code{X-offset} und @code{Y-offset} angegeben.  Der Wert von
3400 @code{X-offset} gibt die Verschiebung von der X-Koordinate des
3401 Referenzpunkts des Elternobjektes an, der Wert von @code{Y-offset}
3402 die Verschiebung ausgehend von der Mittellinie des Notensystemes.
3403 Die Werte von @code{X-offset} und @code{Y-offset} können direkt
3404 bestimmt werden oder durch Prozeduren errechnet werden, sodass
3405 eine Ausrichtung mit dem Elternobjekt erreicht werden kann.
3406
3407 @warning{Viele Objekte brauchen besondere Überlegungen zu ihrer
3408 Position, weshalb in manchen Fällen manuell gesetzte Werte von
3409 @code{X-offset} oder @code{Y-offset} ignoriert oder verändert
3410 werden können, obwohl das Objekt das
3411 @code{self-alignment-interface} unterstützt.  Wenn man @code{X-offset}
3412 oder @code{Y-offset} auf einen festen Wert setzt, wird die entsprechende
3413 @code{self-alignment}-Eigenschaft ignoriert.}
3414
3415 Ein Versetzungszeichen beispielsweise kann vertikal durch Veränderung
3416 von @code{Y-offset} verschoben werden, aber Änderungen von
3417 @code{X-offset} haben keine Auswirkung.
3418
3419 Übungszeichen können an trennbaren Objekten (wie Taktstrichen,
3420 Schlüsseln, Taktarten und Tonartvorzeichen) ausgerichtet werden.
3421 In @code{break-aligned-interface} finden sich besondere Eigenschaften,
3422 mit denen Übungszeichen an derartigen Objekten ausgerichtet werden können.
3423
3424 @seealso
3425
3426 Notationshandbuch:
3427 @ref{Benutzung des break-alignable-interface}.
3428
3429 Erweitern:
3430 @rextend{Callback functions}.
3431
3432
3433 @menu
3434 * X-offset und Y-offset direkt setzen::
3435 * Das side-position-interface benutzen::
3436 * Das self-alignment-interface benutzen::
3437 * Benutzung des break-alignable-interface::
3438 @end menu
3439
3440 @node X-offset und Y-offset direkt setzen
3441 @unnumberedsubsubsec @code{X-offset} und @code{Y-offset} direkt setzen
3442 @translationof Setting X-offset and Y-offset directly
3443
3444 Numerische Werte können den @code{X-offset}- und @code{Y-offset}-Eigenschaften
3445 vieler Objekte zugewiesen werden.  Das folgende Beispiel zeigt
3446 drei Noten mit der Standardposition von Fingersatzanweisungen
3447 und die Positionen, wenn @code{X-offset} und @code{Y-offset}
3448 verändert werden.
3449
3450 @lilypond[verbatim,quote,relative=2]
3451 a-3
3452 a
3453 -\tweak #'X-offset #0
3454 -\tweak #'Y-offset #0
3455 -3
3456 a
3457 -\tweak #'X-offset #-1
3458 -\tweak #'Y-offset #1
3459 -3
3460 @end lilypond
3461
3462
3463
3464 @node Das side-position-interface benutzen
3465 @unnumberedsubsubsec Das @code{side-position-interface} benutzen
3466 @translationof Using the side-position-interface
3467
3468 Ein Objekt, das die @code{side-position-interface}-Schnittstelle
3469 unterstützt, kann neben sein Elternobjekt gesetzt werden,
3470 sodass zwei definierte Enden der Objekte sich berühren.
3471 Das Objekt kann über, unter, rechts oder links vom
3472 Ursprungsobjekt positioniert werden.  Das Ursprungsobjekt
3473 kann nicht definiert werden: es ergibt sich aus der Reihenfolge
3474 der Objekte in der Eingabe.  Die meisten Objekte haben
3475 einen Notenkopf als Ursprung assoziiert.
3476
3477 Die Werte von @code{side-axis} und @code{direction} bestimmen,
3478 wo das Objekt platziert werden soll, wie in der Tabelle
3479 zu sehen:
3480
3481 @c TODO add an example of each to the table
3482
3483 @multitable @columnfractions .3 .3 .3
3484 @headitem @code{side-axis}-  @tab @code{direction}-  @tab
3485 @headitem Eigenschaft          @tab Eigenschaft          @tab Platzierung
3486
3487 @item     @code{0}          @tab @code{-1}         @tab links
3488 @item     @code{0}          @tab @code{1}          @tab rechts
3489 @item     @code{1}          @tab @code{-1}         @tab unten
3490 @item     @code{1}          @tab @code{1}          @tab oben
3491
3492 @end multitable
3493
3494 Wenn @code{side-axis} gleich @code{0} ist, sollte @code{X-offset}
3495 auf die Prozedur @code{ly:side-position-interface::x-aligned-side}
3496 gesetzt werden.  Diese Prozedur errechnet den richtigen Wert für
3497 @code{X-offset}, sodass das Objekt auf der rechten oder linken
3498 Seite des Ursprungs angeordnet wird, entsprechend dem Wert
3499 der @code{direction}-Eigenschaft.
3500
3501 Wenn @code{side-axis} gleich @code{1} ist, sollte @code{Y-offset}
3502 auf die Prozedur @code{ly:side-position-interface::y-aligned-side}
3503 gesetzt werden.  Diese Prozedur errechnet den richtigen Wert für
3504 @code{Y-offset}, sodass das Objekt über oder unter dem Ursprungsobjekt
3505 angeordnet wird, entsprechend dem Wert der @code{direction}-Eigenschaft.
3506
3507
3508
3509
3510 @node Das self-alignment-interface benutzen
3511 @unnumberedsubsubsec Das @code{self-alignment-interface} benutzen
3512 @translationof Using the self-alignment-interface
3513
3514 @emph{Selbstausrichtende Objekte horizontal}
3515
3516 Die horizontale Ausrichtung eines Objektes, das die
3517 @code{self-alignment-interface}-(Selbstausrichtungs)-Schnittstelle
3518 unterstützt, wird durch den Wert von @code{self-alignment-X}
3519 kontrolliert, vorausgesetzt die Eigenschaft @code{X-offset} des
3520 Objektes ist auf @code{ly:self-alignment-interface::x-aligned-on-self}
3521 gesetzt.  @code{self-alignment-X} kann eine beliebige reale
3522 Zahl zugewiesen werden, in Einheiten der Hälfte der
3523 X-Gesamtausdehnung des Objekts.  Negative Werte verschieben
3524 das Objekt nach rechts, positive nach links.  Ein Wert von
3525 @code{0} zentriert das Objekt auf dem Referenzpunkt des
3526 Ursprungs, ein Wert von @w{@code{-1}} richtet die linke Ecke des
3527 Objekts am Referenzpunkt des Ursprungsobjektes aus, ein
3528 Wert von @code{1} richtet die rechte Ecke des Objektes am
3529 Referenzpunkt des Ursprungsobjektes aus.  Die Symbole
3530 @code{LEFT}, @code{CENTER} und @code{RIGHT} können anstelle
3531 von @w{@code{-1}}, @code{0} und @code{1} eingesetzt werden.
3532
3533 Normalerweise würde der @code{\override}-Befehl benutzt werden, um
3534 die Werte von @code{self-alignment-X} zu verändern, aber der
3535 @code{\tweak}-Befehl kann benutzen, um verschiedene Anmerkungen
3536 an einer einzigen Note auszurichten:
3537
3538 @lilypond[quote,verbatim,relative=1]
3539 a'
3540 -\tweak #'self-alignment-X #-1
3541 ^"left-aligned"
3542 -\tweak #'self-alignment-X #0
3543 ^"center-aligned"
3544 -\tweak #'self-alignment-X #RIGHT
3545 ^"right-aligned"
3546 -\tweak #'self-alignment-X #-2.5
3547 ^"aligned further to the right"
3548 @end lilypond
3549
3550
3551 @emph{Objekte vertikal automatisch ausrichten}
3552
3553 Objekte können auf ähnliche Weise auch vertikal aneinander
3554 ausgerichtet werden, wenn ihre @code{Y-offset}-Eigenschaft
3555 auf @code{ly:self-alignment-interface::y-aligned-on-self}
3556 gesetzt ist.  Oft greifen jedoch auch andere Mechanismen
3557 bei der vertikalen Ausrichtung ein:  Der Wert von
3558 @code{Y-offset} ist nur eine der Variablen, die für die
3559 Berechnung benutzt werden.  Darum ist es kompliziert, den
3560 Wert für einige Objekte richtig anzupassen.  Die Einheiten
3561 sind Halbe der vertikalen Ausdehnung des Objektes, welche
3562 normalerweise recht klein ist, sodass ziemlich große Werte
3563 erforderlich sein können.  Der Wert @w{@code{-1}} richtet die
3564 untere Kante des Objekts am Referenzpunkt des Ursprungsobjektes
3565 aus, der Wert @code{0} richtet die Mitte des Objekts am
3566 Referenzpunkt des Ursprungsobjektes aus und der Wert @code{1}
3567 richtet die Oberkante des Objektes am Referenzpunkt des
3568 Ursprungsobjektes aus.  Die Symbole @code{DOWN}, @code{CENTER}
3569 und @code{UP} können anstelle von @w{@code{-1}}, @code{0}
3570 und @code{1} benutzt werden.
3571
3572 @emph{Automatische Ausrichtung in beide Richtungen}
3573
3574 Indem sowohl @code{X-offset} als auch @code{Y-offset} eingestellt
3575 werden, kann ein Objekt gleichzeitig in beiden Richtungen ausgerichtet
3576 werden.
3577
3578 Das folgende Beispiel zeigt, wie man eine Fingersatzanweisung so
3579 ausrichtet, dass sie nah am Notenkopf bleibt.
3580
3581 @lilypond[quote,verbatim,relative=2]
3582 a
3583 -\tweak #'self-alignment-X #0.5  % move horizontally left
3584 -\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self
3585 -\tweak #'self-alignment-Y #-1  % move vertically up
3586 -3  % third finger
3587 @end lilypond
3588
3589
3590
3591
3592 @node Benutzung des break-alignable-interface
3593 @unnumberedsubsubsec Benutzung des @code{break-alignable-interface}
3594 @translationof Using the break-alignable-interface
3595
3596 @cindex Ausrichtung an Objekten
3597
3598 @funindex break-align-symbols
3599
3600 Übungszeichen und Taktzahlen können an Notationsobjekten (ausschließlich
3601 Taktstriche) ausgerichtet werden.  Zu diesen Objekten gehören
3602 @code{ambitus}, @code{breathing-sign}, @code{clef}, @code{custos},
3603 @code{staff-bar}, @code{left-edge}, @code{key-cancellation},
3604 @code{key-signature} und @code{time-signature}.
3605
3606 Standardmäßig werden Übungszeichen und Taktzahlen horizontal
3607 über dem Objekt zentriert:
3608
3609 @lilypond[verbatim,quote,relative=1]
3610 % The RehearsalMark will be centered above the Clef
3611 \override Score.RehearsalMark #'break-align-symbols = #'(clef)
3612 \key a \major
3613 \clef treble
3614 \mark "↓"
3615 e1
3616 % The RehearsalMark will be centered above the TimeSignature
3617 \override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
3618 \key a \major
3619 \clef treble
3620 \time 3/4
3621 \mark "↓"
3622 e2.
3623 % The rehearsal mark will be centered above the Breath Mark
3624 \override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign)
3625 \key a \major
3626 \clef treble
3627 \time 4/4
3628 e1
3629 \breathe
3630 \mark "↓"
3631 @end lilypond
3632
3633 Eine Liste von möglichen Objekten zur Ausrichtung kann definiert
3634 werden.  Wenn eins dieser Objekte an der aktuellen Stelle unsichtbar
3635 ist (etwa durch Einstellung von @code{break-visibility} oder die
3636 expliziten Sichtbarkeitseinstellungen von Taktart und Vorzeichen),
3637 werden Übungszeichen und Taktzahlen an dem ersten Objekt in der
3638 Liste ausgerichtet, dass sichtbar ist.  Wenn keine Objekte in der
3639 Liste sichtbar sind, wird das Objekt am Taktstrich ausgerichtet.
3640 Wenn der Taktstrich unsichtbar ist, wird das Objekt an der Stelle
3641 ausgerichtet, an der sich der Taktstrich befinden würde.
3642
3643 @lilypond[verbatim,quote,relative=1]
3644 % The RehearsalMark will be centered above the Key Signature
3645 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3646 \key a \major
3647 \clef treble
3648 \mark "↓"
3649 e1
3650 % The RehearsalMark will be centered above the Clef
3651 \set Staff.explicitKeySignatureVisibility = #all-invisible
3652 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3653 \key a \major
3654 \clef bass
3655 \mark "↓"
3656 gis,,1
3657 % The rehearsal mark will be centered above the Bar Line
3658 \set Staff.explicitKeySignatureVisibility = #all-invisible
3659 \set Staff.explicitClefVisibility = #all-invisible
3660 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3661 \key a \major
3662 \clef treble
3663 \mark "↓"
3664 e''1
3665
3666 @end lilypond
3667
3668 Die Ausrichtung des Übungszeichen relativ zum Notationsobjekt kann
3669 verändert werden, wie das nächste Beispiel zeigt.  In einer Partitur
3670 mit vielen Systemen würde man diese Einstellung für alle Systeme
3671 vornehmen.
3672
3673 @lilypond[verbatim,quote,relative=1]
3674 % The RehearsalMark will be centered above the KeySignature
3675 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
3676 \key a \major
3677 \clef treble
3678 \time 4/4
3679 \mark "↓"
3680 e1
3681 % The RehearsalMark will be aligned with the left edge of the KeySignature
3682 \once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
3683 \mark "↓"
3684 \key a \major
3685 e1
3686 % The RehearsalMark will be aligned with the right edge of the KeySignature
3687 \once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
3688 \key a \major
3689 \mark "↓"
3690 e1
3691 @end lilypond
3692
3693 Das Übungszeichen kann auch nach rechts oder links um einen beliebigen Wert
3694 verschoben werden.  Die Einheiten sind in Notenlinienzwischenräumen:
3695
3696 @lilypond[verbatim,quote,relative=1]
3697 % The RehearsalMark will be aligned with the left edge of the KeySignature
3698 % and then shifted right by 3.5 staff-spaces
3699 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
3700 \once \override Score.KeySignature #'break-align-anchor = #3.5
3701 \key a \major
3702 \mark "↓"
3703 e1
3704 % The RehearsalMark will be aligned with the left edge of the KeySignature
3705 % and then shifted left by 2 staff-spaces
3706 \once \override Score.KeySignature #'break-align-anchor = #-2
3707 \key a \major
3708 \mark "↓"
3709 e1
3710 @end lilypond
3711
3712
3713
3714 @node Vertikale Gruppierung der grafischen Objekte („grob“s)
3715 @subsection Vertikale Gruppierung der grafischen Objekte („grob“s)
3716 @translationof Vertical grouping of grobs
3717
3718 Die graphischen Objekte @code{VerticalAlignment} und
3719 @code{VerticalAxisGroup} funktionieren zusammen.
3720 @code{VerticalAxisGroup} gruppiert unterschiedliche Objekte
3721 wie Notensysteme, Gesangstext usw. zusammen.
3722 @code{VerticalAlignment} richtet die unterschiedlichen
3723 Objektgruppen dann aneinander aus.  Es gibt normalerweise
3724 nur ein @code{VerticalAlignment} in einer Partitur, aber
3725 jedes Notensystem, Gesangstext usw. hat eine eigene
3726 @code{VerticalAxisGroup}.
3727
3728
3729 @node stencils verändern
3730 @subsection stencils verändern
3731 @translationof Modifying stencils
3732
3733 Alle Layout-Objekte haben eine @code{stencil}-(Stempel-)Eigenschaft,
3734 die ein Teil von @code{grob-interface} ist.  Diese Eigenschaft
3735 ist normalerweise als eine Funktion definiert, die auf das jeweilige
3736 Objekt angepasst ist und das Symbol erstellt, dass dann im Druckbild
3737 erscheint.  Beispielsweise die Standardeinstellung für die
3738 @code{stencil}-Eigenschaft von @code{MultiMeasureRest}
3739 (Ganztaktpausenobjekt) ist @code{ly:multi-measure-rest::print}.
3740
3741 Das Standardsymbol für jedes Objekt kann ersetzt werden, indem man
3742 die @code{stencil}-Eigenschaft verändert, sodass sie auf eine
3743 andere, speziell geschriebene Prozedur verweist.  Das erfordert
3744 einen hohen Grad an Kenntnis der LilyPond-Interna, aber es gibt
3745 einen einfacheren Weg, mit dem man oft vergleichbarere Ergebnisse
3746 erzielen kann.
3747
3748 Dieser Weg besteht darin, die @code{stencil}-Eigenschaft auf die
3749 Prozedur zu verweisen, die Text ausgibt: @code{ly:text-interface::print}
3750 und eine @code{text}-Eigenschaft zu dem Objekt hinzuzufügen,
3751 in welcher dann die Textbeschriftung definiert wird, mit der
3752 das entsprechende Symbol dargestellt wird.  Aufgrund der
3753 Flexibilität der Textbeschriftung ist hier sehr viel möglich.
3754 Siehe zu Details insbesondere
3755 @ref{Graphische Notation innerhalb einer Textbeschriftung}.
3756
3757 Das folgende Beispiel zeigt diese Methode, indem das Symbol
3758 der Notenköpfe in ein Kreuz innerhalb eines Kreises umgewandelt
3759 wird.
3760
3761 @lilypond[verbatim,quote]
3762 XinO = {
3763   \once \override NoteHead  #'stencil = #ly:text-interface::print
3764   \once \override NoteHead #'text = \markup {
3765     \combine
3766       \halign #-0.7 \draw-circle #0.85 #0.2 ##f
3767       \musicglyph #"noteheads.s2cross"
3768   }
3769 }
3770 \relative c'' {
3771   a a \XinO a a
3772 }
3773 @end lilypond
3774
3775 Alle Schriftzeichen in der feta-Schriftart können
3776 mit dem @code{\musicglyph}-Befehl erreicht werden.
3777 Siehe auch @ref{Die Feta-Schriftart}.
3778
3779 @seealso
3780 Notationsreferenz:
3781 @ref{Graphische Notation innerhalb einer Textbeschriftung},
3782 @ref{Text formatieren},
3783 @ref{Textbeschriftungsbefehle},
3784 @ref{Die Feta-Schriftart}.
3785
3786
3787
3788 @node Formen verändern
3789 @subsection Formen verändern
3790 @translationof Modifying shapes
3791
3792 @menu
3793 * Bögen verändern::
3794 @end menu
3795
3796 @node Bögen verändern
3797 @unnumberedsubsubsec Bögen verändern
3798 @translationof Modifying ties and slurs
3799
3800 @cindex Bögen, verändern
3801 @cindex Bindebögen, verändern
3802 @cindex Legatobögen, verändern
3803 @cindex Bézier-Kurven
3804 @cindex Kontrollpunkte, Bézier-Kurven
3805
3806 Binde-, Legato- und Phrasierungsbögen werden als Bézierkurven
3807 dritter Ordnung gezeichnet.  Wenn die Form eines automatischen
3808 Bogens nicht optimal ist, kann sie manuell verändert werdne,
3809 indem man die vier erforderlichen Kontrollpunkte angibt.
3810
3811 Bézierkurven dritter Ordnung (auch als quadratische Bézierkurven
3812 bezeichnet) werden durch vier Kontrollpunkte definiert.  Der
3813 erste und vierte Kontrollpunkt geben Beginn und Ende der Kurve
3814 an.  Die zwei Punkte dazwischen werden benutzt, um die Form
3815 der Kurve zu bestimmen.  Im Internet gibt es Animationen,
3816 die illustrieren, wie eine derartige Kurve gezeichnet wird,
3817 aber die folgende Beschreibung kann hilfreich sein.  Die
3818 Kurve beginnt am ersten Kontrollpunkt in Richtung des zweiten,
3819 wobei sie sich schrittweise krümmt um zum dritten Kontrollpunkt
3820 zu gelangen, von wo aus sie sich weiter zum vierten Punkt hin
3821 krümmt.  Die Form der Kurve wird vollständig von den vier
3822 Punkten definiert.
3823
3824 Hier ein Beispiel eines Falles, in dem der Bogen nicht optimal
3825 erscheint, und wo auch @code{\tieDown} das Problem nicht
3826 lösen würde.
3827
3828 @lilypond[verbatim,quote,relative=1]
3829 <<
3830   { e1~ e }
3831 \\
3832   { r4 <g c,> <g c,> <g c,> }
3833 >>
3834 @end lilypond
3835
3836 Eine Möglichkeit, diesen Bogen zu verbessern, ist es, seine
3837 Kontrollpunkte manuell zu verändern:
3838
3839 Die Koordinaten von Bézierkontrollpunkten werden in
3840 Notenlinienzwischenräumen angegeben.  Die X-Achse
3841 ist relativ zum Referenzpunkt der Note, an die der Bogen
3842 angefügt wird, und die Y-Achse relativ zur Mittellinie
3843 des Notensystems.  Die Koordinaten werden als eine Liste
3844 von vier Paaren an realen Dezimalzahlen eingegeben.  Eine
3845 Möglichkeit ist es, die Koordinaten der zwei Endpunkte
3846 zu schätzen und dann die zwei Zwischenpunkte zu erraten.
3847 Die optimalen Werte können nur durch Ausprobieren gefunden
3848 werden.
3849
3850 Es lohnt sich daran zu denken, dass eine symmetrische Kurve
3851 symmetrische Kontrollpunkte benötigt, und dass Bézierkurven
3852 die nützliche Eigenschaft haben, dass eine Transformation
3853 der Kurve wie eine Übersetzung, Drehung oder Skalierung
3854 der Kurve erreicht werden kann, indem man die gleiche
3855 Skalierung auf die Kontrollpunkte anwendet.
3856
3857 In dem obigen Beispiel geben folgende Werte einen
3858 zufriedenstellenden Bogen -- Achtung: der Befehl muss direkt
3859 vor dem Beginn der Note gesetzt werden, an die der (Binde-)Bogen angehängt
3860 wird.
3861
3862 @lilypond[verbatim,quote,relative=1]
3863 <<
3864   {
3865   \once \override Tie
3866     #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
3867   e1~ e1
3868   }
3869 \\
3870   { r4 <g c,> <g c,> <g c,>  }
3871 >>
3872 @end lilypond
3873
3874 @knownissues
3875
3876 Es ist nicht möglich, die Form von Bögen anhand ihrer
3877 @code{control-points}-Eigenschaft zu verändern, wenn
3878 mehrere Binde- oder Legatobögen zum gleichen musikalischen Moment
3879 auftreten, nicht einmal mit dem @code{\tweak}-Befehl.  Die Eigenschaft
3880 @code{tie-configuration} von @code{TieColumn} kann jedoch verändert
3881 werden, sodass Startlinie und Richtung wie benötigt platziert werden.
3882
3883 @seealso
3884 Referenz der Interna:
3885 @rinternals{TieColumn}.
3886
3887
3888 @cindex Scheme, reine Container
3889 @cindex Scheme, unreine Container
3890 @cindex reine Container, Scheme
3891 @cindex unreine Container, Scheme
3892 @cindex horizontale Platzierung, verändern
3893
3894 @node Reine und unreine Container
3895 @subsection Reine und unreine Container
3896 @translationof Unpure-pure containers
3897
3898 Unreine und reine Container (engl. unpure/pure containers) sind
3899 nützlich, wenn man die Berechnungen der Platzierungen für die
3900 @emph{Y-Achse} verändern will, insbesondere für @code{Y-offset}
3901 und @code{Y-extent}.  Mit diesen Containern kann die Veränderung
3902 durch eine Scheme-Funktion anstelle einer direkten Zahl oder eines
3903 Paares vorgenommen werden.
3904
3905 Für bestimmte Grobs basiert die Eigenschaft @code{Y-extent} auf
3906 der @code{stencil}-Eigenschaft.  Wenn diese mit @code{\override}
3907 verändert werden soll, braucht man eine zusätzliche Veränderung
3908 von @code{Y-extent} mit einem unreinen-reinen Container.  Wenn eine
3909 Funktion @code{Y-offset} und/oder @code{Y-extent} verändert, wird
3910 angenommen, dass dadurch Zeilenumbruchsberechnungen zu früh während
3911 der Kompilation aufgerufen werden.  Die Funktion wird also überhaupt
3912 nicht ausgewertet (und gibt also normalerweise den Wert @samp{0} oder
3913 @samp{'(0 . 0)} zurück), wodurch sich Zusammenstöße ergeben können.
3914 Eine @qq{saubere} Funktion beeinflusst keine Eigeschaften, Objekte
3915 oder Grob-Suizide, weshalb ihre Werte, die sich auf @code{Y-axis}
3916 beziehen, richtig berechnet werden.
3917
3918 Es gibt zuzeit etwa 30 Funktionen, die schon als @qq{sauber} erachtet
3919 werden, und unsaubere-saubere Container sind eine Möglichkeit, auch
3920 Funktionen, die sich nicht auf dieser Liste befinden, als @qq{sauber}
3921 zu markieren.  Die @qq{saubere} Funktion wird ausgewertet, @emph{bevor}
3922 Seitenumbruch stattfindet, sodass die horizontale Platzierung
3923 @qq{rechtzeitig} stattfindet.  Die @qq{unsaubere} Funktion wird dann
3924 @emph{nach} dem Seitenumbruch ausgewertet.
3925
3926 @warning{Da es schwierig ist, immer sicher zu sein, welche Funktionen sich
3927 auf dieser Liste befinden, wird empfohlen, dass die selbsterstellten
3928 @qq{sauberen} Funktionen nicht die Grobs @code{Beam} oder @code{VerticalAlignment}
3929 einsetzen.}
3930
3931 Ein unsauberer-sauberer Container wird wie folgend erstellt:
3932
3933 @code{(ly:make-unpure-pure-container f0 f1)}
3934
3935 wobei @code{f0} eine Fuktion ist, die @var{n} Arguments braucht
3936 (@var{n >= 1}) und deren erstes Argument immer der Grob sein muss.
3937 Das ist die Funktion, die das eigentliche Resultat ausgibt.  @var{f1}
3938 ist die Funktion, die als @qq{sauber} bezeichnet wird, und braucht @var{n + 2}
3939 Argumente.  Wiederum muss das erste Argument immer der Grob sein, aber
3940 das erste und zweite Argument sind @qq{Beginn-} und @qq{Endeargumente}.
3941
3942
3943
3944 @var{start} (Beginn) und @var{end} (Ende) sind absichtlich
3945 nur Platzhalter, die nur für die Strecker gelten (etwa @code{Hairpin} oder
3946 @code{Beam}), die unterschiedliche Höhenberechnungen je nach beginnender und
3947 endender Note ausgeben können.
3948
3949 Der Rest sind andere Argumente für die erste Funktion (es können auch
3950 Null sein, wenn @var{n = 1}).
3951
3952 Die Ergebnisse der zweiten Funktion werden als Näherungswert des benötigten
3953 Wertes benutzt, welche dann von der ersten Funktion eingesetzt wird,
3954 um den wirklichen Wert auszugeben, mit dem dann sehr viel später im
3955 Layoutprozess die Platzierung justiert werden soll.
3956
3957 @lilypond[verbatim,quote,ragged-right]
3958 #(define (square-line-circle-space grob)
3959 (let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
3960       (notename (ly:pitch-notename pitch)))
3961  (if (= 0 (modulo notename 2))
3962      (make-circle-stencil 0.5 0.0 #t)
3963      (make-filled-box-stencil '(0 . 1.0)
3964                               '(-0.5 . 0.5)))))
3965
3966 squareLineCircleSpace = {
3967   \override NoteHead #'stencil = #square-line-circle-space
3968 }
3969
3970 smartSquareLineCircleSpace = {
3971   \squareLineCircleSpace
3972   \override NoteHead #'Y-extent =
3973    #(ly:make-unpure-pure-container
3974       ly:grob::stencil-height
3975       (lambda (grob start end) (ly:grob::stencil-height grob)))
3976 }
3977
3978 \new Voice \with { \remove "Stem_engraver" }
3979 \relative c'' {
3980   \squareLineCircleSpace
3981   cis4 ces cisis c
3982   \smartSquareLineCircleSpace
3983   cis4 ces cisis c
3984 }
3985 @end lilypond
3986
3987 Im ersten Takt weiß die Layoutmaschine ohne den unsauberen-sauberen
3988 Container nicht die Breite des Notenkopfes und lässt ihn deshalb mit
3989 den Versetzungszeichen zusammenstoßen.  Im zweiten Takt, mit
3990 unreinen-reinen Containern, weiß die Layoutmaschine die Breite
3991 des Notenkopfes und vermeidet den Zusammenstoßf, indem die Zeile
3992 entsprechend verlängert wird.
3993
3994 Normalerweise können für eine einfache Berechnungen fast identische
3995 Funktionen für den @qq{unsauberen} und @qq{sauberen} Teil benutzt
3996 werden, indem nur die Zahl der Argumente und die Reichweite der
3997 Funktion verändert wird.
3998
3999 @warning{Wenn eine Funktion als @qq{sauber} bezeichnet ist und das aber
4000 nicht ist, können unerwartete Ergebnisse auftreten.}
4001
4002
4003 @node Musikfunktionen benutzen
4004 @section Musikfunktionen benutzen
4005 @translationof Using music functions
4006
4007 @c TODO -- add @seealso, etc. to these subsections
4008
4009 Wenn Optimierungen von unterschiedlichen musikalischen Ausdrücken
4010 wiederverwendet werden sollen, bietet es sich oft an, den
4011 @qq{Optimierungsanteil} einer @emph{musikalischen Funktion} zu
4012 erstellen.  In diesem Abschnitt sollen nur @emph{Ersetzungen}
4013 erklärt werden, wo es darum geht, eine Variable mit einem Stück
4014 LilyPond-Code zu ersetzen.  Andere komplexere Funktionen werden
4015 beschrieben in @rextend{Musikalische Funktionen}.
4016
4017 @menu
4018 * Syntax der Ersetzungsfunktion::
4019 * Beispiele der Ersetzungsfunktionen::
4020 @end menu
4021
4022 @node Syntax der Ersetzungsfunktion
4023 @subsection Syntax der Ersetzungsfunktion
4024 @translationof Substitution function syntax
4025
4026 Es ist einfach eine Funktion zu erstellen, die eine Variable
4027 in LilyPond-Code umwandelt.  Die generelle Form dieser
4028 Funktionen ist:
4029
4030 @example
4031 Funktion =
4032 #(define-music-function
4033      (parser location @var{Arg1} @var{Arg2} @dots{})
4034      (@var{Typ1?} @var{Typ2?} @dots{})
4035    #@{
4036      @var{@dots{}Noten@dots{}}
4037    #@})
4038 @end example
4039
4040 @noindent
4041 wobei
4042
4043 @multitable @columnfractions .33 .66
4044 @item @code{@var{ArgN}}
4045 @tab @var{n}tes Argument
4046
4047 @item @code{@var{TypN?}}
4048 @tab ein Scheme @emph{Typenprädikat}, für das @code{@var{ArgN}}
4049 den Wert @code{#t} ausgibt.
4050
4051 @item @code{@var{@dots{}Noten@dots{}}}
4052 @tab normale LilyPond-Eingabe, wobei @code{$} (wenn nur LilyPond-Konstruktionen
4053 erlaubt sind) oder @code{#} (um es als Scheme-Wert oder Argument einer
4054 musikalischen Funktionen einzusetzen) benutzt wird, um
4055 Argumente zu referenzieren (etwa @samp{$Arg1}).
4056 @end multitable
4057
4058 Die @code{parser} und @code{location}-Argumente sind zwingend und
4059 werden in einigen fortgeschrittenen Situationen benutzt, wie sie
4060 im @qq{Erweitern}-Handbuch beschrieben werden (siehe
4061 @rextend{Musikalische Funktionen}).  In Ersetzungsfunktionen
4062 gehen Sie einfach sicher, dass sie die beiden Wörter auch mit
4063 aufnehmen.
4064
4065 Die Liste der Typenprädikate ist auch notwendig.  Einige der
4066 häufigsten Typenprädikate, die in musikalischen Funktionen
4067 benutzt werden, sind:
4068
4069 @example
4070 boolean?
4071 cheap-list?  @emph{(benutze anstelle von }@q{list?}@emph{ für schnelleres Kompilieren)}
4072 ly:duration?
4073 ly:music?
4074 ly:pitch?
4075 markup?
4076 number?
4077 pair?
4078 string?
4079 symbol?
4080 @end example
4081
4082 @noindent
4083 Eine Liste aller Typprädikate findet sich unter
4084 @ref{Vordefinierte Typprädikate}.  Eigene Typprädikate
4085 sind auch erlaubt.
4086
4087
4088 @seealso
4089
4090 Notationsreferenz:
4091 @ref{Vordefinierte Typprädikate}.
4092
4093 Erweitern:
4094 @rextend{Musikalische Funktionen}.
4095
4096 Installierte Dateien:
4097 @file{lily/music-scheme.cc},
4098 @file{scm/c++.scm},
4099 @file{scm/lily.scm}.
4100
4101
4102 @node Beispiele der Ersetzungsfunktionen
4103 @subsection Beispiele der Ersetzungsfunktionen
4104 @translationof Substitution function examples
4105
4106 Dieser Abschnitt zeigt einige Beispiele von Ersetzungsfunktionen.
4107 Sie sind nicht vollständig, sondern sollen einige der
4108 Möglichkeiten von einfachen Ersetzungsfunktionen aufzeigen.
4109
4110 Im ersten Beispiel wird eine Funktione definiert, die
4111 das Verschieben von @code{TextScript} erleichtert:
4112
4113 @lilypond[quote,verbatim,ragged-right]
4114 padText =
4115 #(define-music-function
4116      (parser location padding)
4117      (number?)
4118    #{
4119      \once \override TextScript #'padding = #padding
4120    #})
4121
4122 \relative c''' {
4123   c4^"piu mosso" b a b
4124   \padText #1.8
4125   c4^"piu mosso" d e f
4126   \padText #2.6
4127   c4^"piu mosso" fis a g
4128 }
4129 @end lilypond
4130
4131 Neben Zahlen können auch musikalische Ausdrücke wie Noten
4132 als Argumente für musikalische Funktionen eingesetzt werden:
4133
4134 @c TODO: use a better example (the music argument is redundant).
4135
4136 @lilypond[quote,verbatim,ragged-right]
4137 custosNote =
4138 #(define-music-function
4139      (parser location note)
4140      (ly:music?)
4141    #{
4142      \once \override Voice.NoteHead #'stencil =
4143        #ly:text-interface::print
4144      \once \override Voice.NoteHead #'text =
4145        \markup \musicglyph #"custodes.mensural.u0"
4146      \once \override Voice.Stem #'stencil = ##f
4147      $note
4148    #})
4149
4150 \relative c' { c4 d e f \custosNote g }
4151 @end lilypond
4152
4153 Ersetzungsfunktionen mit mehrfachen Argumenten können definiert
4154 werden:
4155
4156 @lilypond[quote,verbatim,ragged-right]
4157 tempoPadded =
4158 #(define-music-function
4159      (parser location padding tempotext)
4160      (number? string?)
4161    #{
4162      \once \override Score.MetronomeMark #'padding = #padding
4163      \tempo \markup { \bold #tempotext }
4164    #})
4165
4166 \relative c'' {
4167   \tempo \markup { "Low tempo" }
4168   c4 d e f g1
4169   \tempoPadded #4.0 #"High tempo"
4170   g4 f e d c1
4171 }
4172 @end lilypond
4173
4174