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