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