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