1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
4 Translation of GIT committish: 70aaf0159410169678942abd39eb13c876521437
6 When revising a translation, copy the HEAD committish of the
7 version that you are working on. For details, see the Contributors'
8 Guide, node Updating translation committishes..
13 @c Translators: Till Paala
15 @node Standardeinstellungen verändern
16 @chapter Standardeinstellungen verändern
17 @translationof Changing defaults
19 Das Ziel von LilyPonds Design ist es, von sich aus gut gesetzte Noten
20 zu produzieren. Es kann aber trotzdem vorkommen, dass Sie diesen
21 Standardsatz ändern wollen. Das Layout kann mithilfe einer recht
22 großen Anzahl von @qq{Schaltern und Knöpfen} kontrolliert werden.
23 Sie werden als @qq{Eigenschaften} (engl. properties) bezeichnet.
24 Eine kurze Einführung und Übung, wie man auf diese Eigenschaften
25 zugreifen kann und sie verändern kann, findet sich im Handbuch
26 zum Lernen, siehe @rlearning{Die Ausgabe verändern}. Das Kapitel
27 sollte zuerst gelesen werden. In diesem Kapitel werden die gleichen
28 Themen behandelt, aber der Schwerpunkt liegt eher auf einer technischen
31 @cindex Referenz der Interna
32 @cindex Internals Reference
34 Die definitive Beschreibung der unterschiedlichen Einstellmöglichenkeiten
35 findet sich in einem eigenen Dokument: @rinternalsnamed{Top,der Referenz
36 der Interna}. Diese Referenz zeigt alle Variablen, Funktionen und Optionen,
37 die in LilyPond möglich sind. Es existiert als ein HTML-Dokumente, das
39 @c leave the @uref as one long line.
40 @uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/user/@/lilypond@/-internals/,on@/-line},
41 aber auch lokal in das LilyPond-Dokumentationspaket integriert lesen lässt.
43 Intern benutzt LilyPond Scheme (ein LISP-Dialekt), um eine Infrastruktur
44 zur Verfügung zu stellen. Wenn Layoutentscheidungen verändert werden
45 sollen, müssen auf die programminternen Prozesse zugegriffen werden,
46 wozu Scheme-Code benötigt wird. Scheme-Abschnitte werden in einer
47 LilyPond-Quelldatei mit einer Raute @code{#} begonnen (siehe auch
48 @rlearning{Scheme-Übung}).
52 * Interpretationskontexte::
53 * Die Referenz der Programminterna erklärt::
54 * Eigenschaften verändern::
55 * Nützliche Konzepte und Eigenschaften::
56 * Fortgeschrittene Optimierungen::
57 * Musikfunktionen benutzen::
61 @node Interpretationskontexte
62 @section Interpretationskontexte
63 @translationof Interpretation contexts
65 Dieser Abschnitt erklärt, was Kontexte sind und wie man sie
69 * Was sind Kontexte?::
70 * Kontexte erstellen::
71 * Kontexte am Leben halten::
72 * Umgebungs-Plugins verändern::
73 * Die Standardeinstellungen von Kontexten ändern::
74 * Neue Kontexte definieren::
75 * Kontexte aneinander ausrichten::
81 @rlearning{Kontexte und Engraver}.
84 @file{ly/@/engraver@/-init@/.ly},
85 @file{ly/@/performer@/-init@/.ly}.
88 @rlsr{Contexts and engravers}.
91 @rinternals{Contexts},
92 @rinternals{Engravers and Performers}.
95 @node Was sind Kontexte?
96 @subsection Was sind Kontexte?
97 @translationof Contexts explained
99 Kontexte sind hierarchisch geordnet:
102 * Score -- der Vater aller Kontexte::
103 * Oberste Kontexte -- Container für Systeme::
104 * Mittlere Kontexte -- Systeme::
105 * Unterste Kontexte -- Stimmen::
108 @node Score -- der Vater aller Kontexte
109 @unnumberedsubsubsec Score -- der Vater aller Kontexte
110 @translationof Score - the master of all contexts
112 @code{Score} (Partitur) ist der höchste Notationskontext. Kein anderer Kontext
113 kann einen @code{Score}-Kontext enthalten. Im Normalfall kümmert
114 sich der @code{Score}-Kontext um die Verwaltung der Taktarten und sorgt
115 dafür, dass Elemente wie Schlüssel und Taktart- oder Tonartbezeichnungen
116 über die Systeme hinweg aneinander ausgerichtet sind.
118 Ein @code{Score}-Kontext wird eingerichtet, wenn eine
119 @code{\score @{@dots{}@}} oder @code{\layout @{@dots{}@}}-Umgebung
122 @node Oberste Kontexte -- Container für Systeme
123 @unnumberedsubsubsec Oberste Kontexte -- Container für Systeme
124 @translationof Top-level contexts - staff containers
126 @c Remark for German translation
127 Diese Kontexte fassen Systeme zu Gruppen zusammen und werden darum hier
128 als Systemgruppen bezeichnet (engl. staffgroup).
130 @strong{@emph{StaffGroup}}
132 Gruppiert Systeme und fügt eine eckige Klammer auf der linken Seite
133 hinzu. Die Taktstriche der enthaltenen Systeme werden vertikal
134 miteinander verbunden. @code{StaffGroup} besteht nur aus einer Ansammlung
135 von Systemen mit einer eckigen Klammer zu Beginn der Zeile und
136 durchgezogenen Taktstriche.
138 @strong{@emph{ChoirStaff}}
140 Entspricht @code{StaffGroup}, außer dass die Taktstriche der enthaltenen
141 Systeme nicht vertikal miteinander verbunden sind.
143 @strong{@emph{GrandStaff}}
145 Gruppiert Systeme mit einer geschweiften Klammer zur Linken. Die
146 Taktlinien der enthaltenen Systeme werden vertikal verbunden.
148 @strong{@emph{PianoStaff}}
150 Entspricht @code{GrandStaff}, hat aber zusätzlich Unterstützung für
151 Instrumentenbezeichnungen zu Beginn jeder Systemgruppe.
154 @node Mittlere Kontexte -- Systeme
155 @unnumberedsubsubsec Mittlere Kontexte -- Systeme
156 @translationof Intermediate-level contexts - staves
158 Diese Kontexte stellen verschiedene Arten einzelner Notationssysteme
161 @strong{@emph{Staff}}
163 Kümmert sich um Schlüssel, Taktstriche, Tonarten und Versetzungszeichen.
164 Er kann @code{Voice}-Kontexte enthalten.
166 @strong{@emph{RhythmicStaff}}
168 Entspricht @code{Staff}, aber dient zur Notation von Rhythmen: Tonhöhen
169 werden ignoriert und die Noten auf einer einzigen Linie ausgegeben.
171 @strong{@emph{TabStaff}}
173 Ein Kontext um Tabulaturen zu erstellen. Die Standardeinstellung ist
174 eine Gitarrentabulatur mit sechs Notenlinien.
176 @strong{@emph{DrumStaff}}
178 Ein Kontext zur Notation von Perkussion. Er kann
179 @code{DrumVoice}-Kontexte enthalten.
181 @strong{@emph{VaticanaStaff}}
183 Entspricht @code{Staff}, aber eignet sich besonders zum Notensatz des
184 Gregorianischen Chorals.
186 @strong{@emph{MensuralStaff}}
188 Entspricht @code{Staff}, aber eignet sich zum Notensatz von Noten in
189 der Mensuralnotation.
192 @node Unterste Kontexte -- Stimmen
193 @unnumberedsubsubsec Unterste Kontexte -- Stimmen
194 @translationof Bottom-level contexts - voices
196 Stimmen-(@code{Voice}-Kontexte initialisieren bestimmte Eigenschaften
197 und laden bestimmte Engraver. Weil es sich bei Stimmen um die
198 untersten Kontexte handelt, können sie keine weiteren Kontexte enthalten.
200 @strong{@emph{Voice}}
202 Entspricht einer Stimme auf einem Notensystem. Der Kontext kümmert sich
203 um die Umsetzung von Noten, Dynamikzeichen, Hälsen, Balken, diversen Texten,
204 Bögen und Pausen. Wenn mehr als eine Stimme pro System benötigt wird,
205 muss dieser Kontext explizit initialisiert werden.
207 @strong{@emph{VaticanaVoice}}
209 Entspricht @code{Voice}, aber eignet sich besonders zum Notensatz
210 des Gregorianischen Chorals.
212 @strong{@emph{MensuralVoice}}
214 Entspricht @code{Voice}, aber mit Änderungen, um Mensuralnotation
217 @strong{@emph{Lyrics}}
219 Entspricht einer Stimme mit Gesangstext. Kümmert sich um den Satz
220 des Gesangstextes auf einer Zeile.
222 @strong{@emph{DrumVoice}}
224 Der Stimmenkontext in einem Perkussionssystem.
226 @strong{@emph{FiguredBass}}
228 Der Kontext, in dem Generalbassziffern (@code{BassFigure}-Objekte)
229 gesetzt werden, die in der @code{\figuremode}-Umgebung
232 @strong{@emph{TabVoice}}
234 Dieser Stimmenkontext wird in einer Tabulatur (@code{TabStaff}-Kontext)
235 benutzt. Er wird normalerweise implizit erstellt.
237 @strong{@emph{CueVoice}}
239 Ein Stimmenkontext, der Noten in reduzierter Größe ausgibt und
240 vor allem dazu da ist, Stichnoten zu setzen. Siehe auch
241 @ref{Stichnoten formatieren}. Wird normalerweise implizit erstellt,
242 wenn Stichnoten gesetzt werden.
245 @strong{@emph{ChordNames}}
247 Ausgabe von Akkordsymbolen.
250 @node Kontexte erstellen
251 @subsection Kontexte erstellen
252 @translationof Creating contexts
254 In Partituren mit einer Stimme und einem System werden die Kontexte
255 normalerweise automatisch erstellt. In komplizierteren Partituren
256 muss man sie aber direkt erstellen. Es gibt drei Möglichkeiten,
257 Kontexte zu erstellen:
264 @cindex neue Kontexte
265 @cindex Kontexte erstellen
266 @cindex eigene Kontexte erstellen
271 Der einfachste Befehl ist @code{\new}. Er wird zusammen mit dem
272 Kontextnamen vor einem musikalischen Ausdruck eingesetzt, etwa
275 \new @var{Kontext} @var{musik. Ausdruck}
279 wobei @var{Kontext} eine Kontextbezeichnung (wie @code{Staff} oder
280 @code{Voice}) ist. Dieser Befehl erstellt einen neuen Kontext und
281 beginnt mit der Auswertung von @var{musik. Ausdruck} innerhalb
284 Eine praktische Anwendung von @code{\new} ist eine Partitur mit vielen
285 Systemen. Jede Stimme wird auf einem eigenen System notiert, das
286 mit @code{\new Staff} begonnen wird.
288 @lilypond[quote,verbatim,relative=2,ragged-right]
295 Der @code{\new}-Befehl kann den Kontext auch benennen:
298 \new @var{Kontext} = @var{ID} @var{musik. Ausdruck}
301 Dieser vom Benutzer definierte Name wird aber auch nur wirklich
302 benutzt, wenn nicht vorher schon der gleiche Name definiert worden
306 Ähnlich dem @code{\new}-Befehl wird auch mit dem @code{\context}-Befehl
307 ein musikalischer Ausdruck in einen Kontext umgeleitet. Diesem
308 Kontext wird ein expliziter Name zugewiesen. Die Syntax lautet:
311 \context @var{Kontext} = @var{ID} @var{musik. Ausdruck}
314 Diese Art von Befehl sucht nach einem existierenden Kontext vom Typus
315 @var{Kontext} mit der Bezeichnung @var{ID}. Wenn ein derartiger
316 Kontext nicht existiert, wird ein neuer Kontext mit der entsprechenden
317 Bezeichnung erstellt. Das ist nützlich, wenn auf den Kontext später
318 zurückverwiesen werden soll. Um etwa Gesangstext zu einer Melodie
319 hinzuzufügen, wird die Melodie in einem bezeichneten Kontext
323 \context Voice = "@b{Tenor}" @var{musik. Ausdruck}
327 sodass der Text an den Noten ausgerichtet werden kann:
330 \new Lyrics \lyricsto "@b{Tenor}" @var{Gesangstext}
334 Eine andere Möglichkeit für bezeichnete Kontexte ist es, zwei
335 unterschiedliche musikalische Ausdrücke in einen Kontext zu
336 verschmelzen. Im nächsten Beispiel werden Artikulationszeichen
337 und Noten getrennt notiert:
341 Artik = @{ s4-. s4-> @}
345 Dann werden sie kombiniert, indem sie dem selben @code{Voice}-Kontext
350 \new Staff \context Voice = "A" \Noten
351 \context Voice = "A" \Artik
355 @lilypond[quote,ragged-right]
359 \new Staff \context Voice = "A" \music
360 \context Voice = "A" \arts
364 Durch diesen Mechanismus ist es möglich eine Urtextausgabe zu
365 erstellen, mit der optionalen Möglichkeit, bestimmte zusätzliche
366 Artikulationszeichen zu den gleichen Noten hinzuzufügen und so
367 eine editierte Ausgabe zu erhalten.
369 @cindex Kontexte erstellen
372 Der dritte Befehl, um Kontexte zu erstellen, ist:
375 \context @var{Kontext} @var{musik. Ausdruck}
379 Dies entspricht dem @code{\context} mit @code{= @var{ID}}, aber hier
380 wird ein beliebiger Kontext des Typs @var{Kontext} gesucht und der
381 musikalische Ausdruck darin ausgewertet, unabhängig von der Bezeichnung,
382 die dem Kontext gegeben wurde.
384 Diese Variante wird bei musikalischen Ausdrücken benutzt, die auf
385 verschiedenen Ebenen interpretiert werden können. Beispielsweise
386 der @code{\applyOutput}-Befehl (siehe
387 @ref{Eine Funktion auf alle Layout-Objekte anwenden}). Ohne einen
388 expliziten @code{\context} wird die Ausgabe normalerweise einem
389 @code{Voice}-Kontext zugewiesen:
392 \applyOutput #'@var{Kontext} #@var{Funktion} % auf Voice anwenden
395 Damit aber die Funktion auf @code{Score}- oder @code{Staff}-Ebene
396 interpretiert wird, muss folgende Form benutzt werden:
399 \applyOutput #'Score #@var{Funktion}
400 \applyOutput #'Staff #@var{Funktion}
407 @node Kontexte am Leben halten
408 @subsection Kontexte am Leben halten
409 @translationof Keeping contexts alive
411 @cindex Kontexte, am Leben erhalten
412 @cindex Kontexte, Lebensdauer
414 Kontexte werden normalerweise am ersten musikalischen Moment
415 beendet, an dem sie nichts mehr zu tun haben. Ein
416 @code{Voice}-Kontext stirbt also sofort, wenn keine Ereignisse
417 mehr auftreten, @code{Staff}-Kontexte sobald alle in ihnen
418 enthaltenen @code{Voice}-Kontexte keine Ereignisse mehr aufweisen
419 usw. Das kann Schwierigkeiten ergeben, wenn auf frühere
420 Kontexte verwiesen werden soll, die in der Zwischenzeit schon
421 gestorben sind, beispielsweise wenn man Systemwechsel mit
422 @code{\change}-Befehlen vornimmt, wenn Gesangstext einer
423 Stimme mit dem @code{\lyricsto}-Befehl zugewiesen wird oder
424 wenn weitere musikalische Ereignisse zu einem früheren Kontext
425 hinzugefügt werden sollen.
427 Es gibt eine Ausnahme dieser Regel: genau ein @code{Voice}-Kontext
428 innerhalb eines @code{Staff}-Kontextes oder in einer
429 @code{<<...>>}-Konstruktion bleibt immer erhalten bis zum Ende
430 des @code{Staff}-Kontextes oder der @code{<<...>>}-Konstruktion, der ihn einschließt, auch wenn es Abschnitte gibt, in der er nichts zu
431 tun hat. Der Kontext, der erhalten bleibt ist immer der erste,
432 der in der ersten enthaltenden @code{@{...@}}-Konstruktion
433 angetroffen wird, wobei @code{<<...>>}-Konstruktionen ignoriert
436 Jeder Kontext kann am Leben gehalten werden, indem man sicherstellt
437 dass er zu jedem musikalischen Moment etwas zu tun hat.
438 @code{Staff}-Kontexte werden am Leben gehalten, indem man sicherstellt,
439 dass eine der enthaltenen Stimmen am Leben bleibt. Eine Möglichkeit,
440 das zu erreichen, ist es, unsichtbare Pause zu jeder Stimme
441 hinzuzufügen, die am Leben gehalten werden soll. Wenn mehrere
442 Stimmen sporadisch benutzt werden sollen, ist es am sichersten,
443 sie alle am Leben zu halten und sich nicht auf die Ausnahmeregel
444 zu verlassen, die im vorigen Abschnitt dargestellt wurde.
446 Im folgenden Beispiel werden sowohl Stimme A als auch B auf diese
447 Weise für die gesamte Dauer des Stückes am Leben gehalten.
449 @lilypond[quote,verbatim]
450 musicA = \relative c'' { d4 d d d }
451 musicB = \relative c'' { g4 g g g }
454 \new Voice = "A" { s1*5 } % Keep Voice "A" alive for 5 bars
455 \new Voice = "B" { s1*5 } % Keep Voice "B" alive for 5 bars
460 \context Voice = "A" {
464 \context Voice = "B" {
468 \context Voice = "A" { \musicA }
469 \context Voice = "B" { \musicB }
470 \context Voice = "A" { \musicA }
481 @cindex Gesangstext, an einer sporadischen Melodie ausrichten
483 Das nächste Beispiel zeigt eine Melodie, die zeitweise unterbrochen
484 wird und wie man den entsprechenden Gesangstext mit ihr verknüpfen
485 kann, indem man die Stimme am Leben hält. In wirklichen Situationen
486 würden Begleitung und Melodie natürlich aus mehreren Abschnitten bestehen.
488 @lilypond[quote,verbatim]
489 melody = \relative c'' { a4 a a a }
490 accompaniment = \relative c' { d4 d d d }
491 words = \lyricmode { These words fol -- low the mel -- o -- dy }
494 \new Staff = "music" {
496 \new Voice = "melody" {
498 s1*4 % Keep Voice "melody" alive for 4 bars
501 \new Voice = "accompaniment" {
506 \context Voice = "melody" { \melody }
507 \context Voice = "accompaniment" { \accompaniment }
509 \context Voice = "accompaniment" { \accompaniment }
511 \context Voice = "melody" { \melody }
512 \context Voice = "accompaniment" { \accompaniment }
517 \new Lyrics \with { alignAboveContext = #"music" }
518 \lyricsto "melody" { \words }
523 Eine Alternative, die in manchen Umständen besser geeignet sein kann,
524 ist es, einfach unsichtbare Pausen einzufügen, um die Melodie
525 mit der Begleitung passend auszurichten:
527 @lilypond[quote,verbatim]
528 melody = \relative c'' {
534 accompaniment = \relative c' {
540 words = \lyricmode { These words fol -- low the mel -- o -- dy }
544 \new Staff = "music" {
546 \new Voice = "melody" {
550 \new Voice = "accompaniment" {
556 \new Lyrics \with { alignAboveContext = #"music" }
557 \lyricsto "melody" { \words }
564 @node Umgebungs-Plugins verändern
565 @subsection Umgebungs-Plugins verändern
566 @translationof Modifying context plug-ins
568 Notationskontexte (wie @code{Score} oder @code{Staff}) speichern
569 nicht nur Eigenschaften, sie enthalten auch Plugins (@qq{engraver}
570 genannt), die die einzelnen Notationselemente erstellen. Ein
571 @code{Voice}-Kontext enthält beispielsweise einen
572 @code{Note_head_engraver}, der die Notenköpfe erstellt, und ein
573 @code{Staff}-Kontext einen @code{Key_signature_engraver}, der die
576 Eine vollständige Erklärung jedes Plugins findet sich in
578 @rinternals{Engravers and Performers}.
581 Referenz der Interna: @expansion{} Translation @expansion{} Engravers.
583 Alle Kontexte sind erklärt in
585 @rinternals{Contexts},
588 Referenz der Interna: @expansion{} Translation @expansion{} Context,
590 wobei die in diesem Kontext vorkommenden Engraver aufgelistet sind.
592 Es kann teilweise nötig sein, diese Engraver umzupositionieren. Das
593 geschieht, indem man einen neuen Kontext mit @code{\new} oder
594 @code{\context} beginnt und ihn dann verändert:
600 \new @var{context} \with @{
613 @dots{} steht hier für die Bezeichnung des Engravers. @code{\consists}
614 fügt einen Engraver hinzu und @code{\remove} entfernt ihn.
615 Es folgt ein einfaches Beispiel, in dem der
616 @code{Time_signature_engraver} (Engraver für den Takt) und der
617 @code{Clef_engraver} (Engraver für den Schlüssel) aus dem
618 @code{Staff}-Kontext entfernt werden:
620 @lilypond[quote,relative=1,verbatim]
626 \remove "Time_signature_engraver"
627 \remove "Clef_engraver"
634 Das zweite Notensystem enthält keine Taktangabe und keinen Notenschlüssel.
635 Das ist eine recht brutale Methode, Objekte zu verstecken, weil es sich
636 auf das gesamte System auswirkt. Diese Methode beeinflusst auch die
637 Platzaufteilung, was erwünscht sein kann. Vielfältigere Methoden,
638 mit denen Objekte unsichtbar gemacht werden können, finden sich in
639 @rlearning{Sichtbarkeit und Farbe von Objekten}.
641 Das nächste Beispiel zeigt eine Anwendung in der Praxis. Taktstriche
642 und Taktart werden normalerweise in einer Partitur synchronisiert. Das
643 geschieht durch @code{Timing_translator} und @code{Default_bar_line_engraver}.
644 Diese Plugins sorgen sich um die Verwaltung der Taktzeiten und die
645 Stelle innerhalb des Taktes, zu dem eine Note erscheint usw. Indem
646 man diese Engraver aus dem @code{Score}-Kontext in den @code{Staff}-Kontext
647 verschiebt, kann eine Partitur erstellt werden, in welcher
648 jedes System eine unterschiedliche Taktart hat:
650 @cindex polymetrische Partitur
651 @cindex Taktarten, mehrere in Partitur
652 @cindex Taktarten, unterschiedliche per System
654 @lilypond[quote,verbatim]
658 \consists "Timing_translator"
659 \consists "Default_bar_line_engraver"
665 \consists "Timing_translator"
666 \consists "Default_bar_line_engraver"
675 \remove "Timing_translator"
676 \remove "Default_bar_line_engraver"
684 Normalerweise spielt es keine Rolle, in welcher Reihenfolge
685 Engraver angegeben werden, aber in einigen Spezialfällen
686 ist die Reihenfolge sehr wichtig. Das kann beispielsweise
687 vorkommen, wenn ein Engraver eine Eigenschaft erstellt und
688 ein anderer von ihr liest, oder ein Engraver erstellt ein
689 Grob und ein anderer wertet es aus. Die Reihenfolge, in der
690 Engraver angegeben werden, ist die Reihenfolge, in der sie
691 aufgerufen werden, um ihre Tätigkeiten auszuführen.
693 Folgende Reihenfolgen müssen beachtet werden: der
694 @code{Bar_engraver} muss normalerweise zuerst kommen, und
695 der @code{New_fingering_engraver} muss vor dem
696 @code{Script_column_engraver} kommen. Es gibt möglicherweise weitere
697 Abhängigkeiten von der Reihenfolge geben.
700 @node Die Standardeinstellungen von Kontexten ändern
701 @subsection Die Standardeinstellungen von Kontexten ändern
702 @translationof Changing context default settings
704 Die Kontexteinstellungen, die standardmäßig in
705 @code{Score}, @code{Staff} und @code{Voice}-Kontexten
706 benutzt werden, können in einer @code{\layout}-Umgebung
707 eingestellt werden, wie das folgende Beispiel zeigt. Die
708 @code{\layout}-Umgebung sollte innerhalb der
709 @code{\score}-Umgebung gesetzt werden, auf die sie sich
710 auswirken soll, aber außerhalb von Notation.
712 Auch muss der @code{\set}-Befehl und der Kontext weggelassen
713 werden, wenn die Einstellungen für den Kontext auf diese Weise
716 @lilypond[quote,verbatim]
719 a4^"Really small, thicker stems, no time signature" a a a
726 \override Stem #'thickness = #4.0
727 \remove "Time_signature_engraver"
733 Hier zeigt der @code{\Staff}-Befehl an, dass die folgenden Einstellungen
734 sich auf alle Systeme in dieser Partitur erstrecken sollen.
736 Veränderungen können auch für den @code{Score}- oder alle
737 @code{Voice}-Kontexte auf gleiche Weise vorgenommen werden.
741 Es ist nicht möglich, Kontextänderungen als Variable zu definieren und
742 sie dann in der @code{\context}-Definition anzuwenden, indem man die
745 Der Befehl @code{\Staff \RemoveEmptyStaves} überschreibt die
746 aktuellen Einstellungen für @code{Staff}. Wenn die Einstellungen
747 für Systeme verändert werden sollen, die @code{\Staff \RemoveEmptyStaves}
748 benutzen, müssen die Veränderungen gemacht werden, nachdem
749 @code{\Staff \RemoveEmptyStaves} aufgerufen wurde, etwa:
754 \Staff \RemoveEmptyStaves
756 \override Stem #'thickness = #4.0
762 @node Neue Kontexte definieren
763 @subsection Neue Kontexte definieren
764 @translationof Defining new contexts
766 @cindex Kontexte, neue definieren
767 @cindex Engraver, in Kontexte einfügen
782 Bestimme Kontexte, wie @code{Staff} oder @code{Voice}, werden
783 erstellt, indem man sie mit einer Musikumgebung aufruft. Es ist
784 aber auch möglich, eigene neue Kontexte zu definieren, in denen
785 dann unterschiedliche Engraver benutzt werden.
787 Das folgende Beispiel zeigt, wie man etwa @code{Voice}-Kontexte
788 von Grund auf neu bauen kann. Ein derartiger Kontext ähnelt
789 @code{Voice}, es werden aber nur zentrierte Schrägstriche als
790 Notenköpfe ausgegeben. Das kann benutzt werden, um Improvisation
791 in Jazzmusik anzuzeigen.
794 @lilypond[quote,ragged-right]
797 \type "Engraver_group"
798 \consists "Note_heads_engraver"
799 \consists "Rhythmic_column_engraver"
800 \consists "Text_engraver"
801 \consists Pitch_squash_engraver
802 squashedPosition = #0
803 \override NoteHead #'style = #'slash
804 \override Stem #'transparent = ##t
808 \accepts "ImproVoice"
812 a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
813 c4 c^"ausziehen" c_"während des Spiels :)" c }
818 Diese Einstellungen werden innerhalb der @code{\context}-Umgebung
819 innerhalb der @code{\layout}-Umgebung definiert:
829 Der Beispielcode des folgenden Abschnittest muss anstelle der Punkte
830 im vorigen Beispiel eingesetzt werden.
832 Zuerst ist es nötig eine Bezeichnung für den neuen Kontext zu
839 Weil dieser neue Kontext ähnlich wie @code{Voice} ist, sollen die Befehle,
840 die in @code{Voice}-Kontexten funktionieren, auch
841 in dem neuen Kontext funktionieren. Das wird erreicht, indem der
842 Kontext als Alias @code{Voice} erhält:
848 Der Kontext gibt Noten und Text aus, darum müssen wir die Engraver
849 hinzufügen, die für diese Aktionen zuständig sind:
852 \consists Note_heads_engraver
853 \consists Text_engraver
857 aber die Noten sollen nur auf der mittleren Linie ausgegeben werden:
860 \consists Pitch_squash_engraver
861 squashedPosition = #0
864 Der @code{Pitch_squash_engraver} verändert Notenköpfe (die vom
865 @code{Note_heads_engraver} erstellt werden) und setzt ihre vertikale
866 Position auf den Wert von @code{squashedPosition}, in diesem Fall ist
869 Die Noten sehen wie ein Querstrich aus und haben keine Hälse:
872 \override NoteHead #'style = #'slash
873 \override Stem #'transparent = ##t
876 Alle diese Engraver müssen zusammenarbeiten, und das wird erreicht mit
877 einem zusätzlichen Plugin, das mit dem Befehl @code{\type} gekennzeichnet
878 werden muss. Dieser Typ solle immer @code{Engraver_group} lauten:
881 \type "Engraver_group"
884 Alles zusammen haben wir folgende Einstellungen:
889 \type "Engraver_group"
890 \consists "Note_heads_engraver"
891 \consists "Text_engraver"
892 \consists Pitch_squash_engraver
893 squashedPosition = #0
894 \override NoteHead #'style = #'slash
895 \override Stem #'transparent = ##t
903 Kontexte sind hierarchisch. Wie wollen, dass @code{ImproVoice}
904 sich als Unterkontext von @code{Staff} erkennt, wie eine normale
905 Stimme. Darum wird die Definition von @code{Staff} mit dem
906 @code{\accepts}-Befehl verändert:
918 Das Gegenteil von @code{\accepts} ist @code{\denies} (verbietet), was
919 manchmal gebraucht werden kann, wenn schon existierende Kontext-Definitionen
920 wieder benutzt werden sollen.
922 Beide Definitionen müssen in die @code{\layout}-Umgebung geschrieben
933 \accepts "ImproVoice"
938 Jetzt kann die Notation zu Beginn des Abschnitts folgendermaßen
947 c c_"während des Spielens :)"
954 @node Kontexte aneinander ausrichten
955 @subsection Kontexte aneinander ausrichten
956 @translationof Aligning contexts
958 Neue Kontexte können über oder unter existierenden ausgerichtet
959 werden. Das kann nützlich sein, wenn man eine Chorparitur
960 oder Ossia schreiben will:
964 @funindex alignAboveContext
965 @funindex alignBelowContext
967 @lilypond[quote,ragged-right]
970 \relative c' \new Staff = "main" {
973 \new Staff \with { alignAboveContext = #"main" } \ossia
980 @cindex verschachtelte Kontexte
981 @cindex Kontexte, verschachtelt
988 Kontexte wie @code{PianoStaff} können andere Kontexte innerhalb
989 enthalten. Kontexte, die als innere Kontexte akzeptiert werden,
990 werden in einer @qq{accepts}-Liste für den bestimmten Kontext
991 definiert. Kontexte, die sich nicht in dieser Liste finden,
992 werden unter den äußeren Kontext gesetzt. Der
993 @code{PianoStaff}-Kontext etwa akzeptiert die Kontexte @code{Staff}
994 und @code{FiguredBass} innerhalb, aber beispielsweise keinen
995 @code{Lyrics}-(Gesangstext)-Kontext. In dem folgenden Beispiel
996 wird deshalb der Gesangstext unter das gesamte Klaviersystem
997 gesetzt, anstatt zwischen die beiden Notensysteme zu kommen:
999 @lilypond[verbatim,quote,relative=1]
1002 \new Staff { e4 d c2 }
1003 \addlyrics { Three blind mice }
1011 Die @qq{accepts}-Liste eines Kontextes kann verändert werden, so
1012 dass sie weitere innere Kontexte akzeptiert. Wenn also der
1013 Gesangstext als Teil eines Klaviersystems gesetzt werden soll,
1014 müsste man schreiben:
1016 @lilypond[verbatim,quote,relative=1]
1017 \new PianoStaff \with { \accepts Lyrics }
1019 \new Staff { e4 d c2 }
1020 \addlyrics { Three blind mice }
1028 Das Gegenteil von @code{\accepts} ist @code{\denies}; es bedeutet,
1029 dass ein Kontext aus der @code{\accepts}-Liste gestrichen wird.
1032 @node Die Referenz der Programminterna erklärt
1033 @section Die Referenz der Programminterna erklärt
1034 @translationof Explaining the Internals Reference
1037 * Zurechtfinden in der Programmreferenz::
1038 * Layout-Schnittstellen::
1039 * Die Grob-Eigenschaften::
1040 * Benennungskonventionen::
1044 @node Zurechtfinden in der Programmreferenz
1045 @subsection Zurechtfinden in der Programmreferenz
1046 @translationof Navigating the program reference
1048 Arbeit mit der Referenz der Interna soll hier an
1049 einigen Beispiel illustriert werden. Die Referenz
1050 der Interna existiert nur auf Englisch,
1051 darum sind auch die Beispiele dieses Abschnittes nicht
1054 Folgende Aufgabe wird bearbeitet: Der Fingersatz aus dem Beispiel
1055 unten soll verändert werden:
1057 @lilypond[quote,relative=2,verbatim]
1063 In der Dokumentation über Fingersatz (in
1064 @ref{Fingersatzanweisungen}) gibt es folgenden Abschnitt:
1067 @strong{Siehe auch:}
1069 Referenz der Interna: @rinternals{Fingering}.
1073 @c all ignored text just left out
1076 Die Referenz der Interna gibt es als HTML-Dokument. Sie sollten sie als
1077 HTML-Dokument lesen, entweder online oder indem Sie die HTML-Dokumentation
1078 herunterladen. Dieser Abschnitt ist sehr viel schwieriger zu verstehen,
1079 wenn Sie die PDF-Version verwenden.
1082 Gehen Sie über diesen Link zum Abschnitt @rinternals{Fingering}.
1083 Oben auf der Seite findet sich:
1086 Fingering objects are created by: @rinternals{Fingering_engraver} and
1087 @rinternals{New_fingering_engraver}.
1090 Indem Sie die Links in der Referenz der Interna folgen, können Sie
1091 verfolgen, wie LilyPond intern arbeitet:
1095 @item @rinternals{Fingering}:
1096 @rinternals{Fingering} objects are created by:
1097 @rinternals{Fingering_engraver}
1099 @item @rinternals{Fingering_engraver}:
1100 Music types accepted: @rinternals{fingering-event}
1102 @item @rinternals{fingering-event}:
1103 Music event type @code{fingering-event} is in Music expressions named
1104 @rinternals{FingeringEvent}
1107 @c translation of the above
1108 Fingersatz-Objekte werden also durch den @code{Fingering_engraver}
1109 erstellt, welcher folgende Musikereignistypen akzeptiert:
1110 @code{fingering-event}. Ein Musikereignis vom Typ
1111 @code{fingering-event} ist ein musikalischer Ausdruck mit der
1112 Bezeichnung @rinternals{FingeringEvent}.
1114 Dieser Pfad geht genau die entgegengesetzte Richtung von LilyPonds
1115 Wirkungsweise: er beginnt bei der graphischen Ausgabe und
1116 arbeitet sich voran zur Eingabe. Man könnte auch mit einem
1117 Eingabe-Ereignis starten und dann die Links zurückverfolgen,
1118 bis man zum Ausgabe-Objekt gelangt.
1121 Die Referenz der Interna kann auch wie ein normales Dokument
1122 durchsucht werden. Sie enthält Kapitel über
1124 @rinternals{Music definitions},
1127 @code{Music definitions},
1129 über @rinternals{Translation} und @rinternals{Backend}. Jedes
1130 Kapitel listet alle die Definitionen und Eigenschaften auf,
1131 die benutzt und verändert werden können.
1134 @node Layout-Schnittstellen
1135 @subsection Layout-Schnittstellen
1136 @translationof Layout interfaces
1138 @cindex Layout-Schnittstelle
1139 @cindex Schnittstelle, Layout-
1142 Die HTML-Seite, die im vorigen Abschnitt betrachtet wurde,
1143 beschreibt ein Layoutobjekt mit der Bezeichnung
1144 @code{Fingering}. Ein derartiges Objekt ist ein Symbol
1145 in der Partitur. Es hat Eigenschaften, die bestimmte
1146 Zahlen speichern (wie etwa Dicke und Richtung), aber auch
1147 Weiser auf verwandte Objekte. Ein Layoutobjekt wird auch
1148 als @qq{Grob} bezeichnet, die Abkürzung für @emph{Gr}aphisches
1149 @emph{Ob}jekt. Mehr Information zu Grobs findet sich in
1150 @rinternals{grob-interface}.
1152 Die Seite zu @code{Fingering} enthält Definitionen für das
1153 @code{Fingering}-Objekt. Auf der Seite steht etwa:
1156 @code{padding} (dimension, in staff space):
1162 was bedeutet, dass der Abstand zu anderen Objekten mindestens
1163 0.5 Notenlinienabstände beträgt.
1165 Jedes Layoutobjekt kann mehrere Funktionen sowohl als typographisches
1166 als auch als Notationselement einnehmen. Das Fingersatzobjekt
1167 beispielsweise hat folgende Aspekte:
1171 Seine Größe ist unabhängig von der horizontalen Platzaufteilung,
1172 anders als etwa bei Legatobögen.
1175 Es handelt sich um Text, normalerweise sehr kurz.
1178 Dieser Text wird durch ein Glyph einer Schriftart gesetzt,
1179 anders als bei Legatobögen.
1182 Der Mittelpunkt des Symbols sollte horizontal mit dem
1183 Mittelpunkt des Notenkopfes ausgerichtet werden.
1186 Vertikal wird das Objekt neben die Note und das Notensystem
1190 Die vertikale Position wird auch mit anderen Textelementen
1195 Jeder dieser Aspekte findet sich in sogenannten Schnittstellen
1196 (engl. interface), die auf der @rinternals{Fingering}-Seite
1197 unten aufgelistet sind:
1200 This object supports the following interfaces:
1201 @rinternals{item-interface},
1202 @rinternals{self-alignment-interface},
1203 @rinternals{side-position-interface}, @rinternals{text-interface},
1204 @rinternals{text-script-interface}, @rinternals{font-interface},
1205 @rinternals{finger-interface}, and @rinternals{grob-interface}.
1208 Ein Klick auf einen der Links öffnet die Seite der entsprechenden
1209 Schnittstelle. Jede Schnittstelle hat eine Anzahl von Eigenschaften.
1210 Einige sind nicht vom Benutzer zu beeinflussen (@qq{interne
1211 Eigenschaften}), andere aber können verändert werden.
1213 Es wurde immer von einem @code{Fingering}-Objekt gesprochen, aber
1214 eigentlich handelt es sich nicht um sehr viel. Die Initialisierungsdatei
1215 @file{scm/@/define@/-grobs@/.scm} zeigt den Inhalt dieses @qq{Objekts}
1216 (zu Information, wo diese Dateien sich finden siehe
1217 @rlearning{Mehr Information}):
1222 (avoid-slur . around)
1223 (slur-padding . 0.2)
1224 (staff-padding . 0.5)
1225 (self-alignment-X . 0)
1226 (self-alignment-Y . 0)
1227 (script-priority . 100)
1228 (stencil . ,ly:text-interface::print)
1229 (direction . ,ly:script-interface::calc-direction)
1230 (font-encoding . fetaText)
1231 (font-size . -5) ; don't overlap when next to heads.
1232 (meta . ((class . Item)
1233 (interfaces . (finger-interface
1235 text-script-interface
1237 side-position-interface
1238 self-alignment-interface
1239 item-interface))))))
1243 Wie man sehen kann, ist das Fingersatzobjekt nichts anderes als
1244 eine Ansammlung von Variablen, und die Internetseite der
1245 Referenz der Interna ist direkt aus diesen Anweisungen generiert.
1248 @node Die Grob-Eigenschaften
1249 @subsection Die Grob-Eigenschaften
1250 @translationof Determining the grob property
1252 Die Position der @b{2} aus dem Beispiel unten soll also geändert werden:
1254 @lilypond[quote,relative=2,verbatim]
1260 Weil die @b{2} vertikal an der zugehörigen Note ausgerichtet ist,
1261 müssen wir uns mit der Schnittstelle auseinander setzen, die diese
1262 Positionierung veranlasst. Das ist hier @code{side-position-interface}.
1263 Auf der Seite für diese Schnittstelle heißt es:
1266 @code{side-position-interface}
1268 Position a victim object (this one) next to other objects (the
1269 support). The property @code{direction} signifies where to put the
1270 victim object relative to the support (left or right, up or down?)
1273 @cindex Verschiebung
1276 Darunter wird die Variable @code{padding} (Verschiebung) beschrieben:
1281 (dimension, in staff space)
1283 Add this much extra space between objects that are next to each other.
1287 Indem man den Wert von @code{padding} erhöht, kann die Fingersatzanweisung
1288 weiter weg von der Note gesetzt werden. Dieser Befehl beispielsweise
1289 fügt drei Notenlinienzwischenräume zwischen die Zahl und den Notenkopf:
1292 \once \override Voice.Fingering #'padding = #3
1295 Wenn dieser Befehl in den Quelltext eingefügt wird, bevor der
1296 Fingersatz notiert ist, erhält man folgendes:
1298 @lilypond[quote,relative=2,verbatim]
1299 \once \override Voice.Fingering #'padding = #3
1305 In diesem Fall muss die Veränderung speziell für den @code{Voice}-Kontext
1306 definiert werden. Das kann auch aus der Referenz der Interna entnommen
1307 werden, da die Seite des @rinternals{Fingering_engraver} schreibt:
1310 Fingering_engraver is part of contexts: @dots{} @rinternals{Voice}
1314 @node Benennungskonventionen
1315 @subsection Benennungskonventionen
1316 @translationof Naming conventions
1318 Die Bezeichnungen für Funktionen, Variablen, Engraver und Objekte
1319 folgen bestimmten Regeln:
1324 Scheme-Funktionen: kleinbuchstaben-mit-bindestrichen
1327 Scheme-Funktionen: ly:plus-scheme-stil
1330 Musikalische Ereignisse, Musikklassen und Musikeigenschaften: wie-scheme-funktionen
1333 Grob-Schnittstellen: scheme-stil
1336 backend-Eigenschaften: scheme-stil (aber X und Y)
1339 Kontexte: Großbuchstabe, oder GroßbuchstabeZwischenWörtern (CamelCase)
1342 Kontext-Eigenschaften: kleinbuchstabeMitFolgendenGroßbuchstaben
1345 Engraver: Großbuchstabe_gefolgt_von_kleinbuchstaben_mit_unterstrichen
1351 @node Eigenschaften verändern
1352 @section Eigenschaften verändern
1353 @translationof Modifying properties
1356 * Grundlagen zum Verändern von Eigenschaften::
1358 * Der override-Befehl::
1359 * Der tweak-Befehl::
1360 * set versus override::
1361 * Alisten verändern::
1365 @node Grundlagen zum Verändern von Eigenschaften
1366 @subsection Grundlagen zum Verändern von Eigenschaften
1367 @translationof Overview of modifying properties
1369 Jeder Kontext ist verantwortlich für die Erstellung bestimmter
1370 graphischer Objekte. Die Einstellungen für diese Objekte werden
1371 auch in dem Kontext gespeichert. Wenn man diese Einstellungen
1372 verändert, kann die Erscheinung der Objekte geändert werden.
1374 Es gibt zwei unterschiedliche Eigenschaftenarten, die in Kontexten
1375 gespeichert werden: Kontexteigenschaften und Grob-Eigenschaften.
1376 Kontexteigenschaften sind Eigenschaften, die sich auf den gesamten Kontext
1377 beziehen und seine Darstellung beinflussen. Grob-Eigenschaften dagegen
1378 wirken sich nur auf bestimmte graphische Objekte aus, die in einem
1379 Kontext dargestellt werden.
1381 Die @code{\set}- und @code{\unset}-Befehle werden benutzt, um die Werte
1382 von Kontexteigenschaften zu ändern. Die Befehle @code{\override} und
1383 @code{\revert} hingegen verändern die Werte von Grob-Eigenschaften.
1386 Die Syntax hierzu lautet:
1389 \override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #@var{Wert}
1393 @var{Bezeichnung} ist die Bezeichnung eines graphischen Objekts,
1394 wie @code{Stem} (Hals) oder @code{NoteHead} (Notenkopf), und
1395 @var{Eigenschaft} ist eine interne Variable des Formatierungssystems
1396 (eine @qq{Grob-Eigenschaft} oder @qq{Layout-Eigenschaft}). Diese
1397 Eigenschaft ist ein Symbol, muss also mit einem Anführungsstrich
1398 versehen werden. Wie die Felder @var{Bezeichnung}, @var{Eigenschaft}
1399 und @var{Wert} richtig gefüllt werden, zeigt der Abschnitt
1400 @ref{Eigenschaften verändern}. Hier wird nur die Funktionalität des
1406 \override Staff.Stem #'thickness = #4.0
1410 bewirkt, dass der Notenhals dicker gesetzt wird (Standard ist
1411 1.3, die Dicke der Notenlinie entspricht dem Wert 1). Da der
1412 Befehl den Kontext @code{Staff} angibt, wirkt er sich nur auf
1413 das gerade aktuelle Notensystem aus. Andere Systeme behalten
1414 ihr normales Aussehen. Hier ein Beispiel mit diesem Befehl:
1416 @lilypond[quote,verbatim,relative=2]
1418 \override Staff.Stem #'thickness = #4.0
1424 Der @code{\override}-Befehl verändert die Definitionen von
1425 @code{Stem} (Hals) innerhalb des aktuellen @code{Staff}
1426 (Notensystems). Nachdem der Befehl gelesen wurde, werden
1427 alle Hälse dicker gesetzt.
1429 Wie auch bei dem @code{\set}-Befehl kann auch hier der
1430 Kontext ausgelassen werden, wobei dann immer implizit der
1431 @code{Voice}-Kontext angenommen wird. Mit einem zusätzlichen
1432 @code{\once} wirkt sich die Änderung nur einmal aus:
1434 @lilypond[quote,verbatim,relative=2]
1436 \once \override Stem #'thickness = #4.0
1441 Der @code{\override}-Befehl muss geschrieben sein, bevor das Objekt
1442 begonnen wird. Wenn also ein @emph{Strecker}-Objekt wie etwa
1443 ein Bogen verändert werden soll, muss der @code{\override}-Befehl
1444 schon geschrieben werden, bevor das Objekt begonnen wird. In dem
1447 @lilypond[quote,verbatim,relative=2]
1448 \override Slur #'thickness = #3.0
1450 \override Beam #'beam-thickness = #0.6
1455 ist der Bogen dicker, der Balken aber nicht. Das liegt daran, dass der Befehl
1456 zum Ändern des @code{Beam}-Objekts erst gesetzt wurde, nachdem der Balken
1459 Der @code{\revert}-Befehl macht alle Änderungen rückgängig, die mit einem
1460 @code{\override}-Befehl vorgenommen worden sind, dabei werden allerdings
1461 nur Einstellungen betroffen, die sich im gleichen Kontext befinden. Der
1462 @code{\revert}-Befehl des folgenden Beispiels bewirkt also gar nichts,
1463 weil er für den falschen Kontext gefordert wird.
1466 \override Voice.Stem #'thickness = #4.0
1467 \revert Staff.Stem #'thickness
1470 Einige veränderbare Optionen werden als Untereigenschaften (engl.
1471 subproperties) bezeichnet und befinden sich innerhalb von den
1472 normalen Eigenschaften. Wenn man sie verändern will, nimmt der
1473 Befehl folgende Form an:
1475 @c leave this as a long long
1477 \override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} #'@var{Untereigenschaft} = #@var{Wert}
1484 \override Stem #'(details beamed-lengths) = #'(4 4 3)
1489 Referenz der Interna:
1490 @rinternals{OverrideProperty},
1491 @rinternals{RevertProperty},
1492 @rinternals{PropertySet},
1493 @rinternals{Backend},
1494 @rinternals{All layout objects}.
1499 Das Back-end ist nicht sehr streng bei der Überprüfung
1500 der Typen von Objekteigenschaften. Auf sich selbst verweisende
1501 Bezüge in Scheme-Werten der Eigenschaften können Verzögerung
1502 oder einen Absturz des Programms hervorrufen.
1506 @node Der set-Befehl
1507 @subsection Der @code{@bs{}set}-Befehl
1508 @translationof The set command
1510 @cindex Eigenschaften
1511 @cindex Verändern von Eigenschaften
1516 Jeder Kontext kann unterschiedliche @emph{Eigenschaften} besitzen,
1517 Variablen, die in diesem Kontext definiert sind. Sie können
1518 während der Interpretation des Kontextes verändert werden. Hierzu
1519 wird der @code{\set}-Befehl eingesetzt:
1522 \set @var{Kontext}.@var{Eigenschaft} = #@var{Wert}
1525 @var{Wert} ist ein Scheme-Objekt, weshalb ihm @code{#} vorangestellt
1528 Kontexteigenschaften werden üblicherweise mit @code{kleinGroßbuchstabe}
1529 benannt. Sie kontrollieren vor allem die Übersetzung von Musik in
1530 Notation, wie etwa @code{localKeySignature}, welche bestimmt, wann
1531 ein Taktstrich gesetzt werden muss. Kontexteigenschaften können
1532 ihren Wert mit der Zeit ändern, während eine Notationsdatei interpretiert
1533 wird. Ein gutes Beispiel dafür ist @code{measurePosition}, was die
1534 Position der Noten im Takt angibt. Kontexteigenschaften werden mit dem
1535 @code{\set}-Befehl verändert.
1537 Mehrtaktpausen etwa können in einen Takt zusammengefasst werden, wenn die
1538 Kontexteigenschaft @code{skipBars} (Takte überspringen) auf @code{#t}
1539 (wahr) gesetzt wird:
1541 @lilypond[quote,verbatim,relative=2]
1543 \set Score.skipBars = ##t
1547 Wenn das @var{Kontext}-Argument ausgelassen wird, bezieht sich
1548 der Befehl auf den gerade aktiven unterstmöglichen Kontext,
1549 üblicherweise @code{ChordNames}, @code{Voice} oder
1552 @lilypond[quote,verbatim,relative=2]
1553 \set Score.autoBeaming = ##f
1557 \set autoBeaming = ##t
1565 Die Änderung wird zur Laufzeit während der Musik interpretiert, sodass
1566 diese Einstellung sich nur auf die zweite Gruppe von Achteln auswirkt.
1568 Dabei gilt zu beachten, dass der unterste Kontext nicht immer die
1569 Eigenschaft enthält, die verändert werden soll. Wenn man
1570 beispielsweise @code{skipBars} aus dem oberen Beispiel
1571 ohne Angabe des Kontextes zu verändern sucht, hat der Befehl
1572 keine Auswirkung, weil er sich auf den @code{Voice}-Kontext
1573 bezieht, die Eigenschaft sich aber im @code{Score}-Kontext
1576 @lilypond[quote,verbatim,relative=2]
1582 Kontexte sind hierarchisch angeordnet. Wenn ein übergeordneter
1583 Kontext angegeben wird, etwa @code{Staff}, dann beziehen sich
1584 die Änderungen auf alle Stimmen (@code{Voice}), die in diesem
1585 Kontext enthalten sind.
1590 Es gibt auch einen @code{\unset}-Befehl:
1593 \unset @var{Kontext}.@var{Eigenschaft}
1597 der bewirkt, dass die vorgenommenen Definitionen für @var{Eigenschaft}
1598 entfernt werden. Dieser Befehl macht nur Einstellungen im richtigen
1599 Kontext rückgängig. Wenn also im @code{Staff}-Kontext die
1600 Bebalkung ausgeschaltet wird:
1602 @lilypond[quote,verbatim,relative=2]
1603 \set Score.autoBeaming = ##t
1608 \unset Score.autoBeaming
1616 Wie für @code{\set} muss das @var{Kontext}-Argument für den untersten
1617 Kontext nicht mitangegeben werden. Die zwei Versionen
1620 \set Voice.autoBeaming = ##t
1621 \set autoBeaming = ##t
1624 verhalten sich gleich, wenn die gegenwärtige Basis der
1625 @code{Voice}-Kontext ist.
1630 Einstellungen, die nur einmal vorgenommen werden sollen, können
1631 mit @code{\once} notiert werden, etwa:
1633 @lilypond[quote,verbatim,relative=2]
1635 \once \set fontSize = #4.7
1640 Eine vollständige Beschreibung aller vorhandenen Kontexteigenschaften
1641 findet sich in der Referenz der Interna, siehe
1643 @rinternals{Tunable context properties}.
1646 @qq{Translation @expansion{} Tunable context properties}.
1651 Internals Reference:
1653 @rinternals{Tunable context properties}.
1657 @node Der override-Befehl
1658 @subsection Der @code{\\override}-Befehl
1659 @translationof The override command
1661 @cindex Grob-Eigenschaften
1662 @cindex Eigenschaften von Grob
1663 @cindex graphische Objekte, Eigenschaften
1668 Es gibt eine besondere Art von Kontexteigenschaft: die Grob-Beschreibung.
1669 Grob-Beschreibungen werden mit @code{GroßGroßbuchstabe} benannt. Sie
1670 enthalten @qq{Standardeinstellungen} für ein bestimmtes Grob als eine
1671 assoziative Liste. Siehe @file{scm/@/define@/-grobs@/.scm} für die
1672 Einstellungen aller Grob-Beschreibungen. Grob-Beschreibungen werden
1673 mit @code{\override} verändert.
1675 @code{\override} ist eigentlich eine Kurzform, der Befehl
1678 \override @var{Kontext}.@var{GrobBezeichnung} #'@var{Eigenschaft} = #@var{Wert}
1684 \set @var{Kontext}.@var{GrobBezeichnung} =
1685 #(cons (cons '@var{Eigenschaft} @var{Wert})
1686 <vorheriger Wert von @var{Kontext}.@var{GrobBezeichnung}>)
1689 Der Wert von @code{Kontext}.@code{GrobBezeichnung} (die assoz. Liste @qq{alist}) wird benutzt um die Eigenschaften von individuellen Grobs
1690 zu initialisieren. Grobs haben Eigenschaften, die im Scheme-Stil mit
1691 @code{bindestrich-wörtern} benannt sind. Diese Werte der Grob-Eigenschaften
1692 verändern sich während des Notensetzens: LilyPonds Notensatz heißt im
1693 Grunde, die Eigenschaften mit Callback-Fuktionen auszurechnen.
1695 Beispielsweise kann die Dicke eines Notenhalses verändert werden, indem
1696 man die @code{thickness}-Eigenschaft des @code{Stem}-Objekts verändert:
1698 @lilypond[quote, verbatim, relative=2]
1700 \override Voice.Stem #'thickness = #3.0
1704 Wenn kein Kontext angegeben wird, wird der tiefste aktuelle Kontext
1707 @lilypond[quote, verbatim, relative=2]
1708 { \override Staff.Stem #'thickness = #3.0
1712 \override Stem #'thickness = #0.5
1721 @cindex rückgängig machen von Kontextveränderungen
1722 @cindex Kontextveränderungen rückgängig machen
1723 @cindex override rückgängig machen
1724 @cindex \override rückgängig machen
1729 Die Auswirkungen von @code{\override} können mit @code{\revert} wieder
1730 rückgängig gemacht werden:
1732 @lilypond[quote, verbatim, relative=2]
1734 \override Voice.Stem #'thickness = #3.0
1736 \revert Voice.Stem #'thickness
1740 Die Auswirkungen von @code{\override} und @code{\revert} wirken sich auf alle
1741 Grobs im entsprechenden Kontext aber der Stelle aus, an der sie gesetzt werden:
1743 @lilypond[quote, verbatim, relative=2]
1748 \override Staff.Stem #'thickness = #3.0
1752 \revert Staff.Stem #'thickness
1759 @cindex Veränderung von Kontexten nur einmal
1760 @cindex Einmal verändern von Kontexten
1761 @cindex Kontexte, einmal verändern
1762 @cindex \override, nur einmal
1767 @code{\once} kann zusammen mit @code{\override} benutzt werden,
1768 um nur den aktuellen Zeitwert zu verändern:
1770 @lilypond[quote, verbatim, relative=2]
1774 \override Stem #'thickness = #3.0
1778 \once \override Stem #'thickness = #3.0
1787 @cindex Referenz der Interna
1788 @cindex Grafische Objekte, Finden
1789 @cindex Finden von graphischen Objekten
1790 @cindex Beschreibung von graphischen Objekten
1791 @cindex Grafische Objekte, Beschreibung
1792 @cindex Grob, Beschreibung
1793 @cindex Veränderungen der Einstellungen
1794 @cindex Einstellungen verändern
1799 Viele Eigenschaften können unabhängig von der Art der Daten, die
1800 sie enthalten, ausgeschaltet werden, indem man sie als @qq{falsch}
1801 (@code{##f}) definiert. Dadurch wird diese Eigenschaft von LilyPond
1802 ignoriert. Das ist insbesondere nützlich, wenn man Grob-Eigenschaften
1803 ausschalten will, die Probleme verursachen.
1809 Referenz der Interna:
1810 @rinternals{Backend}.
1813 @node Der tweak-Befehl
1814 @subsection Der @code{\\tweak}-Befehl
1815 @translationof The tweak command
1822 Wenn man Grob-Eigenschaften mit @code{\override} verändert, verändern sich
1823 alle fraglichen Objekte zu dem gegebenen musikalischen Moment. Manchmal
1824 will man allerdings nur ein Grob verändern, anstatt allen Grobs des
1825 aktuellen Kontextes. Das kann mit dem @code{\tweak}-Befehl erreicht
1826 werden, mit dem man Optimierungen vornehmen kann:
1829 \tweak #'@code{grob-eigenschaft} #@code{Wert}
1832 Der @code{\tweak}-Befehl wirkt sich auf das Objekt aus, dass direkt auf
1836 In einigen Fällen ist es möglich, mit einem abgekürzten Befehl
1837 graphische Objekte zu verändern. Wenn Objekte direkt von einem
1838 Element des Quelltextes erstellt werden, kann der @code{\tweak}-Befehl
1841 @lilypond[relative=2,verbatim]
1846 \tweak #'duration-log #1
1849 -\tweak #'padding #8
1853 @cindex Akkord, eine Note verändern
1855 Die hauptsächliche Benutzung von @code{\tweak} ist dann, wenn
1856 man nur ein Element von einer Ansammlung an Elementen verändern
1857 will, die alle zum gleichen musikalischen Moment beginnen. Das
1858 kann eine Noten in einem Akkord sein, oder eine von mehreren
1859 Triolenklammern, die zur gleichen Zeit beginnen.
1861 Eine Einleitung der Syntax für den @code{\tweak}Befehl findet
1862 sich in @rlearning{Optimierungsmethoden}.
1864 Der @code{\tweak}-Befehl verändert die Eigenschaft des folgenden
1865 Objekts direkt, ohne dass die Bezeichnung des Objekts (Grobs) oder
1866 des Kontextes angegeben werden muss. Damit das funktioniert, muss
1867 das Objekt direkt auf den @code{\tweak}-Befehl folgen, auf das
1868 er sich auswirken soll. Das ist in manchen Fällen nicht gegeben,
1869 da viele Objekte durch LilyPond automatisch eingesetzt werden.
1870 Wenn etwa eine Note interpretiert wird, die nicht Teil eines
1871 Akkords ist, fügt LilyPond implizit einen @code{ChordEvent}
1872 vor die Note ein, sodass der @code{\tweak}-Befehl von der
1873 Note getrennt wird. Wenn aber Akkord-Klammern um die Note
1874 und den @code{\tweak}-Befehl gesetzt werden, folgt der
1875 @code{ChordEvent} auf den @code{\tweak}-Befehl und befindet
1876 sich deshalb direkt vor der Note, auf die er einwirken soll,
1877 sodass die Veränderung funktioniert.
1879 An einem Beispiel demonstriert: Das funktioniert:
1882 @lilypond[relative=2,verbatim,quote]
1883 <\tweak #'color #red c>4
1889 @lilypond[relative=2,verbatim,quote]
1890 \tweak #'color #red c4
1895 Eine Einleitung der Syntax und Benutzungen des @code{\tweak}-(Optimierungs)-Befehls findet sich in @rlearning{Optimierungsmethoden}.
1897 Wenn mehrere gleichartige Elemente zum gleichen musikalischen
1898 Moment auftreten, kann der @code{\override}-Befehl nicht
1899 benutzt werden, um nur einen von ihnen zu verändern: hier braucht
1900 man den @code{\tweak}-Befehl. Elemente, die mehrfach zum
1901 gleichen musikalischen Moment auftreten können sind unter Anderem:
1903 @c TODO expand to include any further uses of \tweak
1905 @item Notenköpfe von Noten innerhalb eines Akkordes
1906 @item Artikulationszeichen an einer einzelnen Note
1907 @item Bindebögen zwischen Noten eines Akkordes
1908 @item Llammern für rhythmische Verhältnisse (wie Triolen), die zur gleichen Zeit beginnen
1911 @c TODO add examples of these
1913 @cindex Akkord, eine Noten verändern
1915 In diesem Beispiel wird die Farbe eines Notenkopfes und die Art eines
1916 anderen Notenkopfes innerhalb eines Akkordes verändert:
1918 @lilypond[relative=2,verbatim,quote]
1923 \tweak #'duration-log #1
1928 @code{\tweak} kann auch benutzt werden, um Bögen zu verändern:
1930 @lilypond[verbatim,quote,relative=1]
1931 c-\tweak #'thickness #5 ( d e f)
1934 Damit der @code{\tweak}-Befehl funktioniert, muss er direkt vor dem
1935 Objekt stehen, auf das er sich bezieht. Manchmal kommt es vor, dass
1936 LilyPond während der Kompilierung der Datei zusätzliche Elemente
1937 einfügt, die dann zwischen der Optimierung und dem Objekt stehen.
1938 Noten, auch einzlene Noten, werden beispielsweise intern von LilyPond
1939 immer wie Akkorde behandelt, sodass auch ein @code{\tweak}-Befehl
1940 für eine einzelne Note innerhalb von Akkordzeichen notiert werden
1943 @lilypond[relative=2,verbatim,quote]
1944 \tweak #'color #red c4
1945 <\tweak #'color #red c>4
1948 Der @code{\tweak}-Befehl kann @emph{nicht} eingesetzt werden, um
1949 Elemente zu verändern, die sich nicht direkt im Notentext befinden.
1950 Insbesondere Hälse, Balken oder Versetzungszeichen lassen sich nicht
1951 beeinflussen, weil diese später durch den Notenkopf erstellt werden
1952 und nicht direkt durch
1953 den Quelltext. @code{\tweak} kann auch nicht verwendet werden,
1954 um Schlüssel oder Taktarten zu verändern, denn sie werden von
1955 dem @code{\tweak}-Befehl während der Interpretation durch
1956 automatisches Einfügen von zusätzlichen Kontextelementen getrennt.
1958 Mehrere @code{\tweak}-Befehle können vor ein Notationselement
1959 gesetzt werden und alle werden interpretiert:
1961 @lilypond[verbatim,quote,relative=1]
1963 -\tweak #'style #'dashed-line
1964 -\tweak #'dash-fraction #0.2
1965 -\tweak #'thickness #3
1966 -\tweak #'color #red
1971 Der Strom der musikalischen Ereignisse (engl. music stream), der aus
1972 dem Quelltext erstellt wird, und zu dem auch die automatisch eingefügten
1973 Elemente gehören, kann betrachtet werden, siehe
1974 @ref{Musikalische Funktionen darstellen}. Das kann nützlich sein,
1975 wenn man herausfinden will, was mit dem @code{\tweak}-Befehl
1976 verändert werden kann.
1979 Handbuch zum Lernen:
1980 @rlearning{Optimierungsmethoden}.
1983 @rextend{Musikalische Funktionen darstellen}.
1987 @cindex tweak-Befehl in einer Variable
1988 @cindex Variable, tweak-Befehl benutzen
1989 @cindex Optimierung innerhalb einer Variable
1991 Der @code{\tweak}-Befehl kann nicht innerhalb von einer Variable eingesetzt werden.
1993 @cindex tweaks-Befehl in Gesangstext
1994 @cindex lyrics und tweak-Befehl
1995 @cindex Gesangstext und tweak-Befehl
1997 Der @code{\tweak}-Befehl kann nicht innerhalb von @code{\lyricmode} eingesetzt werden.
1999 @cindex Kontrollpunkte und tweak
2000 @cindex tweak und Kontrollpunkte
2002 Der @code{\tweak}-Befehl kann nicht benutzt werden, um die Kontrollpunkte
2003 eines von mehreren Bindebögen eines Akkorden zu verändern. Anstelle dessen
2004 wird der erste Bogen verändert, der in der Eingabedatei auftritt.
2007 @node set versus override
2008 @subsection @code{\\set} versus @code{\\override}
2009 @translationof set versus override
2014 Es wurden zwei unterschiedliche Methoden vorgestellt, mit denen
2015 Eigenschaften verändert werden können: @code{\set} und
2016 @code{\override}. Im Grunde genommen gibt es auch zwei
2017 unterschiedliche Arten von Eigenschaften.
2019 Kontexte können Eigenschaften haben, deren Bezeichnungen
2020 üblicherweise dem Schema @code{kleinGroß} folgen. Derartige
2021 Eigenschaften sind vor allen Dingen für die Übersetzung der
2022 Musik in Notation zuständig, beispielsweise @code{localKeySignature}
2023 (um zu bestimmen, ob Versetzungszeichen ausgegeben werden
2024 müssen), @code{measurePosition} (um zu bestimmen, ob eine
2025 Taktlinie gesetzt werden muss). Kontexteigenschaften können
2026 ihren Wert verändern, während ein Musikstück ausgewertet wird;
2027 @code{measurePosition} (Taktposition) ist ein gutes Beispiel
2028 hierfür. Kontexteigenschaften werden mit dem Befehl @code{\set}
2031 Dann gibt es einen Spezialtyp der Kontexeigenschaften: die
2032 Elementbeschreibung. Diese Eigenschaften werden mit
2033 @code{GroßGroß} benannt (beginnen also auch mit einem
2034 Großbuchstaben). Sie beinhalten die Standardeinstellungen
2035 für die besagten graphischen Objekte in Form einer
2036 Assosiationsliste. Siehe auch die Datei @file{scm/@/define@/-grobs@/.scm}
2037 für ein Beispiel zu diesen Einstellungen. Elementbeschreibungen
2038 können mit dem Befehl @code{\override} verändert werden.
2040 @code{\override} ist eigentlich eine Abkürzung:
2043 \override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #@var{Wert}
2047 entspricht mehr oder weniger:
2049 @c leave this long line -gp
2051 \set @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #(cons (cons '@var{Eigenschaft} @var{Wert}) <voriger Wert von @var{Kontext})
2054 Der Wert von @code{context} (die @qq{alist}) wird benutzt, um
2055 die Eigenschaften von einzelnen Grobs zu initiieren. Grobs haben
2056 auch Eigenschaften, die im Scheme-Stil benannt werden, also
2057 @code{wort-mit-bindestrich}. Die Werte der Grob-Eigenschaften
2058 ändern sich während des Formatierungsprozesses: Formatierung
2059 läuft im Prinzip darauf hinaus, Eigenschaften zu errechnen, indem
2060 Callback-Funktionen eingesetzt werden.
2062 @code{fontSize} ist eine besondere Eigenschaft: sie entspricht
2063 @code{\override ... #'font-size} für alle möglichen Objekte.
2064 Weil es sich hier um eine globale Änderung handelt, wurde
2065 die spezielle Form (die mit @code{\set} verändert wird) erstellt.
2069 @node Alisten verändern
2070 @subsection Alisten verändern
2071 @translationof Modifying alists
2073 Einige vom Benutzer einstellbare Eigenschaften sind intern als
2074 @emph{alists} (Assoziative Listen) dargestellt, die Paare von
2075 Schlüsseln und Werten speichern. Die Struktur einer Aliste ist:
2078 #((@var{Schlüssel1} . @var{Wert1})
2079 (@var{Schlüssel2} . @var{Wert2})
2080 (@var{Schlüssel3} . @var{Wert3})
2084 Wenn eine Aliste eine Grob-Eigenschaft oder eine Variable der
2085 @code{\paper}-Umgebung ist, können ihre Schlüssel einzeln verändert
2086 werden, ohne andere Schlüssel zu beeinflussen.
2088 Um beispielsweise den Freiraum zwischen benachbarten Systemen
2089 in einer Systemgruppe zu verkleinern, kann man die
2090 @code{between-staff-spacing}-Eigenschaft des
2091 +@code{StaffGrouper}-Grobs benutzen. Die Eigenschaft ist eine
2092 Aliste mit vier Schlüsseln: @code{padding} (Verschiebung),
2093 @code{space} (Platz), @code{minimum-distance} (minimaler Abstand)
2094 und @code{stretchability} (Dehnbarkeit). Drei der vier Schlüssel
2095 haben zu Beginn Standardwerte, die in der Datei @file{scm/define-grobs.scm}
2096 (neben allen anderen Grob-Eigenschaften) definiert sind.
2099 (between-staff-spacing . ((padding . 1)
2101 (minimum-distance . 7)))
2104 Eine Möglichkeit, die Systemen dichter zueinander zu zwingen,
2105 ist es, der Wert des @code{space}-Schlüssels (@code{9}) zu
2106 verändern, sodass der den gleichen Wert wie
2107 @code{minimum-distance} (@code{7}) hat. Um einen einzelnen
2108 Schlüssel zu verändern, wird ein geschachtelter Aufruf benutzt:
2110 @lilypond[quote,verbatim]
2111 % default space between staves
2113 \new Staff { \clef treble c''1 }
2114 \new Staff { \clef bass c1 }
2117 % reduced space between staves
2118 \new PianoStaff \with {
2119 \override StaffGrouper #'between-staff-spacing #'space = #7
2121 \new Staff { \clef treble c''1 }
2122 \new Staff { \clef bass c1 }
2126 Wenn man diese Art des geschachtelten Aufrufs einsetzt, wird der
2127 spezifische Schlüssel (@code{space} im obigen Beispiel) verändert,
2128 ohne dass sich andere Wert für die gleiche Eigenschaft ändern würden.
2130 Nun sollen die Systeme so dicht wie möglich gesetzt werden, ohne das
2131 Überlappungen vorkommen. Die einfachste Möglichkeit, das zu tun, wäre
2132 es, alle vier Wert auf 0 zu setzen. In diesem Fall muss man nicht jeden
2133 Wert mit einem geschachtelten Aufruf definieren, sondern die Eigenschaft
2134 kann mit einem Aufruf als Aliste vollständig verändert werden:
2136 @lilypond[quote,verbatim]
2137 \new PianoStaff \with {
2138 \override StaffGrouper #'between-staff-spacing =
2141 (minimum-distance . 0)
2142 (stretchability . 0))
2144 \new Staff { \clef treble c''1 }
2145 \new Staff { \clef bass c1 }
2149 Dabei sollte beachtet werden, dass alle Schlüssel, die bei dieser
2150 Weise des Aufrufs nicht explizit aufgelistet sind, auf den Standardwert
2151 gesetzt werden, den sie hätten, wenn sie nicht definiert werden.
2152 Im Falle von @code{between-staff-spacing} würden alle nicht genannten
2153 Schlüsselwerte auf 0 gesetzt (außer @code{stretchability}, welche immer
2154 den Wert von @code{space} hat, wenn sie nicht definiert ist). Somit sind
2155 folgende Aufrufe äquivalent:
2158 \override StaffGrouper #'between-staff-spacing =
2161 \override StaffGrouper #'between-staff-spacing =
2164 (minimum-distance . 0)
2165 (stretchability . 7))
2168 Eine möglicherweise ungewollte Konsequenz hiervon ist, dass alle
2169 nicht initialisierten Standardwerte, die etwa in einer Initialisierungsdatei
2170 zu Beginn einer LilyPond-Partitur geladen werden, nach dem Aufruf
2171 rückgängig gemacht werden. Im obigen Beispiel werden die
2172 initialisierten Standardwerte für @code{padding} und @code{minimum-distance}
2173 (definiert in @file{scm/define-grobs.scm}) auf den Standard zurückgesetzt, den sie uninitialisiert hätten (0 in beiden Fällen). Wenn eine Eigenschaft oder
2174 Variable in Form einer Aliste (jeder Größe) definiert wird, werden
2175 immer alle Schlüsselwerte auf den uninitialisierten Zustand zurückgesetzt.
2176 Es ist also sicherer, geschachtelte Aufrufe zu benutzen, wenn man nicht
2177 bewusst alle Werte zurücksetzen will.
2179 @warning{Geschachtelte Aufrufe funktionieren nicht mit
2180 Kontexteigenschaften (wie etwa @code{beamExceptions}, @code{keySignature},
2181 @code{timeSignatureSettings}, usw.) Diese Eigenschaften können
2182 nur verändert werden, indem man sie vollständig als Alisten umdefiniert.}
2185 @node Nützliche Konzepte und Eigenschaften
2186 @section Nützliche Konzepte und Eigenschaften
2187 @translationof Useful concepts and properties
2191 * Richtung und Platzierung::
2192 * Reihenfolge des Kontextlayouts::
2193 * Abstände und Maße::
2194 * Eigenschaften des Staff-Symbols::
2196 * Sichtbarkeit von Objekten::
2198 * Drehen von Objekten::
2203 @subsection Eingabe-Modi
2204 @translationof Input modes
2206 Die Art, wie die Notation einer Eingabedatei interpretiert
2207 wird, hängt vom aktuellen Eingabemodus ab.
2209 @strong{Chord (Akkordmodus)}
2211 Man erreicht ihn durch den Befehl @code{\chordmode}. Hierdurch
2212 wird die Eingabe entsprechend der Syntax der Akkordnotation
2213 interpretiert, siehe @ref{Notation von Akkorden}. Akkorde werden als
2214 Noten auf einem System dargestellt.
2216 Der Akkordmodus wird auch mit dem Befehl @code{\chords} initiiert.
2217 Dadurch wird gleichzeitig ein neuer @code{ChordNames}-Kontext
2218 erstellt, die Eingabe entsprechend der Syntax der Akkordnotation
2219 interpretiert und als Akkordbezeichnungen in einem
2220 @code{ChordNames}-Kontext dargestellt. Siehe @ref{Akkordbezeichnungen drucken}.
2222 @strong{Drum (Schlagzeugmodus)}
2224 Man erreicht ihn mit dem Befehl @code{\drummode}. Die Eingabe
2225 wird entsprechend der Syntax der Schlagzeugnotation interpretiert,
2226 siehe @ref{Grundlagen der Schlagzeugnotation}.
2228 Der Schlagzeugmodus wird auch mit dem Befehl @code{\drums} aktiviert.
2229 Dadurch wird gleichzeitig ein neuer @code{DrumStaff}-Kontext
2230 erstellt, die Eingabe entsprechend der Syntax der Schlagzeugnotation
2231 interpretiert und als Schlagzeugsymbole auf einem Schlagzeugsystem
2232 dargestellt. Siehe @ref{Grundlagen der Schlagzeugnotation}.
2234 @strong{Figure (Ziffernmodus)}
2236 Man erreicht ihn mit dem Befehl @code{\figuremode}. Die Eingabe
2237 wird entsprechend der Syntax für Generalbass interpretiert, siehe
2238 @ref{Eingabe des Generalbass'}.
2240 Der Ziffernmodus wird auch mit dem Befehl @code{\figures} aktiviert.
2241 Dadurch wird gleichzeitig ein neuer @code{FiguredBass}-Kontext
2242 erstellt, die Eingabe entsprechend der Syntax für Generalbass
2243 interpretiert und als Generalbassziffern im @code{FiguredBass}-Kontext
2244 dargestellt. Siehe @ref{Grundlagen des Bezifferten Basses}.
2246 @strong{Fret/tab (Griffsymbol-/Tabulaturmodus)}
2248 Es gibt keinen besonderen Eingabemodus für Griffsymbole und
2251 Um Tabulaturen zu erstellen, werden Noten oder Akkorde im
2252 Notenmodus notiert und dann in einem @code{TabStaff}-Kontext
2253 interpretiert, siehe
2254 @ref{Standardtabulaturen}.
2256 Um Griffsymbole oberhalb eines Notensystems zu erstellen, gibt
2257 es zwei Möglichkeiten. Man kann den @code{FretBoards}-Kontext
2258 einsetzen (siehe @ref{Automatische Bund-Diagramme}) oder sie können
2259 als Beschriftung über den Noten eingefügt werden, indem man
2260 den @code{\fret-diagram}-Befehl einsetzt (siehe
2261 @ref{Bund-Diagramm-Beschriftung}).
2263 @strong{Lyrics (Gesangstextmodus)}
2265 Man erreicht ihn mit dem Befehl @code{\lyricmode}. Die Eingabe
2266 wird entsprechend der Syntax für Silben eines Gesangstextes
2267 interpretiert, wobei optional Dauern und verknüpfte
2268 Gesangstextveränderer möglich sind, siehe @ref{Notation von Gesang}.
2270 Der Gesangstextmodus wird auch durch den Befehl @code{\addlyrics}
2271 aktiviert. Dadurch wird auch ein neuer @code{Lyrics}-Kontext
2272 erstellt und ein impliziter @code{\lyricsto}-Befehl, der den
2273 nachfolgenden Gesangstext mit der vorhergehenden Musik verknüpft.
2275 @strong{Markup (Textbeschriftungsmodus)}
2277 Man erreicht ihn mit dem Befehl @code{\markup}. Die Eingabe wird
2278 entsprechend der Syntax für Textbeschriftung interpretiert, siehe
2279 @ref{Textbeschriftungsbefehle}.
2281 @c silly work-around for texinfo broken-ness
2282 @c (@strong{Note...} causes a spurious cross-reference in Info)
2283 @b{Note (Notenmodus)}
2285 Das ist der Standardmodus. Er kann auch mit dem Befehl
2286 @code{\notemode} gefordert werden. Die Eingabe wird als Tonhöhen,
2287 Dauern, Beschriftung usw. interpretiert und als musikalische
2288 Notation auf einem Notensystem gesetzt.
2290 Es ist normalerweise nicht nötig, den Notenmodus extra anzugeben,
2291 aber es kann in bestimmten Situationen durchaus nützlich sein,
2292 etwa wenn man in einem Gesangstext-, Akkord- oder einem anderen
2293 Modus arbeitet aber ein Zeichen braucht, das nur im Notenmodus
2294 benutzt werden kann.
2296 Um etwa Dynamikzeichen vor die Nummern von unterschiedlichen
2297 Strophen zu setzen, muss man den Notenmodus betreten:
2299 @lilypond[verbatim,relative=2,quote]
2302 \notemode{ \set stanza = \markup{ \dynamic f 1. } }
2306 \notemode{ \set stanza = \markup{ \dynamic p 2. } }
2312 @node Richtung und Platzierung
2313 @subsection Richtung und Platzierung
2314 @translationof Direction and placement
2316 Die Platzierung und Richtung von Objekten ist im Notensatz oft durch eine
2317 enge Auswahl begrenzt: Notenhälse beispielsweise können entweder nach
2318 oben oder nach unten zeigen, Gesangstext, Dynamikzeichen und andere
2319 Ausdrucksbezeichnungen können über oder unter dem System gesetzt werden,
2320 Text kann rechts, links oder mittig ausgerichtet werden usw. Die meisten
2321 dieser Entscheidungen können LilyPond direkt überlassen werden; in
2322 einigen Fällen kann es allerdings nötig sein, eine bestimmte Richtung
2323 oder eine Position zu erzwingen.
2325 @strong{Richtungseinstellung von Artikulationszeichen}
2327 Standardmäßig sind bestimmte Objekte immer nach oben oder unten ausgerichtet,
2328 wie Dynamikzeichen oder Fermaten, während andere Objekte zwischen
2329 oben und unten wechseln, was vor allem von der Richtung der Notenhälse
2330 abhängt und etwa Bögen und Akzente betrifft.
2332 Die Standardeinstellungen können verändert werden, indem dem
2333 Artikulationszeichen ein Ausrichtungsmarkierer vorangeht. Drei
2334 derartige Ausrichtungsmarkierer sind vorhanden: @code{^} (bedeutet @qq{nach oben}), @code{_}
2335 (bedeutet @qq{nach unten}) bzw. @code{-} (bedeutet @qq{Standardrichtung}
2336 benutzen) normalerweise weggelassen werden. In diesem Fall wird
2337 @code{-} angenommen. Eine Richtungsanweisung ist jedoch
2338 @strong{immer} erforderlich vor
2341 @item @code{\tweak}-Befehlen
2342 @item @code{\markup}-(Textbeschriftungs-)Befehlen
2343 @item @code{\tag}-Befehlen
2344 @item Textbeschriftungen in reiner Textform, wie etwa @code{-"string"}
2345 @item Fingersatzanweisungen: @code{-1}
2346 @item Abkürzungen von Artikulationen, wie @code{-.}, @code{->}, @code{--}
2349 Ausrichtungsmarkierer haben nur eine Auswirkung auf die nächste Note:
2351 @lilypond[verbatim,quote,relative=2]
2359 @strong{Die @code{direction}-(Richtungs-)Eigenschaft}
2361 Die Position oder Richtung vieler Layoutobjekte wird von der
2362 @code{direction}-Eigenschaft kontrolliert.
2364 Der Wert der @code{direction}-Eigenschaft kann auf den Wert
2365 @code{1} gesetzt werden, was gleichbedeutend mit @qq{nach oben}
2366 bzw. @qq{oberhalb} ist, oder auf den Wert @code{-1}, was
2367 @qq{nach unten} bzw. @qq{unterhalb} bedeutet. Die Symbole
2368 @code{UP} und @code{DOWN} können anstelle von @code{1}
2369 und @code{-1} benutzt werden. Die Standardausrichtung kann
2370 angegeben werden, indem @code{direction} auf den Wert
2371 @code{0} oder @code{CENTER} gesetzt wird. In vielen Fällen
2372 bestehen auch vordefinierte Befehle, mit denen die Ausrichtung
2373 bestimmt werden kann. Sie haben die Form
2376 @code{\xxxUp}, @code{xxxDown}, @code{xxxNeutral}
2379 wobei @code{xxxNeutral} bedeutet: @qq{Benutze die
2380 Standardausrichtung}. Siehe auch
2381 @rlearning{within-staff (Objekte innerhalb des Notensystems)}.
2383 In wenigen Fällen, von denen Arpeggio das einzige häufiger
2384 vorkommende Beispiel darstellt, entscheidet der Wert von
2385 @code{direction}, ob das Objekt auf der rechten oder linken
2386 Seite das Ursprungsobjektes ausgegeben wird. In diesem Fall
2387 bedeutet @code{-1} oder @code{LEFT} @qq{auf der linken Seite}
2388 und @code{1} oder @code{RIGHT} @qq{auf der rechten Seite}. @code{0}
2389 oder @code{CENTER} bedeutet @qq{benutze Standardausrichtung}.
2392 Diese Ausrichtungsanzeigen wirken sich auf alle Noten aus, bis sie
2393 rückgängig gemacht werden:
2395 @lilypond[verbatim,quote,relative=2]
2405 @node Reihenfolge des Kontextlayouts
2406 @subsection Reihenfolge des Kontextlayouts
2407 @translationof Context layout order
2409 @cindex Kontexte, Reihenfolge
2411 Kontexte werden normalerweise in einer Notensystemgruppe dargestellt,
2412 von oben nach unten in der Reihenfolge, in der sie
2413 in der Eingabedatei auftreten. Wenn Kontexte verschachtelt sind,
2414 enthält der äußere Kontext die inneren geschachtelten Kontexte,
2415 wie in der Eingabedatei angegeben, vorausgesetzt die inneren
2416 Kontexte befinden sich in der @qq{accepts}-Liste des äußeren
2417 Kontextes. Verschachtelte Kontexte, die nicht in dieser Liste
2418 auftauchen, werden neu unter den äußeren Kontext angeordnet, anstatt
2419 dass sie innerhalb dieses Kontextes gesetzt werden.
2421 Es ist wichtig zu erinnern, dass ein Kontext implizit erstellt
2422 werden kann, wenn ein Befehl vorkommt und kein passender Kontext
2423 zur Verfügung steht, um den Befehl auszuführen. Dadurch können
2424 unerwartet neue Systeme oder Partituren erstellt werden.
2426 Die Standardreihenfolge, in der die Kontexte gesetzt werden und
2427 die @qq{accepts}-Liste können geändert werden, siehe auch
2428 @ref{Aligning contexts}.
2432 @rlearning{An extra staff appears}.
2435 @node Abstände und Maße
2436 @subsection Abstände und Maße
2437 @translationof Distances and measurements
2439 @cindex Abstände, absolut
2440 @cindex Abstände, skaliert
2447 In LilyPond gibt es zwei Arten von Abständen: absolute und
2450 Absolute Abstände werden benutzt, um Ränder, Einzüge und andere
2451 Einzelheiten des Seitenlayouts zu bestimmen. Sie sind in den
2452 Standardeinstellungen in Millimetern definiert. Abstände können
2453 auch in anderen Einheiten definiert werden, indem folgende
2454 Befehle auf die Zahl folgen: @code{\mm}, @code{\cm},
2455 @code{\in}@tie{}(Zoll=2,54 cm) und @code{\pt}@tie{}(Punkte, 1/72.27
2456 eines Zolls). Abstände des Seitenlayouts können auch in
2457 skalierbaren Einheiten (siehe folgenden Absatz) definiert
2458 werden, indem man den Befehl @code{\staff-space} an die
2459 Zahl hängt. Das Seitenlayout ist genauer beschrieben in
2460 @ref{Seitenformatierung}.
2462 Skalierbare Abstände werden immer in Einheiten von
2463 Notenlinienabständen angegeben, oder seltener in halben
2464 Notenlinienabständen. Ein Notenlinienabstand ist der
2465 Abstand zwischen zwei benachbarten Linien eines Notensystems.
2466 Der Standardwert dieser Einheit kann global geändert werden,
2467 indem man die globale Notensystemgröße ändert, oder sie
2468 kann lokal geändert werden, indem man die Eigenschaft
2469 @code{staff-space} des @code{StaffSymbol}-Objekts mit
2470 @code{\override} verändert. Skalierte Abstände verändern
2471 sich automatisch entsprechend, wenn der Notenlinienabstand
2472 entweder global oder lokal verändert wird, aber Schriftarten
2473 verändern ihre Größe nur, wenn der Notenlinienabstand
2474 global verändert wird. Mit dem globalen Notenlinienabstand
2475 kann man also auf einfach Art und Weise die gesamte Größe
2476 einer Partitur verändern. Zu Methoden, wie der globale
2477 Notenlinienabstand verändert werden kann, siehe
2478 @ref{Die Notensystemgröße einstellen}.
2482 Wenn nur eine ein Abschnitt einer Partitur in einer anderen
2483 Größe erscheinen soll, etwa ein Ossia-Abschnitt in einer
2484 Fußnote, kann die globale Notensystemgröße nicht einfach
2485 geändert werden, weil sich diese Änderung auf die gesamte Partitur
2486 auswirken würde. In derartigen Fällen muss die Größenänderung
2487 vorgenommen werden, indem man sowohl die
2488 @code{staff-space}-Eigenschaft von @code{StaffSymbol} als auch
2489 die Größe der Schriftarten verändert. Eine Scheme-Funktion,
2490 @code{magstep}, kann von einer Schriftartveränderung zu der
2491 entsprechenden Veränderung in @code{staff-space} (Notenlinienabständen)
2492 konvertieren. Zu einer Erklärung und Beispielen zu ihrer
2493 Verwendung siehe @rlearning{Länge und Dicke von Objekten}.
2497 Handbuch zum Lernen:
2498 @rlearning{Länge und Dicke von Objekten}.
2501 @ref{Seitenformatierung},
2502 @ref{Die Notensystemgröße einstellen}.
2505 @node Eigenschaften des Staff-Symbols
2506 @subsection Eigenschaften des Staff-Symbols
2507 @translationof Staff symbol properties
2509 @cindex Anpassen von staff symbol
2510 @cindex Notensystem, anpassen
2511 @cindex Veränderung des Notensystems
2513 Die vertikale Position der Notenlinien und die Anzahl der
2514 Notenlinien kann gleichzeitig definiert werden. Wie das
2515 folgende Beispiel zeigt, werden Notenpositionen nicht
2516 durch die Position der Notenlinien verändert:
2518 @warning{Die @code{'line-positions}-Eigenschaft
2519 verändert die @code{'line-count}-Eigenschaft. Die
2520 Anzahl der Notenlinien wird implizit definiert durch
2521 die Anzahl der Elemente in der Liste der Werte von
2522 @code{'line-positions}.}
2524 @lilypond[verbatim,quote,relative=1]
2526 \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7)
2531 Die Breite eines Notensystems kann verändert werden. Die Einheit
2532 ist in Notenlinienabständen. Die Abstände von Objekten
2533 in diesem Notensystem wird durch diese Einstellung nicht
2536 @lilypond[verbatim,quote,relative=1]
2538 \override StaffSymbol #'width = #23
2545 @subsection Strecker
2546 @translationof Spanners
2548 Viele Objekte der Musiknotation erstrecken sich über mehrere
2549 Objekte oder gar mehrere Takte. Beispiele hierfür sind etwa
2550 Bögen, Balken, Triolenklammern, Volta-Klamern in Wiederholungen,
2551 Crescendo, Triller und Glissando. Derartige Objekte werden
2552 als @qq{Strecker} bezeichnet. Sie haben spezielle Eigenschaften,
2553 mit welchen ihre Eigenschaften und ihr Verhalten beeinflusst
2554 werden kann. Einige dieser Eigenschaften gelten für alle
2555 Strecker, andere beschränken sich auf eine Untergruppe der
2558 Alle Strecker unterstützen das @code{spanner-interface}
2559 (Strecker-Schnittstelle).
2560 Ein paar, insbesondere die, die zwischen zwei Objekten eine
2561 gerade Linie ziehen, unterstützen auch das
2562 @code{line-spanner-interface} (Strecker-Linienschnittstelle).
2565 @unnumberedsubsubsec Das @code{spanner-interface} benutzen
2567 Diese Schnittstelle stellt zwei Eigenschaften zur Verfügung,
2568 die sich auf mehrere Strecker auswirken:
2570 @strong{@i{Die @code{minimum-length}-Eigenschaft}}
2572 Die Mindestlänge eines Streckers wird durch die
2573 @code{minimum-length}-Eigenschaft definiert. Wenn diese
2574 Eigenschaft vergrößert wird, muss in den meisten Fällen
2575 auch der Abstand der Noten zwischen den zwei Endpunkten
2576 eines Streckers verändert werden. Eine Veränderung dieser
2577 Eigenschaft hat jedoch auf die meisten Strecker keine Auswirkung,
2578 weil ihre Länge aus anderen Berechnungen hervorgeht.
2579 Einige Beispiele, wo die Eigenschaft benutzt wird, sind
2582 @lilypond[verbatim,quote,relative=2]
2585 % increase the length of the tie
2586 -\tweak #'minimum-length #5
2590 @lilypond[verbatim,quote,relative=2]
2592 \compressFullBarRests
2594 % increase the length of the rest bar
2595 \once \override MultiMeasureRest #'minimum-length = #20
2600 @lilypond[verbatim,quote,relative=2]
2602 % increase the length of the hairpin
2603 \override Hairpin #'minimum-length = #20
2607 Diese Veränderung kann auch eingesetzt werden, um die Länge
2608 von Legato- und Phrasierungsbögen zu verändern:
2610 @lilypond[verbatim,quote,relative=2]
2613 -\tweak #'minimum-length #5
2618 -\tweak #'minimum-length #5
2622 Im Falle einiger Layoutobjekte wirkt sich die
2623 @code{minimum-length}-Eigenschaft erst dann aus, wenn die
2624 @code{set-spacing-rods}-Prozedur explizit aufgerufen wird.
2625 Um das zu tun, sollte die @code{springs-and-rods}-Eigenschaft
2626 auf @code{ly:spanner::set-spacing-rods} gesetzt werden. Die
2627 Mindestlänge eines Glissandos etwa wird erst aktiv, wenn
2628 die @code{springs-and-rods}-Eigenschaft gesetzt ist:
2630 @lilypond[verbatim,quote,relative=1]
2634 % not effective alone
2635 \once \override Glissando #'minimum-length = #20
2638 % effective only when both overrides are present
2639 \once \override Glissando #'minimum-length = #20
2640 \once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
2644 Das gilt auch für das @code{Beam}-(Balken-)Objekt:
2646 @lilypond[verbatim,quote,relative=1]
2647 % not effective alone
2648 \once \override Beam #'minimum-length = #20
2651 % effective only when both overrides are present
2652 \once \override Beam #'minimum-length = #20
2653 \once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods
2657 @strong{@i{Die @code{to-barline}-Eigenschaft}}
2659 Die zweite nützliche Eigenschaft des @code{spanner-interface} ist
2660 @code{to-barline} (bis zum Taktstrich). In den Standardeinstellungen
2661 ist diese Eigenschaft auf @qq{wahr} gesetzt, was bedeutet, dass
2662 ein Strecker, etwa eine Crescendo-Klammer, der an der ersten Noten
2663 eines Taktes beendet wird, sich nur bis zum vorhergehenden
2664 Taktstrich erstreckt. Wenn die Eigenschaft auf @qq{falsch} gesetzt
2665 wird, erstrecken sich die Strecker entsprechend über die Taktlinie
2666 hinüber und enden erst an der entsprechenden Note:
2668 @lilypond[verbatim,quote,relative=2]
2669 a \< a a a a \! a a a \break
2670 \override Hairpin #'to-barline = ##f
2671 a \< a a a a \! a a a
2674 Diese Eigenschaft wirkt sich nicht auf alle Strecker aus. Im Falle
2675 von Legato- oder Phrasierungsbögen etwa hat diese Eigenschaft
2676 keinen Effekt. Das gilt auch für alle anderen Streckern, bei
2677 denen es nicht sinnvoll währe, sie an einer Taktlinie abzuschließen.
2680 @unnumberedsubsubsec Das @code{line-spanner-interface} benutzen
2682 Objekte, die das @code{line-spanner-interface} unterstützen,
2686 @item @code{DynamicTextSpanner}
2687 @item @code{Glissando}
2688 @item @code{TextSpanner}
2689 @item @code{TrillSpanner}
2690 @item @code{VoiceFollower}
2693 Die Routine, die das Setzen der Matrizen dieser Strecker
2694 hervorruft, ist @code{ly:line-interface::print}. Diese
2695 Routine bestimmt die exakte Position der zwei Endpunkte
2696 und zeichnet eine Linie zwischen ihnen, in dem erforderlichen
2697 Stil. Die Position der zwei Endpunkte des Streckers wird
2698 in Echtzeit errechnet, aber es ist möglich, ihre
2699 Y-Koordinaten zu verändern. Die Eigenschaften, die angegeben
2700 werden müssen, sind zwei Ebenen in der Objekthierarchie
2701 tiefer angeordnet, aber die Syntax des @code{\override}-Befehls
2702 ist ziemlich einfach:
2704 @lilypond[relative=2,quote,verbatim]
2706 \once \override Glissando #'(bound-details left Y) = #3
2707 \once \override Glissando #'(bound-details right Y) = #-2
2711 Die Einheiten für die @code{Y}-Eigenschaft werden in
2712 Notenlinienabständen angegeben, wobei die Mittellinie des
2713 Notensystems die Null darstellt. Für das Glissando ist
2714 der Wert von @code{Y} am entsprechenden X-Koordinatenpunkt
2715 entsprechend dem Mittelpunkt des Notenkopfes, wenn die
2716 Linie bis in die Noten hinein weitergeführt werden würde.
2718 Wenn @code{Y} nicht gesetzt wird, wird der Wert aus der
2719 vertikalen Position des entsprechenden Anknüpfpunkts des
2720 Streckers errechnet.
2722 Im Fall eines Zeilenumbruchs werden die Werte der Endpunkte
2723 in den Unterlisten @code{left-broken} bzw. @code{right-broken}
2724 von @code{bound-details} abgelegt. Zum Beispiel:
2726 @lilypond[relative=2,ragged-right,verbatim,quote]
2727 \override Glissando #'breakable = ##t
2728 \override Glissando #'(bound-details right-broken Y) = #-3
2729 c1 \glissando \break
2733 Eine Anzahl weitere Eigenschaft der @code{left}- und
2734 @code{right}-Unterlisten der @code{bound-details}-Eigenschaft
2735 kann auf gleiche Weise wie @code{Y} verändert werden:
2739 Hiermit wird der Y-Koordinationspunkt des Endpunktes in
2740 Notenlinienabständen vom Mittelpunkt des Notensystems
2741 ausgehend angegeben. Der Endpunkt ist normalerweise
2742 der Mittelpunkt des Elternobjektes, sodass Glissandos
2743 vertikal auf den Mittelpunkt eines Notenkopfes weist.
2745 Für horizontale Strecker, wie Textstrecker und Trillerstrecker
2746 ist sein Wert mit 0 definiert.
2749 Das entscheidet, wo die Linie auf der X-Achse beginnt und endet,
2750 relativ zum Elternobjekt. Ein Wert @code{-1} (oder
2751 @code{LEFT}) lässt die Linie an der linken Seite der Noten
2752 beginnen/enden, mit der sie verknüpft ist.
2755 Das ist der absolute X-Koordinatenpunkt des Endpunktes. Der
2756 Wert wird normalerweise in Echtzeit errechnet, und ihn zu
2757 verändern ist normalerweise nicht nützlich.
2760 Linienstrecker können Symbole am Ende oder zu Anfang des
2761 Streckers haben, die in dieser Untereigenschaft definiert
2762 werden. Die Eigenschaft ist für interne Benutzung, es
2763 wird empfohlen, die Eigenschaft @code{text} zu benutzen.
2766 Das ist eine Textbeschriftung, die ausgewertet wird und die
2767 @code{stencil}-Eigenschaft überschreibt. Sie wird eingesetzt,
2768 um @i{cresc.}, @i{tr} oder andere Texte an horizontale
2771 @lilypond[quote,ragged-right,relative=2,verbatim]
2772 \override TextSpanner #'(bound-details left text)
2773 = \markup { \small \bold Slower }
2774 c2\startTextSpan b c a\stopTextSpan
2777 @item stencil-align-dir-y
2778 @item stencil-offset
2779 Wenn keine dieser beiden Eigenschaften gesetzt wird, wird
2780 die Matrize (engl. stencil) einfach am Endpunkt des Streckers,
2781 auf seiner Mittellinie (wie durch @code{X} und @code{Y}
2782 definiert) zentriert, ausgegeben. Wenn entweder
2783 @code{stencil-align-dir-y} oder @code{stencil-offset}
2784 gesetzt werden, wird das Symbol am Rand vertikal entsprechend
2785 des Endpunktes der Linie verschoben:
2787 @lilypond[relative=1,quote,verbatim]
2788 \override TextSpanner
2789 #'(bound-details left stencil-align-dir-y) = #-2
2790 \override TextSpanner
2791 #'(bound-details right stencil-align-dir-y) = #UP
2793 \override TextSpanner
2794 #'(bound-details left text) = #"ggg"
2795 \override TextSpanner
2796 #'(bound-details right text) = #"hhh"
2797 c4^\startTextSpan c c c \stopTextSpan
2800 Dabei sollte beachtet werden, dass negative Werte das Objekt
2801 nach @emph{oben} verschieben, anders als man erwarten könnte,
2802 weil der Wert @code{-1} oder @code{DOWN} bedeutet, dass
2803 die @emph{Unterkante} des Textes mit der Streckerlinie
2804 ausgerichtet wird. Ein Wert @code{1} oder @code{UP}
2805 richtet die Oberkante des Textes mit der Streckerlinie aus.
2808 Wenn diese Untereigenschaft auf @code{#t} gesetzt wird,
2809 wird ein Pfeilkopf am Ende der Linie erstellt.
2812 Diese Eigenschaft kontrolliert den Abstand zwischen
2813 dem angegebenen Endpunkt der Linie und dem wirklichen Ende.
2814 Ohne Füllung (engl. padding) würde ein Glissando in der
2815 Mitte eines Notenkopfes beginnen und enden.
2819 Die musikalische Funktion @code{\endSpanners} beschließt
2820 den Strecker, der an der direkt folgenden Note beginnt,
2821 bevor er eigentlich zu ende wäre. Er wird exakt nach
2822 einer Note beendet, oder am nächsten Taktstrich, wenn
2823 @code{to-barline} auf wahr gesetzt ist und eine Taktlinie
2824 vor der nächsten Note erscheint.
2826 @lilypond[verbatim,quote,ragged-right,relative=2]
2828 c2 \startTextSpan c2 c2
2833 Wenn man @code{\endSpanners} benutzt, ist es nicht
2834 nötig, den Befehl \startTextSpan mit \stopTextSpan
2835 zu beenden, und es ist auch nicht nötig, Crescendo-Klammern
2836 mit @code{\!} zu beenden.
2840 Referenz der Interna:
2841 @rinternals{TextSpanner},
2842 @rinternals{Glissando},
2843 @rinternals{VoiceFollower},
2844 @rinternals{TrillSpanner},
2845 @rinternals{line-spanner-interface}.
2848 @node Sichtbarkeit von Objekten
2849 @subsection Sichtbarkeit von Objekten
2850 @translationof Visibility of objects
2852 @cindex Objekte, Sichtbarkeit
2853 @cindex Grobs, Sichtbarkeit
2854 @cindex Sichtbarkeit von Objekten
2856 Die Sichtbarkeit von Layout-Objekten kann auf vier Arten
2857 kontrolliert werden: Ihre Matrizen (engl stencil) können
2858 entfernt werden, sie können unsichtbar gemacht werden,
2859 sie können weiß eingefärbt werden und ihre
2860 @code{break-visibility}-Eigenschaft kann verändert werden.
2861 Die ersten drei Möglichkeiten beziehen sich auf alle
2862 Layout-Objekte, die letzte nur auf einige wenige, nämlich
2863 die @emph{zerteilbaren} Objekte. Das Handbuch zum Lernen
2864 führt in alle vier Möglichkeiten ein, siehe
2865 @rlearning{Sichtbarkeit und Farbe von Objekten}.
2867 Es gibt auch einige weitere Techniken, die sich nur auf
2868 bestimmte Layout-Objekte beziehen. Sie werden im letzten
2869 Abschnitt behandelt.
2872 * Einen stencil entfernen::
2873 * Objekten unsichtbar machen::
2874 * Objekte weiß malen::
2875 * break-visibility (unsichtbar machen) benutzen::
2880 @node Einen stencil entfernen
2881 @unnumberedsubsubsec Einen @code{stencil} entfernen
2882 @translationof Removing the stencil
2884 @cindex stencil, entfernen
2885 @cindex Matrize, entfernen
2886 @cindex Stempel (stencil), entfernen
2887 @cindex Entfernen eines Stencil
2889 Jedes Layout-Objekt hat eine Matrizen-(stencil)-Eigenschaft.
2890 Sie ist normalerweise definiert als die Funktion, die das
2891 entsprechende Objekt zeichnet. Wenn die Eigenschaft mit
2892 @code{\override} auf @code{#f} gesetzt wird, wird keine
2893 Funktion aufgerufen und also auch kein Objekt gezeichnet.
2894 Das Standardverhalten kann mit dem Befehl @code{\revert}
2895 wieder hergestellt werden.
2897 @lilypond[quote,verbatim,relative=1]
2899 \override Score.BarLine #'stencil = ##f
2901 \revert Score.BarLine #'stencil
2906 @node Objekten unsichtbar machen
2907 @unnumberedsubsubsec Objekten unsichtbar machen
2908 @translationof Making objects transparent
2910 @cindex transparent, Objekte
2911 @cindex unsichtbar, Objekte
2912 @cindex durchsichtig, Objekte
2914 Jedes Layout-Objekt hat eine Durchsichtigkeits-Eigenschaft
2915 (@code{'transparent}),
2916 die normalerweise auf den Wert @code{#f} gesetzt ist. Wenn
2917 sie auf @code{#t} gesetzt wird, nimmt das Objekt immer noch
2918 den entsprechenden Platz ein, ist aber unsichtbar.
2920 @lilypond[quote,verbatim,relative=2]
2922 \once \override NoteHead #'transparent = ##t
2927 @node Objekte weiß malen
2928 @unnumberedsubsubsec Objekte weiß malen
2929 @translationof Painting objects white
2931 @cindex Objekte, einfärben
2932 @cindex Färben von Objekten
2933 @cindex Einfärben von Objekten
2934 @cindex Ebenen (layer)
2935 @cindex layer (Ebenen)
2936 @cindex Druckreihenfolge
2937 @cindex Objekte verändern
2938 @cindex verändern von Objekten
2939 @cindex Grobs, verändern
2941 Alle Layout-Objekte haben eine Farb-(color)-Eigenschaft, die
2942 normalerweise schwarz (@code{black}) definiert ist. Wenn
2943 sie nach weiß (@code{white}) verändert wird, kann man das
2944 Objekt nicht mehr vom weißen Hintergrund unterscheiden.
2945 Wenn das Objekt jedoch andere Objekte überschneidet, wird
2946 die Farbe der Überschneidungen von der Reihenfolge entschieden,
2947 in welcher die Objekte gesetzt werden. Es kann also vorkommen,
2948 dass man die Umrisse des weißen Objektes erahnen kann, wie
2951 @lilypond[quote,verbatim,relative=2]
2952 \override Staff.Clef #'color = #white
2956 Das kann man vermeiden, indem man die Satzreihenfolge der Objekte
2957 verändert. Alle Layout-Objekte haben eine @code{layer}-Eigenschaft,
2958 die auf eine ganze Zahl gesetzt sein muss. Objekte mit der
2959 niedrigsten Zahl in der @code{layer}-Eigenschaft werden zuerst
2960 gesetzt, dann die nächsten Objekte in ansteigender Ordnung. Objekte
2961 mit höheren Werten überschneiden also Objekte mit niedrigeren
2962 Werten. Die meisten Objekte bekommen den Wert @code{1} zugewiesen,
2963 einige wenige Objekte, unter die auch @code{StaffSymbol} (die
2964 Notenlinien) gehört, jedoch den Wert @code{0}. Die Reihenfolge,
2965 in der Objekte mit demselben Wert gesetzt werden, ist nicht
2968 Im oberen Beispiel wird der weiße Schlüssel, der einen Wert von
2969 @code{1} für @code{layer} hat, nach den Notenlinien gesetzt
2970 (die einen Wert von @code{0} für @code{layer} haben) und
2971 überschneidet sie also. Um das zu ändern, muss dem @code{Clef}-Objekt
2972 (Notenschlüssel) ein niedrigerer Wert, etwa @code{-1}, gegeben
2973 werden, sodass es früher gesetzt wird:
2975 @lilypond[quote,verbatim,relative=2]
2976 \override Staff.Clef #'color = #white
2977 \override Staff.Clef #'layer = #-1
2982 @node break-visibility (unsichtbar machen) benutzen
2983 @unnumberedsubsubsec @code{break-visibility} (unsichtbar machen) benutzen
2984 @translationof Using break-visibility
2986 @funindex break-visibility
2988 @cindex break-visibility
2990 Die meisten Layout-Objekte werden nur einmal gesetzt, aber
2991 einige, wie Taktstriche, Schlüssel, Taktartbezeichnung und
2992 Tonartvorzeichen, müssen mehrmals gesetzt werden, wenn
2993 die Zeile gewechselt wird: einmal am Ende des oberen Systems
2994 und ein zweites Mal zu Beginn des nächsten Systems.
2995 Derartige Objekte werden als @emph{trennbar} bezeichnet
2996 und haben eine Eigenschaft, die @code{break-visibility}-Eigenschaft,
2997 mit der ihre Sichtbarkeit an allen drei Positionen, an denen
2998 sie auftreten können, kontrolliert werden kann: zu Beginn
2999 einer Zeile, innerhalb einer Zeile, wenn sie verändert werden,
3000 und am Ende einer Zeile, wenn die Änderung hier stattfindet.
3002 Die Taktart wird beispielsweise standardmäßig nur zu Beginn des
3003 ersten Systems gesetzt, aber an anderen Stellen nur, wenn sie
3004 sich ändert. Wenn diese Änderung am Ende eines Systems auftritt,
3005 wird die neue Taktart am Ende des aktuellen Systems als auch
3006 zu Beginn des nächsten Systems gesetzt.
3008 Dieses Verhalten wird von der @code{break-visibility}-Eigenschaft
3009 kontrolliert, die erklärt wird in
3010 @c Leave this ref on a newline - formats incorrectly otherwise -td
3011 @rlearning{Sichtbarkeit und Farbe von Objekten}. Die Eigenschaft
3012 braucht einen Vektor von drei Booleschen Werten, die in ihrer
3013 Reihenfolge bestimmte, ob das Objekt a) zu Ende der Zeile,
3014 b) innerhalb einer Zeile oder c) zu Beginn einer Zeile gesetzt
3015 wird. Oder, genauer gesagt, vor einem Zeilenumbruch, an Stellen,
3016 wo kein Zeilenumbruch auftritt oder nach einem Zeilenumbruch.
3018 Die acht möglichen Kombinationen können auch durch vordefinierte
3019 Funktionen bestimmt werden, welche in der Datei @file{scm/@/output@/-lib@/.scm}
3020 definiert sind. Die letzten drei Spalten der folgenden Tabelle
3021 zeigen an, ob das Layout-Objekt an einer bestimmten Position
3022 sichtbar sein wird oder nicht:
3024 @multitable {@code{begin-of-line-invisible}} {@code{'#(#t #t #t)}} {ja} {ja} {ja}
3025 @headitem Funktion @tab Vektor @tab Vor @tab kein @tab Nach
3026 @headitem Form @tab Form @tab Umbruch @tab Umbruch @tab Umbruch
3028 @item @code{all-visible} @tab @code{'#(#t #t #t)} @tab ja @tab ja @tab ja
3029 @item @code{begin-of-line-visible} @tab @code{'#(#f #f #t)} @tab nein @tab nein @tab ja
3030 @item @code{center-visible} @tab @code{'#(#f #t #f)} @tab nein @tab ja @tab nein
3031 @item @code{end-of-line-visible} @tab @code{'#(#t #f #f)} @tab ja @tab nein @tab nein
3032 @item @code{begin-of-line-invisible} @tab @code{'#(#t #t #f)} @tab ja @tab ja @tab nein
3033 @item @code{center-invisible} @tab @code{'#(#t #f #t)} @tab ja @tab nein @tab ja
3034 @item @code{end-of-line-invisible} @tab @code{'#(#f #t #t)} @tab nein @tab ja @tab ja
3035 @item @code{all-invisible} @tab @code{'#(#f #f #f)} @tab nein @tab nein @tab nein
3038 Die Standardeinstellungen von @code{break-visibility} hängen vom
3039 Layout-Objekt ab. Die folgende Tabelle zeigt alle wichtigen Layout-Objekte,
3040 die mit @code{break-visibility} verändert werden können und die
3041 jeweiligen Standardeinstellungen der Eigenschaft:
3043 @multitable @columnfractions .3 .3 .4
3045 @headitem Layout-Objekt @tab Normaler Kontext @tab Standardeinstellung
3047 @c omit Ambitus as it appears not to be affected by break-visibility -td
3048 @c @item @code{Ambitus} @tab as specified @tab @code{begin-of-line-visible}
3049 @item @code{BarLine} (Taktstrich) @tab @code{Score} @tab calculated
3050 @item @code{BarNumber} (Taktzahl) @tab @code{Score} @tab @code{begin-of-line-visible}
3051 @c omit the following item until it can be explained -td
3052 @c @item @code{BreakAlignGroup} @tab @code{Score} @tab calculated
3053 @item @code{BreathingSign} (Atemzeichen) @tab @code{Voice} @tab @code{begin-of-line-invisible}
3054 @item @code{Clef} (Schlüssel) @tab @code{Staff} @tab @code{begin-of-line-visible}
3055 @item @code{Custos} @tab @code{Staff} @tab @code{end-of-line-visible}
3056 @item @code{DoublePercentRepeat} (Doppel-Prozent-Wiederholung @tab @code{Voice} @tab @code{begin-of-line-invisible}
3057 @c omit KeyCancellation until it can be explained -td
3058 @c @item @code{KeyCancellation} @tab ?? @tab @code{begin-of-line-invisible}
3059 @item @code{KeySignature} (Tonart) @tab @code{Staff} @tab @code{begin-of-line-visible}
3060 @c omit LeftEdge until it can be explained -td
3061 @c @item @code{LeftEdge} @tab @code{Score} @tab @code{center-invisible}
3062 @item @code{OctavateEight} (Oktavierungs-Acht) @tab @code{Staff} @tab @code{begin-of-line-visible}
3063 @item @code{RehearsalMark} (Übungszeichen) @tab @code{Score} @tab @code{end-of-line-invisible}
3064 @item @code{TimeSignature} (Taktart) @tab @code{Staff} @tab @code{all-visible}
3068 Das Beispiel unten zeigt die Verwendung der Vektor-Form um die
3069 Sichtbarkeit von Taktlinien zu bestimmten:
3071 @lilypond[quote,verbatim,relative=1,ragged-right]
3074 % Remove bar line at the end of the current line
3075 \once \override Score.BarLine #'break-visibility = #'#(#f #t #t)
3081 Obwohl alle drei Bestandteile des Vektors, mit denen
3082 @code{break-visibility} definiert wird, vorhanden sein
3083 müssen, haben nicht alle eine Auswirkung auf jedes
3084 Layout-Objekt, und einige Kombinationen können sogar
3085 Fehler hervorrufen. Es gelten die folgenden Einschränkungen:
3089 Taktstriche können nicht zu Beginn einer Zeile gesetzt werden.
3092 Eine Taktzahl kann nicht zu Beginn der ersten Zeile gesetzt
3093 werden, außer wenn er nicht 1 ist.
3096 Schlüssel -- siehe unten.
3099 Doppel-Prozent-Wiederholungen werden entweder alle ausgegeben
3100 oder alle unterdrückt. Mit @code{begin-of-line-invisible} werden
3101 sie ausgegeben, mit @code{all-invisible} unterdrückt.
3104 Tonart -- siehe unten.
3107 Oktavierungs-Acht -- siehe unten.
3112 @node Besonderheiten
3113 @unnumberedsubsubsec Besonderheiten
3114 @translationof Special considerations
3116 @strong{@emph{Sichtbarkeit nach expliziten Änderungen}}
3118 @cindex Tonart, Sichtbarkeit nach expliziter Änderung
3119 @cindex Schlüssel, Sichtbarkeit nach expliziter Änderung
3121 @funindex explicitKeySignatureVisibility
3122 @funindex explicitClefVisibility
3124 Die @code{break-visibility}-Eigenschaft kontrolliert die Sichtbarkeit
3125 von Tonarten und Schlüsseländerungen nur zu Beginn einer Zeile,
3126 d.h. nach einem Zeilenumbruch. Sie hat keinen Einfluss auf die
3127 Sichtbarkeit von Tonarten bzw. Schlüsseln, die nach einer
3128 expliziten Tonart- oder Schlüsseländerung in oder am Ende einer
3129 Zeile angezeigt werden. Im nächsten Beispiel ist die Tonartangabe
3130 nach dem expliziten Wechsel zu B-Dur immer noch sichtbar, obwohl
3131 @code{all-invisible} eingesetzt wurde:
3133 @lilypond[quote,verbatim,relative=1,ragged-right]
3136 % Try to remove all key signatures
3137 \override Staff.KeySignature #'break-visibility = #all-invisible
3145 Die Sichtbarkeit derartiger expliziter Tonart- und Schlüsseländerungen
3146 wird von den @code{explicitKeySignatureVisibility}- und
3147 @code{explicitClefVisibility}-Eigenschaften kontrolliert. Sie
3148 entsprechen der @code{break-visibility}-Eigenschaft und beide
3149 brauchen drei Boolesche Werte bzw. die oben aufgelisteten vordefinierten
3150 Funktionen als Argument, genau wie @code{break-visibility}.
3151 Beide sind Eigenschaft des @code{Staff}-Kontextes, nicht der
3152 Layout-Objekte selber, weshalb sie mit dem Befehl @code{\set}
3153 eingesetzt werden. Beide sind standardmäßig auf die Funktion
3154 @code{all-visible} gesetzt. Diese Eigenschaften kontrollieren nur
3155 die Sichtbarkeit von Tonarten bzw. Schlüssel, die von expliziten
3156 Änderungen herrühren, und haben keinen Einfluss auf Tonarten und
3157 Schlüssel zu Beginn einer Zeile -- um diese zu beeinflussen, muss
3158 @code{break-visibility} benutzt werden.
3160 @lilypond[quote,verbatim,relative=1,ragged-right]
3163 \set Staff.explicitKeySignatureVisibility = #all-invisible
3164 \override Staff.KeySignature #'break-visibility = #all-invisible
3171 @strong{@emph{Sichtbarkeit von erinnernden Versetzungszeichen}}
3173 Um erinnernde Versetzungszeichen zu entfernen, die nach einer
3174 expliziten Tonartänderung auftreten, muss die @code{Staff}-Eigenschaft
3175 @code{printKeyCancellation} auf @code{#f} gesetzt werden:
3177 @lilypond[quote,verbatim,relative=1,ragged-right]
3180 \set Staff.explicitKeySignatureVisibility = #all-invisible
3181 \set Staff.printKeyCancellation = ##f
3182 \override Staff.KeySignature #'break-visibility = #all-invisible
3189 Mit diesen Veränderungen bleiben nur noch die Versetzungszeichen
3190 vor den Noten übrig um den Wechsel der Tonart anzuzeigen.
3192 @strong{@emph{Automatische Takte}}
3194 @funindex automaticBars
3196 @cindex Taktstriche, unterdrücken
3198 Ein Sonderfall sind die automatischen Taktstriche, die mit der
3199 Eigenschaft @code{automaticBars} im @code{Score}-Kontext
3200 ausgeschaltet werden können. Wenn sie auf @code{#f} gesetzt
3201 ist, werden Taktstrich nicht automatisch ausgegeben sondern
3202 müssen explizit mit dem @code{\bar}-Befehl eingegeben werden.
3203 Anders als bei dem @code{\cadenzaOn}-Befehl werden die Takte
3204 allerdings immer noch gezählt. Takterstellung wird später
3205 wieder mit diesem Zahl aufgenommen, wenn die Eigenschaft
3206 wieder auf @code{#t} gesetzt wird. Wenn sie den Wert @code{#f}
3207 hat, können Zeilenumbrüche nur an expliziten @code{\bar}-Befehlen
3212 @strong{@emph{Oktavierte Schlüssel}}
3214 @cindex oktavierte Schlüssel, Sichtbarkeit
3215 @cindex Sichtbarkeit von oktavierten Schlüsseln
3216 @cindex Schlüssel, Sichtbarkeit der Oktavierung
3218 Das kleine Oktavierungssymbol von oktavierten Notenschlüsseln
3219 wird durch das @code{OctavateEight}-Layout-Objekt erstellt.
3220 Seine Sichtbarkeit wird unabhängig vom @code{Clef}-Objekt
3221 bestimmt, sodass notwendige Veränderungen von @code{break-visibility}
3222 sowohl für @code{Clef} als auch für @code{OctavateEight} vorgenommen
3223 werden müssen, damit derartige Schlüssel entfernt werden.
3225 Bei expliziten Schlüsseländerungn kontrolliert die
3226 @code{explicitClefVisibility}-Eigenschaft wohl das
3227 Schlüsselsymbol als auch das damit verknüpfte Oktavierungssymbol.
3230 Handbuch zum Lernen:
3231 @rlearning{Sichtbarkeit und Farbe von Objekten}
3235 @subsection Linienstile
3236 @translationof Line styles
3238 Einige Aufführungsanweisungen (z. B. @i{rallentando} und
3239 @i{accelerando} oder Triller werden als Text gesetzt und
3240 möglicherweise über mehrere Takte mit Linien fortgeführt,
3241 die teilweise gestrichelt oder gewellt sind.
3243 Alle benutzen die gleichen Routinen wie das Glissando,
3244 um Text und Linien zu produzieren, weshalb auch eine
3245 Veränderungen der Erscheinung auf gleiche Weise vonstatten
3246 geht. Die Ausgabe erfolgt durch einen Strecker (engl. spanner), und
3247 die Routine, die ihn setzt, heißt @code{ly:line-interface::print}.
3248 Diese Routine bestimmt die exakte Position von zwei
3249 @i{Strecker-Punkten} und zeichnet eine Linie zwischen sie
3250 im gewünschten Linienstil.
3252 Hier einige Beispiele, welche Linienstile möglich sind
3253 und wie sie verändert werden können:
3255 @lilypond[relative=2,ragged-right,verbatim,quote]
3257 \once \override Glissando #'style = #'dashed-line
3259 \override Glissando #'style = #'dotted-line
3261 \override Glissando #'style = #'zigzag
3263 \override Glissando #'style = #'trill
3267 Die Position der Endpunkte des Streckers werden in
3268 Realzeit für jedes graphische Objekt errechnet, aber
3269 es ist möglich, sie manuell vorzugeben:
3272 @lilypond[relative=2,ragged-right,verbatim,quote]
3274 \once \override Glissando #'(bound-details right Y) = #-2
3278 Der Wert von @code{Y} wird für den rechten Endpunkt auf
3279 @code{-2} gesetzt. Die linke Seite kann ähnlich angepasst
3280 werden, indem man @code{left} anstelle von @code{right} angibt.
3282 Wenn @code{Y} nicht gesetzt ist, wird der Wert ausgehend von
3283 der vertikalen Position der linken und rechten Anbindepunkte
3284 des Streckers errechnet.
3286 Andere Anpassungen der Strecker sind auch möglich, für Einzelheiten
3287 siehe @ref{Strecker}.
3290 @node Drehen von Objekten
3291 @subsection Drehen von Objekten
3292 @translationof Rotating objects
3294 Layout-Objekte und Textbeschriftungselemente können zu einem
3295 beliebigen Winkel um einen beliebigen Punkt herum gedreht
3296 werden, aber die Methode, mit der die Änderung vorgenommen
3297 werden muss, unterscheidet sich je nach Objekt.
3300 * Drehen von Objekten::
3301 * Textbeschriftung drehen::
3304 @node Drehen von Objekten
3305 @unnumberedsubsubsec Drehen von Objekten
3306 @translationof Rotating layout objects
3308 @cindex Drehen von Objekten
3309 @cindex Objekte, Drehen
3311 Alle Layout-Objekte, die das @code{grob-interface} unterstützen,
3312 können gedreht werden, indem man ihre @code{rotation}-Eigenschaft
3313 einstellt. Sie erhält eine Liste mit drei Einträgen: den
3314 Winkel der Drehung gegen den Uhrzeiger sowie die X- und
3315 Y-Koordinaten des Punktes relativ zum Referenzpunkt des Objekts,
3316 um welchen herum die Drehung stattfinden soll. Der Winkel
3317 der Drehung wird in Grad angegeben, die Koordinaten in
3318 Notenlinienzwischenräumen.
3320 Der Winkel der Drehung und die Koordinaten des Drehpunktes müssen
3321 durch Ausprobieren herausgefunden werden.
3323 @cindex Crescendoklammern, gedreht
3324 @cindex gedrehte Crescendoklammern
3325 @cindex schräge Crescendoklammern
3326 @cindex Klammern, Crescendo, schräg
3328 Es gibt nur wenige Situationen, in welchen die Drehung eines
3329 Layout-Objektes sinnvoll ist. Das folgende Beispiel zeigt
3330 eine sinnvolle Anwendung:
3332 @lilypond[quote,verbatim,relative=1]
3334 \override Hairpin #'rotation = #'(20 -1 0)
3339 @node Textbeschriftung drehen
3340 @unnumberedsubsubsec Textbeschriftung drehen
3341 @translationof Rotating markup
3343 Jede Textbeschriftung kann gedreht werden, indem vor die Anweisung
3344 der Befehl @code{\rotate} gesetzt wird. Der Befehl hat zwei
3345 Argumente: Den Winkel der Drehung in Grad gegen den Uhrzeiger und
3346 der Text, der gedreht dargestllt werden soll. Die Ausdehnung des
3347 Textes wird nicht gedreht, sie erhält ihren Wert von den Extrempunkten
3348 der x- und y-Koordinaten des gedrehten Textes. Im folgenden
3349 Beispiel wird die @code{outside-staff-priority}-Eigenschaft auf
3350 @code{#f} gesetzt, damit automatische Zusammenstöße nicht verhindert
3351 werden, wodurch andernfalls einige der Texte zu hoch geschoben werden
3354 @lilypond[quote,verbatim,relative=1]
3355 \override TextScript #'outside-staff-priority = ##f
3356 g4^\markup { \rotate #30 "a G" }
3357 b^\markup { \rotate #30 "a B" }
3358 des^\markup { \rotate #30 "a D-Flat" }
3359 fis^\markup { \rotate #30 "an F-Sharp" }
3363 @node Fortgeschrittene Optimierungen
3364 @section Fortgeschrittene Optimierungen
3365 @translationof Advanced tweaks
3367 Dieser Abschnitt behandelt verschiedene Möglichkeiten, das
3368 Aussehen des Notenbildes zu polieren.
3371 * Objekte ausrichten::
3372 * Vertikale Gruppierung der grafischen Objekte („grob“s)::
3373 * stencils verändern::
3374 * Formen verändern::
3379 Handbuch zum Lernen:
3380 @rlearning{Die Ausgabe verändern},
3381 @rlearning{Mehr Information}.
3384 @ref{Die Referenz der Programminterna erklärt},
3385 @ref{Eigenschaften verändern},
3386 @ref{Schnittstellen für Programmierer}.
3388 Installierte Dateien:
3389 @file{scm/@/define@/-grobs@/.scm}.
3392 @rlsr{Tweaks and overrides}.
3394 Referenz der Interna:
3395 @rinternals{All layout objects}.
3398 @node Objekte ausrichten
3399 @subsection Objekte ausrichten
3400 @translationof Aligning objects
3402 Graphische Objekte, die das @code{self-alignment-interface} und/obder
3403 das @code{side-position-interface} unterstützen, können an einem
3404 vorher gesetzten Objekt auf verschiedene Weise ausgerichtet werden.
3405 Eine Liste derartiger Objekte findet sich in
3406 @rinternals{self-alignment-interface} und @rinternals{side-position-interface}.
3408 Alle graphischen Objekte haben einen Referenzpunkt, eine horizontale
3409 Ausdehnung und eine vertikale Ausdehnung. Die horizontale Ausdehnung ist
3410 ein Zahlenpaar, mit dem die Verschiebung der rechten und linken Ecken
3411 ausgehend vom Referenzpunkt angegeben werden, wobei Verschiebungen
3412 nach links mit negativen Zahlen notiert werden. Die vertikale Ausdehnung
3413 ist ein Zahlenpaar, das die Verschiebung der unteren und oberen
3414 Ränder vom Referenzpunkt ausgehend angibt, wobei Verschiebungen nach
3415 unten mit negativen Zahlen notiert werden.
3417 Die Position eines Objektes auf dem Notensystem wird mit Werten
3418 von @code{X-offset} und @code{Y-offset} angegeben. Der Wert von
3419 @code{X-offset} gibt die Verschiebung von der X-Koordinate des
3420 Referenzpunkts des Elternobjektes an, der Wert von @code{Y-offset}
3421 die Verschiebung ausgehend von der Mittellinie des Notensystemes.
3422 Die Werte von @code{X-offset} und @code{Y-offset} können direkt
3423 bestimmt werden oder durch Prozeduren errechnet werden, sodass
3424 eine Ausrichtung mit dem Elternobjekt erreicht werden kann.
3426 @warning{Viele Objekte brauchen besondere Überlegungen zu ihrer
3427 Position, weshalb in manchen Fällen manuell gesetzte Werte von
3428 @code{X-offset} oder @code{Y-offset} ignoriert oder verändert
3429 werden können, obwohl das Objekt das
3430 @code{self-alignment-interface} unterstützt. Wenn man @code{X-offset}
3431 oder @code{Y-offset} auf einen festen Wert setzt, wird die entsprechende
3432 @code{self-alignment}-Eigenschaft ignoriert.}
3434 Ein Versetzungszeichen beispielsweise kann vertikal durch Veränderung
3435 von @code{Y-offset} verschoben werden, aber Änderungen von
3436 @code{X-offset} haben keine Auswirkung.
3438 Übungszeichen können an trennbaren Objekten (wie Taktstrichen,
3439 Schlüsseln, Taktarten und Tonartvorzeichen) ausgerichtet werden.
3440 In @code{break-aligned-interface} finden sich besondere Eigenschaften,
3441 mit denen Übungszeichen an derartigen Objekten ausgerichtet werden können.
3446 @ref{Benutzung des break-alignable-interface}.
3449 @rextend{Callback functions}.
3453 * X-offset und Y-offset direkt setzen::
3454 * Das side-position-interface benutzen::
3455 * Das self-alignment-interface benutzen::
3456 * Benutzung des break-alignable-interface::
3459 @node X-offset und Y-offset direkt setzen
3460 @unnumberedsubsubsec @code{X-offset} und @code{Y-offset} direkt setzen
3461 @translationof Setting X-offset and Y-offset directly
3463 Numerische Werte können den @code{X-offset}- und @code{Y-offset}-Eigenschaften
3464 vieler Objekte zugewiesen werden. Das folgende Beispiel zeigt
3465 drei Noten mit der Standardposition von Fingersatzanweisungen
3466 und die Positionen, wenn @code{X-offset} und @code{Y-offset}
3469 @lilypond[verbatim,quote,relative=2]
3472 -\tweak #'X-offset #0
3473 -\tweak #'Y-offset #0
3476 -\tweak #'X-offset #-1
3477 -\tweak #'Y-offset #1
3483 @node Das side-position-interface benutzen
3484 @unnumberedsubsubsec Das @code{side-position-interface} benutzen
3485 @translationof Using the side-position-interface
3487 Ein Objekt, das die @code{side-position-interface}-Schnittstelle
3488 unterstützt, kann neben sein Elternobjekt gesetzt werden,
3489 sodass zwei definierte Enden der Objekte sich berühren.
3490 Das Objekt kann über, unter, rechts oder links vom
3491 Ursprungsobjekt positioniert werden. Das Ursprungsobjekt
3492 kann nicht definiert werden: es ergibt sich aus der Reihenfolge
3493 der Objekte in der Eingabe. Die meisten Objekte haben
3494 einen Notenkopf als Ursprung assoziiert.
3496 Die Werte von @code{side-axis} und @code{direction} bestimmen,
3497 wo das Objekt platziert werden soll, wie in der Tabelle
3500 @c TODO add an example of each to the table
3502 @multitable @columnfractions .3 .3 .3
3503 @headitem @code{side-axis}- @tab @code{direction}- @tab
3504 @headitem Eigenschaft @tab Eigenschaft @tab Platzierung
3506 @item @code{0} @tab @code{-1} @tab links
3507 @item @code{0} @tab @code{1} @tab rechts
3508 @item @code{1} @tab @code{-1} @tab unten
3509 @item @code{1} @tab @code{1} @tab oben
3513 Wenn @code{side-axis} gleich @code{0} ist, sollte @code{X-offset}
3514 auf die Prozedur @code{ly:side-position-interface::x-aligned-side}
3515 gesetzt werden. Diese Prozedur errechnet den richtigen Wert für
3516 @code{X-offset}, sodass das Objekt auf der rechten oder linken
3517 Seite des Ursprungs angeordnet wird, entsprechend dem Wert
3518 der @code{direction}-Eigenschaft.
3520 Wenn @code{side-axis} gleich @code{1} ist, sollte @code{Y-offset}
3521 auf die Prozedur @code{ly:side-position-interface::y-aligned-side}
3522 gesetzt werden. Diese Prozedur errechnet den richtigen Wert für
3523 @code{Y-offset}, sodass das Objekt über oder unter dem Ursprungsobjekt
3524 angeordnet wird, entsprechend dem Wert der @code{direction}-Eigenschaft.
3529 @node Das self-alignment-interface benutzen
3530 @unnumberedsubsubsec Das @code{self-alignment-interface} benutzen
3531 @translationof Using the self-alignment-interface
3533 @emph{Selbstausrichtende Objekte horizontal}
3535 Die horizontale Ausrichtung eines Objektes, das die
3536 @code{self-alignment-interface}-(Selbstausrichtungs)-Schnittstelle
3537 unterstützt, wird durch den Wert von @code{self-alignment-X}
3538 kontrolliert, vorausgesetzt die Eigenschaft @code{X-offset} des
3539 Objektes ist auf @code{ly:self-alignment-interface::x-aligned-on-self}
3540 gesetzt. @code{self-alignment-X} kann eine beliebige reale
3541 Zahl zugewiesen werden, in Einheiten der Hälfte der
3542 X-Gesamtausdehnung des Objekts. Negative Werte verschieben
3543 das Objekt nach rechts, positive nach links. Ein Wert von
3544 @code{0} zentriert das Objekt auf dem Referenzpunkt des
3545 Ursprungs, ein Wert von @code{-1} richtet die linke Ecke des
3546 Objekts am Referenzpunkt des Ursprungsobjektes aus, ein
3547 Wert von @code{1} richtet die rechte Ecke des Objektes am
3548 Referenzpunkt des Ursprungsobjektes aus. Die Symbole
3549 @code{LEFT}, @code{CENTER} und @code{RIGHT} können anstelle
3550 von @code{-1, 0, 1} eingesetzt werden.
3552 Normalerweise würde der @code{\override}-Befehl benutzt werden, um
3553 die Werte von @code{self-alignment-X} zu verändern, aber der
3554 @code{\tweak}-Befehl kann benutzen, um verschiedene Anmerkungen
3555 an einer einzigen Note auszurichten:
3557 @lilypond[quote,verbatim,relative=1]
3559 -\tweak #'self-alignment-X #-1
3561 -\tweak #'self-alignment-X #0
3563 -\tweak #'self-alignment-X #RIGHT
3565 -\tweak #'self-alignment-X #-2.5
3566 ^"aligned further to the right"
3570 @emph{Objekte vertikal automatisch ausrichten}
3572 Objekte können auf ähnliche Weise auch vertikal aneinander
3573 ausgerichtet werden, wenn ihre @code{Y-offset}-Eigenschaft
3574 auf @code{ly:self-alignment-interface::y-aligned-on-self}
3575 gesetzt ist. Oft greifen jedoch auch andere Mechanismen
3576 bei der vertikalen Ausrichtung ein: Der Wert von
3577 @code{Y-offset} ist nur eine der Variablen, die für die
3578 Berechnung benutzt werden. Darum ist es kompliziert, den
3579 Wert für einige Objekte richtig anzupassen. Die Einheiten
3580 sind Halbe der vertikalen Ausdehnung des Objektes, welche
3581 normalerweise recht klein ist, sodass ziemlich große Werte
3582 erforderlich sein können. Der Wert @code{-1} richtet die
3583 untere Kante des Objekts am Referenzpunkt des Ursprungsobjektes
3584 aus, der Wert @code{0} richtet die Mitte des Objekts am
3585 Referenzpunkt des Ursprungsobjektes aus und der Wert @code{1}
3586 richtet die Oberkante des Objektes am Referenzpunkt des
3587 Ursprungsobjektes aus. Die Symbole @code{DOWN}, @code{CENTER}
3588 und @code{UP} können anstelle von @code{-1, 0, 1} benutzt
3591 @emph{Automatische Ausrichtung in beide Richtungen}
3593 Indem sowohl @code{X-offset} als auch @code{Y-offset} eingestellt
3594 werden, kann ein Objekt gleichzeitig in beiden Richtungen ausgerichtet
3597 Das folgende Beispiel zeigt, wie man eine Fingersatzanweisung so
3598 ausrichtet, dass sie nah am Notenkopf bleibt.
3600 @lilypond[quote,verbatim,relative=2]
3602 -\tweak #'self-alignment-X #0.5 % move horizontally left
3603 -\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self
3604 -\tweak #'self-alignment-Y #-1 % move vertically up
3611 @node Benutzung des break-alignable-interface
3612 @unnumberedsubsubsec Benutzung des @code{break-alignable-interface}
3613 @translationof Using the break-alignable-interface
3615 @cindex Ausrichtung an Objekten
3617 @funindex break-align-symbols
3619 Übungszeichen und Taktzahlen können an Notationsobjekten (ausschließlich
3620 Taktstriche) ausgerichtet werden. Zu diesen Objekten gehören
3621 @code{ambitus}, @code{breathing-sign}, @code{clef}, @code{custos},
3622 @code{staff-bar}, @code{left-edge}, @code{key-cancellation},
3623 @code{key-signature} und @code{time-signature}.
3625 Standardmäßig werden Übungszeichen und Taktzahlen horizontal
3626 über dem Objekt zentriert:
3628 @lilypond[verbatim,quote,relative=1]
3629 % The RehearsalMark will be centered above the Clef
3630 \override Score.RehearsalMark #'break-align-symbols = #'(clef)
3635 % The RehearsalMark will be centered above the TimeSignature
3636 \override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
3642 % The rehearsal mark will be centered above the Breath Mark
3643 \override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign)
3652 Eine Liste von möglichen Objekten zur Ausrichtung kann definiert
3653 werden. Wenn eins dieser Objekte an der aktuellen Stelle unsichtbar
3654 ist (etwa durch Einstellung von @code{break-visibility} oder die
3655 expliziten Sichtbarkeitseinstellungen von Taktart und Vorzeichen),
3656 werden Übungszeichen und Taktzahlen an dem ersten Objekt in der
3657 Liste ausgerichtet, dass sichtbar ist. Wenn keine Objekte in der
3658 Liste sichtbar sind, wird das Objekt am Taktstrich ausgerichtet.
3659 Wenn der Taktstrich unsichtbar ist, wird das Objekt an der Stelle
3660 ausgerichtet, an der sich der Taktstrich befinden würde.
3662 @lilypond[verbatim,quote,relative=1]
3663 % The RehearsalMark will be centered above the Key Signature
3664 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3669 % The RehearsalMark will be centered above the Clef
3670 \set Staff.explicitKeySignatureVisibility = #all-invisible
3671 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3676 % The rehearsal mark will be centered above the Bar Line
3677 \set Staff.explicitKeySignatureVisibility = #all-invisible
3678 \set Staff.explicitClefVisibility = #all-invisible
3679 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3687 Die Ausrichtung des Übungszeichen relativ zum Notationsobjekt kann
3688 verändert werden, wie das nächste Beispiel zeigt. In einer Partitur
3689 mit vielen Systemen würde man diese Einstellung für alle Systeme
3692 @lilypond[verbatim,quote,relative=1]
3693 % The RehearsalMark will be centered above the KeySignature
3694 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
3700 % The RehearsalMark will be aligned with the left edge of the KeySignature
3701 \once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
3705 % The RehearsalMark will be aligned with the right edge of the KeySignature
3706 \once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
3712 Das Übungszeichen kann auch nach rechts oder links um einen beliebigen Wert
3713 verschoben werden. Die Einheiten sind in Notenlinienzwischenräumen:
3715 @lilypond[verbatim,quote,relative=1]
3716 % The RehearsalMark will be aligned with the left edge of the KeySignature
3717 % and then shifted right by 3.5 staff-spaces
3718 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
3719 \once \override Score.KeySignature #'break-align-anchor = #3.5
3723 % The RehearsalMark will be aligned with the left edge of the KeySignature
3724 % and then shifted left by 2 staff-spaces
3725 \once \override Score.KeySignature #'break-align-anchor = #-2
3733 @node Vertikale Gruppierung der grafischen Objekte („grob“s)
3734 @subsection Vertikale Gruppierung der grafischen Objekte („grob“s)
3735 @translationof Vertical grouping of grobs
3737 Die graphischen Objekte @code{VerticalAlignment} und
3738 @code{VerticalAxisGroup} funktionieren zusammen.
3739 @code{VerticalAxisGroup} gruppiert unterschiedliche Objekte
3740 wie Notensysteme, Gesangstext usw. zusammen.
3741 @code{VerticalAlignment} richtet die unterschiedlichen
3742 Objektgruppen dann aneinander aus. Es gibt normalerweise
3743 nur ein @code{VerticalAlignment} in einer Partitur, aber
3744 jedes Notensystem, Gesangstext usw. hat eine eigene
3745 @code{VerticalAxisGroup}.
3748 @node stencils verändern
3749 @subsection stencils verändern
3750 @translationof Modifying stencils
3752 Alle Layout-Objekte haben eine @code{stencil}-(Stempel-)Eigenschaft,
3753 die ein Teil von @code{grob-interface} ist. Diese Eigenschaft
3754 ist normalerweise als eine Funktion definiert, die auf das jeweilige
3755 Objekt angepasst ist und das Symbol erstellt, dass dann im Druckbild
3756 erscheint. Beispielsweise die Standardeinstellung für die
3757 @code{stencil}-Eigenschaft von @code{MultiMeasureRest}
3758 (Ganztaktpausenobjekt) ist @code{ly:multi-measure-rest::print}.
3760 Das Standardsymbol für jedes Objekt kann ersetzt werden, indem man
3761 die @code{stencil}-Eigenschaft verändert, sodass sie auf eine
3762 andere, speziell geschriebene Prozedur verweist. Das erfordert
3763 einen hohen Grad an Kenntnis der LilyPond-Interna, aber es gibt
3764 einen einfacheren Weg, mit dem man oft vergleichbarere Ergebnisse
3767 Dieser Weg besteht darin, die @code{stencil}-Eigenschaft auf die
3768 Prozedur zu verweisen, die Text ausgibt: @code{ly:text-interface::print}
3769 und eine @code{text}-Eigenschaft zu dem Objekt hinzuzufügen,
3770 in welcher dann die Textbeschriftung definiert wird, mit der
3771 das entsprechende Symbol dargestellt wird. Aufgrund der
3772 Flexibilität der Textbeschriftung ist hier sehr viel möglich.
3773 Siehe zu Details insbesondere
3774 @ref{Graphische Notation innerhalb einer Textbeschriftung}.
3776 Das folgende Beispiel zeigt diese Methode, indem das Symbol
3777 der Notenköpfe in ein Kreuz innerhalb eines Kreises umgewandelt
3780 @lilypond[verbatim,quote]
3782 \once \override NoteHead #'stencil = #ly:text-interface::print
3783 \once \override NoteHead #'text = \markup {
3785 \halign #-0.7 \draw-circle #0.85 #0.2 ##f
3786 \musicglyph #"noteheads.s2cross"
3794 Alle Schriftzeichen in der feta-Schriftart können
3795 mit dem @code{\musicglyph}-Befehl erreicht werden.
3796 Siehe auch @ref{Die Feta-Schriftart}.
3802 @ref{Graphische Notation innerhalb einer Textbeschriftung},
3803 @ref{Text formatieren},
3804 @ref{Text markup commands},
3805 @ref{Die Feta-Schriftart}.
3809 @node Formen verändern
3810 @subsection Formen verändern
3811 @translationof Modifying shapes
3817 @node Bögen verändern
3818 @unnumberedsubsubsec Bögen verändern
3819 @translationof Modifying ties and slurs
3821 @cindex Bögen, verändern
3822 @cindex Bindebögen, verändern
3823 @cindex Legatobögen, verändern
3824 @cindex Bézier-Kurven
3825 @cindex Kontrollpunkte, Bézier-Kurven
3827 Binde-, Legato- und Phrasierungsbögen werden als Bézierkurven
3828 dritter Ordnung gezeichnet. Wenn die Form eines automatischen
3829 Bogens nicht optimal ist, kann sie manuell verändert werdne,
3830 indem man die vier erforderlichen Kontrollpunkte angibt.
3832 Bézierkurven dritter Ordnung (auch als quadratische Bézierkurven
3833 bezeichnet) werden durch vier Kontrollpunkte definiert. Der
3834 erste und vierte Kontrollpunkt geben Beginn und Ende der Kurve
3835 an. Die zwei Punkte dazwischen werden benutzt, um die Form
3836 der Kurve zu bestimmen. Im Internet gibt es Animationen,
3837 die illustrieren, wie eine derartige Kurve gezeichnet wird,
3838 aber die folgende Beschreibung kann hilfreich sein. Die
3839 Kurve beginnt am ersten Kontrollpunkt in Richtung des zweiten,
3840 wobei sie sich schrittweise krümmt um zum dritten Kontrollpunkt
3841 zu gelangen, von wo aus sie sich weiter zum vierten Punkt hin
3842 krümmt. Die Form der Kurve wird vollständig von den vier
3845 Hier ein Beispiel eines Falles, in dem der Bogen nicht optimal
3846 erscheint, und wo auch @code{\tieDown} das Problem nicht
3849 @lilypond[verbatim,quote,relative=1]
3853 { r4 <g c,> <g c,> <g c,> }
3857 Eine Möglichkeit, diesen Bogen zu verbessern, ist es, seine
3858 Kontrollpunkte manuell zu verändern:
3860 Die Koordinaten von Bézierkontrollpunkten werden in
3861 Notenlinienzwischenräumen angegeben. Die X-Achse
3862 ist relativ zum Referenzpunkt der Note, an die der Bogen
3863 angefügt wird, und die Y-Achse relativ zur Mittellinie
3864 des Notensystems. Die Koordinaten werden als eine Liste
3865 von vier Paaren an realen Dezimalzahlen eingegeben. Eine
3866 Möglichkeit ist es, die Koordinaten der zwei Endpunkte
3867 zu schätzen und dann die zwei Zwischenpunkte zu erraten.
3868 Die optimalen Werte können nur durch Ausprobieren gefunden
3871 Es lohnt sich daran zu denken, dass eine symmetrische Kurve
3872 symmetrische Kontrollpunkte benötigt, und dass Bézierkurven
3873 die nützliche Eigenschaft haben, dass eine Transformation
3874 der Kurve wie eine Übersetzung, Drehung oder Skalierung
3875 der Kurve erreicht werden kann, indem man die gleiche
3876 Skalierung auf die Kontrollpunkte anwendet.
3878 In dem obigen Beispiel geben folgende Werte einen
3879 zufriedenstellenden Bogen -- Achtung: der Befehl muss direkt
3880 vor dem Beginn der Note gesetzt werden, an die der (Binde-)Bogen angehängt
3883 @lilypond[verbatim,quote,relative=1]
3887 #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
3891 { r4 <g c,> <g c,> <g c,>4 }
3897 Es ist nicht möglich, die Form von Bögen anhand ihrer
3898 @code{control-points}-Eigenschaft zu verändern, wenn
3899 mehr als ein Bogen zum gleichen musikalischen Moment
3900 auftritt, nicht einmal mit dem @code{\tweak}-Befehl.
3904 @node Musikfunktionen benutzen
3905 @section Musikfunktionen benutzen
3906 @translationof Using music functions
3908 @c TODO -- add @seealso, etc. to these subsections
3910 Wenn Optimierungen von unterschiedlichen musikalischen Ausdrücken
3911 wiederverwendet werden sollen, bietet es sich oft an, den
3912 @qq{Optimierungsanteil} einer @emph{musikalischen Funktion} zu
3913 erstellen. In diesem Abschnitt sollen nur @emph{Ersetzungen}
3914 erklärt werden, wo es darum geht, eine Variable mit einem Stück
3915 LilyPond-Code zu ersetzen. Andere komplexere Funktionen werden
3916 beschrieben in @rextend{Musikalische Funktionen}.
3919 * Syntax der Ersetzungsfunktion::
3920 * Beispiele der Ersetzungsfunktion::
3923 @node Syntax der Ersetzungsfunktion
3924 @subsection Syntax der Ersetzungsfunktion
3925 @translationof Substitution function syntax
3927 Es ist einfach eine Funktion zu erstellen, die eine Variable
3928 in LilyPond-Code umwandelt. Die generelle Form dieser
3933 #(define-music-function
3934 (parser location @var{Arg1} @var{Arg2} @dots{})
3935 (@var{Typ1?} @var{Typ2?} @dots{})
3937 @var{@dots{}Noten@dots{}}
3944 @multitable @columnfractions .33 .66
3945 @item @code{@var{ArgN}}
3946 @tab @var{n}tes Argument
3948 @item @code{@var{TypN?}}
3949 @tab ein Scheme @emph{Typenprädikat}, für das @code{@var{ArgN}}
3950 den Wert @code{#t} ausgibt.
3952 @item @code{@var{@dots{}Noten@dots{}}}
3953 @tab normale LilyPond-Eingab, wobei @code{$} benutzt wird, um
3954 Argumente zu referenzieren (etwa @samp{$Arg1}).
3958 Die @code{parser} und @code{location}-Argumente sind zwingend und
3959 werden in einigen fortgeschrittenen Situationen benutzt, wie sie
3960 im @qq{Erweitern}-Handbuch beschrieben werden (siehe
3961 @rextend{Musikalische Funktionen}). In Ersetzungsfunktionen
3962 gehen Sie einfach sicher, dass sie die beiden Wörter auch mit
3965 Die Liste der Typenprädikate ist auch notwendig. Einige der
3966 häufigsten Typenprädikate, die in musikalischen Funktionen
3967 benutzt werden, sind:
3971 cheap-list? @emph{(benutze anstelle von }@q{list?}@emph{ für schnelleres Kompilieren)}
3981 Eine Liste aller Typprädikate findet sich unter
3982 @ref{Vordefinierte Typprädikate}. Eigene Typprädikate
3989 @ref{Vordefinierte Typprädikate}.
3992 @rextend{Musikalische Funktionen}.
3994 Installierte Dateien:
3995 @file{lily/music-scheme.cc},
3997 @file{scm/lily.scm}.
4000 @node Beispiele der Ersetzungsfunktionen
4001 @subsection Beispiele der Ersetzungsfunktionen
4002 @translationof Substitution function examples
4004 Dieser Abschnitt zeigt einige Beispiele von Ersetzungsfunktionen.
4005 Sie sind nicht vollständig, sondern sollen einige der
4006 Möglichkeiten von einfachen Ersetzungsfunktionen aufzeigen.
4008 Im ersten Beispiel wird eine Funktione definiert, die
4009 das Verschieben von @code{TextScript} erleichtert:
4011 @lilypond[quote,verbatim,ragged-right]
4013 #(define-music-function
4014 (parser location padding)
4017 \once \override TextScript #'padding = $padding
4021 c4^"piu mosso" b a b
4023 c4^"piu mosso" d e f
4025 c4^"piu mosso" fis a g
4029 Neben Zahlen können auch musikalische Ausdrücke wie Noten
4030 als Argumente für musikalische Funktionen eingesetzt werden:
4032 @c TODO: use a better example (the music argument is redundant).
4034 @lilypond[quote,verbatim,ragged-right]
4036 #(define-music-function
4037 (parser location note)
4040 \once \override Voice.NoteHead #'stencil =
4041 #ly:text-interface::print
4042 \once \override Voice.NoteHead #'text =
4043 \markup \musicglyph #"custodes.mensural.u0"
4044 \once \override Voice.Stem #'stencil = ##f
4048 \relative c' { c4 d e f \custosNote g }
4051 Ersetzungsfunktionen mit mehrfachen Argumenten können definiert
4054 @lilypond[quote,verbatim,ragged-right]
4056 #(define-music-function
4057 (parser location padding tempotext)
4060 \once \override Score.MetronomeMark #'padding = $padding
4061 \tempo \markup { \bold $tempotext }
4065 \tempo \markup { "Low tempo" }
4067 \tempoPadded #4.0 #"High tempo"