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