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