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