1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
4 Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
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_heads_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
805 \override Flag #'transparent = ##t
809 \accepts "ImproVoice"
813 a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
814 c4 c^"ausziehen" c_"während des Spiels :)" c }
819 Diese Einstellungen werden innerhalb der @code{\context}-Umgebung
820 innerhalb der @code{\layout}-Umgebung definiert:
830 Der Beispielcode des folgenden Abschnittest muss anstelle der Punkte
831 im vorigen Beispiel eingesetzt werden.
833 Zuerst ist es nötig eine Bezeichnung für den neuen Kontext zu
840 Weil dieser neue Kontext ähnlich wie @code{Voice} ist, sollen die Befehle,
841 die in @code{Voice}-Kontexten funktionieren, auch
842 in dem neuen Kontext funktionieren. Das wird erreicht, indem der
843 Kontext als Alias @code{Voice} erhält:
849 Der Kontext gibt Noten und Text aus, darum müssen wir die Engraver
850 hinzufügen, die für diese Aktionen zuständig sind:
853 \consists Note_heads_engraver
854 \consists Text_engraver
858 aber die Noten sollen nur auf der mittleren Linie ausgegeben werden:
861 \consists Pitch_squash_engraver
862 squashedPosition = #0
865 Der @code{Pitch_squash_engraver} verändert Notenköpfe (die vom
866 @code{Note_heads_engraver} erstellt werden) und setzt ihre vertikale
867 Position auf den Wert von @code{squashedPosition}, in diesem Fall ist
870 Die Noten sehen wie ein Querstrich aus und haben keine Hälse:
873 \override NoteHead #'style = #'slash
874 \override Stem #'transparent = ##t
875 \override Flag #'transparent = ##t
878 Alle diese Engraver müssen zusammenarbeiten, und das wird erreicht mit
879 einem zusätzlichen Plugin, das mit dem Befehl @code{\type} gekennzeichnet
880 werden muss. Dieser Typ solle immer @code{Engraver_group} lauten:
883 \type "Engraver_group"
886 Alles zusammen haben wir folgende Einstellungen:
891 \type "Engraver_group"
892 \consists "Note_heads_engraver"
893 \consists "Text_engraver"
894 \consists Pitch_squash_engraver
895 squashedPosition = #0
896 \override NoteHead #'style = #'slash
897 \override Stem #'transparent = ##t
898 \override Flag #'transparent = ##t
906 Kontexte sind hierarchisch. Wie wollen, dass @code{ImproVoice}
907 sich als Unterkontext von @code{Staff} erkennt, wie eine normale
908 Stimme. Darum wird die Definition von @code{Staff} mit dem
909 @code{\accepts}-Befehl verändert:
921 Das Gegenteil von @code{\accepts} ist @code{\denies} (verbietet), was
922 manchmal gebraucht werden kann, wenn schon existierende Kontext-Definitionen
923 wieder benutzt werden sollen.
925 Beide Definitionen müssen in die @code{\layout}-Umgebung geschrieben
936 \accepts "ImproVoice"
941 Jetzt kann die Notation zu Beginn des Abschnitts folgendermaßen
950 c c_"während des Spielens :)"
957 @node Kontexte aneinander ausrichten
958 @subsection Kontexte aneinander ausrichten
959 @translationof Aligning contexts
961 Neue Kontexte können über oder unter existierenden ausgerichtet
962 werden. Das kann nützlich sein, wenn man eine Chorparitur
963 oder Ossia schreiben will:
967 @funindex alignAboveContext
968 @funindex alignBelowContext
970 @lilypond[quote,ragged-right]
973 \relative c' \new Staff = "main" {
976 \new Staff \with { alignAboveContext = #"main" } \ossia
983 @cindex verschachtelte Kontexte
984 @cindex Kontexte, verschachtelt
991 Kontexte wie @code{PianoStaff} können andere Kontexte innerhalb
992 enthalten. Kontexte, die als innere Kontexte akzeptiert werden,
993 werden in einer @qq{accepts}-Liste für den bestimmten Kontext
994 definiert. Kontexte, die sich nicht in dieser Liste finden,
995 werden unter den äußeren Kontext gesetzt. Der
996 @code{PianoStaff}-Kontext etwa akzeptiert die Kontexte @code{Staff}
997 und @code{FiguredBass} innerhalb, aber beispielsweise keinen
998 @code{Lyrics}-(Gesangstext)-Kontext. In dem folgenden Beispiel
999 wird deshalb der Gesangstext unter das gesamte Klaviersystem
1000 gesetzt, anstatt zwischen die beiden Notensysteme zu kommen:
1002 @lilypond[verbatim,quote,relative=1]
1005 \new Staff { e4 d c2 }
1006 \addlyrics { Three blind mice }
1014 Die @qq{accepts}-Liste eines Kontextes kann verändert werden, so
1015 dass sie weitere innere Kontexte akzeptiert. Wenn also der
1016 Gesangstext als Teil eines Klaviersystems gesetzt werden soll,
1017 müsste man schreiben:
1019 @lilypond[verbatim,quote,relative=1]
1020 \new PianoStaff \with { \accepts Lyrics }
1022 \new Staff { e4 d c2 }
1023 \addlyrics { Three blind mice }
1031 Das Gegenteil von @code{\accepts} ist @code{\denies}; es bedeutet,
1032 dass ein Kontext aus der @code{\accepts}-Liste gestrichen wird.
1035 @node Die Referenz der Programminterna erklärt
1036 @section Die Referenz der Programminterna erklärt
1037 @translationof Explaining the Internals Reference
1040 * Zurechtfinden in der Programmreferenz::
1041 * Layout-Schnittstellen::
1042 * Die Grob-Eigenschaften::
1043 * Benennungskonventionen::
1047 @node Zurechtfinden in der Programmreferenz
1048 @subsection Zurechtfinden in der Programmreferenz
1049 @translationof Navigating the program reference
1051 Arbeit mit der Referenz der Interna soll hier an
1052 einigen Beispiel illustriert werden. Die Referenz
1053 der Interna existiert nur auf Englisch,
1054 darum sind auch die Beispiele dieses Abschnittes nicht
1057 Folgende Aufgabe wird bearbeitet: Der Fingersatz aus dem Beispiel
1058 unten soll verändert werden:
1060 @lilypond[quote,relative=2,verbatim]
1066 In der Dokumentation über Fingersatz (in
1067 @ref{Fingersatzanweisungen}) gibt es folgenden Abschnitt:
1070 @strong{Siehe auch:}
1072 Referenz der Interna: @rinternals{Fingering}.
1076 @c all ignored text just left out
1079 Die Referenz der Interna gibt es als HTML-Dokument. Sie sollten sie als
1080 HTML-Dokument lesen, entweder online oder indem Sie die HTML-Dokumentation
1081 herunterladen. Dieser Abschnitt ist sehr viel schwieriger zu verstehen,
1082 wenn Sie die PDF-Version verwenden.
1085 Gehen Sie über diesen Link zum Abschnitt @rinternals{Fingering}.
1086 Oben auf der Seite findet sich:
1089 Fingering objects are created by: @rinternals{Fingering_engraver} and
1090 @rinternals{New_fingering_engraver}.
1093 Indem Sie die Links in der Referenz der Interna folgen, können Sie
1094 verfolgen, wie LilyPond intern arbeitet:
1098 @item @rinternals{Fingering}:
1099 @rinternals{Fingering} objects are created by:
1100 @rinternals{Fingering_engraver}
1102 @item @rinternals{Fingering_engraver}:
1103 Music types accepted: @rinternals{fingering-event}
1105 @item @rinternals{fingering-event}:
1106 Music event type @code{fingering-event} is in Music expressions named
1107 @rinternals{FingeringEvent}
1110 @c translation of the above
1111 Fingersatz-Objekte werden also durch den @code{Fingering_engraver}
1112 erstellt, welcher folgende Musikereignistypen akzeptiert:
1113 @code{fingering-event}. Ein Musikereignis vom Typ
1114 @code{fingering-event} ist ein musikalischer Ausdruck mit der
1115 Bezeichnung @rinternals{FingeringEvent}.
1117 Dieser Pfad geht genau die entgegengesetzte Richtung von LilyPonds
1118 Wirkungsweise: er beginnt bei der graphischen Ausgabe und
1119 arbeitet sich voran zur Eingabe. Man könnte auch mit einem
1120 Eingabe-Ereignis starten und dann die Links zurückverfolgen,
1121 bis man zum Ausgabe-Objekt gelangt.
1124 Die Referenz der Interna kann auch wie ein normales Dokument
1125 durchsucht werden. Sie enthält Kapitel über
1127 @rinternals{Music definitions},
1130 @code{Music definitions},
1132 über @rinternals{Translation} und @rinternals{Backend}. Jedes
1133 Kapitel listet alle die Definitionen und Eigenschaften auf,
1134 die benutzt und verändert werden können.
1137 @node Layout-Schnittstellen
1138 @subsection Layout-Schnittstellen
1139 @translationof Layout interfaces
1141 @cindex Layout-Schnittstelle
1142 @cindex Schnittstelle, Layout-
1145 Die HTML-Seite, die im vorigen Abschnitt betrachtet wurde,
1146 beschreibt ein Layoutobjekt mit der Bezeichnung
1147 @code{Fingering}. Ein derartiges Objekt ist ein Symbol
1148 in der Partitur. Es hat Eigenschaften, die bestimmte
1149 Zahlen speichern (wie etwa Dicke und Richtung), aber auch
1150 Weiser auf verwandte Objekte. Ein Layoutobjekt wird auch
1151 als @qq{Grob} bezeichnet, die Abkürzung für @emph{Gr}aphisches
1152 @emph{Ob}jekt. Mehr Information zu Grobs findet sich in
1153 @rinternals{grob-interface}.
1155 Die Seite zu @code{Fingering} enthält Definitionen für das
1156 @code{Fingering}-Objekt. Auf der Seite steht etwa:
1159 @code{padding} (dimension, in staff space):
1165 was bedeutet, dass der Abstand zu anderen Objekten mindestens
1166 0.5 Notenlinienabstände beträgt.
1168 Jedes Layoutobjekt kann mehrere Funktionen sowohl als typographisches
1169 als auch als Notationselement einnehmen. Das Fingersatzobjekt
1170 beispielsweise hat folgende Aspekte:
1174 Seine Größe ist unabhängig von der horizontalen Platzaufteilung,
1175 anders als etwa bei Legatobögen.
1178 Es handelt sich um Text, normalerweise sehr kurz.
1181 Dieser Text wird durch ein Glyph einer Schriftart gesetzt,
1182 anders als bei Legatobögen.
1185 Der Mittelpunkt des Symbols sollte horizontal mit dem
1186 Mittelpunkt des Notenkopfes ausgerichtet werden.
1189 Vertikal wird das Objekt neben die Note und das Notensystem
1193 Die vertikale Position wird auch mit anderen Textelementen
1198 Jeder dieser Aspekte findet sich in sogenannten Schnittstellen
1199 (engl. interface), die auf der @rinternals{Fingering}-Seite
1200 unten aufgelistet sind:
1203 This object supports the following interfaces:
1204 @rinternals{item-interface},
1205 @rinternals{self-alignment-interface},
1206 @rinternals{side-position-interface}, @rinternals{text-interface},
1207 @rinternals{text-script-interface}, @rinternals{font-interface},
1208 @rinternals{finger-interface}, and @rinternals{grob-interface}.
1211 Ein Klick auf einen der Links öffnet die Seite der entsprechenden
1212 Schnittstelle. Jede Schnittstelle hat eine Anzahl von Eigenschaften.
1213 Einige sind nicht vom Benutzer zu beeinflussen (@qq{interne
1214 Eigenschaften}), andere aber können verändert werden.
1216 Es wurde immer von einem @code{Fingering}-Objekt gesprochen, aber
1217 eigentlich handelt es sich nicht um sehr viel. Die Initialisierungsdatei
1218 @file{scm/define-grobs.scm} zeigt den Inhalt dieses @qq{Objekts}
1219 (zu Information, wo diese Dateien sich finden siehe
1220 @rlearning{Mehr Information}):
1225 (avoid-slur . around)
1226 (slur-padding . 0.2)
1227 (staff-padding . 0.5)
1228 (self-alignment-X . 0)
1229 (self-alignment-Y . 0)
1230 (script-priority . 100)
1231 (stencil . ,ly:text-interface::print)
1232 (direction . ,ly:script-interface::calc-direction)
1233 (font-encoding . fetaText)
1234 (font-size . -5) ; don't overlap when next to heads.
1235 (meta . ((class . Item)
1236 (interfaces . (finger-interface
1238 text-script-interface
1240 side-position-interface
1241 self-alignment-interface
1242 item-interface))))))
1246 Wie man sehen kann, ist das Fingersatzobjekt nichts anderes als
1247 eine Ansammlung von Variablen, und die Internetseite der
1248 Referenz der Interna ist direkt aus diesen Anweisungen generiert.
1251 @node Die Grob-Eigenschaften
1252 @subsection Die Grob-Eigenschaften
1253 @translationof Determining the grob property
1255 Die Position der @b{2} aus dem Beispiel unten soll also geändert werden:
1257 @lilypond[quote,relative=2,verbatim]
1263 Weil die @b{2} vertikal an der zugehörigen Note ausgerichtet ist,
1264 müssen wir uns mit der Schnittstelle auseinander setzen, die diese
1265 Positionierung veranlasst. Das ist hier @code{side-position-interface}.
1266 Auf der Seite für diese Schnittstelle heißt es:
1269 @code{side-position-interface}
1271 Position a victim object (this one) next to other objects (the
1272 support). The property @code{direction} signifies where to put the
1273 victim object relative to the support (left or right, up or down?)
1276 @cindex Verschiebung
1279 Darunter wird die Variable @code{padding} (Verschiebung) beschrieben:
1284 (dimension, in staff space)
1286 Add this much extra space between objects that are next to each other.
1290 Indem man den Wert von @code{padding} erhöht, kann die Fingersatzanweisung
1291 weiter weg von der Note gesetzt werden. Dieser Befehl beispielsweise
1292 fügt drei Notenlinienzwischenräume zwischen die Zahl und den Notenkopf:
1295 \once \override Voice.Fingering #'padding = #3
1298 Wenn dieser Befehl in den Quelltext eingefügt wird, bevor der
1299 Fingersatz notiert ist, erhält man folgendes:
1301 @lilypond[quote,relative=2,verbatim]
1302 \once \override Voice.Fingering #'padding = #3
1308 In diesem Fall muss die Veränderung speziell für den @code{Voice}-Kontext
1309 definiert werden. Das kann auch aus der Referenz der Interna entnommen
1310 werden, da die Seite des @rinternals{Fingering_engraver} schreibt:
1313 Fingering_engraver is part of contexts: @dots{} @rinternals{Voice}
1317 @node Benennungskonventionen
1318 @subsection Benennungskonventionen
1319 @translationof Naming conventions
1321 Die Bezeichnungen für Funktionen, Variablen, Engraver und Objekte
1322 folgen bestimmten Regeln:
1327 Scheme-Funktionen: kleinbuchstaben-mit-bindestrichen
1330 Scheme-Funktionen: ly:plus-scheme-stil
1333 Musikalische Ereignisse, Musikklassen und Musikeigenschaften: wie-scheme-funktionen
1336 Grob-Schnittstellen: scheme-stil
1339 backend-Eigenschaften: scheme-stil (aber X und Y)
1342 Kontexte: Großbuchstabe, oder GroßbuchstabeZwischenWörtern (CamelCase)
1345 Kontext-Eigenschaften: kleinbuchstabeMitFolgendenGroßbuchstaben
1348 Engraver: Großbuchstabe_gefolgt_von_kleinbuchstaben_mit_unterstrichen
1354 @node Eigenschaften verändern
1355 @section Eigenschaften verändern
1356 @translationof Modifying properties
1359 * Grundlagen zum Verändern von Eigenschaften::
1361 * Der override-Befehl::
1362 * Der tweak-Befehl::
1363 * set versus override::
1364 * Alisten verändern::
1368 @node Grundlagen zum Verändern von Eigenschaften
1369 @subsection Grundlagen zum Verändern von Eigenschaften
1370 @translationof Overview of modifying properties
1372 Jeder Kontext ist verantwortlich für die Erstellung bestimmter
1373 graphischer Objekte. Die Einstellungen für diese Objekte werden
1374 auch in dem Kontext gespeichert. Wenn man diese Einstellungen
1375 verändert, kann die Erscheinung der Objekte geändert werden.
1377 Es gibt zwei unterschiedliche Eigenschaftenarten, die in Kontexten
1378 gespeichert werden: Kontexteigenschaften und Grob-Eigenschaften.
1379 Kontexteigenschaften sind Eigenschaften, die sich auf den gesamten Kontext
1380 beziehen und seine Darstellung beinflussen. Grob-Eigenschaften dagegen
1381 wirken sich nur auf bestimmte graphische Objekte aus, die in einem
1382 Kontext dargestellt werden.
1384 Die @code{\set}- und @code{\unset}-Befehle werden benutzt, um die Werte
1385 von Kontexteigenschaften zu ändern. Die Befehle @code{\override} und
1386 @code{\revert} hingegen verändern die Werte von Grob-Eigenschaften.
1389 Die Syntax hierzu lautet:
1392 \override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #@var{Wert}
1396 @var{Bezeichnung} ist die Bezeichnung eines graphischen Objekts,
1397 wie @code{Stem} (Hals) oder @code{NoteHead} (Notenkopf), und
1398 @var{Eigenschaft} ist eine interne Variable des Formatierungssystems
1399 (eine @qq{Grob-Eigenschaft} oder @qq{Layout-Eigenschaft}). Diese
1400 Eigenschaft ist ein Symbol, muss also mit einem Anführungsstrich
1401 versehen werden. Wie die Felder @var{Bezeichnung}, @var{Eigenschaft}
1402 und @var{Wert} richtig gefüllt werden, zeigt der Abschnitt
1403 @ref{Eigenschaften verändern}. Hier wird nur die Funktionalität des
1409 \override Staff.Stem #'thickness = #4.0
1413 bewirkt, dass der Notenhals dicker gesetzt wird (Standard ist
1414 1.3, die Dicke der Notenlinie entspricht dem Wert 1). Da der
1415 Befehl den Kontext @code{Staff} angibt, wirkt er sich nur auf
1416 das gerade aktuelle Notensystem aus. Andere Systeme behalten
1417 ihr normales Aussehen. Hier ein Beispiel mit diesem Befehl:
1419 @lilypond[quote,verbatim,relative=2]
1421 \override Staff.Stem #'thickness = #4.0
1427 Der @code{\override}-Befehl verändert die Definitionen von
1428 @code{Stem} (Hals) innerhalb des aktuellen @code{Staff}
1429 (Notensystems). Nachdem der Befehl gelesen wurde, werden
1430 alle Hälse dicker gesetzt.
1432 Wie auch bei dem @code{\set}-Befehl kann auch hier der
1433 Kontext ausgelassen werden, wobei dann immer implizit der
1434 @code{Voice}-Kontext angenommen wird. Mit einem zusätzlichen
1435 @code{\once} wirkt sich die Änderung nur einmal aus:
1437 @lilypond[quote,verbatim,relative=2]
1439 \once \override Stem #'thickness = #4.0
1444 Der @code{\override}-Befehl muss geschrieben sein, bevor das Objekt
1445 begonnen wird. Wenn also ein @emph{Strecker}-Objekt wie etwa
1446 ein Bogen verändert werden soll, muss der @code{\override}-Befehl
1447 schon geschrieben werden, bevor das Objekt begonnen wird. In dem
1450 @lilypond[quote,verbatim,relative=2]
1451 \override Slur #'thickness = #3.0
1453 \override Beam #'beam-thickness = #0.6
1458 ist der Bogen dicker, der Balken aber nicht. Das liegt daran, dass der Befehl
1459 zum Ändern des @code{Beam}-Objekts erst gesetzt wurde, nachdem der Balken
1462 Der @code{\revert}-Befehl macht alle Änderungen rückgängig, die mit einem
1463 @code{\override}-Befehl vorgenommen worden sind, dabei werden allerdings
1464 nur Einstellungen betroffen, die sich im gleichen Kontext befinden. Der
1465 @code{\revert}-Befehl des folgenden Beispiels bewirkt also gar nichts,
1466 weil er für den falschen Kontext gefordert wird.
1469 \override Voice.Stem #'thickness = #4.0
1470 \revert Staff.Stem #'thickness
1473 Einige veränderbare Optionen werden als Untereigenschaften (engl.
1474 subproperties) bezeichnet und befinden sich innerhalb von den
1475 normalen Eigenschaften. Wenn man sie verändern will, nimmt der
1476 Befehl folgende Form an:
1478 @c leave this as a long long
1480 \override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} #'@var{Untereigenschaft} = #@var{Wert}
1487 \override Stem #'(details beamed-lengths) = #'(4 4 3)
1492 Referenz der Interna:
1493 @rinternals{OverrideProperty},
1494 @rinternals{RevertProperty},
1495 @rinternals{PropertySet},
1496 @rinternals{Backend},
1497 @rinternals{All layout objects}.
1502 Das Back-end ist nicht sehr streng bei der Überprüfung
1503 der Typen von Objekteigenschaften. Auf sich selbst verweisende
1504 Bezüge in Scheme-Werten der Eigenschaften können Verzögerung
1505 oder einen Absturz des Programms hervorrufen.
1509 @node Der set-Befehl
1510 @subsection Der @code{@bs{}set}-Befehl
1511 @translationof The set command
1513 @cindex Eigenschaften
1514 @cindex Verändern von Eigenschaften
1519 Jeder Kontext kann unterschiedliche @emph{Eigenschaften} besitzen,
1520 Variablen, die in diesem Kontext definiert sind. Sie können
1521 während der Interpretation des Kontextes verändert werden. Hierzu
1522 wird der @code{\set}-Befehl eingesetzt:
1525 \set @var{Kontext}.@var{Eigenschaft} = #@var{Wert}
1528 @var{Wert} ist ein Scheme-Objekt, weshalb ihm @code{#} vorangestellt
1531 Kontexteigenschaften werden üblicherweise mit @code{kleinGroßbuchstabe}
1532 benannt. Sie kontrollieren vor allem die Übersetzung von Musik in
1533 Notation, wie etwa @code{localKeySignature}, welche bestimmt, wann
1534 ein Taktstrich gesetzt werden muss. Kontexteigenschaften können
1535 ihren Wert mit der Zeit ändern, während eine Notationsdatei interpretiert
1536 wird. Ein gutes Beispiel dafür ist @code{measurePosition}, was die
1537 Position der Noten im Takt angibt. Kontexteigenschaften werden mit dem
1538 @code{\set}-Befehl verändert.
1540 Mehrtaktpausen etwa können in einen Takt zusammengefasst werden, wenn die
1541 Kontexteigenschaft @code{skipBars} (Takte überspringen) auf @code{#t}
1542 (wahr) gesetzt wird:
1544 @lilypond[quote,verbatim,relative=2]
1546 \set Score.skipBars = ##t
1550 Wenn das @var{Kontext}-Argument ausgelassen wird, bezieht sich
1551 der Befehl auf den gerade aktiven unterstmöglichen Kontext,
1552 üblicherweise @code{ChordNames}, @code{Voice} oder
1555 @lilypond[quote,verbatim,relative=2]
1556 \set Score.autoBeaming = ##f
1560 \set autoBeaming = ##t
1568 Die Änderung wird zur Laufzeit während der Musik interpretiert, sodass
1569 diese Einstellung sich nur auf die zweite Gruppe von Achteln auswirkt.
1571 Dabei gilt zu beachten, dass der unterste Kontext nicht immer die
1572 Eigenschaft enthält, die verändert werden soll. Wenn man
1573 beispielsweise @code{skipBars} aus dem oberen Beispiel
1574 ohne Angabe des Kontextes zu verändern sucht, hat der Befehl
1575 keine Auswirkung, weil er sich auf den @code{Voice}-Kontext
1576 bezieht, die Eigenschaft sich aber im @code{Score}-Kontext
1579 @lilypond[quote,verbatim,relative=2]
1585 Kontexte sind hierarchisch angeordnet. Wenn ein übergeordneter
1586 Kontext angegeben wird, etwa @code{Staff}, dann beziehen sich
1587 die Änderungen auf alle Stimmen (@code{Voice}), die in diesem
1588 Kontext enthalten sind.
1593 Es gibt auch einen @code{\unset}-Befehl:
1596 \unset @var{Kontext}.@var{Eigenschaft}
1600 der bewirkt, dass die vorgenommenen Definitionen für @var{Eigenschaft}
1601 entfernt werden. Dieser Befehl macht nur Einstellungen im richtigen
1602 Kontext rückgängig. Wenn also im @code{Staff}-Kontext die
1603 Bebalkung ausgeschaltet wird:
1605 @lilypond[quote,verbatim,relative=2]
1606 \set Score.autoBeaming = ##t
1611 \unset Score.autoBeaming
1619 Wie für @code{\set} muss das @var{Kontext}-Argument für den untersten
1620 Kontext nicht mitangegeben werden. Die zwei Versionen
1623 \set Voice.autoBeaming = ##t
1624 \set autoBeaming = ##t
1627 verhalten sich gleich, wenn die gegenwärtige Basis der
1628 @code{Voice}-Kontext ist.
1633 Einstellungen, die nur einmal vorgenommen werden sollen, können
1634 mit @code{\once} notiert werden, etwa:
1636 @lilypond[quote,verbatim,relative=2]
1638 \once \set fontSize = #4.7
1643 Eine vollständige Beschreibung aller vorhandenen Kontexteigenschaften
1644 findet sich in der Referenz der Interna, siehe
1646 @rinternals{Tunable context properties}.
1649 @qq{Translation @expansion{} Tunable context properties}.
1654 Internals Reference:
1656 @rinternals{Tunable context properties}.
1660 @node Der override-Befehl
1661 @subsection Der @code{\\override}-Befehl
1662 @translationof The override command
1664 @cindex Grob-Eigenschaften
1665 @cindex Eigenschaften von Grob
1666 @cindex graphische Objekte, Eigenschaften
1671 Es gibt eine besondere Art von Kontexteigenschaft: die Grob-Beschreibung.
1672 Grob-Beschreibungen werden mit @code{GroßGroßbuchstabe} benannt. Sie
1673 enthalten @qq{Standardeinstellungen} für ein bestimmtes Grob als eine
1674 assoziative Liste. Siehe @file{scm/define-grobs.scm} für die
1675 Einstellungen aller Grob-Beschreibungen. Grob-Beschreibungen werden
1676 mit @code{\override} verändert.
1678 @code{\override} ist eigentlich eine Kurzform, der Befehl
1681 \override @var{Kontext}.@var{GrobBezeichnung} #'@var{Eigenschaft} = #@var{Wert}
1687 \set @var{Kontext}.@var{GrobBezeichnung} =
1688 #(cons (cons '@var{Eigenschaft} @var{Wert})
1689 <vorheriger Wert von @var{Kontext}.@var{GrobBezeichnung}>)
1692 Der Wert von @code{Kontext}.@code{GrobBezeichnung} (die assoz. Liste @qq{alist}) wird benutzt um die Eigenschaften von individuellen Grobs
1693 zu initialisieren. Grobs haben Eigenschaften, die im Scheme-Stil mit
1694 @code{bindestrich-wörtern} benannt sind. Diese Werte der Grob-Eigenschaften
1695 verändern sich während des Notensetzens: LilyPonds Notensatz heißt im
1696 Grunde, die Eigenschaften mit Callback-Fuktionen auszurechnen.
1698 Beispielsweise kann die Dicke eines Notenhalses verändert werden, indem
1699 man die @code{thickness}-Eigenschaft des @code{Stem}-Objekts verändert:
1701 @lilypond[quote, verbatim, relative=2]
1703 \override Voice.Stem #'thickness = #3.0
1707 Wenn kein Kontext angegeben wird, wird der tiefste aktuelle Kontext
1710 @lilypond[quote, verbatim, relative=2]
1711 { \override Staff.Stem #'thickness = #3.0
1715 \override Stem #'thickness = #0.5
1724 @cindex rückgängig machen von Kontextveränderungen
1725 @cindex Kontextveränderungen rückgängig machen
1726 @cindex override rückgängig machen
1727 @cindex \override rückgängig machen
1732 Die Auswirkungen von @code{\override} können mit @code{\revert} wieder
1733 rückgängig gemacht werden:
1735 @lilypond[quote, verbatim, relative=2]
1737 \override Voice.Stem #'thickness = #3.0
1739 \revert Voice.Stem #'thickness
1743 Die Auswirkungen von @code{\override} und @code{\revert} wirken sich auf alle
1744 Grobs im entsprechenden Kontext aber der Stelle aus, an der sie gesetzt werden:
1746 @lilypond[quote, verbatim, relative=2]
1751 \override Staff.Stem #'thickness = #3.0
1755 \revert Staff.Stem #'thickness
1762 @cindex Veränderung von Kontexten nur einmal
1763 @cindex Einmal verändern von Kontexten
1764 @cindex Kontexte, einmal verändern
1765 @cindex \override, nur einmal
1770 @code{\once} kann zusammen mit @code{\override} benutzt werden,
1771 um nur den aktuellen Zeitwert zu verändern:
1773 @lilypond[quote, verbatim, relative=2]
1777 \override Stem #'thickness = #3.0
1781 \once \override Stem #'thickness = #3.0
1790 @cindex Referenz der Interna
1791 @cindex Grafische Objekte, Finden
1792 @cindex Finden von graphischen Objekten
1793 @cindex Beschreibung von graphischen Objekten
1794 @cindex Grafische Objekte, Beschreibung
1795 @cindex Grob, Beschreibung
1796 @cindex Veränderungen der Einstellungen
1797 @cindex Einstellungen verändern
1802 Viele Eigenschaften können unabhängig von der Art der Daten, die
1803 sie enthalten, ausgeschaltet werden, indem man sie als @qq{falsch}
1804 (@code{##f}) definiert. Dadurch wird diese Eigenschaft von LilyPond
1805 ignoriert. Das ist insbesondere nützlich, wenn man Grob-Eigenschaften
1806 ausschalten will, die Probleme verursachen.
1812 Referenz der Interna:
1813 @rinternals{Backend}.
1816 @node Der tweak-Befehl
1817 @subsection Der @code{\\tweak}-Befehl
1818 @translationof The tweak command
1825 Wenn man Grob-Eigenschaften mit @code{\override} verändert, verändern sich
1826 alle fraglichen Objekte zu dem gegebenen musikalischen Moment. Manchmal
1827 will man allerdings nur ein Grob verändern, anstatt allen Grobs des
1828 aktuellen Kontextes. Das kann mit dem @code{\tweak}-Befehl erreicht
1829 werden, mit dem man Optimierungen vornehmen kann:
1832 \tweak #'@code{grob-eigenschaft} #@code{Wert}
1835 Der @code{\tweak}-Befehl wirkt sich auf das Objekt aus, dass direkt auf
1839 In einigen Fällen ist es möglich, mit einem abgekürzten Befehl
1840 graphische Objekte zu verändern. Wenn Objekte direkt von einem
1841 Element des Quelltextes erstellt werden, kann der @code{\tweak}-Befehl
1844 @lilypond[relative=2,verbatim]
1849 \tweak #'duration-log #1
1852 -\tweak #'padding #8
1856 @cindex Akkord, eine Note verändern
1858 Die hauptsächliche Benutzung von @code{\tweak} ist dann, wenn
1859 man nur ein Element von einer Ansammlung an Elementen verändern
1860 will, die alle zum gleichen musikalischen Moment beginnen. Das
1861 kann eine Noten in einem Akkord sein, oder eine von mehreren
1862 Triolenklammern, die zur gleichen Zeit beginnen.
1864 Eine Einleitung der Syntax für den @code{\tweak}Befehl findet
1865 sich in @rlearning{Optimierungsmethoden}.
1867 Der @code{\tweak}-Befehl verändert die Eigenschaft des folgenden
1868 Objekts direkt, ohne dass die Bezeichnung des Objekts (Grobs) oder
1869 des Kontextes angegeben werden muss. Damit das funktioniert, muss
1870 das Objekt direkt auf den @code{\tweak}-Befehl folgen, auf das
1871 er sich auswirken soll. Das ist in manchen Fällen nicht gegeben,
1872 da viele Objekte durch LilyPond automatisch eingesetzt werden.
1873 Wenn etwa eine Note interpretiert wird, die nicht Teil eines
1874 Akkords ist, fügt LilyPond implizit einen @code{ChordEvent}
1875 vor die Note ein, sodass der @code{\tweak}-Befehl von der
1876 Note getrennt wird. Wenn aber Akkord-Klammern um die Note
1877 und den @code{\tweak}-Befehl gesetzt werden, folgt der
1878 @code{ChordEvent} auf den @code{\tweak}-Befehl und befindet
1879 sich deshalb direkt vor der Note, auf die er einwirken soll,
1880 sodass die Veränderung funktioniert.
1882 An einem Beispiel demonstriert: Das funktioniert:
1885 @lilypond[relative=2,verbatim,quote]
1886 <\tweak #'color #red c>4
1892 @lilypond[relative=2,verbatim,quote]
1893 \tweak #'color #red c4
1898 Eine Einleitung der Syntax und Benutzungen des @code{\tweak}-(Optimierungs)-Befehls findet sich in @rlearning{Optimierungsmethoden}.
1900 Wenn mehrere gleichartige Elemente zum gleichen musikalischen
1901 Moment auftreten, kann der @code{\override}-Befehl nicht
1902 benutzt werden, um nur einen von ihnen zu verändern: hier braucht
1903 man den @code{\tweak}-Befehl. Elemente, die mehrfach zum
1904 gleichen musikalischen Moment auftreten können sind unter Anderem:
1906 @c TODO expand to include any further uses of \tweak
1908 @item Notenköpfe von Noten innerhalb eines Akkordes
1909 @item Artikulationszeichen an einer einzelnen Note
1910 @item Bindebögen zwischen Noten eines Akkordes
1911 @item Llammern für rhythmische Verhältnisse (wie Triolen), die zur gleichen Zeit beginnen
1914 @c TODO add examples of these
1916 @cindex Akkord, eine Noten verändern
1918 In diesem Beispiel wird die Farbe eines Notenkopfes und die Art eines
1919 anderen Notenkopfes innerhalb eines Akkordes verändert:
1921 @lilypond[relative=2,verbatim,quote]
1926 \tweak #'duration-log #1
1931 @code{\tweak} kann auch benutzt werden, um Bögen zu verändern:
1933 @lilypond[verbatim,quote,relative=1]
1934 c-\tweak #'thickness #5 ( d e f)
1937 Damit der @code{\tweak}-Befehl funktioniert, muss er direkt vor dem
1938 Objekt stehen, auf das er sich bezieht. Manchmal kommt es vor, dass
1939 LilyPond während der Kompilierung der Datei zusätzliche Elemente
1940 einfügt, die dann zwischen der Optimierung und dem Objekt stehen.
1941 Noten, auch einzlene Noten, werden beispielsweise intern von LilyPond
1942 immer wie Akkorde behandelt, sodass auch ein @code{\tweak}-Befehl
1943 für eine einzelne Note innerhalb von Akkordzeichen notiert werden
1946 @lilypond[relative=2,verbatim,quote]
1947 \tweak #'color #red c4
1948 <\tweak #'color #red c>4
1951 Der @code{\tweak}-Befehl kann @emph{nicht} eingesetzt werden, um
1952 Elemente zu verändern, die sich nicht direkt im Notentext befinden.
1953 Insbesondere Hälse, Balken oder Versetzungszeichen lassen sich nicht
1954 beeinflussen, weil diese später durch den Notenkopf erstellt werden
1955 und nicht direkt durch
1956 den Quelltext. @code{\tweak} kann auch nicht verwendet werden,
1957 um Schlüssel oder Taktarten zu verändern, denn sie werden von
1958 dem @code{\tweak}-Befehl während der Interpretation durch
1959 automatisches Einfügen von zusätzlichen Kontextelementen getrennt.
1961 Mehrere @code{\tweak}-Befehle können vor ein Notationselement
1962 gesetzt werden und alle werden interpretiert:
1964 @lilypond[verbatim,quote,relative=1]
1966 -\tweak #'style #'dashed-line
1967 -\tweak #'dash-fraction #0.2
1968 -\tweak #'thickness #3
1969 -\tweak #'color #red
1974 Der Strom der musikalischen Ereignisse (engl. music stream), der aus
1975 dem Quelltext erstellt wird, und zu dem auch die automatisch eingefügten
1976 Elemente gehören, kann betrachtet werden, siehe
1977 @ref{Musikalische Funktionen darstellen}. Das kann nützlich sein,
1978 wenn man herausfinden will, was mit dem @code{\tweak}-Befehl
1979 verändert werden kann.
1982 Handbuch zum Lernen:
1983 @rlearning{Optimierungsmethoden}.
1986 @rextend{Musikalische Funktionen darstellen}.
1990 @cindex tweak-Befehl in einer Variable
1991 @cindex Variable, tweak-Befehl benutzen
1992 @cindex Optimierung innerhalb einer Variable
1994 Der @code{\tweak}-Befehl kann nicht innerhalb von einer Variable eingesetzt werden.
1996 @cindex tweaks-Befehl in Gesangstext
1997 @cindex lyrics und tweak-Befehl
1998 @cindex Gesangstext und tweak-Befehl
2000 Der @code{\tweak}-Befehl kann nicht innerhalb von @code{\lyricmode} eingesetzt werden.
2002 @cindex Kontrollpunkte und tweak
2003 @cindex tweak und Kontrollpunkte
2005 Der @code{\tweak}-Befehl kann nicht benutzt werden, um die Kontrollpunkte
2006 eines von mehreren Bindebögen eines Akkorden zu verändern. Anstelle dessen
2007 wird der erste Bogen verändert, der in der Eingabedatei auftritt.
2010 @node set versus override
2011 @subsection @code{\\set} versus @code{\\override}
2012 @translationof set versus override
2014 @c TODO: überflüssig?
2017 Es wurden zwei unterschiedliche Methoden vorgestellt, mit denen
2018 Eigenschaften verändert werden können: @code{\set} und
2019 @code{\override}. Im Grunde genommen gibt es auch zwei
2020 unterschiedliche Arten von Eigenschaften.
2022 Kontexte können Eigenschaften haben, deren Bezeichnungen
2023 üblicherweise dem Schema @code{kleinGroß} folgen. Derartige
2024 Eigenschaften sind vor allen Dingen für die Übersetzung der
2025 Musik in Notation zuständig, beispielsweise @code{localKeySignature}
2026 (um zu bestimmen, ob Versetzungszeichen ausgegeben werden
2027 müssen), @code{measurePosition} (um zu bestimmen, ob eine
2028 Taktlinie gesetzt werden muss). Kontexteigenschaften können
2029 ihren Wert verändern, während ein Musikstück ausgewertet wird;
2030 @code{measurePosition} (Taktposition) ist ein gutes Beispiel
2031 hierfür. Kontexteigenschaften werden mit dem Befehl @code{\set}
2034 Dann gibt es einen Spezialtyp der Kontexeigenschaften: die
2035 Elementbeschreibung. Diese Eigenschaften werden mit
2036 @code{GroßGroß} benannt (beginnen also auch mit einem
2037 Großbuchstaben). Sie beinhalten die Standardeinstellungen
2038 für die besagten graphischen Objekte in Form einer
2039 Assosiationsliste. Siehe auch die Datei @file{scm/define-grobs.scm}
2040 für ein Beispiel zu diesen Einstellungen. Elementbeschreibungen
2041 können mit dem Befehl @code{\override} verändert werden.
2043 @code{\override} ist eigentlich eine Abkürzung:
2046 \override @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #@var{Wert}
2050 entspricht mehr oder weniger:
2052 @c leave this long line -gp
2054 \set @var{Kontext}.@var{Bezeichnung} #'@var{Eigenschaft} = #(cons (cons '@var{Eigenschaft} @var{Wert}) <voriger Wert von @var{Kontext})
2057 Der Wert von @code{context} (die @qq{alist}) wird benutzt, um
2058 die Eigenschaften von einzelnen Grobs zu initiieren. Grobs haben
2059 auch Eigenschaften, die im Scheme-Stil benannt werden, also
2060 @code{wort-mit-bindestrich}. Die Werte der Grob-Eigenschaften
2061 ändern sich während des Formatierungsprozesses: Formatierung
2062 läuft im Prinzip darauf hinaus, Eigenschaften zu errechnen, indem
2063 Callback-Funktionen eingesetzt werden.
2065 @code{fontSize} ist eine besondere Eigenschaft: sie entspricht
2066 @code{\override ... #'font-size} für alle möglichen Objekte.
2067 Weil es sich hier um eine globale Änderung handelt, wurde
2068 die spezielle Form (die mit @code{\set} verändert wird) erstellt.
2072 @node Alisten verändern
2073 @subsection Alisten verändern
2074 @translationof Modifying alists
2076 Einige vom Benutzer einstellbare Eigenschaften sind intern als
2077 @emph{alists} (Assoziative Listen) dargestellt, die Paare von
2078 Schlüsseln und Werten speichern. Die Struktur einer Aliste ist:
2081 '((@var{Schlüssel1} . @var{Wert1})
2082 (@var{Schlüssel2} . @var{Wert2})
2083 (@var{Schlüssel3} . @var{Wert3})
2087 Wenn eine Aliste eine Grob-Eigenschaft oder eine Variable der
2088 @code{\paper}-Umgebung ist, können ihre Schlüssel einzeln verändert
2089 werden, ohne andere Schlüssel zu beeinflussen.
2091 Um beispielsweise den Freiraum zwischen benachbarten Systemen
2092 in einer Systemgruppe zu verkleinern, kann man die
2093 @code{staff-staff-spacing}-Eigenschaft des
2094 +@code{StaffGrouper}-Grobs benutzen. Die Eigenschaft ist eine
2095 Aliste mit vier Schlüsseln: : @code{basic-distance} (Grund-Abstand),
2096 @code{minimum-distance} (minimaler Abstand), @code{padding} (Verschiebung)
2097 und @code{stretchability} (Dehnbarkeit). Die Standardwerte dieser
2098 Eigenschaft finden sich im Abschnitt @qq{Backend} der Referenz der
2099 Interna (siehe @rinternals{StaffGrouper}):
2102 '((basic-distance . 9)
2103 (minimum-distance . 7)
2105 (stretchability . 5))
2108 Eine Möglichkeit, die Systemen dichter zueinander zu zwingen,
2109 ist es, der Wert des @code{basic-distance}-Schlüssels (@code{9}) zu
2110 verändern, sodass der den gleichen Wert wie
2111 @code{minimum-distance} (@code{7}) hat. Um einen einzelnen
2112 Schlüssel zu verändern, wird ein geschachtelter Aufruf benutzt:
2114 @lilypond[quote,verbatim]
2115 % default space between staves
2117 \new Staff { \clef treble c''1 }
2118 \new Staff { \clef bass c1 }
2121 % reduced space between staves
2122 \new PianoStaff \with {
2123 % this is the nested declaration
2124 \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7
2126 \new Staff { \clef treble c''1 }
2127 \new Staff { \clef bass c1 }
2131 Wenn man diese Art des geschachtelten Aufrufs einsetzt, wird der
2132 spezifische Schlüssel (@code{basic-distance} im obigen Beispiel) verändert,
2133 ohne dass sich andere Wert für die gleiche Eigenschaft ändern würden.
2135 Nun sollen die Systeme so dicht wie möglich gesetzt werden, ohne das
2136 Überlappungen vorkommen. Die einfachste Möglichkeit, das zu tun, wäre
2137 es, alle vier Wert auf 0 zu setzen. Man muss jedoch nicht vier
2138 Werte definieren, sondern die Eigenschaft
2139 kann mit einem Aufruf als Aliste vollständig verändert werden:
2141 @lilypond[quote,verbatim]
2142 \new PianoStaff \with {
2143 \override StaffGrouper #'staff-staff-spacing =
2144 #'((basic-distance . 0)
2145 (minimum-distance . 0)
2147 (stretchability . 0))
2149 \new Staff { \clef treble c''1 }
2150 \new Staff { \clef bass c1 }
2154 Dabei sollte beachtet werden, dass alle Schlüssel, die bei dieser
2155 Weise des Aufrufs nicht explizit aufgelistet sind, auf den Standardwert
2156 gesetzt werden, den sie hätten, wenn sie nicht definiert werden.
2157 Im Falle von @code{staff-staff-spacing} würden alle nicht genannten
2158 Schlüsselwerte auf 0 gesetzt (außer @code{stretchability}, welche immer
2159 den Wert von @code{space} hat, wenn sie nicht definiert ist). Somit sind
2160 folgende Aufrufe äquivalent:
2163 \override StaffGrouper #'staff-staff-spacing =
2164 #'((basic-distance . 7))
2166 \override StaffGrouper #'staff-staff-spacing =
2167 #'((basic-distance . 7)
2168 (minimum-distance . 0)
2170 (stretchability . 7))
2173 Eine möglicherweise ungewollte Konsequenz hiervon ist, dass alle
2174 Standardwerte, die etwa in einer Initialisierungsdatei
2175 zu Beginn einer LilyPond-Partitur geladen werden, nach dem Aufruf
2176 rückgängig gemacht werden. Im obigen Beispiel werden die
2177 initialisierten Standardwerte für @code{padding} und @code{minimum-distance}
2178 (definiert in @file{scm/define-grobs.scm}) auf den Standard zurückgesetzt,
2179 den sie uninitialisiert hätten (0 in beiden Fällen). Wenn eine Eigenschaft oder
2180 Variable in Form einer Aliste (jeder Größe) definiert wird, werden
2181 immer alle Schlüsselwerte auf den uninitialisierten Zustand zurückgesetzt.
2182 Es ist also sicherer, geschachtelte Aufrufe zu benutzen, wenn man nicht
2183 bewusst alle Werte zurücksetzen will.
2185 @warning{Geschachtelte Aufrufe funktionieren nicht mit
2186 Kontexteigenschaften (wie etwa @code{beamExceptions}, @code{keySignature},
2187 @code{timeSignatureSettings}, usw.) Diese Eigenschaften können
2188 nur verändert werden, indem man sie vollständig als Alisten umdefiniert.}
2191 @node Nützliche Konzepte und Eigenschaften
2192 @section Nützliche Konzepte und Eigenschaften
2193 @translationof Useful concepts and properties
2197 * Richtung und Platzierung::
2198 * Reihenfolge des Kontextlayouts::
2199 * Abstände und Maße::
2200 * Eigenschaften des Staff-Symbols::
2202 * Sichtbarkeit von Objekten::
2204 * Drehen von Objekten::
2209 @subsection Eingabe-Modi
2210 @translationof Input modes
2212 Die Art, wie die Notation einer Eingabedatei interpretiert
2213 wird, hängt vom aktuellen Eingabemodus ab.
2215 @strong{Chord (Akkordmodus)}
2217 Man erreicht ihn durch den Befehl @code{\chordmode}. Hierdurch
2218 wird die Eingabe entsprechend der Syntax der Akkordnotation
2219 interpretiert, siehe @ref{Notation von Akkorden}. Akkorde werden als
2220 Noten auf einem System dargestellt.
2222 Der Akkordmodus wird auch mit dem Befehl @code{\chords} initiiert.
2223 Dadurch wird gleichzeitig ein neuer @code{ChordNames}-Kontext
2224 erstellt, die Eingabe entsprechend der Syntax der Akkordnotation
2225 interpretiert und als Akkordbezeichnungen in einem
2226 @code{ChordNames}-Kontext dargestellt. Siehe @ref{Akkordbezeichnungen drucken}.
2228 @strong{Drum (Schlagzeugmodus)}
2230 Man erreicht ihn mit dem Befehl @code{\drummode}. Die Eingabe
2231 wird entsprechend der Syntax der Schlagzeugnotation interpretiert,
2232 siehe @ref{Grundlagen der Schlagzeugnotation}.
2234 Der Schlagzeugmodus wird auch mit dem Befehl @code{\drums} aktiviert.
2235 Dadurch wird gleichzeitig ein neuer @code{DrumStaff}-Kontext
2236 erstellt, die Eingabe entsprechend der Syntax der Schlagzeugnotation
2237 interpretiert und als Schlagzeugsymbole auf einem Schlagzeugsystem
2238 dargestellt. Siehe @ref{Grundlagen der Schlagzeugnotation}.
2240 @strong{Figure (Ziffernmodus)}
2242 Man erreicht ihn mit dem Befehl @code{\figuremode}. Die Eingabe
2243 wird entsprechend der Syntax für Generalbass interpretiert, siehe
2244 @ref{Eingabe des Generalbass'}.
2246 Der Ziffernmodus wird auch mit dem Befehl @code{\figures} aktiviert.
2247 Dadurch wird gleichzeitig ein neuer @code{FiguredBass}-Kontext
2248 erstellt, die Eingabe entsprechend der Syntax für Generalbass
2249 interpretiert und als Generalbassziffern im @code{FiguredBass}-Kontext
2250 dargestellt. Siehe @ref{Grundlagen des Bezifferten Basses}.
2252 @strong{Fret/tab (Griffsymbol-/Tabulaturmodus)}
2254 Es gibt keinen besonderen Eingabemodus für Griffsymbole und
2257 Um Tabulaturen zu erstellen, werden Noten oder Akkorde im
2258 Notenmodus notiert und dann in einem @code{TabStaff}-Kontext
2259 interpretiert, siehe
2260 @ref{Standardtabulaturen}.
2262 Um Griffsymbole oberhalb eines Notensystems zu erstellen, gibt
2263 es zwei Möglichkeiten. Man kann den @code{FretBoards}-Kontext
2264 einsetzen (siehe @ref{Automatische Bund-Diagramme}) oder sie können
2265 als Beschriftung über den Noten eingefügt werden, indem man
2266 den @code{\fret-diagram}-Befehl einsetzt (siehe
2267 @ref{Bund-Diagramm-Beschriftung}).
2269 @strong{Lyrics (Gesangstextmodus)}
2271 Man erreicht ihn mit dem Befehl @code{\lyricmode}. Die Eingabe
2272 wird entsprechend der Syntax für Silben eines Gesangstextes
2273 interpretiert, wobei optional Dauern und verknüpfte
2274 Gesangstextveränderer möglich sind, siehe @ref{Notation von Gesang}.
2276 Der Gesangstextmodus wird auch durch den Befehl @code{\addlyrics}
2277 aktiviert. Dadurch wird auch ein neuer @code{Lyrics}-Kontext
2278 erstellt und ein impliziter @code{\lyricsto}-Befehl, der den
2279 nachfolgenden Gesangstext mit der vorhergehenden Musik verknüpft.
2281 @strong{Markup (Textbeschriftungsmodus)}
2283 Man erreicht ihn mit dem Befehl @code{\markup}. Die Eingabe wird
2284 entsprechend der Syntax für Textbeschriftung interpretiert, siehe
2285 @ref{Textbeschriftungsbefehle}.
2287 @c silly work-around for texinfo broken-ness
2288 @c (@strong{Note...} causes a spurious cross-reference in Info)
2289 @b{Note (Notenmodus)}
2291 Das ist der Standardmodus. Er kann auch mit dem Befehl
2292 @code{\notemode} gefordert werden. Die Eingabe wird als Tonhöhen,
2293 Dauern, Beschriftung usw. interpretiert und als musikalische
2294 Notation auf einem Notensystem gesetzt.
2296 Es ist normalerweise nicht nötig, den Notenmodus extra anzugeben,
2297 aber es kann in bestimmten Situationen durchaus nützlich sein,
2298 etwa wenn man in einem Gesangstext-, Akkord- oder einem anderen
2299 Modus arbeitet aber ein Zeichen braucht, das nur im Notenmodus
2300 benutzt werden kann.
2302 Um etwa Dynamikzeichen vor die Nummern von unterschiedlichen
2303 Strophen zu setzen, muss man den Notenmodus betreten:
2305 @lilypond[verbatim,relative=2,quote]
2308 \notemode{ \set stanza = \markup{ \dynamic f 1. } }
2312 \notemode{ \set stanza = \markup{ \dynamic p 2. } }
2318 @node Richtung und Platzierung
2319 @subsection Richtung und Platzierung
2320 @translationof Direction and placement
2322 Die Platzierung und Richtung von Objekten ist im Notensatz oft durch eine
2323 enge Auswahl begrenzt: Notenhälse beispielsweise können entweder nach
2324 oben oder nach unten zeigen, Gesangstext, Dynamikzeichen und andere
2325 Ausdrucksbezeichnungen können über oder unter dem System gesetzt werden,
2326 Text kann rechts, links oder mittig ausgerichtet werden usw. Die meisten
2327 dieser Entscheidungen können LilyPond direkt überlassen werden; in
2328 einigen Fällen kann es allerdings nötig sein, eine bestimmte Richtung
2329 oder eine Position zu erzwingen.
2331 @strong{Richtungseinstellung von Artikulationszeichen}
2333 Standardmäßig sind bestimmte Objekte immer nach oben oder unten ausgerichtet,
2334 wie Dynamikzeichen oder Fermaten, während andere Objekte zwischen
2335 oben und unten wechseln, was vor allem von der Richtung der Notenhälse
2336 abhängt und etwa Bögen und Akzente betrifft.
2338 Die Standardeinstellungen können verändert werden, indem dem
2339 Artikulationszeichen ein Ausrichtungsmarkierer vorangeht. Drei
2340 derartige Ausrichtungsmarkierer sind vorhanden: @code{^} (bedeutet @qq{nach oben}), @code{_}
2341 (bedeutet @qq{nach unten}) bzw. @code{-} (bedeutet @qq{Standardrichtung}
2342 benutzen) normalerweise weggelassen werden. In diesem Fall wird
2343 @code{-} angenommen. Eine Richtungsanweisung ist jedoch
2344 @strong{immer} erforderlich vor
2347 @item @code{\tweak}-Befehlen
2348 @item @code{\markup}-(Textbeschriftungs-)Befehlen
2349 @item @code{\tag}-Befehlen
2350 @item Textbeschriftungen in reiner Textform, wie etwa @code{-"string"}
2351 @item Fingersatzanweisungen: @code{-1}
2352 @item Abkürzungen von Artikulationen, wie @code{-.}, @code{->}, @code{--}
2355 Ausrichtungsmarkierer haben nur eine Auswirkung auf die nächste Note:
2357 @lilypond[verbatim,quote,relative=2]
2365 @strong{Die @code{direction}-(Richtungs-)Eigenschaft}
2367 Die Position oder Richtung vieler Layoutobjekte wird von der
2368 @code{direction}-Eigenschaft kontrolliert.
2370 Der Wert der @code{direction}-Eigenschaft kann auf den Wert
2371 @code{1} gesetzt werden, was gleichbedeutend mit @qq{nach oben}
2372 bzw. @qq{oberhalb} ist, oder auf den Wert @code{-1}, was
2373 @qq{nach unten} bzw. @qq{unterhalb} bedeutet. Die Symbole
2374 @code{UP} und @code{DOWN} können anstelle von @code{1}
2375 und @code{-1} benutzt werden. Die Standardausrichtung kann
2376 angegeben werden, indem @code{direction} auf den Wert
2377 @code{0} oder @code{CENTER} gesetzt wird. In vielen Fällen
2378 bestehen auch vordefinierte Befehle, mit denen die Ausrichtung
2379 bestimmt werden kann. Sie haben die Form
2382 @code{\xxxUp}, @code{xxxDown}, @code{xxxNeutral}
2385 wobei @code{xxxNeutral} bedeutet: @qq{Benutze die
2386 Standardausrichtung}. Siehe auch
2387 @rlearning{within-staff (Objekte innerhalb des Notensystems)}.
2389 In wenigen Fällen, von denen Arpeggio das einzige häufiger
2390 vorkommende Beispiel darstellt, entscheidet der Wert von
2391 @code{direction}, ob das Objekt auf der rechten oder linken
2392 Seite das Ursprungsobjektes ausgegeben wird. In diesem Fall
2393 bedeutet @code{-1} oder @code{LEFT} @qq{auf der linken Seite}
2394 und @code{1} oder @code{RIGHT} @qq{auf der rechten Seite}. @code{0}
2395 oder @code{CENTER} bedeutet @qq{benutze Standardausrichtung}.
2398 Diese Ausrichtungsanzeigen wirken sich auf alle Noten aus, bis sie
2399 rückgängig gemacht werden:
2401 @lilypond[verbatim,quote,relative=2]
2411 @node Reihenfolge des Kontextlayouts
2412 @subsection Reihenfolge des Kontextlayouts
2413 @translationof Context layout order
2415 @cindex Kontexte, Reihenfolge
2417 Kontexte werden normalerweise in einer Notensystemgruppe dargestellt,
2418 von oben nach unten in der Reihenfolge, in der sie
2419 in der Eingabedatei auftreten. Wenn Kontexte verschachtelt sind,
2420 enthält der äußere Kontext die inneren geschachtelten Kontexte,
2421 wie in der Eingabedatei angegeben, vorausgesetzt die inneren
2422 Kontexte befinden sich in der @qq{accepts}-Liste des äußeren
2423 Kontextes. Verschachtelte Kontexte, die nicht in dieser Liste
2424 auftauchen, werden neu unter den äußeren Kontext angeordnet, anstatt
2425 dass sie innerhalb dieses Kontextes gesetzt werden.
2427 Es ist wichtig zu erinnern, dass ein Kontext implizit erstellt
2428 werden kann, wenn ein Befehl vorkommt und kein passender Kontext
2429 zur Verfügung steht, um den Befehl auszuführen. Dadurch können
2430 unerwartet neue Systeme oder Partituren erstellt werden.
2432 Die Standardreihenfolge, in der die Kontexte gesetzt werden und
2433 die @qq{accepts}-Liste können geändert werden, siehe auch
2434 @ref{Aligning contexts}.
2438 @rlearning{An extra staff appears}.
2441 @node Abstände und Maße
2442 @subsection Abstände und Maße
2443 @translationof Distances and measurements
2445 @cindex Abstände, absolut
2446 @cindex Abstände, skaliert
2453 In LilyPond gibt es zwei Arten von Abständen: absolute und
2456 Absolute Abstände werden benutzt, um Ränder, Einzüge und andere
2457 Einzelheiten des Seitenlayouts zu bestimmen. Sie sind in den
2458 Standardeinstellungen in Millimetern definiert. Abstände können
2459 auch in anderen Einheiten definiert werden, indem folgende
2460 Befehle auf die Zahl folgen: @code{\mm}, @code{\cm},
2461 @code{\in}@tie{}(Zoll=2,54 cm) und @code{\pt}@tie{}(Punkte, 1/72.27
2462 eines Zolls). Abstände des Seitenlayouts können auch in
2463 skalierbaren Einheiten (siehe folgenden Absatz) definiert
2464 werden, indem man den Befehl @code{\staff-space} an die
2465 Zahl hängt. Das Seitenlayout ist genauer beschrieben in
2468 Skalierbare Abstände werden immer in Einheiten von
2469 Notenlinienabständen angegeben, oder seltener in halben
2470 Notenlinienabständen. Ein Notenlinienabstand ist der
2471 Abstand zwischen zwei benachbarten Linien eines Notensystems.
2472 Der Standardwert dieser Einheit kann global geändert werden,
2473 indem man die globale Notensystemgröße ändert, oder sie
2474 kann lokal geändert werden, indem man die Eigenschaft
2475 @code{staff-space} des @code{StaffSymbol}-Objekts mit
2476 @code{\override} verändert. Skalierte Abstände verändern
2477 sich automatisch entsprechend, wenn der Notenlinienabstand
2478 entweder global oder lokal verändert wird, aber Schriftarten
2479 verändern ihre Größe nur, wenn der Notenlinienabstand
2480 global verändert wird. Mit dem globalen Notenlinienabstand
2481 kann man also auf einfach Art und Weise die gesamte Größe
2482 einer Partitur verändern. Zu Methoden, wie der globale
2483 Notenlinienabstand verändert werden kann, siehe
2484 @ref{Die Notensystemgröße einstellen}.
2488 Wenn nur eine ein Abschnitt einer Partitur in einer anderen
2489 Größe erscheinen soll, etwa ein Ossia-Abschnitt in einer
2490 Fußnote, kann die globale Notensystemgröße nicht einfach
2491 geändert werden, weil sich diese Änderung auf die gesamte Partitur
2492 auswirken würde. In derartigen Fällen muss die Größenänderung
2493 vorgenommen werden, indem man sowohl die
2494 @code{staff-space}-Eigenschaft von @code{StaffSymbol} als auch
2495 die Größe der Schriftarten verändert. Eine Scheme-Funktion,
2496 @code{magstep}, kann von einer Schriftartveränderung zu der
2497 entsprechenden Veränderung in @code{staff-space} (Notenlinienabständen)
2498 konvertieren. Zu einer Erklärung und Beispielen zu ihrer
2499 Verwendung siehe @rlearning{Länge und Dicke von Objekten}.
2503 Handbuch zum Lernen:
2504 @rlearning{Länge und Dicke von Objekten}.
2508 @ref{Die Notensystemgröße einstellen}.
2511 @node Eigenschaften des Staff-Symbols
2512 @subsection Eigenschaften des Staff-Symbols
2513 @translationof Staff symbol properties
2515 @cindex Anpassen von staff symbol
2516 @cindex Notensystem, anpassen
2517 @cindex Veränderung des Notensystems
2519 Die vertikale Position der Notenlinien und die Anzahl der
2520 Notenlinien kann gleichzeitig definiert werden. Wie das
2521 folgende Beispiel zeigt, werden Notenpositionen nicht
2522 durch die Position der Notenlinien verändert:
2524 @warning{Die @code{'line-positions}-Eigenschaft
2525 verändert die @code{'line-count}-Eigenschaft. Die
2526 Anzahl der Notenlinien wird implizit definiert durch
2527 die Anzahl der Elemente in der Liste der Werte von
2528 @code{'line-positions}.}
2530 @lilypond[verbatim,quote,relative=1]
2532 \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7)
2537 Die Breite eines Notensystems kann verändert werden. Die Einheit
2538 ist in Notenlinienabständen. Die Abstände von Objekten
2539 in diesem Notensystem wird durch diese Einstellung nicht
2542 @lilypond[verbatim,quote,relative=1]
2544 \override StaffSymbol #'width = #23
2551 @subsection Strecker
2552 @translationof Spanners
2554 Viele Objekte der Musiknotation erstrecken sich über mehrere
2555 Objekte oder gar mehrere Takte. Beispiele hierfür sind etwa
2556 Bögen, Balken, Triolenklammern, Volta-Klamern in Wiederholungen,
2557 Crescendo, Triller und Glissando. Derartige Objekte werden
2558 als @qq{Strecker} bezeichnet. Sie haben spezielle Eigenschaften,
2559 mit welchen ihre Eigenschaften und ihr Verhalten beeinflusst
2560 werden kann. Einige dieser Eigenschaften gelten für alle
2561 Strecker, andere beschränken sich auf eine Untergruppe der
2564 Alle Strecker unterstützen das @code{spanner-interface}
2565 (Strecker-Schnittstelle).
2566 Ein paar, insbesondere die, die zwischen zwei Objekten eine
2567 gerade Linie ziehen, unterstützen auch das
2568 @code{line-spanner-interface} (Strecker-Linienschnittstelle).
2571 @unnumberedsubsubsec Das @code{spanner-interface} benutzen
2573 Diese Schnittstelle stellt zwei Eigenschaften zur Verfügung,
2574 die sich auf mehrere Strecker auswirken:
2576 @strong{@i{Die @code{minimum-length}-Eigenschaft}}
2578 Die Mindestlänge eines Streckers wird durch die
2579 @code{minimum-length}-Eigenschaft definiert. Wenn diese
2580 Eigenschaft vergrößert wird, muss in den meisten Fällen
2581 auch der Abstand der Noten zwischen den zwei Endpunkten
2582 eines Streckers verändert werden. Eine Veränderung dieser
2583 Eigenschaft hat jedoch auf die meisten Strecker keine Auswirkung,
2584 weil ihre Länge aus anderen Berechnungen hervorgeht.
2585 Einige Beispiele, wo die Eigenschaft benutzt wird, sind
2588 @lilypond[verbatim,quote,relative=2]
2591 % increase the length of the tie
2592 -\tweak #'minimum-length #5
2596 @lilypond[verbatim,quote,relative=2]
2598 \compressFullBarRests
2600 % increase the length of the rest bar
2601 \once \override MultiMeasureRest #'minimum-length = #20
2606 @lilypond[verbatim,quote,relative=2]
2608 % increase the length of the hairpin
2609 \override Hairpin #'minimum-length = #20
2613 Diese Veränderung kann auch eingesetzt werden, um die Länge
2614 von Legato- und Phrasierungsbögen zu verändern:
2616 @lilypond[verbatim,quote,relative=2]
2619 -\tweak #'minimum-length #5
2624 -\tweak #'minimum-length #5
2628 Im Falle einiger Layoutobjekte wirkt sich die
2629 @code{minimum-length}-Eigenschaft erst dann aus, wenn die
2630 @code{set-spacing-rods}-Prozedur explizit aufgerufen wird.
2631 Um das zu tun, sollte die @code{springs-and-rods}-Eigenschaft
2632 auf @code{ly:spanner::set-spacing-rods} gesetzt werden. Die
2633 Mindestlänge eines Glissandos etwa wird erst aktiv, wenn
2634 die @code{springs-and-rods}-Eigenschaft gesetzt ist:
2636 @lilypond[verbatim,quote,relative=1]
2640 % not effective alone
2641 \once \override Glissando #'minimum-length = #20
2644 % effective only when both overrides are present
2645 \once \override Glissando #'minimum-length = #20
2646 \once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods
2650 Das gilt auch für das @code{Beam}-(Balken-)Objekt:
2652 @lilypond[verbatim,quote,relative=1]
2653 % not effective alone
2654 \once \override Beam #'minimum-length = #20
2657 % effective only when both overrides are present
2658 \once \override Beam #'minimum-length = #20
2659 \once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods
2663 @strong{@i{Die @code{to-barline}-Eigenschaft}}
2665 Die zweite nützliche Eigenschaft des @code{spanner-interface} ist
2666 @code{to-barline} (bis zum Taktstrich). In den Standardeinstellungen
2667 ist diese Eigenschaft auf @qq{wahr} gesetzt, was bedeutet, dass
2668 ein Strecker, etwa eine Crescendo-Klammer, der an der ersten Noten
2669 eines Taktes beendet wird, sich nur bis zum vorhergehenden
2670 Taktstrich erstreckt. Wenn die Eigenschaft auf @qq{falsch} gesetzt
2671 wird, erstrecken sich die Strecker entsprechend über die Taktlinie
2672 hinüber und enden erst an der entsprechenden Note:
2674 @lilypond[verbatim,quote,relative=2]
2675 a \< a a a a \! a a a \break
2676 \override Hairpin #'to-barline = ##f
2677 a \< a a a a \! a a a
2680 Diese Eigenschaft wirkt sich nicht auf alle Strecker aus. Im Falle
2681 von Legato- oder Phrasierungsbögen etwa hat diese Eigenschaft
2682 keinen Effekt. Das gilt auch für alle anderen Streckern, bei
2683 denen es nicht sinnvoll währe, sie an einer Taktlinie abzuschließen.
2686 @unnumberedsubsubsec Das @code{line-spanner-interface} benutzen
2688 Objekte, die das @code{line-spanner-interface} unterstützen,
2692 @item @code{DynamicTextSpanner}
2693 @item @code{Glissando}
2694 @item @code{TextSpanner}
2695 @item @code{TrillSpanner}
2696 @item @code{VoiceFollower}
2699 Die Routine, die das Setzen der Matrizen dieser Strecker
2700 hervorruft, ist @code{ly:line-interface::print}. Diese
2701 Routine bestimmt die exakte Position der zwei Endpunkte
2702 und zeichnet eine Linie zwischen ihnen, in dem erforderlichen
2703 Stil. Die Position der zwei Endpunkte des Streckers wird
2704 in Echtzeit errechnet, aber es ist möglich, ihre
2705 Y-Koordinaten zu verändern. Die Eigenschaften, die angegeben
2706 werden müssen, sind zwei Ebenen in der Objekthierarchie
2707 tiefer angeordnet, aber die Syntax des @code{\override}-Befehls
2708 ist ziemlich einfach:
2710 @lilypond[relative=2,quote,verbatim]
2712 \once \override Glissando #'(bound-details left Y) = #3
2713 \once \override Glissando #'(bound-details right Y) = #-2
2717 Die Einheiten für die @code{Y}-Eigenschaft werden in
2718 Notenlinienabständen angegeben, wobei die Mittellinie des
2719 Notensystems die Null darstellt. Für das Glissando ist
2720 der Wert von @code{Y} am entsprechenden X-Koordinatenpunkt
2721 entsprechend dem Mittelpunkt des Notenkopfes, wenn die
2722 Linie bis in die Noten hinein weitergeführt werden würde.
2724 Wenn @code{Y} nicht gesetzt wird, wird der Wert aus der
2725 vertikalen Position des entsprechenden Anknüpfpunkts des
2726 Streckers errechnet.
2728 Im Fall eines Zeilenumbruchs werden die Werte der Endpunkte
2729 in den Unterlisten @code{left-broken} bzw. @code{right-broken}
2730 von @code{bound-details} abgelegt. Zum Beispiel:
2732 @lilypond[relative=2,ragged-right,verbatim,quote]
2733 \override Glissando #'breakable = ##t
2734 \override Glissando #'(bound-details right-broken Y) = #-3
2735 c1 \glissando \break
2739 Eine Anzahl weitere Eigenschaft der @code{left}- und
2740 @code{right}-Unterlisten der @code{bound-details}-Eigenschaft
2741 kann auf gleiche Weise wie @code{Y} verändert werden:
2745 Hiermit wird der Y-Koordinationspunkt des Endpunktes in
2746 Notenlinienabständen vom Mittelpunkt des Notensystems
2747 ausgehend angegeben. Der Endpunkt ist normalerweise
2748 der Mittelpunkt des Elternobjektes, sodass Glissandos
2749 vertikal auf den Mittelpunkt eines Notenkopfes weist.
2751 Für horizontale Strecker, wie Textstrecker und Trillerstrecker
2752 ist sein Wert mit 0 definiert.
2755 Das entscheidet, wo die Linie auf der X-Achse beginnt und endet,
2756 relativ zum Elternobjekt. Ein Wert @code{-1} (oder
2757 @code{LEFT}) lässt die Linie an der linken Seite der Noten
2758 beginnen/enden, mit der sie verknüpft ist.
2761 Das ist der absolute X-Koordinatenpunkt des Endpunktes. Der
2762 Wert wird normalerweise in Echtzeit errechnet, und ihn zu
2763 verändern ist normalerweise nicht nützlich.
2766 Linienstrecker können Symbole am Ende oder zu Anfang des
2767 Streckers haben, die in dieser Untereigenschaft definiert
2768 werden. Die Eigenschaft ist für interne Benutzung, es
2769 wird empfohlen, die Eigenschaft @code{text} zu benutzen.
2772 Das ist eine Textbeschriftung, die ausgewertet wird und die
2773 @code{stencil}-Eigenschaft überschreibt. Sie wird eingesetzt,
2774 um @i{cresc.}, @i{tr} oder andere Texte an horizontale
2777 @lilypond[quote,ragged-right,relative=2,verbatim]
2778 \override TextSpanner #'(bound-details left text)
2779 = \markup { \small \bold Slower }
2780 c2\startTextSpan b c a\stopTextSpan
2783 @item stencil-align-dir-y
2784 @item stencil-offset
2785 Wenn keine dieser beiden Eigenschaften gesetzt wird, wird
2786 die Matrize (engl. stencil) einfach am Endpunkt des Streckers,
2787 auf seiner Mittellinie (wie durch @code{X} und @code{Y}
2788 definiert) zentriert, ausgegeben. Wenn entweder
2789 @code{stencil-align-dir-y} oder @code{stencil-offset}
2790 gesetzt werden, wird das Symbol am Rand vertikal entsprechend
2791 des Endpunktes der Linie verschoben:
2793 @lilypond[relative=1,quote,verbatim]
2794 \override TextSpanner
2795 #'(bound-details left stencil-align-dir-y) = #-2
2796 \override TextSpanner
2797 #'(bound-details right stencil-align-dir-y) = #UP
2799 \override TextSpanner
2800 #'(bound-details left text) = #"ggg"
2801 \override TextSpanner
2802 #'(bound-details right text) = #"hhh"
2803 c4^\startTextSpan c c c \stopTextSpan
2806 Dabei sollte beachtet werden, dass negative Werte das Objekt
2807 nach @emph{oben} verschieben, anders als man erwarten könnte,
2808 weil der Wert @code{-1} oder @code{DOWN} bedeutet, dass
2809 die @emph{Unterkante} des Textes mit der Streckerlinie
2810 ausgerichtet wird. Ein Wert @code{1} oder @code{UP}
2811 richtet die Oberkante des Textes mit der Streckerlinie aus.
2814 Wenn diese Untereigenschaft auf @code{#t} gesetzt wird,
2815 wird ein Pfeilkopf am Ende der Linie erstellt.
2818 Diese Eigenschaft kontrolliert den Abstand zwischen
2819 dem angegebenen Endpunkt der Linie und dem wirklichen Ende.
2820 Ohne Füllung (engl. padding) würde ein Glissando in der
2821 Mitte eines Notenkopfes beginnen und enden.
2825 Die musikalische Funktion @code{\endSpanners} beschließt
2826 den Strecker, der an der direkt folgenden Note beginnt,
2827 bevor er eigentlich zu ende wäre. Er wird exakt nach
2828 einer Note beendet, oder am nächsten Taktstrich, wenn
2829 @code{to-barline} auf wahr gesetzt ist und eine Taktlinie
2830 vor der nächsten Note erscheint.
2832 @lilypond[verbatim,quote,ragged-right,relative=2]
2834 c2 \startTextSpan c2 c2
2839 Wenn man @code{\endSpanners} benutzt, ist es nicht
2840 nötig, den Befehl \startTextSpan mit \stopTextSpan
2841 zu beenden, und es ist auch nicht nötig, Crescendo-Klammern
2842 mit @code{\!} zu beenden.
2846 Referenz der Interna:
2847 @rinternals{TextSpanner},
2848 @rinternals{Glissando},
2849 @rinternals{VoiceFollower},
2850 @rinternals{TrillSpanner},
2851 @rinternals{line-spanner-interface}.
2854 @node Sichtbarkeit von Objekten
2855 @subsection Sichtbarkeit von Objekten
2856 @translationof Visibility of objects
2858 @cindex Objekte, Sichtbarkeit
2859 @cindex Grobs, Sichtbarkeit
2860 @cindex Sichtbarkeit von Objekten
2862 Die Sichtbarkeit von Layout-Objekten kann auf vier Arten
2863 kontrolliert werden: Ihre Matrizen (engl stencil) können
2864 entfernt werden, sie können unsichtbar gemacht werden,
2865 sie können weiß eingefärbt werden und ihre
2866 @code{break-visibility}-Eigenschaft kann verändert werden.
2867 Die ersten drei Möglichkeiten beziehen sich auf alle
2868 Layout-Objekte, die letzte nur auf einige wenige, nämlich
2869 die @emph{zerteilbaren} Objekte. Das Handbuch zum Lernen
2870 führt in alle vier Möglichkeiten ein, siehe
2871 @rlearning{Sichtbarkeit und Farbe von Objekten}.
2873 Es gibt auch einige weitere Techniken, die sich nur auf
2874 bestimmte Layout-Objekte beziehen. Sie werden im letzten
2875 Abschnitt behandelt.
2878 * Einen stencil entfernen::
2879 * Objekten unsichtbar machen::
2880 * Objekte weiß malen::
2881 * break-visibility (unsichtbar machen) benutzen::
2886 @node Einen stencil entfernen
2887 @unnumberedsubsubsec Einen @code{stencil} entfernen
2888 @translationof Removing the stencil
2890 @cindex stencil, entfernen
2891 @cindex Matrize, entfernen
2892 @cindex Stempel (stencil), entfernen
2893 @cindex Entfernen eines Stencil
2895 Jedes Layout-Objekt hat eine Matrizen-(stencil)-Eigenschaft.
2896 Sie ist normalerweise definiert als die Funktion, die das
2897 entsprechende Objekt zeichnet. Wenn die Eigenschaft mit
2898 @code{\override} auf @code{#f} gesetzt wird, wird keine
2899 Funktion aufgerufen und also auch kein Objekt gezeichnet.
2900 Das Standardverhalten kann mit dem Befehl @code{\revert}
2901 wieder hergestellt werden.
2903 @lilypond[quote,verbatim,relative=1]
2905 \override Score.BarLine #'stencil = ##f
2907 \revert Score.BarLine #'stencil
2912 @node Objekten unsichtbar machen
2913 @unnumberedsubsubsec Objekten unsichtbar machen
2914 @translationof Making objects transparent
2916 @cindex transparent, Objekte
2917 @cindex unsichtbar, Objekte
2918 @cindex durchsichtig, Objekte
2920 Jedes Layout-Objekt hat eine Durchsichtigkeits-Eigenschaft
2921 (@code{'transparent}),
2922 die normalerweise auf den Wert @code{#f} gesetzt ist. Wenn
2923 sie auf @code{#t} gesetzt wird, nimmt das Objekt immer noch
2924 den entsprechenden Platz ein, ist aber unsichtbar.
2926 @lilypond[quote,verbatim,relative=2]
2928 \once \override NoteHead #'transparent = ##t
2933 @node Objekte weiß malen
2934 @unnumberedsubsubsec Objekte weiß malen
2935 @translationof Painting objects white
2937 @cindex Objekte, einfärben
2938 @cindex Färben von Objekten
2939 @cindex Einfärben von Objekten
2940 @cindex Ebenen (layer)
2941 @cindex layer (Ebenen)
2942 @cindex Druckreihenfolge
2943 @cindex Objekte verändern
2944 @cindex verändern von Objekten
2945 @cindex Grobs, verändern
2947 Alle Layout-Objekte haben eine Farb-(color)-Eigenschaft, die
2948 normalerweise schwarz (@code{black}) definiert ist. Wenn
2949 sie nach weiß (@code{white}) verändert wird, kann man das
2950 Objekt nicht mehr vom weißen Hintergrund unterscheiden.
2951 Wenn das Objekt jedoch andere Objekte überschneidet, wird
2952 die Farbe der Überschneidungen von der Reihenfolge entschieden,
2953 in welcher die Objekte gesetzt werden. Es kann also vorkommen,
2954 dass man die Umrisse des weißen Objektes erahnen kann, wie
2957 @lilypond[quote,verbatim,relative=2]
2958 \override Staff.Clef #'color = #white
2962 Das kann man vermeiden, indem man die Satzreihenfolge der Objekte
2963 verändert. Alle Layout-Objekte haben eine @code{layer}-Eigenschaft,
2964 die auf eine ganze Zahl gesetzt sein muss. Objekte mit der
2965 niedrigsten Zahl in der @code{layer}-Eigenschaft werden zuerst
2966 gesetzt, dann die nächsten Objekte in ansteigender Ordnung. Objekte
2967 mit höheren Werten überschneiden also Objekte mit niedrigeren
2968 Werten. Die meisten Objekte bekommen den Wert @code{1} zugewiesen,
2969 einige wenige Objekte, unter die auch @code{StaffSymbol} (die
2970 Notenlinien) gehört, jedoch den Wert @code{0}. Die Reihenfolge,
2971 in der Objekte mit demselben Wert gesetzt werden, ist nicht
2974 Im oberen Beispiel wird der weiße Schlüssel, der einen Wert von
2975 @code{1} für @code{layer} hat, nach den Notenlinien gesetzt
2976 (die einen Wert von @code{0} für @code{layer} haben) und
2977 überschneidet sie also. Um das zu ändern, muss dem @code{Clef}-Objekt
2978 (Notenschlüssel) ein niedrigerer Wert, etwa @code{-1}, gegeben
2979 werden, sodass es früher gesetzt wird:
2981 @lilypond[quote,verbatim,relative=2]
2982 \override Staff.Clef #'color = #white
2983 \override Staff.Clef #'layer = #-1
2988 @node break-visibility (unsichtbar machen) benutzen
2989 @unnumberedsubsubsec @code{break-visibility} (unsichtbar machen) benutzen
2990 @translationof Using break-visibility
2992 @funindex break-visibility
2994 @cindex break-visibility
2996 Die meisten Layout-Objekte werden nur einmal gesetzt, aber
2997 einige, wie Taktstriche, Schlüssel, Taktartbezeichnung und
2998 Tonartvorzeichen, müssen mehrmals gesetzt werden, wenn
2999 die Zeile gewechselt wird: einmal am Ende des oberen Systems
3000 und ein zweites Mal zu Beginn des nächsten Systems.
3001 Derartige Objekte werden als @emph{trennbar} bezeichnet
3002 und haben eine Eigenschaft, die @code{break-visibility}-Eigenschaft,
3003 mit der ihre Sichtbarkeit an allen drei Positionen, an denen
3004 sie auftreten können, kontrolliert werden kann: zu Beginn
3005 einer Zeile, innerhalb einer Zeile, wenn sie verändert werden,
3006 und am Ende einer Zeile, wenn die Änderung hier stattfindet.
3008 Die Taktart wird beispielsweise standardmäßig nur zu Beginn des
3009 ersten Systems gesetzt, aber an anderen Stellen nur, wenn sie
3010 sich ändert. Wenn diese Änderung am Ende eines Systems auftritt,
3011 wird die neue Taktart am Ende des aktuellen Systems als auch
3012 zu Beginn des nächsten Systems gesetzt.
3014 Dieses Verhalten wird von der @code{break-visibility}-Eigenschaft
3015 kontrolliert, die erklärt wird in
3016 @c Leave this ref on a newline - formats incorrectly otherwise -td
3017 @rlearning{Sichtbarkeit und Farbe von Objekten}. Die Eigenschaft
3018 braucht einen Vektor von drei Booleschen Werten, die in ihrer
3019 Reihenfolge bestimmte, ob das Objekt a) zu Ende der Zeile,
3020 b) innerhalb einer Zeile oder c) zu Beginn einer Zeile gesetzt
3021 wird. Oder, genauer gesagt, vor einem Zeilenumbruch, an Stellen,
3022 wo kein Zeilenumbruch auftritt oder nach einem Zeilenumbruch.
3024 Die acht möglichen Kombinationen können auch durch vordefinierte
3025 Funktionen bestimmt werden, welche in der Datei @file{scm/output-lib.scm}
3026 definiert sind. Die letzten drei Spalten der folgenden Tabelle
3027 zeigen an, ob das Layout-Objekt an einer bestimmten Position
3028 sichtbar sein wird oder nicht:
3030 @multitable {@code{begin-of-line-invisible}} {@code{'#(#t #t #t)}} {ja} {ja} {ja}
3031 @headitem Funktion @tab Vektor @tab Vor @tab kein @tab Nach
3032 @headitem Form @tab Form @tab Umbruch @tab Umbruch @tab Umbruch
3034 @item @code{all-visible} @tab @code{'#(#t #t #t)} @tab ja @tab ja @tab ja
3035 @item @code{begin-of-line-visible} @tab @code{'#(#f #f #t)} @tab nein @tab nein @tab ja
3036 @item @code{center-visible} @tab @code{'#(#f #t #f)} @tab nein @tab ja @tab nein
3037 @item @code{end-of-line-visible} @tab @code{'#(#t #f #f)} @tab ja @tab nein @tab nein
3038 @item @code{begin-of-line-invisible} @tab @code{'#(#t #t #f)} @tab ja @tab ja @tab nein
3039 @item @code{center-invisible} @tab @code{'#(#t #f #t)} @tab ja @tab nein @tab ja
3040 @item @code{end-of-line-invisible} @tab @code{'#(#f #t #t)} @tab nein @tab ja @tab ja
3041 @item @code{all-invisible} @tab @code{'#(#f #f #f)} @tab nein @tab nein @tab nein
3044 Die Standardeinstellungen von @code{break-visibility} hängen vom
3045 Layout-Objekt ab. Die folgende Tabelle zeigt alle wichtigen Layout-Objekte,
3046 die mit @code{break-visibility} verändert werden können und die
3047 jeweiligen Standardeinstellungen der Eigenschaft:
3049 @multitable @columnfractions .3 .3 .4
3051 @headitem Layout-Objekt @tab Normaler Kontext @tab Standardeinstellung
3053 @c omit Ambitus as it appears not to be affected by break-visibility -td
3054 @c @item @code{Ambitus} @tab as specified @tab @code{begin-of-line-visible}
3055 @item @code{BarLine} (Taktstrich) @tab @code{Score} @tab calculated
3056 @item @code{BarNumber} (Taktzahl) @tab @code{Score} @tab @code{begin-of-line-visible}
3057 @c omit the following item until it can be explained -td
3058 @c @item @code{BreakAlignGroup} @tab @code{Score} @tab calculated
3059 @item @code{BreathingSign} (Atemzeichen) @tab @code{Voice} @tab @code{begin-of-line-invisible}
3060 @item @code{Clef} (Schlüssel) @tab @code{Staff} @tab @code{begin-of-line-visible}
3061 @item @code{Custos} @tab @code{Staff} @tab @code{end-of-line-visible}
3062 @item @code{DoublePercentRepeat} (Doppel-Prozent-Wiederholung @tab @code{Voice} @tab @code{begin-of-line-invisible}
3063 @c omit KeyCancellation until it can be explained -td
3064 @c @item @code{KeyCancellation} @tab ?? @tab @code{begin-of-line-invisible}
3065 @item @code{KeySignature} (Tonart) @tab @code{Staff} @tab @code{begin-of-line-visible}
3066 @c omit LeftEdge until it can be explained -td
3067 @c @item @code{LeftEdge} @tab @code{Score} @tab @code{center-invisible}
3068 @item @code{OctavateEight} (Oktavierungs-Acht) @tab @code{Staff} @tab @code{begin-of-line-visible}
3069 @item @code{RehearsalMark} (Übungszeichen) @tab @code{Score} @tab @code{end-of-line-invisible}
3070 @item @code{TimeSignature} (Taktart) @tab @code{Staff} @tab @code{all-visible}
3074 Das Beispiel unten zeigt die Verwendung der Vektor-Form um die
3075 Sichtbarkeit von Taktlinien zu bestimmten:
3077 @lilypond[quote,verbatim,relative=1,ragged-right]
3080 % Remove bar line at the end of the current line
3081 \once \override Score.BarLine #'break-visibility = #'#(#f #t #t)
3087 Obwohl alle drei Bestandteile des Vektors, mit denen
3088 @code{break-visibility} definiert wird, vorhanden sein
3089 müssen, haben nicht alle eine Auswirkung auf jedes
3090 Layout-Objekt, und einige Kombinationen können sogar
3091 Fehler hervorrufen. Es gelten die folgenden Einschränkungen:
3095 Taktstriche können nicht zu Beginn einer Zeile gesetzt werden.
3098 Eine Taktzahl kann nicht zu Beginn der ersten Zeile gesetzt
3099 werden, außer wenn er nicht 1 ist.
3102 Schlüssel -- siehe unten.
3105 Doppel-Prozent-Wiederholungen werden entweder alle ausgegeben
3106 oder alle unterdrückt. Mit @code{begin-of-line-invisible} werden
3107 sie ausgegeben, mit @code{all-invisible} unterdrückt.
3110 Tonart -- siehe unten.
3113 Oktavierungs-Acht -- siehe unten.
3118 @node Besonderheiten
3119 @unnumberedsubsubsec Besonderheiten
3120 @translationof Special considerations
3122 @strong{@emph{Sichtbarkeit nach expliziten Änderungen}}
3124 @cindex Tonart, Sichtbarkeit nach expliziter Änderung
3125 @cindex Schlüssel, Sichtbarkeit nach expliziter Änderung
3127 @funindex explicitKeySignatureVisibility
3128 @funindex explicitClefVisibility
3130 Die @code{break-visibility}-Eigenschaft kontrolliert die Sichtbarkeit
3131 von Tonarten und Schlüsseländerungen nur zu Beginn einer Zeile,
3132 d.h. nach einem Zeilenumbruch. Sie hat keinen Einfluss auf die
3133 Sichtbarkeit von Tonarten bzw. Schlüsseln, die nach einer
3134 expliziten Tonart- oder Schlüsseländerung in oder am Ende einer
3135 Zeile angezeigt werden. Im nächsten Beispiel ist die Tonartangabe
3136 nach dem expliziten Wechsel zu B-Dur immer noch sichtbar, obwohl
3137 @code{all-invisible} eingesetzt wurde:
3139 @lilypond[quote,verbatim,relative=1,ragged-right]
3142 % Try to remove all key signatures
3143 \override Staff.KeySignature #'break-visibility = #all-invisible
3151 Die Sichtbarkeit derartiger expliziter Tonart- und Schlüsseländerungen
3152 wird von den @code{explicitKeySignatureVisibility}- und
3153 @code{explicitClefVisibility}-Eigenschaften kontrolliert. Sie
3154 entsprechen der @code{break-visibility}-Eigenschaft und beide
3155 brauchen drei Boolesche Werte bzw. die oben aufgelisteten vordefinierten
3156 Funktionen als Argument, genau wie @code{break-visibility}.
3157 Beide sind Eigenschaft des @code{Staff}-Kontextes, nicht der
3158 Layout-Objekte selber, weshalb sie mit dem Befehl @code{\set}
3159 eingesetzt werden. Beide sind standardmäßig auf die Funktion
3160 @code{all-visible} gesetzt. Diese Eigenschaften kontrollieren nur
3161 die Sichtbarkeit von Tonarten bzw. Schlüssel, die von expliziten
3162 Änderungen herrühren, und haben keinen Einfluss auf Tonarten und
3163 Schlüssel zu Beginn einer Zeile -- um diese zu beeinflussen, muss
3164 @code{break-visibility} benutzt werden.
3166 @lilypond[quote,verbatim,relative=1,ragged-right]
3169 \set Staff.explicitKeySignatureVisibility = #all-invisible
3170 \override Staff.KeySignature #'break-visibility = #all-invisible
3177 @strong{@emph{Sichtbarkeit von erinnernden Versetzungszeichen}}
3179 Um erinnernde Versetzungszeichen zu entfernen, die nach einer
3180 expliziten Tonartänderung auftreten, muss die @code{Staff}-Eigenschaft
3181 @code{printKeyCancellation} auf @code{#f} gesetzt werden:
3183 @lilypond[quote,verbatim,relative=1,ragged-right]
3186 \set Staff.explicitKeySignatureVisibility = #all-invisible
3187 \set Staff.printKeyCancellation = ##f
3188 \override Staff.KeySignature #'break-visibility = #all-invisible
3195 Mit diesen Veränderungen bleiben nur noch die Versetzungszeichen
3196 vor den Noten übrig um den Wechsel der Tonart anzuzeigen.
3198 @strong{@emph{Automatische Takte}}
3200 @funindex automaticBars
3202 @cindex Taktstriche, unterdrücken
3204 Ein Sonderfall sind die automatischen Taktstriche, die mit der
3205 Eigenschaft @code{automaticBars} im @code{Score}-Kontext
3206 ausgeschaltet werden können. Wenn sie auf @code{#f} gesetzt
3207 ist, werden Taktstrich nicht automatisch ausgegeben sondern
3208 müssen explizit mit dem @code{\bar}-Befehl eingegeben werden.
3209 Anders als bei dem @code{\cadenzaOn}-Befehl werden die Takte
3210 allerdings immer noch gezählt. Takterstellung wird später
3211 wieder mit diesem Zahl aufgenommen, wenn die Eigenschaft
3212 wieder auf @code{#t} gesetzt wird. Wenn sie den Wert @code{#f}
3213 hat, können Zeilenumbrüche nur an expliziten @code{\bar}-Befehlen
3218 @strong{@emph{Oktavierte Schlüssel}}
3220 @cindex oktavierte Schlüssel, Sichtbarkeit
3221 @cindex Sichtbarkeit von oktavierten Schlüsseln
3222 @cindex Schlüssel, Sichtbarkeit der Oktavierung
3224 Das kleine Oktavierungssymbol von oktavierten Notenschlüsseln
3225 wird durch das @code{OctavateEight}-Layout-Objekt erstellt.
3226 Seine Sichtbarkeit wird automatisch vom @code{Clef}-Objekt
3227 geerbt, sodass Veränderungen von @code{break-visibility}
3228 des @code{OctavateEight}-Layout-Objekts nicht auch noch
3229 für unsichtbare Schlüssel zusätzlich vorgenommen werden müssen.
3231 Bei expliziten Schlüsseländerungn kontrolliert die
3232 @code{explicitClefVisibility}-Eigenschaft wohl das
3233 Schlüsselsymbol als auch das damit verknüpfte Oktavierungssymbol.
3236 Handbuch zum Lernen:
3237 @rlearning{Sichtbarkeit und Farbe von Objekten}
3241 @subsection Linienstile
3242 @translationof Line styles
3244 Einige Aufführungsanweisungen (z. B. @i{rallentando} und
3245 @i{accelerando} oder Triller werden als Text gesetzt und
3246 möglicherweise über mehrere Takte mit Linien fortgeführt,
3247 die teilweise gestrichelt oder gewellt sind.
3249 Alle benutzen die gleichen Routinen wie das Glissando,
3250 um Text und Linien zu produzieren, weshalb auch eine
3251 Veränderungen der Erscheinung auf gleiche Weise vonstatten
3252 geht. Die Ausgabe erfolgt durch einen Strecker (engl. spanner), und
3253 die Routine, die ihn setzt, heißt @code{ly:line-interface::print}.
3254 Diese Routine bestimmt die exakte Position von zwei
3255 @i{Strecker-Punkten} und zeichnet eine Linie zwischen sie
3256 im gewünschten Linienstil.
3258 Hier einige Beispiele, welche Linienstile möglich sind
3259 und wie sie verändert werden können:
3261 @lilypond[relative=2,ragged-right,verbatim,quote]
3263 \once \override Glissando #'style = #'dashed-line
3265 \override Glissando #'style = #'dotted-line
3267 \override Glissando #'style = #'zigzag
3269 \override Glissando #'style = #'trill
3273 Die Position der Endpunkte des Streckers werden in
3274 Realzeit für jedes graphische Objekt errechnet, aber
3275 es ist möglich, sie manuell vorzugeben:
3278 @lilypond[relative=2,ragged-right,verbatim,quote]
3280 \once \override Glissando #'(bound-details right Y) = #-2
3284 Der Wert von @code{Y} wird für den rechten Endpunkt auf
3285 @code{-2} gesetzt. Die linke Seite kann ähnlich angepasst
3286 werden, indem man @code{left} anstelle von @code{right} angibt.
3288 Wenn @code{Y} nicht gesetzt ist, wird der Wert ausgehend von
3289 der vertikalen Position der linken und rechten Anbindepunkte
3290 des Streckers errechnet.
3292 Andere Anpassungen der Strecker sind auch möglich, für Einzelheiten
3293 siehe @ref{Strecker}.
3296 @node Drehen von Objekten
3297 @subsection Drehen von Objekten
3298 @translationof Rotating objects
3300 Layout-Objekte und Textbeschriftungselemente können zu einem
3301 beliebigen Winkel um einen beliebigen Punkt herum gedreht
3302 werden, aber die Methode, mit der die Änderung vorgenommen
3303 werden muss, unterscheidet sich je nach Objekt.
3306 * Drehen von Objekten::
3307 * Textbeschriftung drehen::
3310 @node Drehen von Objekten
3311 @unnumberedsubsubsec Drehen von Objekten
3312 @translationof Rotating layout objects
3314 @cindex Drehen von Objekten
3315 @cindex Objekte, Drehen
3317 Alle Layout-Objekte, die das @code{grob-interface} unterstützen,
3318 können gedreht werden, indem man ihre @code{rotation}-Eigenschaft
3319 einstellt. Sie erhält eine Liste mit drei Einträgen: den
3320 Winkel der Drehung gegen den Uhrzeiger sowie die X- und
3321 Y-Koordinaten des Punktes relativ zum Referenzpunkt des Objekts,
3322 um welchen herum die Drehung stattfinden soll. Der Winkel
3323 der Drehung wird in Grad angegeben, die Koordinaten in
3324 Notenlinienzwischenräumen.
3326 Der Winkel der Drehung und die Koordinaten des Drehpunktes müssen
3327 durch Ausprobieren herausgefunden werden.
3329 @cindex Crescendoklammern, gedreht
3330 @cindex gedrehte Crescendoklammern
3331 @cindex schräge Crescendoklammern
3332 @cindex Klammern, Crescendo, schräg
3334 Es gibt nur wenige Situationen, in welchen die Drehung eines
3335 Layout-Objektes sinnvoll ist. Das folgende Beispiel zeigt
3336 eine sinnvolle Anwendung:
3338 @lilypond[quote,verbatim,relative=1]
3340 \override Hairpin #'rotation = #'(20 -1 0)
3345 @node Textbeschriftung drehen
3346 @unnumberedsubsubsec Textbeschriftung drehen
3347 @translationof Rotating markup
3349 Jede Textbeschriftung kann gedreht werden, indem vor die Anweisung
3350 der Befehl @code{\rotate} gesetzt wird. Der Befehl hat zwei
3351 Argumente: Den Winkel der Drehung in Grad gegen den Uhrzeiger und
3352 der Text, der gedreht dargestllt werden soll. Die Ausdehnung des
3353 Textes wird nicht gedreht, sie erhält ihren Wert von den Extrempunkten
3354 der x- und y-Koordinaten des gedrehten Textes. Im folgenden
3355 Beispiel wird die @code{outside-staff-priority}-Eigenschaft auf
3356 @code{#f} gesetzt, damit automatische Zusammenstöße nicht verhindert
3357 werden, wodurch andernfalls einige der Texte zu hoch geschoben werden
3360 @lilypond[quote,verbatim,relative=1]
3361 \override TextScript #'outside-staff-priority = ##f
3362 g4^\markup { \rotate #30 "a G" }
3363 b^\markup { \rotate #30 "a B" }
3364 des^\markup { \rotate #30 "a D-Flat" }
3365 fis^\markup { \rotate #30 "an F-Sharp" }
3369 @node Fortgeschrittene Optimierungen
3370 @section Fortgeschrittene Optimierungen
3371 @translationof Advanced tweaks
3373 Dieser Abschnitt behandelt verschiedene Möglichkeiten, das
3374 Aussehen des Notenbildes zu polieren.
3377 * Objekte ausrichten::
3378 * Vertikale Gruppierung der grafischen Objekte („grob“s)::
3379 * stencils verändern::
3380 * Formen verändern::
3385 Handbuch zum Lernen:
3386 @rlearning{Die Ausgabe verändern},
3387 @rlearning{Mehr Information}.
3390 @ref{Die Referenz der Programminterna erklärt},
3391 @ref{Eigenschaften verändern},
3392 @ref{Schnittstellen für Programmierer}.
3394 Installierte Dateien:
3395 @file{scm/define-grobs.scm}.
3398 @rlsr{Tweaks and overrides}.
3400 Referenz der Interna:
3401 @rinternals{All layout objects}.
3404 @node Objekte ausrichten
3405 @subsection Objekte ausrichten
3406 @translationof Aligning objects
3408 Graphische Objekte, die das @code{self-alignment-interface} und/obder
3409 das @code{side-position-interface} unterstützen, können an einem
3410 vorher gesetzten Objekt auf verschiedene Weise ausgerichtet werden.
3411 Eine Liste derartiger Objekte findet sich in
3412 @rinternals{self-alignment-interface} und @rinternals{side-position-interface}.
3414 Alle graphischen Objekte haben einen Referenzpunkt, eine horizontale
3415 Ausdehnung und eine vertikale Ausdehnung. Die horizontale Ausdehnung ist
3416 ein Zahlenpaar, mit dem die Verschiebung der rechten und linken Ecken
3417 ausgehend vom Referenzpunkt angegeben werden, wobei Verschiebungen
3418 nach links mit negativen Zahlen notiert werden. Die vertikale Ausdehnung
3419 ist ein Zahlenpaar, das die Verschiebung der unteren und oberen
3420 Ränder vom Referenzpunkt ausgehend angibt, wobei Verschiebungen nach
3421 unten mit negativen Zahlen notiert werden.
3423 Die Position eines Objektes auf dem Notensystem wird mit Werten
3424 von @code{X-offset} und @code{Y-offset} angegeben. Der Wert von
3425 @code{X-offset} gibt die Verschiebung von der X-Koordinate des
3426 Referenzpunkts des Elternobjektes an, der Wert von @code{Y-offset}
3427 die Verschiebung ausgehend von der Mittellinie des Notensystemes.
3428 Die Werte von @code{X-offset} und @code{Y-offset} können direkt
3429 bestimmt werden oder durch Prozeduren errechnet werden, sodass
3430 eine Ausrichtung mit dem Elternobjekt erreicht werden kann.
3432 @warning{Viele Objekte brauchen besondere Überlegungen zu ihrer
3433 Position, weshalb in manchen Fällen manuell gesetzte Werte von
3434 @code{X-offset} oder @code{Y-offset} ignoriert oder verändert
3435 werden können, obwohl das Objekt das
3436 @code{self-alignment-interface} unterstützt. Wenn man @code{X-offset}
3437 oder @code{Y-offset} auf einen festen Wert setzt, wird die entsprechende
3438 @code{self-alignment}-Eigenschaft ignoriert.}
3440 Ein Versetzungszeichen beispielsweise kann vertikal durch Veränderung
3441 von @code{Y-offset} verschoben werden, aber Änderungen von
3442 @code{X-offset} haben keine Auswirkung.
3444 Übungszeichen können an trennbaren Objekten (wie Taktstrichen,
3445 Schlüsseln, Taktarten und Tonartvorzeichen) ausgerichtet werden.
3446 In @code{break-aligned-interface} finden sich besondere Eigenschaften,
3447 mit denen Übungszeichen an derartigen Objekten ausgerichtet werden können.
3452 @ref{Benutzung des break-alignable-interface}.
3455 @rextend{Callback functions}.
3459 * X-offset und Y-offset direkt setzen::
3460 * Das side-position-interface benutzen::
3461 * Das self-alignment-interface benutzen::
3462 * Benutzung des break-alignable-interface::
3465 @node X-offset und Y-offset direkt setzen
3466 @unnumberedsubsubsec @code{X-offset} und @code{Y-offset} direkt setzen
3467 @translationof Setting X-offset and Y-offset directly
3469 Numerische Werte können den @code{X-offset}- und @code{Y-offset}-Eigenschaften
3470 vieler Objekte zugewiesen werden. Das folgende Beispiel zeigt
3471 drei Noten mit der Standardposition von Fingersatzanweisungen
3472 und die Positionen, wenn @code{X-offset} und @code{Y-offset}
3475 @lilypond[verbatim,quote,relative=2]
3478 -\tweak #'X-offset #0
3479 -\tweak #'Y-offset #0
3482 -\tweak #'X-offset #-1
3483 -\tweak #'Y-offset #1
3489 @node Das side-position-interface benutzen
3490 @unnumberedsubsubsec Das @code{side-position-interface} benutzen
3491 @translationof Using the side-position-interface
3493 Ein Objekt, das die @code{side-position-interface}-Schnittstelle
3494 unterstützt, kann neben sein Elternobjekt gesetzt werden,
3495 sodass zwei definierte Enden der Objekte sich berühren.
3496 Das Objekt kann über, unter, rechts oder links vom
3497 Ursprungsobjekt positioniert werden. Das Ursprungsobjekt
3498 kann nicht definiert werden: es ergibt sich aus der Reihenfolge
3499 der Objekte in der Eingabe. Die meisten Objekte haben
3500 einen Notenkopf als Ursprung assoziiert.
3502 Die Werte von @code{side-axis} und @code{direction} bestimmen,
3503 wo das Objekt platziert werden soll, wie in der Tabelle
3506 @c TODO add an example of each to the table
3508 @multitable @columnfractions .3 .3 .3
3509 @headitem @code{side-axis}- @tab @code{direction}- @tab
3510 @headitem Eigenschaft @tab Eigenschaft @tab Platzierung
3512 @item @code{0} @tab @code{-1} @tab links
3513 @item @code{0} @tab @code{1} @tab rechts
3514 @item @code{1} @tab @code{-1} @tab unten
3515 @item @code{1} @tab @code{1} @tab oben
3519 Wenn @code{side-axis} gleich @code{0} ist, sollte @code{X-offset}
3520 auf die Prozedur @code{ly:side-position-interface::x-aligned-side}
3521 gesetzt werden. Diese Prozedur errechnet den richtigen Wert für
3522 @code{X-offset}, sodass das Objekt auf der rechten oder linken
3523 Seite des Ursprungs angeordnet wird, entsprechend dem Wert
3524 der @code{direction}-Eigenschaft.
3526 Wenn @code{side-axis} gleich @code{1} ist, sollte @code{Y-offset}
3527 auf die Prozedur @code{ly:side-position-interface::y-aligned-side}
3528 gesetzt werden. Diese Prozedur errechnet den richtigen Wert für
3529 @code{Y-offset}, sodass das Objekt über oder unter dem Ursprungsobjekt
3530 angeordnet wird, entsprechend dem Wert der @code{direction}-Eigenschaft.
3535 @node Das self-alignment-interface benutzen
3536 @unnumberedsubsubsec Das @code{self-alignment-interface} benutzen
3537 @translationof Using the self-alignment-interface
3539 @emph{Selbstausrichtende Objekte horizontal}
3541 Die horizontale Ausrichtung eines Objektes, das die
3542 @code{self-alignment-interface}-(Selbstausrichtungs)-Schnittstelle
3543 unterstützt, wird durch den Wert von @code{self-alignment-X}
3544 kontrolliert, vorausgesetzt die Eigenschaft @code{X-offset} des
3545 Objektes ist auf @code{ly:self-alignment-interface::x-aligned-on-self}
3546 gesetzt. @code{self-alignment-X} kann eine beliebige reale
3547 Zahl zugewiesen werden, in Einheiten der Hälfte der
3548 X-Gesamtausdehnung des Objekts. Negative Werte verschieben
3549 das Objekt nach rechts, positive nach links. Ein Wert von
3550 @code{0} zentriert das Objekt auf dem Referenzpunkt des
3551 Ursprungs, ein Wert von @code{-1} richtet die linke Ecke des
3552 Objekts am Referenzpunkt des Ursprungsobjektes aus, ein
3553 Wert von @code{1} richtet die rechte Ecke des Objektes am
3554 Referenzpunkt des Ursprungsobjektes aus. Die Symbole
3555 @code{LEFT}, @code{CENTER} und @code{RIGHT} können anstelle
3556 von @code{-1, 0, 1} eingesetzt werden.
3558 Normalerweise würde der @code{\override}-Befehl benutzt werden, um
3559 die Werte von @code{self-alignment-X} zu verändern, aber der
3560 @code{\tweak}-Befehl kann benutzen, um verschiedene Anmerkungen
3561 an einer einzigen Note auszurichten:
3563 @lilypond[quote,verbatim,relative=1]
3565 -\tweak #'self-alignment-X #-1
3567 -\tweak #'self-alignment-X #0
3569 -\tweak #'self-alignment-X #RIGHT
3571 -\tweak #'self-alignment-X #-2.5
3572 ^"aligned further to the right"
3576 @emph{Objekte vertikal automatisch ausrichten}
3578 Objekte können auf ähnliche Weise auch vertikal aneinander
3579 ausgerichtet werden, wenn ihre @code{Y-offset}-Eigenschaft
3580 auf @code{ly:self-alignment-interface::y-aligned-on-self}
3581 gesetzt ist. Oft greifen jedoch auch andere Mechanismen
3582 bei der vertikalen Ausrichtung ein: Der Wert von
3583 @code{Y-offset} ist nur eine der Variablen, die für die
3584 Berechnung benutzt werden. Darum ist es kompliziert, den
3585 Wert für einige Objekte richtig anzupassen. Die Einheiten
3586 sind Halbe der vertikalen Ausdehnung des Objektes, welche
3587 normalerweise recht klein ist, sodass ziemlich große Werte
3588 erforderlich sein können. Der Wert @code{-1} richtet die
3589 untere Kante des Objekts am Referenzpunkt des Ursprungsobjektes
3590 aus, der Wert @code{0} richtet die Mitte des Objekts am
3591 Referenzpunkt des Ursprungsobjektes aus und der Wert @code{1}
3592 richtet die Oberkante des Objektes am Referenzpunkt des
3593 Ursprungsobjektes aus. Die Symbole @code{DOWN}, @code{CENTER}
3594 und @code{UP} können anstelle von @code{-1, 0, 1} benutzt
3597 @emph{Automatische Ausrichtung in beide Richtungen}
3599 Indem sowohl @code{X-offset} als auch @code{Y-offset} eingestellt
3600 werden, kann ein Objekt gleichzeitig in beiden Richtungen ausgerichtet
3603 Das folgende Beispiel zeigt, wie man eine Fingersatzanweisung so
3604 ausrichtet, dass sie nah am Notenkopf bleibt.
3606 @lilypond[quote,verbatim,relative=2]
3608 -\tweak #'self-alignment-X #0.5 % move horizontally left
3609 -\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self
3610 -\tweak #'self-alignment-Y #-1 % move vertically up
3617 @node Benutzung des break-alignable-interface
3618 @unnumberedsubsubsec Benutzung des @code{break-alignable-interface}
3619 @translationof Using the break-alignable-interface
3621 @cindex Ausrichtung an Objekten
3623 @funindex break-align-symbols
3625 Übungszeichen und Taktzahlen können an Notationsobjekten (ausschließlich
3626 Taktstriche) ausgerichtet werden. Zu diesen Objekten gehören
3627 @code{ambitus}, @code{breathing-sign}, @code{clef}, @code{custos},
3628 @code{staff-bar}, @code{left-edge}, @code{key-cancellation},
3629 @code{key-signature} und @code{time-signature}.
3631 Standardmäßig werden Übungszeichen und Taktzahlen horizontal
3632 über dem Objekt zentriert:
3634 @lilypond[verbatim,quote,relative=1]
3635 % The RehearsalMark will be centered above the Clef
3636 \override Score.RehearsalMark #'break-align-symbols = #'(clef)
3641 % The RehearsalMark will be centered above the TimeSignature
3642 \override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
3648 % The rehearsal mark will be centered above the Breath Mark
3649 \override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign)
3658 Eine Liste von möglichen Objekten zur Ausrichtung kann definiert
3659 werden. Wenn eins dieser Objekte an der aktuellen Stelle unsichtbar
3660 ist (etwa durch Einstellung von @code{break-visibility} oder die
3661 expliziten Sichtbarkeitseinstellungen von Taktart und Vorzeichen),
3662 werden Übungszeichen und Taktzahlen an dem ersten Objekt in der
3663 Liste ausgerichtet, dass sichtbar ist. Wenn keine Objekte in der
3664 Liste sichtbar sind, wird das Objekt am Taktstrich ausgerichtet.
3665 Wenn der Taktstrich unsichtbar ist, wird das Objekt an der Stelle
3666 ausgerichtet, an der sich der Taktstrich befinden würde.
3668 @lilypond[verbatim,quote,relative=1]
3669 % The RehearsalMark will be centered above the Key Signature
3670 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3675 % The RehearsalMark will be centered above the Clef
3676 \set Staff.explicitKeySignatureVisibility = #all-invisible
3677 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3682 % The rehearsal mark will be centered above the Bar Line
3683 \set Staff.explicitKeySignatureVisibility = #all-invisible
3684 \set Staff.explicitClefVisibility = #all-invisible
3685 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
3693 Die Ausrichtung des Übungszeichen relativ zum Notationsobjekt kann
3694 verändert werden, wie das nächste Beispiel zeigt. In einer Partitur
3695 mit vielen Systemen würde man diese Einstellung für alle Systeme
3698 @lilypond[verbatim,quote,relative=1]
3699 % The RehearsalMark will be centered above the KeySignature
3700 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
3706 % The RehearsalMark will be aligned with the left edge of the KeySignature
3707 \once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
3711 % The RehearsalMark will be aligned with the right edge of the KeySignature
3712 \once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
3718 Das Übungszeichen kann auch nach rechts oder links um einen beliebigen Wert
3719 verschoben werden. Die Einheiten sind in Notenlinienzwischenräumen:
3721 @lilypond[verbatim,quote,relative=1]
3722 % The RehearsalMark will be aligned with the left edge of the KeySignature
3723 % and then shifted right by 3.5 staff-spaces
3724 \override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
3725 \once \override Score.KeySignature #'break-align-anchor = #3.5
3729 % The RehearsalMark will be aligned with the left edge of the KeySignature
3730 % and then shifted left by 2 staff-spaces
3731 \once \override Score.KeySignature #'break-align-anchor = #-2
3739 @node Vertikale Gruppierung der grafischen Objekte („grob“s)
3740 @subsection Vertikale Gruppierung der grafischen Objekte („grob“s)
3741 @translationof Vertical grouping of grobs
3743 Die graphischen Objekte @code{VerticalAlignment} und
3744 @code{VerticalAxisGroup} funktionieren zusammen.
3745 @code{VerticalAxisGroup} gruppiert unterschiedliche Objekte
3746 wie Notensysteme, Gesangstext usw. zusammen.
3747 @code{VerticalAlignment} richtet die unterschiedlichen
3748 Objektgruppen dann aneinander aus. Es gibt normalerweise
3749 nur ein @code{VerticalAlignment} in einer Partitur, aber
3750 jedes Notensystem, Gesangstext usw. hat eine eigene
3751 @code{VerticalAxisGroup}.
3754 @node stencils verändern
3755 @subsection stencils verändern
3756 @translationof Modifying stencils
3758 Alle Layout-Objekte haben eine @code{stencil}-(Stempel-)Eigenschaft,
3759 die ein Teil von @code{grob-interface} ist. Diese Eigenschaft
3760 ist normalerweise als eine Funktion definiert, die auf das jeweilige
3761 Objekt angepasst ist und das Symbol erstellt, dass dann im Druckbild
3762 erscheint. Beispielsweise die Standardeinstellung für die
3763 @code{stencil}-Eigenschaft von @code{MultiMeasureRest}
3764 (Ganztaktpausenobjekt) ist @code{ly:multi-measure-rest::print}.
3766 Das Standardsymbol für jedes Objekt kann ersetzt werden, indem man
3767 die @code{stencil}-Eigenschaft verändert, sodass sie auf eine
3768 andere, speziell geschriebene Prozedur verweist. Das erfordert
3769 einen hohen Grad an Kenntnis der LilyPond-Interna, aber es gibt
3770 einen einfacheren Weg, mit dem man oft vergleichbarere Ergebnisse
3773 Dieser Weg besteht darin, die @code{stencil}-Eigenschaft auf die
3774 Prozedur zu verweisen, die Text ausgibt: @code{ly:text-interface::print}
3775 und eine @code{text}-Eigenschaft zu dem Objekt hinzuzufügen,
3776 in welcher dann die Textbeschriftung definiert wird, mit der
3777 das entsprechende Symbol dargestellt wird. Aufgrund der
3778 Flexibilität der Textbeschriftung ist hier sehr viel möglich.
3779 Siehe zu Details insbesondere
3780 @ref{Graphische Notation innerhalb einer Textbeschriftung}.
3782 Das folgende Beispiel zeigt diese Methode, indem das Symbol
3783 der Notenköpfe in ein Kreuz innerhalb eines Kreises umgewandelt
3786 @lilypond[verbatim,quote]
3788 \once \override NoteHead #'stencil = #ly:text-interface::print
3789 \once \override NoteHead #'text = \markup {
3791 \halign #-0.7 \draw-circle #0.85 #0.2 ##f
3792 \musicglyph #"noteheads.s2cross"
3800 Alle Schriftzeichen in der feta-Schriftart können
3801 mit dem @code{\musicglyph}-Befehl erreicht werden.
3802 Siehe auch @ref{Die Feta-Schriftart}.
3808 @ref{Graphische Notation innerhalb einer Textbeschriftung},
3809 @ref{Text formatieren},
3810 @ref{Textbeschriftungsbefehle},
3811 @ref{Die Feta-Schriftart}.
3815 @node Formen verändern
3816 @subsection Formen verändern
3817 @translationof Modifying shapes
3823 @node Bögen verändern
3824 @unnumberedsubsubsec Bögen verändern
3825 @translationof Modifying ties and slurs
3827 @cindex Bögen, verändern
3828 @cindex Bindebögen, verändern
3829 @cindex Legatobögen, verändern
3830 @cindex Bézier-Kurven
3831 @cindex Kontrollpunkte, Bézier-Kurven
3833 Binde-, Legato- und Phrasierungsbögen werden als Bézierkurven
3834 dritter Ordnung gezeichnet. Wenn die Form eines automatischen
3835 Bogens nicht optimal ist, kann sie manuell verändert werdne,
3836 indem man die vier erforderlichen Kontrollpunkte angibt.
3838 Bézierkurven dritter Ordnung (auch als quadratische Bézierkurven
3839 bezeichnet) werden durch vier Kontrollpunkte definiert. Der
3840 erste und vierte Kontrollpunkt geben Beginn und Ende der Kurve
3841 an. Die zwei Punkte dazwischen werden benutzt, um die Form
3842 der Kurve zu bestimmen. Im Internet gibt es Animationen,
3843 die illustrieren, wie eine derartige Kurve gezeichnet wird,
3844 aber die folgende Beschreibung kann hilfreich sein. Die
3845 Kurve beginnt am ersten Kontrollpunkt in Richtung des zweiten,
3846 wobei sie sich schrittweise krümmt um zum dritten Kontrollpunkt
3847 zu gelangen, von wo aus sie sich weiter zum vierten Punkt hin
3848 krümmt. Die Form der Kurve wird vollständig von den vier
3851 Hier ein Beispiel eines Falles, in dem der Bogen nicht optimal
3852 erscheint, und wo auch @code{\tieDown} das Problem nicht
3855 @lilypond[verbatim,quote,relative=1]
3859 { r4 <g c,> <g c,> <g c,> }
3863 Eine Möglichkeit, diesen Bogen zu verbessern, ist es, seine
3864 Kontrollpunkte manuell zu verändern:
3866 Die Koordinaten von Bézierkontrollpunkten werden in
3867 Notenlinienzwischenräumen angegeben. Die X-Achse
3868 ist relativ zum Referenzpunkt der Note, an die der Bogen
3869 angefügt wird, und die Y-Achse relativ zur Mittellinie
3870 des Notensystems. Die Koordinaten werden als eine Liste
3871 von vier Paaren an realen Dezimalzahlen eingegeben. Eine
3872 Möglichkeit ist es, die Koordinaten der zwei Endpunkte
3873 zu schätzen und dann die zwei Zwischenpunkte zu erraten.
3874 Die optimalen Werte können nur durch Ausprobieren gefunden
3877 Es lohnt sich daran zu denken, dass eine symmetrische Kurve
3878 symmetrische Kontrollpunkte benötigt, und dass Bézierkurven
3879 die nützliche Eigenschaft haben, dass eine Transformation
3880 der Kurve wie eine Übersetzung, Drehung oder Skalierung
3881 der Kurve erreicht werden kann, indem man die gleiche
3882 Skalierung auf die Kontrollpunkte anwendet.
3884 In dem obigen Beispiel geben folgende Werte einen
3885 zufriedenstellenden Bogen -- Achtung: der Befehl muss direkt
3886 vor dem Beginn der Note gesetzt werden, an die der (Binde-)Bogen angehängt
3889 @lilypond[verbatim,quote,relative=1]
3893 #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
3897 { r4 <g c,> <g c,> <g c,>4 }
3903 Es ist nicht möglich, die Form von Bögen anhand ihrer
3904 @code{control-points}-Eigenschaft zu verändern, wenn
3905 mehr als ein Bogen zum gleichen musikalischen Moment
3906 auftritt, nicht einmal mit dem @code{\tweak}-Befehl.
3910 @node Musikfunktionen benutzen
3911 @section Musikfunktionen benutzen
3912 @translationof Using music functions
3914 @c TODO -- add @seealso, etc. to these subsections
3916 Wenn Optimierungen von unterschiedlichen musikalischen Ausdrücken
3917 wiederverwendet werden sollen, bietet es sich oft an, den
3918 @qq{Optimierungsanteil} einer @emph{musikalischen Funktion} zu
3919 erstellen. In diesem Abschnitt sollen nur @emph{Ersetzungen}
3920 erklärt werden, wo es darum geht, eine Variable mit einem Stück
3921 LilyPond-Code zu ersetzen. Andere komplexere Funktionen werden
3922 beschrieben in @rextend{Musikalische Funktionen}.
3925 * Syntax der Ersetzungsfunktion::
3926 * Beispiele der Ersetzungsfunktion::
3929 @node Syntax der Ersetzungsfunktion
3930 @subsection Syntax der Ersetzungsfunktion
3931 @translationof Substitution function syntax
3933 Es ist einfach eine Funktion zu erstellen, die eine Variable
3934 in LilyPond-Code umwandelt. Die generelle Form dieser
3939 #(define-music-function
3940 (parser location @var{Arg1} @var{Arg2} @dots{})
3941 (@var{Typ1?} @var{Typ2?} @dots{})
3943 @var{@dots{}Noten@dots{}}
3950 @multitable @columnfractions .33 .66
3951 @item @code{@var{ArgN}}
3952 @tab @var{n}tes Argument
3954 @item @code{@var{TypN?}}
3955 @tab ein Scheme @emph{Typenprädikat}, für das @code{@var{ArgN}}
3956 den Wert @code{#t} ausgibt.
3958 @item @code{@var{@dots{}Noten@dots{}}}
3959 @tab normale LilyPond-Eingab, wobei @code{$} benutzt wird, um
3960 Argumente zu referenzieren (etwa @samp{$Arg1}).
3964 Die @code{parser} und @code{location}-Argumente sind zwingend und
3965 werden in einigen fortgeschrittenen Situationen benutzt, wie sie
3966 im @qq{Erweitern}-Handbuch beschrieben werden (siehe
3967 @rextend{Musikalische Funktionen}). In Ersetzungsfunktionen
3968 gehen Sie einfach sicher, dass sie die beiden Wörter auch mit
3971 Die Liste der Typenprädikate ist auch notwendig. Einige der
3972 häufigsten Typenprädikate, die in musikalischen Funktionen
3973 benutzt werden, sind:
3977 cheap-list? @emph{(benutze anstelle von }@q{list?}@emph{ für schnelleres Kompilieren)}
3987 Eine Liste aller Typprädikate findet sich unter
3988 @ref{Vordefinierte Typprädikate}. Eigene Typprädikate
3995 @ref{Vordefinierte Typprädikate}.
3998 @rextend{Musikalische Funktionen}.
4000 Installierte Dateien:
4001 @file{lily/music-scheme.cc},
4003 @file{scm/lily.scm}.
4006 @node Beispiele der Ersetzungsfunktionen
4007 @subsection Beispiele der Ersetzungsfunktionen
4008 @translationof Substitution function examples
4010 Dieser Abschnitt zeigt einige Beispiele von Ersetzungsfunktionen.
4011 Sie sind nicht vollständig, sondern sollen einige der
4012 Möglichkeiten von einfachen Ersetzungsfunktionen aufzeigen.
4014 Im ersten Beispiel wird eine Funktione definiert, die
4015 das Verschieben von @code{TextScript} erleichtert:
4017 @lilypond[quote,verbatim,ragged-right]
4019 #(define-music-function
4020 (parser location padding)
4023 \once \override TextScript #'padding = $padding
4027 c4^"piu mosso" b a b
4029 c4^"piu mosso" d e f
4031 c4^"piu mosso" fis a g
4035 Neben Zahlen können auch musikalische Ausdrücke wie Noten
4036 als Argumente für musikalische Funktionen eingesetzt werden:
4038 @c TODO: use a better example (the music argument is redundant).
4040 @lilypond[quote,verbatim,ragged-right]
4042 #(define-music-function
4043 (parser location note)
4046 \once \override Voice.NoteHead #'stencil =
4047 #ly:text-interface::print
4048 \once \override Voice.NoteHead #'text =
4049 \markup \musicglyph #"custodes.mensural.u0"
4050 \once \override Voice.Stem #'stencil = ##f
4054 \relative c' { c4 d e f \custosNote g }
4057 Ersetzungsfunktionen mit mehrfachen Argumenten können definiert
4060 @lilypond[quote,verbatim,ragged-right]
4062 #(define-music-function
4063 (parser location padding tempotext)
4066 \once \override Score.MetronomeMark #'padding = $padding
4067 \tempo \markup { \bold $tempotext }
4071 \tempo \markup { "Low tempo" }
4073 \tempoPadded #4.0 #"High tempo"