@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: 64feeff58e5ce3397de87188a08ac99f7ef8e37b
+ Translation of GIT committish: 8819d7cb0ba2ab359e4aa2276695afb9c1957c42
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
Guide, node Updating translation committishes.
@end ignore
-@c \version "2.12.0"
+@c \version "2.19.22"
+@c Translators: ???, Michael Gerdau
-@node Die Ausgabe verändern
-@chapter Die Ausgabe verändern
+@node Die Ausgabe verbessern
+@chapter Die Ausgabe verbessern
@translationof Tweaking output
In diesem Kapitel wird erklärt, wie man die Notenausgabe verändern
-kann. In LilyPond kann man sehr viel konfigurieren, fast jedes
+kann. In LilyPond kann man sehr viel konfigurieren, fast jedes
Notenfragment kann geändert werden.
* Die Referenz der Programminterna::
* Erscheinung von Objekten::
* Positionierung von Objekten::
+* Vertikale Abstände::
* Kollision von Objekten::
* Weitere Optimierungen::
@end menu
-
@node Grundlagen für die Optimierung
@section Grundlagen für die Optimierung
@translationof Tweaking basics
@qq{Optimierung} (engl. tweaking) ist ein LilyPond-Begriff für die
verschiedenen Methoden, die Aktionen zu beeinflussen, die während
der Kompilation einer Notationsdatei vorgenommen werden sowie auf
-das Notenbild einzuwirken. Einige dieser Optimierungen sind sehr
+das Notenbild einzuwirken. Einige dieser Optimierungen sind sehr
einfach, andere dagegen recht komplex. Aber insgesamt erlaubt das
System an Optimierungen so gut wie alle möglichen Erscheinungsformen
für die Notenausgabe.
Bevor Sie mit diesem Kapitel beginnen, könnte Sie ein Blick in den
Abschnitt @ref{Kontexte und Engraver} interessieren, dann
-Kontexte und Engraver sowie die Eigenschaften, die mit ihnen
+Kontexte und Engraver sowie die Eigenschaften, die mit ihnen
verknüpft sind, sind die Voraussetzung, um die Funktionsweise
von Optimierungen verstehen zu können.
@cindex Eigenschaften von Objekten
Optimierung bedeutet, die internen Operationen und Strukturen
-des LilyPond-Programmes zu verändern, darum sollen hier
+des LilyPond-Programms zu verändern, darum sollen hier
zunächst die wichtigsten Begriffe erklärt werden, die zur
Beschreibung dieser Operationen und Strukturen benutzt werden.
eingesetzt werden. Für alle anderen Kontexte gibt es genauso
Objekte, die deren Eigenschaften beinhalten, beispielsweise für
@code{Voice}-Objekte, @code{Score}-Objekte, @code{Lyrics}-Objekte,
-aber auch für Objekte, die Notationselemente wie die Taktlinien,
+aber auch für Objekte, die Notationselemente wie die Taktstriche,
Notenköpfe, Bögen und Dynamikbezeichnung enthalten. Jedes
Objekt hat eine eigene Gruppe an Eigenschaftswerten.
Einige Layout-Objekte sind etwas spezieller. Phrasierungsbögen,
Crescendo-Klammern, Oktavierungszeichen und viele andere
-Grobs sind nicht an einer Stelle plaziert -- sie haben vielmehr
+Grobs sind nicht an einer Stelle platziert -- sie haben vielmehr
einen Anfangspunkt, einen Endpunkt und eventuell noch andere
Eigenschaften, die ihre Form bestimmen. Objekte mit solch
einer erweiterten Gestalt werden als @qq{Strecker} (engl. Spanners)
bezeichnet.
+Darüber hinaus gibt es @q{abstrakte} Grobs, die selbst keinen Ausdruck
+irgendwelcher Art erzeugen. Vielmehr sammeln sie, positionieren oder
+verwalten andere Grobs. Typische Beispiele hierfür sind
+@code{DynamicLineSpanner}, @code{BreakAlignment},
+@code{NoteColumn}, @code{VerticalAxisGroup},
+@code{NonMusicalPaperColumn} und Ähnliche. Wir werden uns später
+mit einigen von ihnen noch näher befassen.
+
Es bleibt uns noch übrig zu erklären, was @qq{Schnittstellen}
(engl. interface) sind. Wenn auch viele Objekte sehr unterschiedlich
-sind, haben sie doch oft gemeinsame Eigenschaften, die auf
+sind, haben sie doch oft gemeinsame Eigenschaften, die auf
die gleiche Weise verarbeitet werden. Alle Grobs beispielsweise
haben eine Farbe, eine Größe, eine Position usw. und alle
diese Eigenschaften werden von LilyPond auf die gleiche Weise
mit der Bezeichnung @code{grob-interface} (Schnittstelle eines
graphischen Objektes) zusammengefasst. Es gibt viele andere
Gruppen gemeinsamer Eigenschaften, die jede eine Bezeichnung
-besitzen, welche auf @code{-interface} endet. Insgesamt
+besitzen, welche auf @code{-interface} endet. Insgesamt
gibt es über 100 dieser Schnittstellen. Wir werden später sehen,
was es damit auf sich hat.
Es wurden schon früher einige Regeln zur Benennung von
Objekten vorgestellt, siehe
@ref{Kontexte und Engraver}. Hier eine Referenzliste der
-häufigsten Objekt- und Eigenschaftsbezeichnungen mit
-den Regeln für ihre Bezeichnung und
+häufigsten Objekt- und Eigenschaftsbezeichnungen mit
+den Regeln für ihre Bezeichnung und
illustrierenden echten Bezeichnungen. Es wurde @qq{A}
für einen beliebigen Großbuchstaben und @qq{aaa} für eine
-beliebige Anzahl an Kleinbuchstaben eingesetzt. Andere
+beliebige Anzahl an Kleinbuchstaben eingesetzt. Andere
Zeichen werden explizit angegeben.
@multitable @columnfractions .33 .33 .33
Es wird bald ersichtlich werden, dass die Eigenschaften von
unterschiedlichen Objekttypen mit unterschiedlichen Befehlen
-geändert werden. Deshalb ist es nützlich, aus der
-Schreibweise zu erkennen, um was
-für ein Objekt es sich handelt, um den entsprechenden
-Befehl einsetzen zu können.
+geändert werden. Deshalb ist es nützlich, bereits am Namen
+den Typ und die Eigenschaften eines Objekts zu erkennen.
@node Optimierungsmethoden
@subsection Optimierungsmethoden
@translationof Tweaking methods
+@cindex Optimierungsmethoden
+
+@menu
+* Der override-Befehl::
+* Der revert-Befehl::
+* Der once-Präfix::
+* Der overrideProperty-Befehl::
+* Der tweak-Befehl::
+* Der single-Präfix::
+@end menu
+
+@node Der override-Befehl
+@unnumberedsubsubsec Der @code{@bs{}override}-Befehl
+@translationof The override command
+
@cindex override-Befehl
@funindex \override
@funindex override
Wir haben uns schon mit den Befehlen @code{\set}
und @code{\with} bekannt gemacht, mit welchen
Eigenschaften von @strong{Kontexten} verändert
-und @strong{Engraver} entfernt oder hinzugefügt
-werden können. Siehe dazu
+und @strong{Engraver} entfernt oder hinzugefügt
+werden können. Siehe dazu
@ref{Kontexteigenschaften verändern} und @ref{Engraver hinzufügen und entfernen}. Jetzt wollen wir uns weitere
wichtige Befehle anschauen.
Der Befehl, um die Eigenschaften von @strong{Layout-Objekten}
zu ändern, ist @code{\override}. Weil dieser Befehl interne
-Eigenschaften tief in der Programmstruktur von LilyPond
+Eigenschaften tief in der Programmstruktur von LilyPond
verändern muss, ist seine Syntax nicht so einfach wie die der
bisherigen Befehle. Man muss genau wissen, welche Eigenschaft
welches Objektes in welchem Kontext geändert werden soll,
Die allgemeine Syntax dieses Befehles ist:
@example
-\override @var{Kontext}.@var{LayoutObjekt} #'@var{layout-eigenschaft} =
-#@var{Wert}
+\override @var{Kontext}.@var{LayoutObjekt}.@var{layout-eigenschaft} = #@var{Wert}
@end example
@noindent
Der @var{Kontext} kann (und wird auch normalerweise) ausgelassen
werden, wenn der benötigte Kontext eindeutig impliziert ist und einer
der untersten Kontexte ist, also etwa @code{Voice}, @code{ChordNames}
-oder @code{Lyrics}. Auch in diesem Text wird der Kontext oft ausgelassen
-werden. Später soll gezeigt werden, in welchen Fällen er ausdrücklich
+oder @code{Lyrics}. Auch in diesem Text wird der Kontext oft ausgelassen
+werden. Später soll gezeigt werden, in welchen Fällen er ausdrücklich
definiert werden muss.
Spätere Abschnitte behandeln umfassend Eigenschaften und ihre
-Werte, aber um ihre Funktion und ihr Format zu demonstrieren,
+Werte, siehe @ref{Typen von Eigenschaften}. Aber um ihre Funktion und ihr
+Format zu demonstrieren,
werden wir hier nur einige einfache Eigenschaften und Werte einsetzen,
die einfach zu verstehen sind.
-Für den Moment könne Sie die @code{#'}-Zeichen ignorieren, die vor jeder
-Layout-Eigenschaft, und die @code{#}-Zeichen, die vor jedem Wert
-stehen. Sie müssen immer in genau dieser Form geschrieben werden.
-Das ist der am häufigsten gebrauchte Befehl für die Optimierung,
-und der größte Teil dieses Abschnittes wird dazu benutzt, seine Benutzung
-zu erläutern. Hier ein einfaches Beispiel, um die Farbe des Notenkopfes
-zu ändern:
+LilyPond's hauptsächliche Ausdrücke sind musikalische Dinge wie Noten,
+Notendauern und Markierungen. Diesen zugrunde liegende Ausdrücke wie
+Zahlen, Zeichenketten und Listen werden im @q{Scheme Modus} verarbeitet.
+Der Präfix @samp{#} leitet diesen Modus ein. Einige dieser Werte haben
+manchmal eine gültige Repräsentation in LilyPond's Musik Modus, in diesem
+Handbuch werden wir aus Gründen der Einheitlichkeit immer das @samp{#}
+für ihre Eingabe verwenden. Weiterführende Informationen zu LilyPond's
+Scheme mode finden sie unter @rextend{LilyPond Scheme-Syntax}.
+
+@code{\override} ist der bei Optimierungen am häufigsten verwendete Befehl.
+Daher wird der Rest dieses Kapitels im Wesentlichen aus Anwendungsbeispielen
+dieses Befehls bestehen. Hier kommt gleich ein einfaches Beispiel
+zur Änderung der Farbe von Notenköpfen:
@cindex color-Eigenschaft, Beispiel
@cindex Farb-Eigenschaft, Beispiel
@cindex NoteHead, Beispiel für override
@cindex Notenkopf, Beispiel für Veränderung
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-c4 d
-\override NoteHead #'color = #red
-e4 f |
-\override NoteHead #'color = #green
-g4 a b c |
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ c'4 d
+ \override NoteHead.color = #red
+ e4 f |
+ \override NoteHead.color = #green
+ g4 a b c |
+}
@end lilypond
-@strong{Der \revert-Befehl}
+@node Der revert-Befehl
+@unnumberedsubsubsec Der @code{@bs{}revert}-Befehl
+@translationof The revert command
@cindex revert-Befehl
+
@funindex \revert
@funindex revert
wird oder ein @code{\revert}-Befehl vorkommt. Der
@code{\revert}-Befehl hat die folgende Syntax und setzt den
Wert der Eigenschaft zurück auf den Standardwert, nicht
-jedoch auf den vorigen Wert, wenn mehrere
+jedoch auf den vorigen Wert, wenn mehrere
@code{\override}-Befehle benutzt wurden.
@example
-\revert @var{Kontext}.@var{LayoutObjekt} #'@var{layout-eigenschaft}
+\revert @var{Kontext}.@var{LayoutObjekt}.@var{layout-eigenschaft}
@end example
Wiederum, genauso wie der @var{Kontext} bei dem @code{\override}-Befehl,
@cindex NoteHead, Beispiel für override
@cindex Notenkopf, Beispiel für Veränderung
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-c4 d
-\override NoteHead #'color = #red
-e4 f |
-\override NoteHead #'color = #green
-g4 a
-\revert NoteHead #'color
-b4 c |
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ c'4 d
+ \override NoteHead.color = #red
+ e4 f |
+ \override NoteHead.color = #green
+ g4 a
+ \revert NoteHead.color
+ b4 c |
+}
@end lilypond
-@strong{\once-Präfix}
+
+@node Der once-Präfix
+@unnumberedsubsubsec Der @code{@bs{}once}-Präfix
+@translationof The once prefix
@funindex \once
@funindex once
Sowohl der @code{\override}-Befehl als auch der @code{\set}-Befehl können mit
-dem Präfix @code{\once} (@emph{einmal}) versehen werden. Dadurch wird
+dem Präfix @code{\once} (@emph{einmal}) versehen werden. Dadurch wird
der folgende @code{\override}- oder @code{\set}-Befehl nur für den aktuellen
-Musik-Moment wirksam, bevor sich wieder der Standard einstellt. Am gleichen
+Musik-Moment wirksam, bevor sich wieder der vorherige Zustand herstellt
+(dieser kann sich vom Standard unterscheiden, wenn etwa noch ein anderer
+@code{\override}-Befehl aktiv ist). Am gleichen
Beispiel demonstriert, kann damit die Farbe eines einzelnen Notenkopfes
geändert werden:
@cindex NoteHead, Beispiel für override
@cindex Notenkopf, Beispiel für Veränderung
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-c4 d
-\once \override NoteHead #'color = #red
-e4 f |
-\once \override NoteHead #'color = #green
-g4 a b c |
+@lilypond[quote,verbatim]
+\relative {
+ c'4 d
+ \override NoteHead.color = #red
+ e4 f |
+ \once \override NoteHead.color = #green
+ g4 a
+ \revert NoteHead.color
+ b c |
+}
@end lilypond
+Der @code{\once} Präfix eignet sich also dazu, die Geltungsdauer eines
+anderen vordefinierten Befehls, dem er vorangestellt ist, auf ein
+einziges musikalisches Ereignis zu beschränken:
-@strong{Der \overrideProperty-Befehl}
+@lilypond[quote,verbatim]
+\relative {
+ c'4( d)
+ \once \slurDashed
+ e4( f) |
+ g4( a)
+ \once \hideNotes
+ b( c) |
+}
+@end lilypond
+
+Allerdings funktioniert das nicht bei vordefinierten Befehlen wie
+@code{\@dots{}Neutral}, @code{\@dots{}Off} oder @code{\un@dots{}}, weil
+diese intern @code{\revert} verwenden und nicht @code{\override}, sodass
+ein @code{\once} Präfix hier keine Auswirkungen hat.
+
+
+@node Der overrideProperty-Befehl
+@unnumberedsubsubsec Der @code{@bs{}overrideProperty}-Befehl
+@translationof The overrideProperty command
@cindex overrideProperty-Befehl
@funindex overrideProperty
Es gibt eine andere Form des @code{override}-Befehls,
-@code{\overrideProperty} (überschreibe Eigenschaft),
-welcher ab und zu benötigt wird. Es wird hier nur der
+@code{\overrideProperty} (überschreibe Eigenschaft),
+welcher ab und zu benötigt wird. Es wird hier nur der
Vollständigkeit halber erwähnt, sein Einsatz wird demonstriert
in @rextend{Schwierige Korrekturen}.
@c Maybe explain in a later iteration -td
-@strong{Der \tweak-Befehl}
+@node Der tweak-Befehl
+@unnumberedsubsubsec Der @code{@bs{}tweak}-Befehl
+@translationof The tweak command
@cindex tweak-Befehl
+
@funindex \tweak
@funindex tweak
Der letzte Optimierungsbefehl in LilyPond ist @code{\tweak}
-(engl. optimieren). Er wird eingesetzt um Eigenschaften
-von Objekten zu verändern, die zum selben Musik-Moment
-auftreten, wie etwa die Noten eines Akkordes. Ein
+(engl. optimieren). Er wird eingesetzt um Eigenschaften
+nur eines Objektes von mehreren Objekten zu verändern,
+die zum selben Musik-Zeitpunkt
+auftreten, wie etwa die Noten eines Akkordes. Ein
@code{\override} würde alle Noten des Akkords beeinflussen,
während mit @code{\tweak} nur das nächste Objekt der
Eingabe geändert wird.
-Hier ein Beispiel. Angenommen, die Größe des mittleren
-Notenkopfes (ein E) in einem C-Dur-Akkord soll geändert
-werden. Schauen wir zuerst, was wir mit
+Hier ein Beispiel. Angenommen, die Größe des mittleren
+Notenkopfes (ein E) in einem C-Dur-Akkord soll geändert
+werden. Schauen wir zuerst, was wir mit
@code{\once \override} erhalten:
@cindex Schriftgröße, Beispiel
@cindex NoteHead, Beispiel für override
@cindex Notenkopf, Beispiel für Veränderung
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-<c e g>4
-\once \override NoteHead #'font-size = #-3
-<c e g>4
-<c e g>4
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ <c' e g>4
+ \once \override NoteHead.font-size = #-3
+ <c e g>4
+ <c e g>4
+}
@end lilypond
-Wie man sehen kann, beeinflusst @code{override} @emph{alle}
-Notenköpfe des Akkordes. Das liegt daran, dass alle die Noten
+Wie man sehen kann, beeinflusst @code{override} @emph{alle}
+Notenköpfe des Akkordes. Das liegt daran, dass alle die Noten
eines Akkordes zum selben Musik-Moment auftreten und
die Funktion von @code{\once} ist es, die Optimierung auf
an allen Objekten auszuführen, die zum selben Musik-Moment
auftreten wie der @code{\override}-Befehl.
Der @code{\tweak}-Befehl funktioniert anders. Er bezieht sich
-auf das direkt folgende Element in der Eingabe-Datei. Es wirkt
-aber auch nur mit Objekten, die direkt von der Eingabe kreiert
-werden, insbesondere Notenköpfe und Artikulationszeichen.
-Objekte wie etwa Hälse oder Versetzungszeichen werden erst
-später erstellt und lassen sich nicht auf diese Weise ändern.
-Zusätzlich @emph{müssen} sich etwa Notenköpfe innerhalb
-eines Akkordes befinden, d. h. sie müssen von einfachen spitzen
-Klammern umschlossen sein. Um also eine einzelne Note
-mit @code{\tweak} zu verändern, muss der Befehl innerhalb
-der spitzen Klammern zusammen mit der Note eingegeben werden.
+auf das direkt folgende Element in der Eingabe-Datei. In seiner
+einfachsten Form ist der Befehl nur an Objekten wirksam, die direkt
+vom vorhergehenden Element erstellt worden sind, insbesondere
+Notenköpfe und Artikulation.
Um also zu unserem Beispiel zurückzukommen, könnte man die
mittlere Note eines Akkordes auf diese Weise ändern:
@cindex Schriftgröße, Beispiel
@cindex @code{\tweak}-Beispiel
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-<c e g>4
-<c \tweak #'font-size #-3 e g>4
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ <c' e g>4
+ <c \tweak font-size #-3 e g>4
+}
@end lilypond
Beachten Sie, dass die Syntax des @code{\tweak}-Befehls sich
-von der des @code{\override}-Befehls unterscheidet. Weder
-Kontext noch Layout-Objekt können angegeben werden, denn
-das würde zu einem Fehler führen. Beide Angaben sind
-durch das folgende Element impliziert. Hier sollte auch
+von der des @code{\override}-Befehls unterscheidet. Der
+Kontext dürfen nicht angegeben werden, denn
+das würde zu einem Fehler führen. Sowohl Kontext als auch das Layout-Objekt sind
+durch das folgende Element im Inputstream impliziert. Hier sollte auch
kein Gleichheitszeichen vorhanden sein. Die verallgemeinerte
-Syntax des @code{\tweak}-Befehls ist also einfach
+Syntax des @code{\tweak}-Befehls ist also
@example
-\tweak #'@var{layout-eigenschaft} #@var{Wert}
+\tweak @var{layout-eigenschaft} #@var{Wert}
@end example
-Ein @code{\tweak}-Befehl kann auch benutzt werden, um nur
+Ein @code{\tweak}-Befehl kann auch benutzt werden, um nur
eine von mehreren Artikulationen zu ändern, wie im nächsten
Beispiel zu sehen ist.
@cindex Farb-Eigenschaft, Beispiel
@cindex @code{\tweak}-Beispiel
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-a4^"Black"
- -\tweak #'color #red ^"Red"
- -\tweak #'color #green _"Green"
+@lilypond[quote,fragment,ragged-right,verbatim]
+a'4^"Black"
+ -\tweak color #red ^"Red"
+ -\tweak color #green _"Green"
@end lilypond
@noindent
-Beachten Sie, dass dem @code{\tweak}-Befehl ein Artikulationsmodifikator
-vorangestellt werden muss, ganz als ob er selbst ein Artikulationszeichen
-wäre.
+Beachten Sie, dass ein Artikulationsmodifikator vor dem @code{\tweak}-Befehl
+geschrieben werden muss, weil auch der @code{\tweak}-Ausdruck als
+Artikulation angefügt wird. Im Falle von mehreren Richtungsmodifikatoren
+(@code{^} or @code{_}) gilt der Modifikator links außen, weil er als
+letzter angefügt wird.
+
+@cindex @code{\tweak}, Versetzungszeichen
+@cindex @code{\tweak}, bestimmtes Layout-Objekt
+
+Objekte wie Hälse und Versetzungszeichen werden später erstellt und nicht
+direkt aus dem vorhergehenden Ereignis. Es ist dennoch möglich, @code{\tweak}
+mit solchen indirekt erstelltn Objekten zu verwenden, indem man die
+Layout-Objekte direkt benennt, vorausgesetzt dass LilyPond ihre Herkunft
+bis zu dem ursprünglichen Ereignis zurück verfolgen kann:
+
+@lilypond[quote,fragment,ragged-right,verbatim]
+<\tweak Accidental.color #red cis''4
+ \tweak Accidental.color #green es''
+ g''>
+@end lilypond
+
+Diese Langform des @code{\tweak}-Befehls kann wie folgend beschrieben werden:
+
+@example
+\tweak @var{layout-object}.@var{layout-property} @var{value}
+@end example
@cindex Triolen, geschachtelt
@cindex N-tolen, geschachtelt
@cindex Triolenklammer
@cindex N-tolenklammer
@cindex Komplizierte Rhythmen, Schachtelung von
+
@funindex TupletBracket
Der @code{\tweak}-Befehl muss auch benutzt werden, wenn das
erste Triolenklammer zum selben Zeitpunkt, sodass ein
@code{\override}-Befehl sich auf beide beziehen würde.
In dem Beispiel wird @code{\tweak} benutzt, um zwischen
-ihnen zu unterscheiden. Der erste @code{\tweak}Befehl
+ihnen zu unterscheiden. Der erste @code{\tweak}Befehl
gibt an, dass die lange Klammer über den Noten gesetzt
werden soll, und der zweite, dass die Zahl der rhythmischen
Aufteilung für die erste der kurzen Klammern in rot
@cindex color-Eigenschaft, Beispiel
@cindex direction-Eigenschaft, Beispiel
-@lilypond[quote,ragged-right,verbatim,fragment,relative=2]
-\tweak #'direction #up
-\times 4/3 {
- \tweak #'color #red
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+@lilypond[quote,ragged-right,verbatim]
+\relative c'' {
+ \tweak direction #up
+ \tuplet 3/4 {
+ \tweak color #red
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ }
}
@end lilypond
-Wenn geschachtelte N-tolen nicht zum gleichen Zeitpunkt
+Wenn geschachtelte N-tolen nicht zum gleichen Zeitpunkt
beginnen, kann ihr Aussehen auf die übliche Art mit dem
@code{\override}-Befehl geändert werden:
@c NOTE Tuplet brackets collide if notes are high on staff
@c See issue 509
-@lilypond[quote,ragged-right,verbatim,fragment,relative=1]
-\times 2/3 { c8[ c c] }
-\once \override TupletNumber
- #'text = #tuplet-number::calc-fraction-text
-\times 2/3 {
- c8[ c]
- c8[ c]
- \once \override TupletNumber #'transparent = ##t
- \times 2/3 { c8[ c c] }
- \times 2/3 { c8[ c c] }
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ \tuplet 3/2 { c'8[ c c] }
+ \once \override TupletNumber.text = #tuplet-number::calc-fraction-text
+ \tuplet 3/2 {
+ c8[ c]
+ c8[ c]
+ \once \override TupletNumber.transparent = ##t
+ \tuplet 3/2 { c8[ c c] }
+ \tuplet 3/2 { c8[ c c] }
+ }
}
@end lilypond
Notationsreferenz:
@ruser{Der tweak-Befehl}.
+@node Der single-Präfix
+@unnumberedsubsubsec Der @code{@bs{}single}-Präfix
+@translationof The single prefix
+
+@funindex \single
+@cindex tweak, von override erzeugt
+
+Nehmen wir einmal an, wir möchten bestimmte Noten betonen, indem wir ihre
+Köpfe rot einfärben und sie außerdem vergrößern. Damit das einfach zu
+machen ist nehmen wir ferner an, wir hätten dafür eine Funktion definiert:
+
+@lilypond[quote,verbatim]
+emphNoteHead = {
+ \override NoteHead.color = #red
+ \override NoteHead.font-size = 2
+}
+\relative {
+ c''4 a \once \emphNoteHead f d |
+}
+@end lilypond
+
+Der @code{\once} Präfix funktioniert wunderbar, wenn es darum geht einzelne
+Noten oder ganze Akkorde zu betonen, jedoch versagt er, gilt es eine einzelne
+Note @emph{innerhalb} eines Akkordes zu betonen. Wir haben schon gesehen,
+wie @code{\tweak} dennoch dazu gebracht werden kann, siehe
+@ref{Der tweak-Befehl,,Der @code{@bs{}tweak}-Befehl}. Aber
+@code{\tweak} kann nicht auf eine Funktion angewandt werden; hier
+kommt @code{\single} ins Spiel:
+
+@lilypond[quote,verbatim]
+emphNoteHead = {
+ \override NoteHead.color = #red
+ \override NoteHead.font-size = 2
+}
+\relative {
+ <c'' a \single \emphNoteHead f d>4
+}
+@end lilypond
+
+Zusammenfassend kann man sagen, @code{\single} wandelt overrides in tweaks
+sodass bei mehreren zeitgleichen musiklaischen Objekten (wie die Notenköpfe
+eines Akkords), man mit @code{\single} lediglich ein einzelnes Objekt
+beeinflusst, nämlich dasjenige, was im direkt folgenden musikalischen
+Ausdruck steckt. Das ist anders, als @code{\once}, welches alle diese
+Objekte beträfe.
+
+Man kann so @code{\single} dafür verwenden, jede kleine Funktion, die
+lediglich overrides enthält auf einzelne Noten innerhalb eines Akkords
+anzuwenden. Es sei jedoch darauf hingewiesen, @code{\single} wandelt
+weder @code{\revert}, noch noch @code{\set} oder @code{\unset} in tweaks.
+
+@seealso
+Handbuch zum Lernen:
+@ref{Der tweak-Befehl,,Der @code{@bs{}tweak}-Befehl},
+@ref{Variablen für Layout Anpassungen einsetzen}.
+
@node Die Referenz der Programminterna
@section Die Referenz der Programminterna
@translationof The Internals Reference manual
+@cindex Referenz der Programminterna
+@cindex Programminterna, Referenz
+
@menu
* Eigenschaften von Layoutobjekten::
-* Eigenschaften, die Schnittstellen besitzen können::
+* Eigenschaften die Schnittstellen besitzen können::
* Typen von Eigenschaften::
@end menu
Angenommen, in Ihrer Partitur tritt ein Legatobogen
auf, der Ihrer Meinung nach zu dünn ausgefallen ist.
-Sie würden ihn gerne etwas schwerer gezeichnet
+Sie würden ihn gerne etwas schwerer gezeichnet
sehen. Wie gehen Sie vor? Von den Anmerkungen in
früheren Abschnitten wissen Sie schon, dass LilyPond
sehr flexibel ist und eine derartige Modifikation
dass ein @code{\override}-Befehl angebracht ist.
Aber gibt es eine Eigenschaft für die Dicke eines
Legatobogens (engl. slur), und wenn es sie gibt,
-auf welche Weise lässt sie sich verändern? Hier
+auf welche Weise lässt sie sich verändern? Hier
kommt die Referenz der Interna zur Geltung. Dort
finden sich alle Informationen, um den beschriebenen
und alle anderen @code{\override}-Befehle zu
@c Mozart, Die Zauberflöte Nr. 7 Duett
-@lilypond[quote,verbatim,relative=2]
+@lilypond[quote,verbatim]
{
\key es \major
\time 6/8
- {
- r4 bes8 bes[( g]) g |
+ \relative {
+ r4 bes'8 bes[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
}
wir in der Referenz der Interna ( kurz IR) nachschauen.
Die IR für die LilyPond-Version, die Sie benutzen, findet sich
-auf der LilyPond-Webseite unter der Adresse
+auf der LilyPond-Webseite unter der Adresse
@uref{http://lilypond.org}. Gehen Sie zur Dokumentationsseite
und klicken Sie auf den Link zur Referenz der Interna.
@c Addition for German users
-Die Sprache ändert sich ab hier nach englisch. Für diese Übung
+Die Sprache ändert sich ab hier nach englisch. Für diese Übung
sollten Sie die HTML-Version benutzen, nicht die
@qq{auf einer großen Seite} oder die PDF-Version.
Damit Sie die nächsten Absätze verstehen können, müssen Sie
Unter der Überschrift @strong{Top} befinden sich fünf Links.
Wählen Sie den Link zum @emph{Backend}, wo sich die Information
-über Layout-Objekte befindet. Hier, unter der Überschrift
+über Layout-Objekte befindet. Hier, unter der Überschrift
@strong{Backend}, wählen Sie den Link @emph{All layout objects}.
Die Seite, die sich öffnet, enthält ein Liste aller Layout-Objekte,
-die in Ihrerer LilyPond-Version benutzt werden, in alphabetischer
+die in Ihrer LilyPond-Version benutzt werden, in alphabetischer
Ordnung. Wählen Sie den Link @emph{Slur} und die Eigenschaften
der Legatobögen (engl. slur) werden aufgelistet.
Eine alternative Methode, auf diese Seite zu gelangen, ist von
-der Notationsreferenz aus. Auf einer der Seiten zu Legatobögen
-findet sich ein Link zur Referenz der Interna. Dieser Link führt
-Sie direkt auf diese Seite. Wenn Sie aber eine Ahnung haben,
+der Notationsreferenz aus. Auf einer der Seiten zu Legatobögen
+findet sich ein Link zur Referenz der Interna. Dieser Link führt
+Sie direkt auf diese Seite. Wenn Sie aber eine Ahnung haben,
wie die Bezeichnung des Layout-Objektes lauten könnte, das sie
-ändern wollen, ist es oft schneller, direkt zur IR zu gehen und
+ändern wollen, ist es oft schneller, direkt zur IR zu gehen und
dort nachzuschlagen.
-Aus der Slur-Seite in der IR könne wir entnehmen, dass
+Der Slur-Seite in der IR können wir entnehmen, dass
Legatobögen (Slur-Objekte) durch den Slur_engraver erstellt
-werden. Dann werden die Standardeinstellungen aufgelistet.
-Beachten Sie, dass diese @strong{nicht} in alphabetischer Reihenfolge
-geordnet sind. Schauen Sie sich die Liste an, ob sie eine Eigenschaft
+werden. Dann werden die Standardeinstellungen aufgelistet.
+Schauen Sie sich die Liste an, ob sie eine Eigenschaft
enthält, mit der die Dicke von Legatobögen kontrolliert werden kann.
Sie sollten folgendes finden:
@end example
Das sieht ganz danach aus, als ob damit die Dicke geändert
-werden kann. Es bedeutet, dass der Wert von
+werden kann. Es bedeutet, dass der Wert von
@code{thickness} einfach eine Zahl (@emph{number}) ist,
dass der Standardwert 1.2 ist, und dass die Einheit
für die Dicke eine andere Eigenschaft mit der
Wie schon früher gesagt, gibt es wenig bis gar keine Erklärungen
in der IR, aber wir haben schon genug Informationen, um
-zu versuchen, die Dicke eines Legatobogens zu ändern. Die
-Bezeichnung des Layout-Objekts ist offensichtlich
-@code{Slur} und die Bezeichnung der Eigenschaft, die geändert
-werden soll
-@code{thickness}. Der neue Wert sollte etwas mehr als 1.2 sein,
+zu versuchen, die Dicke eines Legatobogens zu ändern. Die
+Bezeichnung des Layout-Objekts ist offensichtlich @code{Slur}
+und die Bezeichnung der Eigenschaft, die geändert werden soll
+@code{thickness}. Der neue Wert sollte etwas mehr als 1.2 sein,
denn der Bogen soll ja dicker werden.
Den benötigten @code{\override}-Befehl können wir jetzt einfach
konstruieren, indem wir die Werte für die Bezeichnungen in den
-Modellbefehl einfügen und den Kontext auslassen. Setzen wir
+Modellbefehl einfügen und den Kontext auslassen. Setzen wir
einmal einen sehr großen Wert für die Dicke um zu sehen, ob der
-Befehl auch funktioniert. Also:
+Befehl auch funktioniert. Also:
@example
-\override Slur #'thickness = #5.0
+\override Slur.thickness = #5.0
@end example
-Vergessen Sie nicht das Rautenzeichen und Apostroph
-(@code{#'}) vor der Eigenschaftsbezeichnung und das
-Rautenzeichen vor dem neuen Wert!
+Vergessen Sie nicht das@tie{}@code{#} vor dem neuen Wert!
Die nächste Frage ist nun: @qq{Wohin soll dieser Befehl geschrieben
werden?} Solange wir uns noch im Lernstadium befinden, ist
@cindex thickness-Eigenschaft, Beispiel
@cindex Dicke-Eigenschaft, Beispiel
-@lilypond[quote,verbatim,relative=2]
+@lilypond[quote,verbatim]
{
\key es \major
\time 6/8
- {
+ \relative {
% Increase thickness of all following slurs from 1.2 to 5.0
- \override Slur #'thickness = #5.0
- r4 bes8 bes[( g]) g |
+ \override Slur.thickness = #5.0
+ r4 bes'8 bes[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
}
@noindent
und wirklich wird der Legatobogen dicker.
-Das ist also die grundlegende Herangehensweise,
+Das ist also die grundlegende Herangehensweise,
@code{\override}-Befehl zu formulieren. Es gibt einige
zusätzliche Komplikationen, denen wir uns später widmen
werden, aber Sie haben jetzt das Handwerkszeug, um Ihre
Übung benötigen. Die sollen Sie durch die folgenden Übungen
erhalten.
-
-@subheading Den Kontext finden
+@subsubsubheading Den Kontext finden
@cindex Kontext, Finden und identifizieren
Aber wir können uns dessen nicht sicher sein. Um unsere
Annahme zu überprüfen, gehen wir wieder zu der Seite im
IR, die die Legatobögen beschreibt und die Überschrift
-@emph{Slur} hat. Dort steht: @qq{Slur objects are created
+@emph{Slur} hat. Dort steht: @qq{Slur objects are created
by: Slur engraver}. Legatobögen werden also in dem Kontext
-erstellt, in dem sich der @code{Slur_engraver} befindet.
+erstellt, in dem sich der @code{Slur_engraver} befindet.
Folgen Sie dem Link zu der @code{Slur_engraver}-Seite.
Unten auf der Seite steht, dass der @code{Slur_engraver}
sich in fünf Stimmen-Kontexten befindet, unter anderem
definiert ist, dass wir Noten eingeben, kann er an dieser Stelle
auch weggelassen werden.
-
-@subheading Nur einmal mit \override verändern
+@subsubsubheading Nur einmal mit \override verändern
@cindex Override nur einmal
@cindex once override
+
@funindex \once
@funindex once
@cindex Legatobogen, Beispiel zur Veränderung
@cindex thickness-Eigenschaft, Beispiel
-@lilypond[quote,verbatim,relative=2]
+@lilypond[quote,verbatim]
{
+ \key es \major
\time 6/8
- {
- \key es \major
- r4 bes8
+ \relative {
+ r4 bes'8
% Increase thickness of immediately following slur only
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
bes8[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
Der @code{\once}-Befehl kann übrigens auch vor einem @code{\set}-Befehl
eingesetzt werden.
-
-@subheading Rückgängig machen
+@subsubsubheading Rückgängig machen
@cindex Revert
@cindex Rückgängig machen
@cindex Wiederherstellen von Standardeinstellungen
@cindex Standardeinstellungen, Wiederherstellen
+
@funindex \revert
@funindex revert
@cindex Legatobogen, Beispiel zur Veränderung
@cindex thickness-Eigenschaft, Beispiel
-@lilypond[quote,verbatim,relative=2]
+@lilypond[quote,verbatim]
{
\key es \major
\time 6/8
- {
- r4 bes8
+ \relative {
+ r4 bes'8
% Increase thickness of immediately following slur only
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
bes[( g]) g |
% Increase thickness of immediately following slur only
- \once \override Slur #'thickness = #5.0
+ \once \override Slur.thickness = #5.0
g8[( es]) es d[( f]) as |
as8 g
}
@end lilypond
@noindent
-Wir könnten aber auch den @code{\once}-Befehl weglassen und anstelle
+Wir könnten aber auch den @code{\once}-Befehl weglassen und anstelle
dessen später den @code{\revert}-Befehl einsetzen, um die
@code{thickness}-Eigenschaft wieder auf ihren Standardwert zurückzusetzen:
@cindex Legatobogen, Beispiel zur Veränderung
@cindex thickness-Eigenschaft, Beispiel
-@lilypond[quote,verbatim,relative=2]
+@lilypond[quote,verbatim]
{
\key es \major
\time 6/8
- {
- r4 bes8
+ \relative {
+ r4 bes'8
% Increase thickness of all following slurs from 1.2 to 5.0
- \override Slur #'thickness = #5.0
+ \override Slur.thickness = #5.0
bes[( g]) g |
g8[( es]) es
% Revert thickness of all following slurs to default of 1.2
- \revert Slur #'thickness
+ \revert Slur.thickness
d8[( f]) as |
as8 g
}
@noindent
Der @code{\revert}-Befehl kann benutzt werden, um eine beliebige
-Eigenschaft, die mit @code{\override} geändert worden ist, wieder in
+Eigenschaft, die mit @code{\override} geändert worden ist, wieder in
ihre Standardeinstellungen zurückzuversetzen. In unserem Beispiel können
Sie die Methode benutzen, die Ihnen lieber ist, beide haben das gleiche
Resultat.
Schritt für Schritt immer weniger Erklärungen beinhalten.
-@node Eigenschaften, die Schnittstellen besitzen können
+@node Eigenschaften die Schnittstellen besitzen können
@subsection Eigenschaften, die Schnittstellen besitzen können
@translationof Properties found in interfaces
wie auch schon zuvor. Welches Objekt könnte die Darstellung des
Textes (engl. lyrics) beeinflussen? Es gibt den Eintrag @code{LyricText},
das hört sich schon sehr gut an. Ein Klick hierauf zeigt alle Eigenschaften
-an, die verändert werden können. Dazu gehört
+an, die verändert werden können. Dazu gehört
@code{font-series} und @code{font-size}, aber nichts, womit man kursiven
Text erreichen könnte. Das liegt daran, dass die Schnitteigenschaft allen
Schrift-Objekten gemeinsam ist. Sie findet sich also nicht in jedem einzelnen
hier auch aufgelistet sind. Es stellt sich die Frage, warum diese
allgemeinen Schriftarteigenschaften @code{font-series} und
@code{font-size} sowohl unter der Überschrift
-@code{LyricText} als unter dem @code{font-interface} aufgelistet
-sind, aber @code{font-shape} befindet sich nur im
-@code{font-interface}? Die Antwort ist: Die globalen Einstellungen
+@code{LyricText} als unter dem @code{font-interface} aufgelistet
+sind, aber @code{font-shape} befindet sich nur im
+@code{font-interface}? Die Antwort ist: Die globalen Einstellungen
von @code{font-series} und @code{font-size} werden geändert, wenn
-ein @code{LyricText}-Objekt erstellt wird, aber @code{font-shape}
+ein @code{LyricText}-Objekt erstellt wird, aber @code{font-shape}
wird davon nicht beeinflusst. Die zusätzlichen Einträge unter der
Überschrift @code{LyricText} beinhalten dann die Werte der
Standardeinstellungen dieser zwei Eigenschaften, wenn es sich
Eigenschaften anders, wenn sie erstellt werden.
Versuchen wir nun einen @code{\override}-Befehl zu konstruieren,
-der den Gesangstext kursiv setzt. Das Objekt hat die Bezeichnung
-@code{LyricText}, die Eigenschaft ist @code{font-shape}
-und der Wert @code{italic}. Wie vorher schon lassen wir den
+der den Gesangstext kursiv setzt. Das Objekt hat die Bezeichnung
+@code{LyricText}, die Eigenschaft ist @code{font-shape}
+und der Wert @code{italic}. Wie vorher schon lassen wir den
Kontext aus.
-Am Rande sei angemerkt, dass die Werte der @code{font-shape}-Eigenschaft
-mit einem Apostroph (@code{'}) gekennzeichnet werden
-müssen, weil es sich um Symbole handelt. Aus dem gleichen
-Grund mussten auch für @code{thickness} weiter oben im
-Text ein Apostroph gesetzt werden. Symbole sind besondere
-Bezeichnungen, die LilyPond intern bekannt sind. Einige
-sind Bezeichnungen von Eigenschaften, wie eben @code{thickness}
-oder @code{font-shape}. Andere sind besondere Werte,
-die an Eigenschaften übergeben werden können, wie
-@code{italic}. Im Unterschied hierzu gibt es auch beliebige
+Am Rande sei auf das wichtige Detail hingewiesen, dass die Werte für
+manche Eigenschaften Symbole sind, wie z.B. @code{italic} und dass
+diese mit einem Apostroph (@code{'}) gekennzeichnet werden müssen.
+Symbole sind besondere Bezeichnungen, die LilyPond intern
+bekannt sind. Im Unterschied hierzu gibt es auch beliebige
Zeichenketten, die immer mit Anführungszeichen, also
als @code{"Zeichenkette"} auftreten. Für weitere
-Einzelheiten zu Zeichenketten und Werten, siehe
-@rextend{Scheme-Übung}.
+Einzelheiten zu Zeichenketten und Werten, siehe
+@rextend{Scheme-Tutorium}.
Gut, der @code{\override}-Befehl, mit dem der Gesangstext
kursiv gesetzt wird, lautet:
@example
-\override LyricText #'font-shape = #'italic
+\override LyricText.font-shape = #'italic
@end example
@noindent
@cindex kursiv, Beispiel
@cindex @code{\addlyrics}, Beispiel
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,ragged-right,verbatim]
{
\key es \major
\time 6/8
- {
- r4 bes8 bes[( g]) g |
+ \relative {
+ r4 bes'8 bes[( g]) g |
g8[( es]) es d[( f]) as |
as8 g
}
\addlyrics {
- \override LyricText #'font-shape = #'italic
+ \override LyricText.font-shape = #'italic
The man who | feels love's sweet e -- | mo -- tion
}
}
@noindent
Jetzt wird der Text kursiv gesetzt.
-
-@subheading Den Kontext im Liedtextmodus bestimmen
-
-
-@cindex Kontext im Gesangstextmodus angeben
-@cindex Gesangstextmodus, Kontext angeben
-
-Bei Gesangstexten funktioniert der @code{\override}-Befehl
-nicht mehr, wenn Sie den Kontext im oben dargestellten
-Format angeben. Eine Silbe wird im Gesangtextmodus
-(lyricmode) entweder von einem Leerzeichen, einer
-neuen Zeile oder einer Zahl beendet. Alle anderen
-Zeichen werden als Teil der Silbe integriert. Aus diesem
-Grund muss auch vor der schließenden Klammer
-@code{@}} ein Leerzeichen gesetzt oder eine neue
-Zeile begonnen werden. Genauso müssen Leerzeichen
-vor und nach einem Punkt benutzt werden, um die
-Kontext-Bezeichnung von der Objekt-Bezeichnung zu
-trennen, denn sonst würden beide Bezeichnungen als
-ein Begriff interpretiert und von LilyPond nicht verstanden
-werden. Der Befehl muss also lauten:
-
-@example
-\override Lyrics . LyricText #'font-shape = #'italic
-@end example
-
@warning{Innerhalb von Gesangstext muss immer ein
Leerzeichen zwischen der letzten Silbe und der schließenden
Klammer gesetzt werden.}
-@warning{Innerhalb von @code{\override}-Befehlen in
-Gesangstexten müssen Leerzeichen um Punkte zwischen
-Kontext- und Objektbezeichnungen gesetzt werden.}
@seealso
-Erweitern: @rextend{Scheme-Übung}.
+Erweitern: @rextend{Scheme-Tutorium}.
@node Typen von Eigenschaften
benötigen werden, mit den Regeln, die für den jeweiligen
Typ gelten und einigen Beispielen. Sie müssen immer
ein Rautenzeichen (@code{#}) vor den Typeintrag setzen,
-wenn sie in einem @code{\override}-Befehl benutzt werden.
+wenn sie in einem @code{\override}-Befehl benutzt werden,
+auch dann, wenn der Wert selbst bereits mit@tie{}@code{#}
+anfängt. Alle Beispiele verwenden ausschließlich Konstanten.
+Für die Verwendungen von mit Scheme berechneten Werten siehe
+@rextend{Berechnungen in Scheme}.
@multitable @columnfractions .2 .45 .35
@headitem Eigenschaftstyp
@tab Regeln
@tab Beispiele
@item Boolesch
- @tab Entweder wahr oder falsch, dargestellt als #t oder #f
+ @tab Entweder wahr oder falsch, dargestellt als @code{#t} oder @code{#f}
@tab @code{#t}, @code{#f}
@item Dimension (in Notenlinienabständen)
- @tab Eine positive Dezimalzahl (in Notenlinienabstand-Einheiten)
+ @tab Eine Dezimalzahl (in Notenlinienabstand-Einheiten)
@tab @code{2.5}, @code{0.34}
@item Richtung
@tab Eine gültige Richtungskonstante oder das numerische Äquivalent
+ (@code{0} or @code{CENTER} bezeichnen eine neutrale Richtung)
@tab @code{LEFT}, @code{CENTER}, @code{UP},
- @code{1}, @code{-1}
+ @code{1}, @w{@code{-1}}
@item Integer
- @tab Eine positive ganze Zahl
- @tab @code{3}, @code{1}
+ @tab Eine ganze Zahl
+ @tab @code{3}, @code{-1}
@item Liste
- @tab Eine eingeklammerte Anzahl von Einträgen, mit Klammern getrennt
- und angeführt von einem Apostroph
- @tab @code{'(left-edge staff-bar)}, @code{'(1)},
+ @tab Eine Folge von Konstanten oder Symbolen in Klammern, angeführt von einem Apostroph;
+ Einträge durch Leerzeichen voneinander getrennt
+ @tab @code{'(left-edge staff-bar)}, @code{'(1)}, @code{'()},
@code{'(1.0 0.25 0.5)}
@item Textbeschriftung (markup)
@tab Beliebige gültige Beschriftung
- @tab @code{\markup @{ \italic "cresc." @}}
+ @tab @code{\markup @{ \italic "cresc." @}}, @code{"bagpipe"}
@item Moment
@tab Ein Bruch einer ganzen Note, mit der make-moment-Funktion
konstruiert
- @tab @code{(ly:make-moment 1 4)},
- @code{(ly:make-moment 3 8)}
+ @tab @code{(ly:make-moment 1/4)},
+ @code{(ly:make-moment 3/8)}
@item Zahl
@tab Eine beliebige positive oder negative Dezimalzahl
- @tab @code{3.5}, @code{-2.45}
+ @tab @code{3}, @w{@code{-2.45}}
@item Paar (Zahlenpaar)
- @tab Zwei Zahlen getrennt von @qq{Leerzeichen . Leerzeichen}, eingeklammert
+ @tab Zwei Zahlen getrennt durch @qq{Leerzeichen . Leerzeichen}, eingeklammert
und angeführt von einem Apostroph
@tab @code{'(2 . 3.5)}, @code{'(0.1 . -3.2)}
@item Symbol
- @tab Eine beliebige Anzahl von Symbolen, die für die Eigenschaft
+ @tab Eine beliebige Anzahl von Symbolen, die für die Eigenschaft
gültig sind, angeführt von einem Apostroph
@tab @code{'italic}, @code{'inside}
@item Unbekannt
@tab @code{bend::print}, @code{ly:text-interface::print},
@code{#f}
@item Vektor
- @tab Eine Liste mit drei Einträgen, eingeklammert und mit
- Apostroph-Raute ( @code{'#}) angeführt.
- @tab @code{'#(#t #t #f)}
+ @tab Konstanten, getrennt durch Leerzeichen, eingeschlossen in
+ @code{#(}@dots{}@code{)}.
+ @tab @code{#(#t #t #f)}
@end multitable
@seealso
-Erweitern: @rextend{Scheme-Übung}.
+Erweitern: @rextend{Scheme-Tutorium}.
@node Erscheinung von Objekten
In Unterrichtsmaterial für den Musikunterricht wird oft
eine Partitur dargestellt, in der bestimmte Notationselemente
-fehlen, so dass der Schüler die Aufgabe bekommt, die
+fehlen, so dass der Schüler die Aufgabe bekommt, die
nachzutragen. Ein einfaches Beispiel ist etwa, die
-Taktlinien zu entfernen, damit der Schüler sie selber zeichnen
-kann. Aber die Tatklinien werden normalerweise automatisch
+Taktstriche zu entfernen, damit der Schüler sie selber zeichnen
+kann. Aber die Taktstriche werden normalerweise automatisch
eingefügt. Wie verhindern wir, dass sie ausgegeben werden?
Bevor wir uns hieran machen, sei daran erinnert, dass
Objekteigenschaften in sogenannten @emph{Schnittstellen}
-- engl. interface -- gruppiert sind, siehe auch
-@ref{Eigenschaften, die Schnittstellen besitzen können}. Das dient ganz einfach
+@ref{Eigenschaften die Schnittstellen besitzen können}. Das dient ganz einfach
dazu, die Eigenschaften zusammenzufassen, die üblicherweise
zusammen benötigt werden -- wenn eine davon für ein Objekt
gilt, dann auch die anderen. Manche Objekte brauchen die
-Eigenschaften von der einen Schnittstelle, andere von einer
+Eigenschaften von der einen Schnittstelle, andere von einer
anderen. Die Schnittstellen, die die Eigenschaften von einem
bestimmten Grob beinhalten, sind in der IR unten auf der
Seite aufgelistet, die dieses Grob beschreibt. Die Eigenschaften
Zu Information, wie man Eigenschaften von Grobs findet, siehe
@ref{Eigenschaften von Layoutobjekten}. Wir benutzen also jetzt
die selbe Methode um in der IR das Layout-Objekt zu finden,
-dass für die Tatklinien zuständig ist. Über die Überschriften
+dass für die Taktstriche zuständig ist. Über die Überschriften
@emph{Backend} und @emph{All layout objects} kommen
wir zu einem Layout-Objekt mit der Bezeichnung
-@code{BarLine} (engl. TaktLinie). Seine Eigenschaften
+@code{BarLine} (engl. Taktstrich). Seine Eigenschaften
beinhalten zwei, die über die Sichtbarkeit entscheiden:
-@code{break-visibility} und @code{stencil}.
+@code{break-visibility} und @code{stencil}.
@code{BarLine} unterstützt auch einige Schnittstellen,
unter anderem @code{grob-interface}, wo wir eine
@code{transparent} und eine @code{color}-Eigenschaft
-finden. Alle können die Sichtbarkeit von Taktlinien (und
+finden. Alle können die Sichtbarkeit von Taktstriche (und
natürlich auch die Sichtbarkeit von vielen anderen Objekten)
beeinflussen. Schauen wir uns diese Eigenschaften eine
nach der anderen an.
-@subheading stencil (Matrize)
+@menu
+* Die stencil-Eigenschaft::
+* Die break-visibility-Eigenschaft::
+* Die transparent-Eigenschaft::
+* Die color-Eigenschaft::
+@end menu
+
+@node Die stencil-Eigenschaft
+@unnumberedsubsubsec Die @code{stencil}-Eigenschaft (Matrize)
+@translationof The stencil property
@cindex Stencil-Eigenschaft
@cindex Matrizen-Eigenschaft
-Diese Eigenschaft kontrolliert die Erscheinung der Taktlinien,
+Diese Eigenschaft kontrolliert die Erscheinung der Taktstriche,
indem sie das Symbol bestimmt, das ausgegeben werden soll.
Wie bei vielen anderen Eigenschaften auch, kann sie so
eingestellt werden, dass sie nichts ausgibt, indem ihr Wert
wie vorher, indem wir den impliziten Kontext (@code{Voice})
auslassen:
-@cindex Taktlinie, Beispiel zur Veränderung
+@cindex Taktstrich, Beispiel zur Veränderung
@cindex stencil-Eigenschaft, Beispiel
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-{
+@lilypond[quote,ragged-right,verbatim]
+\relative {
\time 12/16
- \override BarLine #'stencil = ##f
- c4 b8 c d16 c d8
+ \override BarLine.stencil = ##f
+ c''4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
}
@end lilypond
-Die Taktlinien werden aber immer noch angezeigt. Was ist da
-falsch gelaufen? Gehen Sie zurück zur IR und schauen Sie auf
+Die Taktstriche werden aber immer noch angezeigt. Was ist da
+falsch gelaufen? Gehen Sie zurück zur IR und schauen Sie auf
die Seite, die die Eigenschaften für @code{BarLine} angibt.
Oben auf der Seite steht: @qq{Barline objects are created
by: Bar_engraver}. Schauen Sie sich die
funktioniert. Alle Kontexte sind @code{Staff}-Typen (also
Notensystem-Typen). Der Grund, warum der
@code{\override}-Befehl nicht funktioniert hat, liegt
-also darin, dass das Taktlinie-Objekt (@code{BarLine}) sich nicht
+also darin, dass das Taktstrich-Objekt (@code{BarLine}) sich nicht
im @code{Voice}-Kontext befindet. Wenn der Kontext
falsch angegeben wird, bewirkt der Befehl einfach gar
nichts. Keine Fehlermeldung wird ausgegeben und auch
nichts in die Log-Datei geschrieben. Versuchen wir also,
den richtigen Kontext mit anzugeben:
-@cindex Taktlinie, Beispiel zur Veränderung
+@cindex Taktstrich, Beispiel zur Veränderung
@cindex stencil-Eigenschaft, Beispiel
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-{
+@lilypond[quote,ragged-right,verbatim]
+\relative {
\time 12/16
- \override Staff.BarLine #'stencil = ##f
- c4 b8 c d16 c d8
- g,8 a16 b8 c d4 e16
+ \override Staff.BarLine.stencil = ##f
+ c''4 b8 c d16 c d8 |
+ g,8 a16 b8 c d4 e16 |
e8
}
@end lilypond
@noindent
-Jetzt sind die Taktlinien wirklich verschwunden.
+Jetzt sind die Taktstriche wirklich verschwunden. Setzen der
+@code{stencil}-Eigenschaft auf @code{#f} wird derart häufig verwendet,
+dass es dafür einen eigenen Befehl gibt, @code{\omit}:
+@funindex \omit
+
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ \time 12/16
+ \omit Staff.BarLine
+ c''4 b8 c d16 c d8 |
+ g,8 a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
Es sollte jedoch beachtet werden, dass das Setzen der
@code{stencil}-Eigenschaft auf @code{#f} zu Fehlerhinweisen führen
dessen die @code{point-stencil}-Funktion benutzt werden, welche
den Stencil auf ein Objekt mit der Größe Null setzt:
-@lilypond[quote,verbatim,relative=2]
-{
- c4 c
- \once \override NoteHead #'stencil = #point-stencil
+@lilypond[quote,verbatim]
+\relative {
+ c''4 c
+ \once \override NoteHead.stencil = #point-stencil
c4 c
}
@end lilypond
-
-@subheading break-visibility (unsichtbar machen)
+@node Die break-visibility-Eigenschaft
+@unnumberedsubsubsec The @code{break-visibility}-Eigenschaft (unsichtbar machen)
+@translationof The break-visibility property
@cindex break-visibility-Eigenschaft
@cindex Unsichtbar machen (break-visibility)
Aus der Beschreibung der Eigenschaften für @code{BarLine}
in der IR geht hervor, dass die @code{break-visibility}-Eigenschaft
einen Vektor mit drei Booleschen Werten benötigt. Diese
-kontrollieren jeweils, ob die Taktlinien am Ende einer Zeile,
+kontrollieren jeweils, ob die Taktstriche am Ende einer Zeile,
in der Mitte einer Zeile und am Anfang einer Zeile ausgegeben
-werden. Wenn also alle Taktlinien unsichtbar sein sollen, wie in
-unserem Beispiel, brauchen wir den Wert @code{'#(#f #f #f)}.
+werden. Wenn also alle Taktstriche unsichtbar sein sollen, wie in
+unserem Beispiel, brauchen wir den Wert @code{#(#f #f #f)}, (den es auch
+unter dem symbolischen Namen @code{all-invisible} gibt).
Versuchen wir es also, und berücksichtigen wir auch den
-@code{Staff}-Kontext. Beachten Sie auch, dass Sie @code{#'#}
-vor der öffnenden Klammer schreiben müssen:
-@code{'#} wird benötigt als Teil des Wertes, um einen Vektor zu
-signalisieren, und das erste @code{#} wird benötigt, um
+@code{Staff}-Kontext. Beachten Sie auch, dass Sie @code{##}
+vor der öffnenden Klammer schreiben müssen:
+@code{#} wird benötigt als Teil des Wertes, um einen Vektor zu
+signalisieren, und das erste@tie{}@code{#} wird benötigt, um
den Wert in einem @code{\override}-Befehl anzuführen.
-@cindex Taktlinie, Beispiel zur Veränderung
+@cindex Taktstrich, Beispiel zur Veränderung
@cindex break-visibility-Eigenschaft, Beispiel
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-{
+@lilypond[quote,ragged-right,verbatim]
+\relative {
\time 12/16
- \override Staff.BarLine #'break-visibility = #'#(#f #f #f)
- c4 b8 c d16 c d8 |
+ \override Staff.BarLine.break-visibility = ##(#f #f #f)
+ c''4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
}
@end lilypond
@noindent
-Auch auf diesem Weg gelingt es, die Taktlinien unsichtbar zu machen.
+Auch auf diesem Weg gelingt es, die Taktstriche unsichtbar zu machen.
-
-@subheading transparent (durchsichtig)
+@node Die transparent-Eigenschaft
+@unnumberedsubsubsec Die @code{transparent}-Eigenschaft (durchsichtig)
+@translationof The transparent property
@cindex transparent-Eigenschaft
@cindex Durchsichtig machen (transparent)
in der IR geht hervor, dass die @code{transparent}-Eigenschaft
boolesch ist. Mit @code{#t} (wahr) wird also ein Grob durchsichtig
gemacht. Im unserem Beispiel soll jetzt die Taktart durchsichtig
-gemacht werden, anstatt die Taktlinien durchsichtig zu machen.
+gemacht werden, anstatt die Taktstriche durchsichtig zu machen.
Wir brauchen also wieder die Grob-Bezeichnung für die Taktart.
Auf der @qq{All layout objects}-Seite in der IR müssen wir die
Eigenschaften des @code{TimeSignature}-Layout-Objekts suchen
@cindex Taktart, Beispiel zur Veränderung
@cindex transparent-Eigenschaft, Beispiel
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-{
+@lilypond[quote,ragged-right,verbatim]
+\relative {
\time 12/16
- \override Staff.TimeSignature #'transparent = ##t
- c4 b8 c d16 c d8 |
+ \override Staff.TimeSignature.transparent = ##t
+ c''4 b8 c d16 c d8 |
+ g,8 a16 b8 c d4 e16 |
+ e8
+}
+@end lilypond
+
+@noindent
+Auch das Setzen der @code{transparent}-Eigenschaft ist ein recht häufige
+Operation und so gibt es auch hierfür eine Kurzform names @code{\hide}:
+@funindex \hide
+
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ \time 12/16
+ \hide Staff.TimeSignature
+ c''4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
}
@end lilypond
@noindent
-Die Taktangabe ist verschwunden, aber mit diesem Befehl wird ein
-freier Platz gelassen, wo sich die Taktangabe eigentlich befinden
+In beiden Fällen ist die Taktangabe ist verschwunden, aber mit diesem Befehl
+bleibt freier Platz, wo sich die Taktangabe eigentlich befinden
würde. Das braucht man vielleicht für eine Schulaufgabe, in der
die richtige Taktangabe eingefügt werden soll, aber in anderen
Fällen ist diese Lücke nicht schön. Um auch die Lücke zu entfernen,
-muss die Matrize (stencil) der Taktangabe auf @code{#f} (falsch)
+muss stattdessen die Matrize (stencil) der Taktangabe auf @code{#f} (falsch)
gesetzt werden:
@cindex Taktart, Beispiel zur Veränderung
@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
{
\time 12/16
- \override Staff.TimeSignature #'stencil = ##f
+ \override Staff.TimeSignature.stencil = ##f
c4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
@end lilypond
@noindent
-Und der Unterschied wird deutlich: hiermit wird das gesamte Objekt
-entfernt, während man mit @code{transparent} ein Objekt
-unsichtbar machen kann, es aber an seinem Platz gelassen wird.
-
+Und der Unterschied wird deutlich: Setzen des stencil auf @code{#f} (ggf.
+mittels @code{\omit}) entfernt das gesamte Objekt, während man mit
+@code{transparent} (was auch mittels @code{\hide} eingestellt werden kann)
+ein Objekt unsichtbar machen kann, es aber an seinem Platz gelassen wird.
-@subheading color (Farbe)
+@node Die color-Eigenschaft
+@unnumberedsubsubsec Die @code{color}-Eigenschaft (Farbe)
+@translationof The color property
@cindex color-Eigenschaft
@cindex Farb-Eigenschaft
-Abschließend wollen wir die Taktlinien unsichtbar machen, indem
+Abschließend wollen wir die Taktstriche unsichtbar machen, indem
wir sie weiß einfärben. (Es gibt hier eine Schwierigkeit: die weiße
-Taktlinie übermalt manchmal die Taktlinien, wo sie sie kreuzt,
+Taktstrich übermalt manchmal die Taktstriche, wo sie sie kreuzt,
manchmal aber auch nicht. Sie können in den Beispielen unten
sehen, dass das nicht vorhersagbar ist. Die Einzelheiten dazu, warum
das passiert und wie sie es kontrollieren können, werden dargestellt
aussehen, gibt es mehrere Wege, Farben anzugeben. Der erste
Weg ist es, @qq{normale} Farben zu benutzen, wie sie in der
Tabelle in @ruser{Liste der Farben} aufgelistet sind. Beachten Sie,
-dass die Bezeichnungen auf Englisch sind. Um die Taktlinien auf
+dass die Bezeichnungen auf Englisch sind. Um die Taktstriche auf
weiß zu setzen, können Sie schreiben:
-@cindex Taktlinie, Beispiel zur Veränderung
+@cindex Taktstrich, Beispiel zur Veränderung
@cindex color-Eigenschaft, Beispiel
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-{
+@lilypond[quote,ragged-right,verbatim]
+\relative {
\time 12/16
- \override Staff.BarLine #'color = #white
- c4 b8 c d16 c d8 |
+ \override Staff.BarLine.color = #white
+ c''4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
}
@end lilypond
@noindent
-und die Taktlinien verschwinden in der Tat. Beachten Sie,
+und die Taktstriche verschwinden in der Tat. Beachten Sie,
dass @emph{white} nicht mit einem Apostroph angeführt
-wird -- es ist kein Symbol, sondern eine @emph{Funktion}.
-Wenn sie aufgerufen wird, stellt sie eine Liste mit internen
+wird -- es ist kein Symbol, sondern eine @emph{Variable}.
+Wird sie ausgewertet, stellt sie eine Liste mit internen
Werten zu Verfügung, mit welcher die Farbe auf weiß
gestellt wird. Die anderen Farben in der Liste sind auch
Funktionen. Um sich zu überzeugen, dass der Befehl auch
wirklich funktioniert, können Sie die Farbe auf eine der
-anderen Funktionen dieser Liste abändern.
+anderen Variablen dieser Liste abändern.
@cindex Farben, X11
@cindex X11-Farben
+
@funindex x11-color
Die zweite Art die Farbe zu ändern geschieht, indem die Liste
der X11-Farbbezeichnungen einzusetzen, siehe die zweite Liste
-in @ruser{Liste der Farben}. Diesen Farben muss jedoch eine
-andere Funktion vorangestellt werden, die die X11-Farbbezeichnungen
-in interne Werte konvertiert:
-@code{x11-color}. Das geschieht wie folgt:
+in @ruser{Liste der Farben}. Diese Namen werden durch die Funktion
+@code{x11-color} durch die tatsächlichen internen Farbwerte ersetzt.
+Das geschieht wie folgt:
-@cindex Taktlinie, Beispiel zur Veränderung
+@cindex Taktstrich, Beispiel zur Veränderung
@cindex color-Eigenschaft, Beispiel
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-{
+@lilypond[quote,ragged-right,verbatim]
+\relative {
\time 12/16
- \override Staff.BarLine #'color = #(x11-color 'white)
- c4 b8 c d16 c d8 |
+ \override Staff.BarLine.color = #(x11-color 'white)
+ c''4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
}
@noindent
In diesem Fall hat die Funktion @code{x11-color} ein Symbol
als Argument, darum muss dem Symbol ein Apostroph vorangestellt
-und beide zusammen in Klammern gesetzt werden.
+werden, damit es nicht als Variable interpretiert wird. Beide
+zusammen müssen in Klammern gesetzt werden.
@cindex RGB-Farben
@cindex Farben, RGB
+
@funindex rgb-color
-Es gibt noch eine dritte Funktion, die RGB-Werte in die
+Es gibt noch eine weitere Funktion, die RGB-Werte in die
internen Werte übersetzt -- die @code{rgb-color}-Funktion. Sie
braucht drei Argumente, um die Stärke von Rot, Grün und
-Blau darzustellen. Die Werte befinden sich zwischen
+Blau darzustellen. Die Werte befinden sich zwischen
0 und 1. Um also die Farbe Rot darzustellen, muss der
Wert der Funktion lauten: @code{(rgb-color 1 0 0)}, weiß
würde sein: @code{(rgb-color 1 1 1)}.
-@cindex Taktlinie, Beispiel zur Veränderung
+@cindex Taktstrich, Beispiel zur Veränderung
@cindex color-Eigenschaft, Beispiel
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-{
+@lilypond[quote,ragged-right,verbatim]
+\relative {
\time 12/16
- \override Staff.BarLine #'color = #(rgb-color 1 1 1)
- c4 b8 c d16 c d8 |
+ \override Staff.BarLine.color = #(rgb-color 1 1 1)
+ c''4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
}
@end lilypond
Schließlich gibt es noch eine Grauskala, die zu den X11-Farben
-gehört. Sie reicht von schwarz (@code{'grey0'}) bis
+gehört. Sie reicht von schwarz (@code{'grey0}) bis
weiß (@code{'grey100}), in Einerschritten. Wir wollen das
illustrieren, indem alle Layout-Objekte im Beispiel
-verschiede Grauschattierungen erhalten:
+verschiedene Grauschattierungen erhalten:
@cindex StaffSymbol, Beispiel zur Veränderung
@cindex TimeSignature, Beispiel zur Veränderung
@cindex Schlüssel, Beispiel zur Veränderung
@cindex Notenhals, Beispiel zur Veränderung
-@cindex Taktlinie, Beispiel zur Veränderung
+@cindex Taktstrich, Beispiel zur Veränderung
@cindex Farbeigenschaft, Beispiel
@cindex x11-Farben, Beispiel
-@cindex Taktlinien, Beispiel zur Veränderung
+@cindex Taktstriche, Beispiel zur Veränderung
@cindex Taktart, Beispiel zur Veränderung
@cindex Clef, Beispiel zur Veränderung
@cindex Stem, Beispiel zur Veränderung
@cindex NoteHead, Beispiel zur Veränderung
@cindex Notenkopf, Beispiel zur Veränderung
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-{
+@lilypond[quote,ragged-right,verbatim]
+\relative {
\time 12/16
- \override Staff.StaffSymbol #'color = #(x11-color 'grey30)
- \override Staff.TimeSignature #'color = #(x11-color 'grey60)
- \override Staff.Clef #'color = #(x11-color 'grey60)
- \override Voice.NoteHead #'color = #(x11-color 'grey85)
- \override Voice.Stem #'color = #(x11-color 'grey85)
- \override Staff.BarLine #'color = #(x11-color 'grey10)
- c4 b8 c d16 c d8 |
+ \override Staff.StaffSymbol.color = #(x11-color 'grey30)
+ \override Staff.TimeSignature.color = #(x11-color 'grey60)
+ \override Staff.Clef.color = #(x11-color 'grey60)
+ \override Voice.NoteHead.color = #(x11-color 'grey85)
+ \override Voice.Stem.color = #(x11-color 'grey85)
+ \override Staff.BarLine.color = #(x11-color 'grey10)
+ c''4 b8 c d16 c d8 |
g,8 a16 b8 c d4 e16 |
e8
}
@noindent
Beachten Sie die Kontexte, die mit jedem einzelnen Layout-Objekt
verbunden sind. Es ist wichtig, den richtigen Kontext einzusetzen,
-damit die Befehle funktionieren. Denken Sie daran, dass der
+damit die Befehle funktionieren. Denken Sie daran, dass der
Kontext sich daran orientiert, wo sich der entsprechende
Engraver befindet. Den Standardkontext für Engraver finden
Sie, indem Sie beim Layout-Objekt beginnen, zum Engraver
@cindex über dem System anordnen, Beispiel
@cindex @code{\with}-Beispiel
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,ragged-right,verbatim]
\new Staff ="main" {
- \relative g' {
- r4 g8 g c4 c8 d |
+ \relative {
+ r4 g'8 g c4 c8 d |
e4 r8
<<
- { f c c }
+ { f8 c c }
\new Staff \with {
alignAboveContext = #"main" }
{ f8 f c }
@cindex alignAboveContext-Eigenschaft, Beispiel
@cindex über dem System anordnen, Beispiel
@cindex @code{\with}-Beispiel
-@cindex stencil-Eigenschaft, Beispiel
+@funindex \omit
@cindex Schlüssel, Beispiel zur Veränderung
@cindex Taktart, Beispiel zur Veränderung
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,ragged-right,verbatim]
\new Staff ="main" {
- \relative g' {
- r4 g8 g c4 c8 d
+ \relative {
+ r4 g'8 g c4 c8 d |
e4 r8
<<
{ f8 c c }
alignAboveContext = #"main"
}
{
- \override Staff.Clef #'stencil = ##f
- \override Staff.TimeSignature #'stencil = ##f
+ \omit Staff.Clef
+ \omit Staff.TimeSignature
{ f8 f c }
}
>>
- r4
+ r4 |
}
}
@end lilypond
@noindent
wobei ein zusätzliches Klammerpaar nach der @code{\with}-Konstruktion
-erforderlich ist um sicherzugehen, dass die Modifikation und
+erforderlich ist um sicherzugehen, dass die Modifikation und
die Noten sich auch auf das Ossia-System beziehen.
Was für einen Unterschied macht es, ob man den @code{Staff}-Kontext
-mit @code{\with} verändert, oder ob man die Stencils mit
-@code{\override} beeinflusst? Der größte Unterschied liegt
+mit @code{\with} verändert, oder ob man die Stencils mit
+@code{\override} oder wie in diesem Fall mit @code{\omit} beeinflusst?
+Der größte Unterschied liegt
darin, dass Änderungen, die mit @code{\with} eingeführt werden,
-während der Erstellung des Kontextes miterzeugt werden und
+während der Erstellung des Kontextes mit erzeugt werden und
als @strong{Standardeinstellungen} für diesen Kontext während seiner
gesamten Dauer gelten, während @code{\set}- oder @code{\override}-Befehle
dynamisch in die Noten eingebettet werden -- sie führen die
-Änderungen synchron mit einem bestimmten Zeitpunkt in
+Änderungen synchron mit einem bestimmten Zeitpunkt in
der Musik aus. Wenn die Änderungen mit @code{\unset}
oder @code{\revert} rückgängig gemacht werden, werden
wieder die Standardwerte eingesetzt, die also die sind, die
@cindex Schlüssel, Beispiel zur Veränderung
@cindex Taktart, Beispiel zur Veränderung
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,ragged-right,verbatim]
\new Staff ="main" {
- \relative g' {
- r4 g8 g c4 c8 d
+ \relative {
+ r4 g'8 g c4 c8 d |
e4 r8
<<
{ f8 c c }
\new Staff \with {
alignAboveContext = #"main"
% Don't print clefs in this staff
- \override Clef #'stencil = ##f
+ \override Clef.stencil = ##f
% Don't print time signatures in this staff
- \override TimeSignature #'stencil = ##f
+ \override TimeSignature.stencil = ##f
}
{ f8 f c }
>>
- r4
+ r4 |
+ }
+}
+@end lilypond
+
+Es zeigt sich, dass wir hier ebenso die Kurzformen @code{\hide}
+und @code{\omit} zum Setzen der @code{transparent}-Eigenschaft und
+zum Entfernen des @code{stencil} verwenden können, was zu folgender
+Fassung führt
+
+@lilypond[quote,ragged-right,verbatim]
+\new Staff ="main" {
+ \relative {
+ r4 g'8 g c4 c8 d |
+ e4 r8
+ <<
+ { f8 c c }
+ \new Staff \with {
+ alignAboveContext = #"main"
+ % Don't print clefs in this staff
+ \omit Clef
+ % Don't print time signatures in this staff
+ \omit TimeSignature
+ }
+ { f8 f c }
+ >>
+ r4 |
}
}
@end lilypond
@code{font-size}- (Schriftgröße)-Eigenschaft geändert wird, wie
wir bald sehen werden. Andere Layout-Objekte, wie
Bögen -- oder allgemein Strecker-Objekte -- werden
-individuell gezeichnet, es gibt dazu also keine
+individuell gezeichnet, es gibt dazu also keine
@code{font-size}, die mit ihnen verknüpft wäre.
Weitere Eigenschaften wie die Länge von Hälsen und
-Taktlinien, Dicke von Balken und anderen Linien und
+Taktstriche, Dicke von Balken und anderen Linien und
der Abstand der Notenlinien voneinander müssen auf
spezielle Weise verändert werden.
In unserem Ossia-Beispiel wollen wir zuerst die
-Schriftgröße verändern. Das ist auf zwei Arten möglich.
+Schriftgröße verändern. Das ist auf zwei Arten möglich.
Entweder wir ändern die Schriftgröße für jede Objektart
mit einem eigenen Befehl, etwa:
@example
-\override NoteHead #'font-size = #-2
+\override NoteHead.font-size = #-2
@end example
@noindent
oder wir ändern die Größe aller Schriftobjekte, indem wir
den Wert einer besonderen Eigenschaft, @code{fontSize},
-mit dem @code{\set}-Befehl bestimmen oder sie in
+mit dem @code{\set}-Befehl bestimmen oder sie in
eine @code{\with}-Konstruktion (ohne @code{\set} einschließen.
@example
@cindex Schlüssel, Beispiel zur Veränderung
@cindex Taktart, Beispiel zur Veränderung
-@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+@lilypond[quote,ragged-right,verbatim]
\new Staff ="main" {
- \relative g' {
- r4 g8 g c4 c8 d
+ \relative {
+ r4 g'8 g c4 c8 d |
e4 r8
<<
{ f8 c c }
\new Staff \with {
alignAboveContext = #"main"
- \override Clef #'stencil = ##f
- \override TimeSignature #'stencil = ##f
- % Reduce all font sizes by ~24%
+ \omit Clef
+ \omit TimeSignature
+ % Verkleinere alle Fonts um ~24%
fontSize = #-2
}
{ f8 f c }
>>
- r4
+ r4 |
}
}
@end lilypond
@cindex Notenlinien, Länge verändern
Abstände und Längen werden in LilyPond üblicherweise
-in Notenlinienabständen (engl. staff-spaces) gemessen.
+in Notenlinienabständen (engl. staff-spaces) gemessen.
Das ist der Abstand zwischen zwei Notenlinien im System.
Die meisten Dicken (engl. thickness) dagegen werden in
einer internen Einheit Linien-Dicke (engl. line-thickness)
diesen Zweck vorhanden ist. Sie nimmt ein Argument auf,
die Änderung der Schriftgröße (#-2 im obigen Beispiel)
und gibt einen Skalierungsfaktor aus, der dazu dient,
-Objekte proportionell zueinander zu verändern. So wird
+Objekte proportional zueinander zu verändern. So wird
sie benutzt:
@cindex alignAboveContext-Eigenschaft, Beispiel
@cindex magstep-Funktion, Beispiel
@cindex Schriftart-Eigenschaft, Beispiel
-@lilypond[quote,verbatim,fragment,ragged-right,relative=2]
+@lilypond[quote,ragged-right,verbatim]
\new Staff ="main" {
- \relative g' {
- r4 g8 g c4 c8 d
+ \relative {
+ r4 g'8 g c4 c8 d |
e4 r8
<<
{ f8 c c }
\new Staff \with {
alignAboveContext = #"main"
- \override Clef #'stencil = ##f
- \override TimeSignature #'stencil = ##f
+ \omit Clef
+ \omit TimeSignature
fontSize = #-2
- % Reduce stem length and line spacing to match
- \override StaffSymbol #'staff-space = #(magstep -2)
+ % Reduziere Halslängen und Notenlinienabstände in gleicher Weise
+ \override StaffSymbol.staff-space = #(magstep -2)
}
{ f8 f c }
>>
- r4
+ r4 |
}
}
@end lilypond
werden.
Für kleine Größenänderungen, wie in dem obigen Beispiel,
-braucht die Dicke der verschiedenen Linien, wie Taktlinien,
+braucht die Dicke der verschiedenen Linien, wie Taktstriche,
Notenlinien, Balken, Dynamikklammern usw. normalerweise
keine spezielle Anpassung. Wenn die Dicke eines bestimmten
Layout-Objektes angepasst werden muss, kann man das erreichen,
Objekts mit @code{\override} verändert wird. Ein Beispiel,
wie man die Dicke von Bögen ändert, wurde schon gezeigt,
siehe @ref{Eigenschaften von Layoutobjekten}. Die Dicke aller
-gezeichneten Objekte (die also nicht aus einer Schriftart
+gezeichneten Objekte (die also nicht aus einer Schriftart
stammen) können auf gleiche Weise geändert werden.
bestimmt -- sie werden vertikal auf bestimmten Linien notiert
oder sind an andere Objekte gebunden, die vertikal festgelegt
sind. Kollisionen von Notenköpfen, Hälsen und Versetzungszeichen
-werden normalerweise automatisch vermieden. Es gibt
+werden normalerweise automatisch vermieden. Es gibt
Befehle, um dieses automatische Verhalten zu verändern, wie
unten gezeigt werden soll.
möglich am Notensystem zu setzen, aber nicht so nah, dass
sie mit anderen Objekten kollidieren. Dabei wird die
@code{outside-staff-priority}-(Priorität außerhalb des Notensystems)-Eigenschaft
-eingesetzt, um die Reihenfolge zu bestimmen, in denen Objekte gesetzt werden
+eingesetzt, um die Reihenfolge zu bestimmen, in denen Objekte gesetzt werden
sollen.
Zuerst werden alle Innersystemobjekte von LilyPond gesetzt.
Dann werden die Objekte außerhalb des Systems nach
-ihrer
+ihrer
@code{outside-staff-priority} geordnet. Die @code{outside-staff}-Objekte
werden dann nacheinander gesetzt, mit der niedrigsten
Priorität beginnend, und so gesetzt, dass sie nicht mit anderen
@cindex Textbeschriftungsbeispiel
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-c2^"Text1"
-c2^"Text2"
-c2^"Text3"
-c2^"Text4"
+@lilypond[quote,fragment,ragged-right,verbatim]
+c''2^"Text1"
+c''2^"Text2" |
+c''2^"Text3"
+c''2^"Text4" |
@end lilypond
Notensysteme werden in den Standardeinstellungen auch so dicht
@lilypond[quote,ragged-right,verbatim]
<<
\new Staff {
- \relative c' { c4 a, }
+ \relative { c'4 a, }
}
\new Staff {
- \relative c'''' { c4 a, }
+ \relative { c''''4 a, }
}
>>
@end lilypond
Es wurde schon gezeigt, wie die Befehle @code{\voiceXXX} die Richtung
von Bögen, Fingersatz und allen anderen Objekten beeinflusst,
-die von der Richtung der Notenhälsen abhängen. Diese Befehle
-sind nötig, wenn polyphone Musik geschrieben wird, damit sich
+die von der Richtung der Notenhälsen abhängen -- siehe @ref{Stimmen explizit beginnen}.
+Diese Befehle
+sind nötig, wenn polyphone Musik geschrieben wird, damit sich
die einzelnen Melodielinien klar abzeichnen. Es kann aber von Zeit
zu Zeit nötig sein, dieses automatische Verhalten zu verändern. Das
kann entweder für ganze Abschnitte, aber genauso auch nur für eine
einzelne Note vorgenommen werden. Die Eigenschaft, die die Richtung
-bestimmt, ist die @code{direction}-Eigenschaft jedes Layout-Objekts.
+bestimmt, ist die @code{direction}-Eigenschaft eines jeden Layout-Objekts.
Es soll erst erklärt werden, was sie bewirkt und dann eine Anzahl
an fertigen Befehlen für die üblicheren Situationen präsentiert werden,
mit denen Sie gleich loslegen können.
Manche Layout-Objekte, wie Legato- und Bindebögen, biegen sich
oder zeigen entweder nach oben oder nach unten, andere, wie
Hälse und Fähnchen, verändern auch die Position rechts oder links,
-je nach der Richtung, in die sie zeigen. Das wird automatisch
+je nach der Richtung, in die sie zeigen. Das wird automatisch
berücksichtigt, wenn die @code{direction}-Eigenschaft verändert
wird.
+@menu
+* Die direction-Eigenschaft::
+* Fingersatz::
+@end menu
+
+@node Die direction-Eigenschaft
+@unnumberedsubsubsec The @code{direction}-Eigenschaft (Richtung)
+@translationof The direction property
+
@funindex down
@funindex up
@funindex center
@cindex neutral-Eigenschaft
Das folgende Beispiel zeigt im ersten Takt die Standardeinstellung
-für Hälse, die bei hohen Noten nach unten zeigen und bei tiefen
-noten nach oben. Im nächsten Takt werden alle Hälse nach unten
-gezwungen, im dritten Takt nach oben, und im vierten wird wieder
-der Standard eingestellt.
+für Legatobögen, die bei hohen Noten oberhalb, bei tiefen Noten indessen
+unterhalb platziert werden. Im nächsten Takt werden beide Bögen nach
+unten gezwungen, im darauf folgenden Takt nach oben, um schließlich
+wieder auf den Standard eingestellt zu werden.
-@cindex Notenhals, Beispiel zur Veränderung
+@cindex Legatobogen, Beispiel zur Veränderung
@cindex Richtungseigenschaft, Beispiel
-@lilypond[quote,verbatim,relative=2]
-a4 g c a
-\override Stem #'direction = #DOWN
-a4 g c a
-\override Stem #'direction = #UP
-a4 g c a
-\revert Stem #'direction
-a4 g c a
+@lilypond[quote,fragment,verbatim]
+a'4( g') c''( a') |
+\override Slur.direction = #DOWN
+a'4( g') c''( a') |
+\override Slur.direction = #UP
+a'4( g') c''( a') |
+\revert Slur.direction
+a'4( g') c''( a') |
@end lilypond
-Hier werden die Konstanten @code{DOWN} und @code{UP}
-eingesetzt. Sie haben die Werte @code{-1} bzw. @code{+1}, und
+Wir haben hier die Konstanten @code{DOWN} und @code{UP}
+eingesetzt. Sie haben die Werte @w{@code{-1}} bzw. @code{+1}, und
diese numerischen Werte können ebenso benutzt werden. Auch
der Wert @code{0} kann in manchen Fällen benutzt werden. Er
-bedeutet für die Hälse das gleiche wie @code{UP}, für einige
+bedeutet für die Legatobögen das gleiche wie @code{UP}, für einige
andere Objekte jedoch @qq{zentriert}. Es gibt hierzu die Konstante
@code{CENTER}, die den Wert @code{0} hat.
@tab Befehl für Richtung von Klammern/Zahlen der N-tolen
@end multitable
-Diese vordefinierten Befehl können allerdings @strong{nicht}
-zusammen mit @code{\once} benutzt werden. Wenn Sie die
-Wirkung eines Befehl auf eine einzige Noten begrenzen wollen,
-müssen Sie den entsprechenden
-@code{\once \override}-Befehl benutzen oder den definierten
-Befehl, gefolgt von dem entsprechenden neutralisierenden
-@code{xxxNeutral}-Befehl nach der Note.
+Die neutralen/normalen Varianten dieser Befehle verwenden intern
+@code{\revert} und können daher @strong{nicht} mit einem
+vorangestellten @code{\once} benutzt werden. Wenn Sie die
+Wirkung eines der anderen Befehle (die intern @code{\override} verwenden)
+auf eine einzige Noten begrenzen wollen, müssen Sie ihm ein @code{\once}
+voranstellen, genauso wie Sie es auch bei einem expliziten @code{\override}
+machen würden.
+Falls nur ein einziges Layout Objekt nach oben oder unten gezwungen werden
+soll, können auch die Richtungsindikatoren @code{^} oder @code{_} verwendet werden:
-@subheading Fingersatz
+@lilypond[quote,fragment,verbatim]
+a'4( g') c''( a') |
+a'4^( g') c''_( a') |
+@end lilypond
+
+@node Fingersatz
+@unnumberedsubsubsec Fingersatz
+@translationof Fingering
@cindex Fingersatz, Positionierung
@cindex Fingersatz, Akkorde
@cindex Fingersatz, Beispiel zur Veränderung
@cindex direction-Eigenschaft, Beispiel
-@lilypond[quote,verbatim,relative=2]
-c4-5 a-3 f-1 c'-5
-\override Fingering #'direction = #DOWN
-c4-5 a-3 f-1 c'-5
-\override Fingering #'direction = #UP
-c4-5 a-3 f-1 c'-5
+@lilypond[quote,verbatim]
+\relative {
+ c''4-5 a-3 f-1 c'-5 |
+ \override Fingering.direction = #DOWN
+ c4-5 a-3 f-1 c'-5 |
+ \override Fingering.direction = #UP
+ c4-5 a-3 f-1 c'-5 |
+}
@end lilypond
-Eine Beeinflussung der @code{direction}-Eigenschaft ist jedoch
+Eine Beeinflussung der @code{direction}-Eigenschaft ist jedoch
nicht die einfachste Art, Fingersatzbezeichnungen manuell über oder
unter das System zu setzen. Normalerweise bietet es sich an,
@code{_} oder @code{^} anstelle von @code{-} vor der Fingersatz-Zahl
@cindex Fingersatz-Beispiel
-@lilypond[quote,verbatim,relative=2]
-c4-5 a-3 f-1 c'-5
-c4_5 a_3 f_1 c'_5
-c4^5 a^3 f^1 c'^5
+@lilypond[quote,verbatim]
+\relative {
+ c''4-5 a-3 f-1 c'-5 |
+ c4_5 a_3 f_1 c'_5 |
+ c4^5 a^3 f^1 c'^5 |
+}
@end lilypond
Die @code{direction}-Eigenschaft wirkt sich nicht auf
@cindex Fingersatz-Beispiel
-@lilypond[quote,verbatim,relative=2]
-<c-5 g-3>4
-<c-5 g-3 e-2>4
-<c-5 g-3 e-2 c-1>4
+@lilypond[quote,verbatim]
+\relative {
+ <c''-5 g-3>4
+ <c-5 g-3 e-2>4
+ <c-5 g-3 e-2 c-1>4
+}
@end lilypond
@noindent
@cindex Fingersatz-Beispiel
-@lilypond[quote,verbatim,relative=2]
-<c-5 g-3 e-2 c-1>4
-<c^5 g_3 e_2 c_1>4
-<c^5 g^3 e^2 c_1>4
+@lilypond[quote,verbatim]
+\relative {
+ <c''-5 g-3 e-2 c-1>4
+ <c^5 g_3 e_2 c_1>4
+ <c^5 g^3 e^2 c_1>4
+}
@end lilypond
Noch bessere Kontrolle über die Positionierung von Fingersatz für
@cindex @code{\set}, Benutzungsbeispiel
@cindex fingerOrientations-Eigenschaft, Beispiel
-@lilypond[quote,verbatim,relative=1]
-\set fingeringOrientations = #'(left)
-<f-2>4
-<c-1 e-2 g-3 b-5>4
-\set fingeringOrientations = #'(left)
-<f-2>4
-<c-1 e-2 g-3 b-5>4
-\set fingeringOrientations = #'(up left down)
-<f-2>4
-<c-1 e-2 g-3 b-5>4
-\set fingeringOrientations = #'(up left)
-<f-2>4
-<c-1 e-2 g-3 b-5>4
-\set fingeringOrientations = #'(right)
-<f-2>4
-<c-1 e-2 g-3 b-5>4
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ \set fingeringOrientations = #'(left)
+ <f'-2>4
+ <c-1 e-2 g-3 b-5>4
+ \set fingeringOrientations = #'(left)
+ <f-2>4
+ <c-1 e-2 g-3 b-5>4 |
+ \set fingeringOrientations = #'(up left down)
+ <f-2>4
+ <c-1 e-2 g-3 b-5>4
+ \set fingeringOrientations = #'(up left)
+ <f-2>4
+ <c-1 e-2 g-3 b-5>4 |
+ \set fingeringOrientations = #'(right)
+ <f-2>4
+ <c-1 e-2 g-3 b-5>4
+}
@end lilypond
@noindent
kann auch die Schriftgröße (@code{font-size}) verringert
werden. Der Standardwert kann aus dem
@code{Fingering}-Objekt in der IR entnommen werden,
-er ist @code{-5}, versuchen wir es also mit @code{-7}.
-
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-\override Fingering #'font-size = #-7
-\set fingeringOrientations = #'(left)
-<f-2>4
-<c-1 e-2 g-3 b-5>4
-\set fingeringOrientations = #'(left)
-<f-2>4
-<c-1 e-2 g-3 b-5>4
-\set fingeringOrientations = #'(up left down)
-<f-2>4
-<c-1 e-2 g-3 b-5>4
-\set fingeringOrientations = #'(up left)
-<f-2>4
-<c-1 e-2 g-3 b-5>4
-\set fingeringOrientations = #'(right)
-<f-2>4
-<c-1 e-2 g-3 b-5>4
-@end lilypond
-
+er ist @w{@code{-5}}, versuchen wir es also mit @w{@code{-7}}.
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ \override Fingering.font-size = #-7
+ \set fingeringOrientations = #'(left)
+ <f'-2>4
+ <c-1 e-2 g-3 b-5>4
+ \set fingeringOrientations = #'(left)
+ <f-2>4
+ <c-1 e-2 g-3 b-5>4 |
+ \set fingeringOrientations = #'(up left down)
+ <f-2>4
+ <c-1 e-2 g-3 b-5>4
+ \set fingeringOrientations = #'(up left)
+ <f-2>4
+ <c-1 e-2 g-3 b-5>4 |
+ \set fingeringOrientations = #'(right)
+ <f-2>4
+ <c-1 e-2 g-3 b-5>4
+}
+@end lilypond
@node Objekte außerhalb des Notensystems
@subsection Objekte außerhalb des Notensystems
@translationof Outside-staff objects
Objekte außerhalb des Notensystems werden automatisch gesetzt,
-um Kollisionen zu vermeiden. Objekten mit einem geringeren
+um Kollisionen zu vermeiden. Es gibt eine ganze Reihe von Möglichkeiten
+die Platzierung zu beeinflussen, sollte die Automatik kein optimales
+Resultat produzieren.
+
+@menu
+* Die outside-staff-priority-Eigenschaft::
+* Der textLengthOn-Befehl::
+* Positionierung von Dynamikzeichen::
+* Verändern der Größe von grobs::
+@end menu
+
+
+@node Die outside-staff-priority-Eigenschaft
+@unnumberedsubsubsec Die @code{outside-staff-priority}-Eigenschaft
+@translationof The outside-staff-priority property
+
+Objekten mit einem geringeren
Prioritätswert der Eigenschaft @code{outside-staff-priority}
werden näher an das System gesetzt, und andere Objekte außerhalb
des Systems werden dann soweit vom System entfernt gesetzt, dass
von allen Layout-Objekten. Standardmäßig ist sie für alle Objekte
auf falsch (@code{#f}) gesetzt; dieser Wert wird in einen numerischen
Wert dem Objekt entsprechend geändert, wenn das Objekt für die
-Notenausgabe erstellt wird. Die Tabelle unten zeigt die
-Standardwerte für die meistbenutzten @code{outside-staff}-Objekte,
-die den Voreinstellungen nach im @code{Staff}- oder
-@code{Voice}-Kontext gesetzt werden.
+Notenausgabe erstellt wird. Die Tabelle unten zeigt die
+Standardwerte für die meistbenutzten @code{outside-staff}-Objekte.
@cindex spanners
@cindex Strecker
beinhaltet.
@multitable @columnfractions .3 .3 .3
-@headitem Layout-Objekt
+@headitem Layout-Objekt
@tab Priorität
@tab Kontrolliert Position von:
-@item @code{MultiMeasureRestText}
- @tab @code{450}
- @tab Text über Ganztaktpausen
+@item @code{RehearsalMark}
+ @tab @code{1500}
+ @tab Übungszeichen
+@item @code{MetronomeMark}
+ @tab @code{1000}
+ @tab Metronomzeichen
+@item @code{VoltaBracketSpanner}
+ @tab @code{600}
+ @tab Volta-Wiederholungsklammern
@item @code{TextScript}
@tab @code{450}
@tab Textbeschriftung
+@item @code{MultiMeasureRestText}
+ @tab @code{450}
+ @tab Text über Ganztaktpausen
@item @code{OttavaBracket}
@tab @code{400}
@tab Ottava (Oktavierungsklammern)
@item @code{DynamicLineSpanner}
@tab @code{250}
@tab Alle Dynamik-Bezeichnungen
-@item @code{VoltaBracketSpanner}
- @tab @code{100}
- @tab Volta-Klammern
+@item @code{BarNumber}
+ @tab @code{ 100}
+ @tab Taktzahlen
@item @code{TrillSpanner}
@tab @code{50}
@tab Triller-Strecker
@cindex Text-Strecker
@cindex Text-Spanner
+
@funindex \startTextSpan
@funindex \stopTextSpan
@funindex startTextSpan
@funindex stopTextSpan
+
@cindex Ottava-Klammer
@cindex Oktavierungsklammer
@cindex TextSpanner, Beispiel zur Veränderung
@cindex bound-details-Eigenschaft, Beispiel
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+@lilypond[quote,fragment,ragged-right,verbatim]
% Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
% Place dynamics above staff
\dynamicUp
% Start Ottava Bracket
\ottava #1
-c'4 \startTextSpan
+c''4 \startTextSpan
% Add Dynamic Text and hairpin
-c4\pp\<
-c4
+c''4\pp\<
+c''4
% Add Text Script
-c4^Text
-c4 c
+c''4^Text |
+c''4 c''
% Add Dynamic Text and terminate hairpin
-c4\ff c \stopTextSpan
+c''4\ff c'' \stopTextSpan |
% Stop Ottava Bracket
\ottava #0
-c,4 c c c
+c'4 c' c' c' |
@end lilypond
Dieses Beispiel zeigt auch, wie man Text-Strecker erstellt, d.h.
@cindex Übungszeichenposition verändern
@cindex Verändern der Übungszeichenposition
-Beachten Sie, dass Taktnummern, Metronombezeichnungen
-und Übungszeichen nicht gezeigt werden. Sie werden
-standardmäßig im @code{Score}-(Partitur)-Kontext
-erstellt und ihre @code{outside-staff-priority} wird
-in Bezug auf die Layout-Objekte, die im @code{Staff}-Kontext
-erstellt werden, ignoriert. Wenn Sie Taktnummern,
-Metronombezeichnungen oder Übungszeichen entsprechend
-ihrer Außersystem-Priorität setzen wollen, müssen Sie
-die entsprechenden Engraver (@code{Bar_number_engraver},
-@code{Metronome_mark_engraver} oder @code{Mark_engraver})
-vom @code{Score}-Kontext entfernen und dem
-@code{Staff}-Kontext hinzufügen. Wenn die Engraver so
-geändert werden, erhalten sie folgenden Werte für
-@code{outside-staff-priority}:
-
-@multitable @columnfractions .3 .3
-@headitem Layout-Objekt @tab Priorität
-@item @code{RehearsalMark} @tab @code{1500}
-@item @code{MetronomeMark} @tab @code{1000}
-@item @code{BarNumber} @tab @code{ 100}
-@end multitable
-
Wenn die Standardwerte der @code{outside-staff-priority} nicht
die Positionierung hervorrufen, die Sie wünschen, kann die
Priorität eines jeden Objektes geändert werden. Als Beispiel
@cindex TextSpanner, Beispiel zur Veränderung
@cindex bound-details-Eigenschaft, Beispiel
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
+@lilypond[quote,fragment,ragged-right,verbatim]
% Set details for later Text Spanner
-\override TextSpanner #'(bound-details left text)
+\override TextSpanner.bound-details.left.text
= \markup { \small \bold Slower }
% Place dynamics above staff
\dynamicUp
% Place following Ottava Bracket below Text Spanners
-\once \override Staff.OttavaBracket #'outside-staff-priority = #340
+\once \override Staff.OttavaBracket.outside-staff-priority = #340
% Start Ottava Bracket
\ottava #1
-c'4 \startTextSpan
+c''4 \startTextSpan
% Add Dynamic Text
-c4\pp
+c''4\pp
% Add Dynamic Line Spanner
-c4\<
+c''4\<
% Add Text Script
-c4^Text
-c4 c
+c''4^Text |
+c''4 c''
% Add Dynamic Text
-c4\ff c \stopTextSpan
+c''4\ff c'' \stopTextSpan |
% Stop Ottava Bracket
\ottava #0
-c,4 c c c
+c'4 c' c' c' |
@end lilypond
+Beachten Sie, dass einige dieser Objekte, insbesondere Taktzahlen,
+Metronomzeichen und Übungszeichen standardmäßig im @code{Score}-Kontext
+zu Hause sind; benutzen Sie also den richtigen Kontext, wenn sie
+deren Einstellungen verändern wollen.
+
@cindex Legatobögen und outside-staff-priority
@cindex Legatobögen und Artikulationszeichen
@cindex Artikulationszeichen und Legatobögen
Außersystem-Objekten anhand dieses Wertes gesetzt wird.
Hier ein Beispiel, das die beiden Möglichkeiten veranschaulicht:
-@lilypond[quote,verbatim,relative=2]
-c4( c^\markup { \tiny \sharp } d4.) c8
-c4(
-\once \override TextScript #'avoid-slur = #'inside
-\once \override TextScript #'outside-staff-priority = ##f
-c4^\markup { \tiny \sharp } d4.) c8
-\once \override Slur #'outside-staff-priority = #500
-c4( c^\markup { \tiny \sharp } d4.) c8
+@lilypond[quote,verbatim]
+\relative c'' {
+ c4( c^\markup { \tiny \sharp } d4.) c8 |
+ c4(
+ \once \override TextScript.avoid-slur = #'inside
+ \once \override TextScript.outside-staff-priority = ##f
+ c4^\markup { \tiny \sharp } d4.) c8 |
+ \once \override Slur.outside-staff-priority = #500
+ c4( c^\markup { \tiny \sharp } d4.) c8 |
+}
@end lilypond
Eine Änderung der @code{outside-staff-priority} kann auch dazu
-benutzt werden, die vertikale Plazierung von individuellen Objekten
+benutzt werden, die vertikale Platzierung von individuellen Objekten
zu kontrollieren, auch wenn das Ergebnis nicht immer optimal
ist. Im nächsten Beispiel soll @qq{Text3} oberhalb von @qq{Text4}
gesetzt werden, das Beispiel wurde behandelt in
@cindex TextScript, Beispiel zur Veränderung
@cindex outside-staff-priority-Eigenschaft, Beispiel
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-c2^"Text1"
-c2^"Text2" |
-\once \override TextScript #'outside-staff-priority = #500
-c2^"Text3"
-c2^"Text4" |
+@lilypond[quote,fragment,ragged-right,verbatim]
+c''2^"Text1"
+c''2^"Text2" |
+\once \override TextScript.outside-staff-priority = #500
+c''2^"Text3"
+c''2^"Text4" |
@end lilypond
Damit wird zwar @qq{Text3} ganz richtig über @qq{Text4}
platziert, aber auch über @qq{Text2}, und @qq{Text4}
wird jetzt weiter unten gesetzt. Eigentlich sollten ja alle
-diese Anmerkungen gleichweit vom System entfernt sein.
+diese Anmerkungen gleich weit vom System entfernt sein.
Dazu muss offensichtlich horizontal etwas Platz gemacht
werden. Das kann erreicht werden mit dem
@code{textLengthOn}-(Textlänge an)-Befehl.
-@subheading \textLengthOn (Textlänge berücksichtigen)
+@node Der textLengthOn-Befehl
+@unnumberedsubsubsec Der @code{@bs{}textLengthOn}-Befehl (Textlänge berücksichtigen)
+@translationof The textLengthOn command
@cindex Noten, durch Text gespreizt
+
@funindex \textLengthOn
@funindex textLengthOn
@funindex \textLengthOff
dieses Verhalten, so dass die Noten gespreizt werden, wenn
die Breite des Textes es erfordert:
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,fragment,ragged-right,verbatim]
\textLengthOn % Cause notes to space out to accommodate text
-c2^"Text1"
-c2^"Text2" |
-c2^"Text3"
-c2^"Text4" |
+c''2^"Text1"
+c''2^"Text2" |
+c''2^"Text3"
+c''2^"Text4" |
@end lilypond
-Dieses Verhalten wird mit dem @code{\textLengthOff}-Befehl
-rückgängig gemacht. Erinnern Sie sich, dass @code{\once} nur mit
-@code{\override}, @code{\set}, @code{\revert} oder @code{unset}
-funktioniert, der Befehl kann also nicht zusammen mit
-@code{\textLengthOn} benutzt werden.
+Dieses Verhalten wird mit dem @code{\textLengthOff}-Befehl
+rückgängig gemacht. Alternativ kann auch @code{\once} zusammen mit
+@code{\textLengthOn} benutzt werden, um die Auswirkung auf einen
+einzigen musikalisches Zeitpunkt zu begrenzen. Das entsprechende
+Verhalten bzgl. des horizontalen Platzes für Übungzeichen und
+Tempomarkierungen kann hiervon unabhängig durch die Befehle
+@code{\markLengthOn} und @code{\markLengthOff} analog gesteuert werden.
@cindex Textbeschriftung, Vermeidung von Zusammenstößen
@cindex Zusammenstöße vermeiden mit Textbeschriftung
@cindex Textbeschriftung, Beispiel zur Veränderung
@cindex outside-staff-priority-Eigenschaft, Beispiel
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-% This markup is short enough to fit without collision
-c2^"Tex" c'' |
-R1 |
-
-% This is too long to fit, so it is displaced upwards
-c,,2^"Text" c'' |
-R1 |
-
-% Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
-c,,2^"Long Text " c'' |
-R1 |
-
-% Turn off collision avoidance
-\once \override TextScript #'outside-staff-priority = ##f
-\textLengthOn % and turn on textLengthOn
-c,,2^"Long Text " % Spaces at end are honored
-c''2 |
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ % This markup is short enough to fit without collision
+ c''2^"Tex" c'' |
+ R1 |
+
+ % This is too long to fit, so it is displaced upwards
+ c,,2^"Text" c'' |
+ R1 |
+
+ % Turn off collision avoidance
+ \once \override TextScript.outside-staff-priority = ##f
+ c,,2^"Long Text " c'' |
+ R1 |
+
+ % Turn off collision avoidance
+ \once \override TextScript.outside-staff-priority = ##f
+ \textLengthOn % and turn on textLengthOn
+ c,,2^"Long Text " % Spaces at end are honored
+ c''2 |
+}
@end lilypond
-
-@subheading Dynamik
+@node Positionierung von Dynamikzeichen
+@unnumberedsubsubsec Positionierung von Dynamikzeichen
+@translationof Dynamics placement
@cindex Verändern der Positionierung von Dynamikzeichen
@cindex Dynamikzeichen: Positionierung verändern
Dynamikbezeichnung wird üblicherweise unter dem System
gesetzt, kann aber auch nach oben mit dem Befehl
-@code{dynamicUp} gezwungen werden. Die Bezeichnung
+@code{\dynamicUp} gezwungen werden. Die Bezeichnung
wird vertikal relativ zu der Note positioniert, an die sie angefügt
-wurde. Sie wird vertikal variabel gesetzt in Bezug zu
+wurde. Sie wird vertikal variabel gesetzt in Bezug zu
Innersystemobjekten wie Bögen oder Taktnummern. Damit
können oft recht gute Resultate erreicht werden, wie im
folgenden Beispiel:
-@lilypond[quote,fragment,ragged-right,verbatim,relative=1]
-\clef "bass"
-\key aes \major
-\time 9/8
-\dynamicUp
-bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\!
-ees,2.~\)\mf ees4 r8
+@lilypond[quote,ragged-right,verbatim]
+\relative {
+ \clef "bass"
+ \key aes \major
+ \time 9/8
+ \dynamicUp
+ bes4.~\f\< \( bes4 bes8 des4\ff\> c16 bes\! |
+ ees,2.~\)\mf ees4 r8 |
+}
@end lilypond
Wenn aber Noten und Dynamikzeichen sehr dicht beieinander
nicht immer die beste Möglichkeit ist, wie in dem folgenden,
etwas gewollten Beispiel zu sehen ist:
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,ragged-right,verbatim,fragment]
\dynamicUp
-a4\f b\mf c\mp b\p |
+\relative { a'4\f b\mf a\mp b\p }
@end lilypond
@noindent
müssen also unsere eigenen Befehle mit @code{\override}
konstruieren.
-
-@subheading Verändern der Größe von grobs
+@node Verändern der Größe von grobs
+@unnumberedsubsubsec Verändern der Größe von grobs
+@translationof Grob sizing
@cindex Grob, Größenveränderung
@cindex Größenveränderung von grobs
Standardmäßig haben Außersystemobjekte eine Länge von Null,
so dass sie sich in horizontaler Richtung überlappen können. Das
geschieht, indem dem linken Rand Unendlich zugewiesen wird
-und dem rechten Rand minus Unendlich (der Code der
+und dem rechten Rand minus Unendlich, d.h. die
@code{extra-spacing-width}-(zusätzliche Positionierungslänge)-Eigenschaft
-lautet: @code{'(+inf.0 . -inf.0)}).
+wird auf den Wert @code{'(+inf.0 . -inf.0)} gesetzt.
Damit sich diese Objekte also horizontal nicht überschneiden, muss
-der Wert von @code{extra-spacing-width} auf
-@code{'(0 . 0)} gesetzt werden, sodass die wirkliche Länge eines
-Objektes zur Geltung kommt. Mit diesem Befehl wird das für
-Dynamik-Zeichen erledigt:
+der Wert von @code{extra-spacing-width} überschrieben werden um den
+Objekten ein wenig zusätzlich Platz zuzuweisen. Die Einheit ist der
+Abstand zwischen zwei Notenlinien, also sollte es reichen die linke
+und rechte Kante je eine halbe Einheit nach links bzw. rechts zu verschieben:
@example
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
@end example
@noindent
@cindex DynamicText, Beispiel zur Veränderung
@cindex extra-spacing-width-Eigenschaft, Beispiel
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-\dynamicUp
-\override DynamicText #'extra-spacing-width = #'(0 . 0)
-a4\f b\mf c\mp b\p
-@end lilypond
-
-@noindent
-Damit werden die Dynamik-Zeichen also wirklich nebeneinander
-gesetzt, aber es gibt noch zwei Probleme. Die Zeichen sollten
-etwas weiter außeinander stehen und es wäre gut, wenn sie alle
-den gleichen Abstand zum System hätte. Das erste Problem ist
-einfach behoben. Anstatt der @code{extra-spacing-width}-Eigenschaft
-Null zuzuweisen, können wir auch einen etwas größeren Wert
-wählen. Die Einheit wird gemessen in dem Abstand zwischen zwei
-Notenlinien, es scheint also gut, den rechten und linken
-Rand eine halbe Einheit zu vergrößern:
-@cindex DynamicText, Beispiel zur Veränderung
-@cindex extra-spacing-width-Eigenschaft, Beispiel
-
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
+@lilypond[quote,ragged-right,verbatim,fragment]
\dynamicUp
% Extend width by 1 staff space
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
-a4\f b\mf c\mp b\p
+\override DynamicText.extra-spacing-width = #'(-0.5 . 0.5)
+\relative { a'4\f b\mf a\mp b\p }
@end lilypond
@noindent
die wir uns im folgenden Abschnitt genauer anschauen werden.
+@node Vertikale Abstände
+@section Vertikale Abstände
+@translationof Vertical spacing
+
+In aller Regel ist die vertikale Platzierung von Objekten durch LilyPond
+ziemlich gut. Schauen wir uns das an einem einfachen Lied mit zwei Stimmen
+und Klavierbegleitung etwas näher an:
+
+@lilypond[quote,fragment,ragged-right]
+<<
+ \new ChoirStaff
+ <<
+ \new Staff {
+ \new Voice = "music" {
+ b'2 c' c' c'
+ }
+ }
+ \new Lyrics
+ \lyricsto "music" {
+ Here are some lyrics
+ }
+ \new Staff {
+ \clef bass e'2 f e c
+ }
+ >>
+ \new PianoStaff
+ <<
+ \new Staff {
+ g''2 c'' c'' a''
+ }
+ \new Staff {
+ \clef bass e2 f c e
+ }
+ >>
+>>
+@end lilypond
+
+An der vertikalen Platzierung ist nichts auszusetzen. Nehmen wir aber einmal
+an, wir arbeiten mit einem Verleger zusammen, der spezielle Wünsche bzgl.
+des Abstands von Systemen und Text hat: Der Text soll weit weg von allen
+Noten und die Klavierbegleitung soll weit weg von den Gesangslinien.
+Schließlich soll das Klaviersystem noch etwas enger zusammen geschoben
+werden. Fangen wir mit dem Liedtext an.
+
+Gesangstext wird innerhalb eines Systems platziert. Daher finden sich die
+Befehle zu seiner Platzierung in
+@ruser{Flexible vertikale Abstände in Systemgruppen}. Dort erfahren wir,
+das Gesangstext vom Typ @code{non-staff lines} ist und wir daher die
+Eigenschaft @code{nonstaff} anpassen müssen. Den Text weiter weg vom
+darüber liegenden System zu schieben verwendet die
+@code{relatedstaff}-Eigenschaft. Für den Abstand nach unten greifen
+wir auf die @code{unrelatedstaff}-Eigenschaft zurück. Gesangsstimmen
+gehören zu einer @code{VerticalAxisGroup}, also setzen wir deren
+Eigenschaften. Mal sehen, wie das klappt.
+
+@lilypond[quote,fragment,ragged-right,verbatim]
+<<
+ \new ChoirStaff
+ <<
+ \new Staff {
+ \new Voice = "music" {
+ b'2 c' c' c'
+ }
+ }
+ \new Lyrics \with {
+ \override VerticalAxisGroup.
+ nonstaff-relatedstaff-spacing.padding = #5
+ \override VerticalAxisGroup.
+ nonstaff-unrelatedstaff-spacing.padding = #5
+ }
+ \lyricsto "music" {
+ Here are some lyrics
+ }
+ \new Staff {
+ \clef bass e'2 f e c
+ }
+ >>
+ \new PianoStaff
+ <<
+ \new Staff {
+ g''2 c'' c'' a''
+ }
+ \new Staff {
+ \clef bass e2 f c e
+ }
+ >>
+>>
+@end lilypond
+
+Nun ja, es klappt. Aber vielleicht war das doch des Guten zu viel.
+Wenn wir @code{padding} auf 5 setzen, dann fügt LilyPond 5 System Abstände
+zum Abstand zwischen den Objekten hinzu, was im vorliegenden Fall
+eindeutig zu viel ist. Wir werden 2 verwenden.
+
+Als nächstes verschieben wir die Klavierbegleitung weiter weg von den
+Gesangsstimmen. Die Gesangsstimmen sind ein @code{ChoirStaff}, also werden
+wir den Abstand zwischen diesem und dem darunter liegenden Klaviersystem
+vergrößern. Das geschieht indem wir die @code{basic-distance} des
+@code{StaffGrouper}'s @code{staffgroup-staff-spacing} anpassen.
+
+@lilypond[quote,fragment,ragged-right,verbatim]
+<<
+ \new ChoirStaff \with {
+ \override StaffGrouper.
+ staffgroup-staff-spacing.basic-distance = #15
+ }
+ <<
+ \new Staff {
+ \new Voice = "music" {
+ b'2 c' c' c'
+ }
+ }
+ \new Lyrics \with {
+ \override VerticalAxisGroup.
+ nonstaff-relatedstaff-spacing.padding = #2
+ \override VerticalAxisGroup.
+ nonstaff-unrelatedstaff-spacing.padding = #2
+ }
+ \lyricsto "music" {
+ Here are some lyrics
+ }
+ \new Staff {
+ \clef bass e'2 f e c
+ }
+ >>
+ \new PianoStaff
+ <<
+ \new Staff {
+ g''2 c'' c'' a''
+ }
+ \new Staff {
+ \clef bass e2 f c e
+ }
+ >>
+>>
+@end lilypond
+
+Wunderbar. Jetzt kümmern wir uns noch um die letzte Anforderung, die
+Klaviersysteme enger zusammen zu schieben. Auch hierfür passen wir
+wieder die Eigenschaften des @code{StaffGrouper} an, aber dieses Mal
+werden wir sowohl die @code{basic-distance} als auch das @code{padding}
+reduzieren. Wie genau sehen Sie unten.
+
+@lilypond[quote,fragment,ragged-right,verbatim]
+<<
+ \new ChoirStaff \with {
+ \override StaffGrouper.
+ staffgroup-staff-spacing.basic-distance = #15
+ }
+ <<
+ \new Staff {
+ \new Voice = "music" {
+ b'2 c' c' c'
+ }
+ }
+ \new Lyrics \with {
+ \override VerticalAxisGroup.
+ nonstaff-relatedstaff-spacing.padding = #2
+ \override VerticalAxisGroup.
+ nonstaff-unrelatedstaff-spacing.padding = #2
+ }
+ \lyricsto "music" {
+ Here are some lyrics
+ }
+ \new Staff {
+ \clef bass e'2 f e c
+ }
+ >>
+ \new PianoStaff \with {
+ \override StaffGrouper.staff-staff-spacing = #'(
+ (basic-distance . 0)
+ (padding . 0))
+ }
+ <<
+ \new Staff {
+ g''2 c'' c'' a''
+ }
+ \new Staff {
+ \clef bass e2 f c e
+ }
+ >>
+>>
+@end lilypond
+
+Damit sind die echt eng beieinander -- aber das ist es, was der
+Verleger wollte. Wir könnten sie bei Bedarf wieder ein wenig auseinander
+schieben, indem wir @code{padding} oder @code{basic-distance}
+ändern.
+
+Es gibt viele Arten die vertikalen Abstände zu verändern. Im Grunde
+brauchen wir uns lediglich zu merken, dass der Abstand zwischen Objekten
+in einer @code{StaffGroup} (wie @code{GrandStaff} oder @code{PianoStaff}
+Gruppen) durch die Platzierungsvariablen des @code{StaffGrouper}
+kontrolliert wird. Wohingegen die Abstände von nicht gruppierten
+Systemen (wie @code{Lyrics} und @code{Staff}) von den Variablen der
+@code{VerticalAxisGroup} kontrolliert werden. Siehe
+@ruser{Flexible vertical spacing paper variables} und
+@ruser{Flexible vertikale Abstände in Systemgruppen} für weitere
+Details.
@node Kollision von Objekten
@section Kollision von Objekten
@menu
* Verschieben von Objekten::
* Überlappende Notation in Ordnung bringen::
-* Beispiele aus dem Leben::
+* Beispiel aus dem Leben::
@end menu
@node Verschieben von Objekten
@cindex Verschieben von überschneidenden Objekten
@cindex Verschieben von Zusammenstößen
@cindex Zusammenstöße vermeiden
-@cindex Objekte, verschieben von Zusammestößen
+@cindex Objekte, verschieben von Zusammenstößen
@cindex Vermeiden von Zusammenstößen
-Es wird vielleicht eine Überraschung sein, aber LilyPond ist nicht
-perfekt. Einige Notationselemente können sich überschneiden. Das
+Es wird vielleicht eine Überraschung sein, aber LilyPond ist nicht
+perfekt. Einige Notationselemente können sich überschneiden. Das
ist nicht schön, aber zum Glück sehr selten. Normalerweise müssen
die Objekte zur Klarheit oder aus ästhetischen Gründen verschoben
werden -- sie könnten besser aussehen, wenn sie etwas zusätzlichen
Platz erhalten.
Es gibt im Grunde drei Herangehensweisen, überlappende Notation
-zu verbessern. Man sollte sie in der folgenden Reihenfolge
+zu verbessern. Man sollte sie in der folgenden Reihenfolge
anwenden:
@enumerate
@item
-Die @strong{Richtung} eines der überlappenden Objekte kann
+Die @strong{Richtung} eines der überlappenden Objekte kann
geändert werden, indem die vordefinierten Befehle für
Innersystemobjekte verwendet werden, wie beschrieben in
-@ref{within-staff (Objekte innerhalb des Notensystems)}. Hälse, Bögen, Balken, Dynamik-Zeichen
+@ref{within-staff (Objekte innerhalb des Notensystems)}.
+Hälse, Bögen, Balken, Dynamik-Zeichen
und Triolen können auf diese Weise einfach umgeordnet
werden. Beschränkt ist diese Methode insofern, als es nur
zwei Möglichkeiten zur Veränderung gibt: oben oder unten.
@item
Die @strong{Objekteigenschaft}, die LilyPond benutzt um die
-Layout-Objekte zu platzieren, können mit dem
+Layout-Objekte zu platzieren, können mit dem
@code{\override}-Befehl positioniert werden. Die Vorteile
von Änderungen dieser Art sind a) dass einige Objekte
automatisch verschoben werden, wenn es nötig ist Platz zu
@ref{within-staff (Objekte innerhalb des Notensystems)}.
@item
-@code{padding}, @code{left-padding},
-@code{right-padding}, @code{staff-padding} (Verschiebung)
+@code{padding}, @code{right-padding}, @code{staff-padding} (Verschiebung)
-@cindex left-padding-Eigenschaft
@cindex Padding-Eigenschaft
@cindex right-padding-Eigenschaft
@cindex staff-padding-Eigenschaft
werden muss. Dabei zählt der @code{padding}-Wert
des Objektes, das platziert werden soll, der @code{padding}-Wert
des Objektes, das schon gesetzt wurde, wird hingegen
-ignoriert. Abstände mit @code{padding} können zu
+ignoriert. Abstände mit @code{padding} können zu
allen Objekten hinzugefügt werden, die das
@code{side-position-interface} unterstützen.
Anstelle von @code{padding} wird die Position von
Versetzungszeichengruppen durch die Eigenschaften
-@code{left-padding} und @code{right-padding} bestimmt.
-Diese Eigenschaften werden im
+@code{right-padding} bestimmt. Diese Eigenschaft wird im
@code{AccidentalPlacement}-(Versetzungszeichen-Positionierungs)-Objekt
gefunden, das sich innerhalb des @strong{Staff}-Kontexts
befindet. Während des Notensatzes werden die Notenköpfe
zuerst gesetzt und dann die Versetzungszeichen, wenn denn
-welche gesetzt werden, durch die @code{right-padding}-Eigenschaft
+welche gesetzt werden, durch die @code{right-padding}-Eigenschaft
auf die linke Seite der Notenköpfe positioniert, um die Entfernung
-von den Notenköpfen zu bestimmen. Also nur die
-@code{right-padding}-(Verschiebung nach rechts)-Eigenschaft des
-@code{AccidentalPlacement}-Objekts hat Einfluss auf die
+von den Notenköpfen und zwischen den einzelnen Versetzungszeichen zu
+bestimmen. Also nur die @code{right-padding}-(Verschiebung nach rechts)-Eigenschaft
+des @code{AccidentalPlacement}-Objekts hat Einfluss auf die
Positionierung der Versetzungszeichen.
Die @code{staff-padding}-(Verschiebung zum System)-Eigenschaft
ist sehr ähnlich wie die @code{padding}-Eigenschaft:
@code{padding} bestimmt den Minimalabstand zwischen
-einem Objekt, das das @code{side-position-interface}
+einem Objekt, das das @code{side-position-interface}
unterstützt, und dem nächsten anderen Objekt (normalerweise
die Note oder Notenlinie); @code{staff-padding} dagegen
wirkt nur auf Objekte die immer außerhalb des Notensystems
sind -- damit wird der minimale Abstand bestimmt, der
-zwischen dem Objekt und dem Notensystem gelassen werden
+zwischen dem Objekt und dem Notensystem gelassen werden
soll. @code{staff-padding} hat also @strong{keinen Einfluss}
auf Objekte, die relativ zu einer Note positioniert werden, sondern
nur auf solche, die zum System relativ stehen. Wenn es mit einem
also auch in Objekten nach, die offensichtlich Ähnlichkeiten
haben.
-Alle @code{padding}-Werte werden in Notenlinienabständen
+Alle @code{padding}-Werte werden in Notenlinienabständen
gemessen. Für die meisten Objekte ist der Wert ungefähr auf
1.0 oder weniger gesetzt (das variiert von Objekt zu Objekt).
Der Wert kann geändert werden, wenn ein größerer (oder
unterstützen. Das sind üblicherweise Objekte, die Text
enthalten. Die möglichen Werte der Eigenschaft sind @code{LEFT},
@code{RIGHT} oder @code{CENTER}. Alternativ kann ein
-numerischer Wert zwischen @code{-1} und @code{+1}
-bestimmt werden: @code{-1} heißt linksbündig, @code{+1}
+numerischer Wert zwischen @w{@code{-1}} und @code{+1}
+bestimmt werden: @w{@code{-1}} heißt linksbündig, @code{+1}
rechtsbündig und Zahlen dazwischen bewegen den Text
schrittweise von links nach rechts. Zahlen größer als
@code{1} können angegeben werden, um den Text
-noch weiter nach links zu bewegen, oder weniger als @code{-1},
+noch weiter nach links zu bewegen, oder weniger als @w{@code{-1}},
um ihn weiter nach rechts zu schieben. Eine Änderung
-um @code{1} des Wertes entspricht einer Bewegung um
+um @code{1} des Wertes entspricht einer Bewegung um
die halbe Textbreite.
@item
Zahlen verschieben die Ausdehnung nach rechts, positive nach
links, um also ein Objekt zu verbreitern, muss die erste
Zahl negativ und die zweite positiv sein. Allerdings beachten
-nicht alle Objekte beide Zahlen. Das
+nicht alle Objekte beide Zahlen. Das
@code{accidental}-(Versetzungszeichen)-Objekt etwa beachtet
nur erste Zahl für die linke Ausdehnung.
zu lösen.
@item
-@code{force-hshift} (vertikale Verschiebung erzwingen)
+@code{horizontal-shift} (horizontale Verschiebung)
+
+@cindex horizontal-shift-Eigenschaft
+@cindex Notenkolumne
+@cindex Notenkollisionen
+@cindex Kollision, Noten
+@cindex shift Befehl
+@funindex \shiftOff
+@funindex shiftOff
+@funindex \shiftOn
+@funindex shiftOn
+@funindex \shiftOnn
+@funindex shiftOnn
+@funindex \shiftOnnn
+@funindex shiftOnnn
+
+Innerhalb einer Stimme werden alle Noten, die zeitgleich stattfinden,
+zu einer Gruppe zusammen gefasst, einem sog. @code{NoteColumn} Objekt.
+Dieses Objekt dient dem Zweck, diese Gruppe von Noten horizontal zu
+positionieren (siehe auch @qq{Notenkolumnen} in @ref{Stimmen explizit beginnen}).
+@emph{Genau dann, wenn} zwei oder mehr Notenkolumnen innerhalb eines
+Systemkontexts, die beide jeweils die Hälse in die gleiche Richtung haben
+und auch zur gleichen Zeit stattfinden, werden die Werte ihrer
+@code{horizontal-shift}-Eigenschaften nach Größe sortiert und die Objekte
+dann mit einer Ordnungsnummer versehen. Je größer diese Ordnungsnummer,
+desto stärker wird ein Objekt verschoben um eine Kollision der Notenköpfe
+zu vermeiden. Diese Eigenschaft wird mit den @code{\voiceXXX}-Befehlen
+gesetzt und kann direkt durch einen @code{\override}-Befehl, oder was für
+gewöhnlich häufiger vorkommt, durch einen @code{\shiftOn}-Befehl gesetzt
+werden. Bedenken sie bitte, diese Eigenschaft dient lediglich dazu, den
+Notenkolumnen eine @emph{Ordnungsnummer} zuzuweisen - sie bestimmt in
+keinster Weise die Größe der jeweiligen Verschiebung. Die steigt mit
+zunehmender Ordnungsnummer in festen Schritten. Die Schrittweite ist
+für gewöhnlich eine halbe Notenkopfbreite. Bei sehr eng platzierten Notengruppen
+kann sie aber auch mal eine ganze Notenkopfbreite betragen.
-@cindex force-hshift-Eigenschaft
+@item
+@code{force-hshift} (horizontale Verschiebung erzwingen)
-Eng beieinander stehende Noten in einem Akkord oder Noten, die zum
-gleichen Zeitpunkt in unterschiedlichen Stimmen stehen, werden
-in zwei oder manchmal auch mehr Kolumnen gesetzt, um Kollisionen
-zu umgehen. Diese Kolumnen werden Notenkolumnen genannt;
-ein @code{NoteColumn}-Objekt wird erstellt um die Noten in den
-Kolumnen zu setzen.
+@cindex force-hshift-Eigenschaft
Die @code{force-hshift}-(erzwinge horizontale Verschiebung)-Eigenschaft
ist eine Eigenschaft von @code{NoteColumn} (bzw. vom
@code{note-column-interface}). Eine Veränderung dieser Eigenschaft
-macht es möglich, eine Notenkolumne zu verschieben, dabei gilt als
-Einheit die Breite einer Kolumne, also die Breite des Notenkopfes der
-ersten Stimme. Diese Eigenschaft kann in Situationen benutzt werden,
-in denen die normalen @code{\shiftOn}-Befehle (siehe auch
-@ref{Stimmen explizit beginnen}) das Problem nicht beseitigen.
-Diese Eigenschaft ist besser in solchen Fällen zu verwenden als die
-@code{extra-offset}-Eigenschaft, weil man die richtige Entfernung nicht
+macht es möglich, eine Notenkolumne zu verschieben, wenn sie mit anderen
+überlappt. Diese Eigenschaft hat keinerlei Auswirkungen, wenn keine
+Überlappung vorliegt. Veränderungen werden in einer Einheit angegeben,
+die zu der Notenkolumne passt, d.h. der Breite des Notenkopfes der Note
+der ersten Stimme. Diese Eigenschaft sollte in denjenigen komplexen
+Fällen verwendet werden, die sich nicht mit dem normalen @code{\shiftOn}-Befehle
+(siehe auch @ref{Stimmen explizit beginnen}) lösen lassen.
+Sie ist auf jeden Fall der Verwendung der @code{extra-offset}-Eigenschaft
+vorzuziehen, weil man die richtige Entfernung nicht
in Notenlinienabständen ausrechnen muss. Wenn eine Note in eine
Notenkolumne oder aus ihr heraus geschoben wird, werden auch andere
Funktionen beeinflusst, wie etwa die Verschmelzung von Notenköpfen.
werden, wenn LilyPond alle anderen Objekte gesetzt hat, ist man als
Notensetzer selber dafür verantwortlich, ob es Zusammenstöße gibt.
Am schwerwiegendsten ist aber die Tatsache, dass die
-Verschiebungskoordinaten wahrscheinlich neu errechnet oder
+Verschiebungskoordinaten wahrscheinlich neu errechnet oder
ausprobiert werden müssen, wenn sich an den Noten und deren
Layout später irgend etwas ändert. Die Eigenschaften, die für diese
Arte der manuellen Verschiebung verwendet werden können, sind:
Einheit sind Notenlinienabstände. Bögen allerdings können nicht
beliebig weit weg positioniert werden. LilyPond erstellt zunächst eine
Liste an möglichen Positionen für den Bogen und findet normalerweise
-die Version, die @qq{am besten aussieht}. Wenn die
+die Version, die @qq{am besten aussieht}. Wenn die
@code{positions}-Eigenschaft verändert worden ist, wird der
Bogen aus der Liste gewählt, der der gewünschten Position am
nächsten kommt.
mit sich überschneidenden Notationselementen eingesetzt
werden können.
-@subheading padding (Fülleigenschafte)
+@menu
+* Die padding-Eigenschaft::
+* Die right-padding-Eigenschaft::
+* Die staff-padding-Eigenschaft::
+* Die self-alignment-X-Eigenschaft::
+* Die staff-position-Eigenschaft::
+* Die extra-offset-Eigenschaft::
+* Die positions-Eigenschaft::
+* Die force-hshift-Eigenschaft::
+@end menu
+
+@node Die padding-Eigenschaft
+@unnumberedsubsubsec Die @code{padding}-Eigenschaft (auffüllen)
+@translationof The padding property
@cindex padding (Verschiebungs-Eigenschaft)
@cindex Überschneidende Notation korrigieren
@cindex Korrigieren von überschneidender Notation
Die @code{padding}-(Verschiebungs-)Eigenschaft kann benutzt
-werden, um den Abstand zwischen Symbolen zu vergößern (oder
+werden, um den Abstand zwischen Symbolen zu vergrößern (oder
zu verkleinern), die über oder unter den Noten gesetzt werden.
@cindex Script, Beispiel zur Veränderung
@cindex Verschiebungs-Eigenschaft, Beispiel
@cindex padding (Verschiebuns-Eigenschaft), Beispiel
-@lilypond[quote,fragment,relative=1,verbatim]
-c2\fermata
-\override Script #'padding = #3
+@lilypond[quote,fragment,verbatim]
+c'2\fermata
+\override Script.padding = #3
b2\fermata
@end lilypond
@cindex Verschiebungs-Eigenschaft, Beispiel
@cindex padding (Verschiebuns-Eigenschaft), Beispiel
-@lilypond[quote,fragment,relative=1,verbatim]
+@lilypond[quote,fragment,verbatim]
% This will not work, see below
-\override MetronomeMark #'padding = #3
-\tempo 4=120
-c1 |
+\override MetronomeMark.padding = #3
+\tempo 4 = 120
+c'1 |
% This works
-\override Score.MetronomeMark #'padding = #3
-\tempo 4=80
-d1 |
+\override Score.MetronomeMark.padding = #3
+\tempo 4 = 80
+d'1 |
@end lilypond
Im zweiten Beispiel können Sie sehen, wie wichtig es ist den richtigen
werden das Objekt und alle, die sich außerhalb davon befinden,
entsprechend verschoben.
-@subheading left-padding (Verschieben nach rechts) und right-padding (Verschieben nach links)
-@cindex left-padding-Eigenschaft (Verschiebung nach links)
-@cindex Verschiebung nach rechts oder links
-@cindex right-padding-Eigenschaft (Verschiebung nach rechts)
+@node Die right-padding-Eigenschaft
+@unnumberedsubsubsec Die @code{right-padding}-Eigenschaft (rechts auffüllen)
+@translationof The right-padding property
+
+@cindex Verschiebung nach links
+@cindex right-padding-Eigenschaft (Verschiebung nach links)
Die @code{right-padding}-Eigenschaft wirkt sich auf den Abstand
zwischen einem Versetzungszeichen und der Note, auf das sie sich
@lilypond[quote,ragged-right,verbatim]
sesquisharp = \markup { \sesquisharp }
- \relative c'' {
- c4
+ \relative {
+ c''4
% This prints a sesquisharp but the spacing is too small
- \once \override Accidental
- #'stencil = #ly:text-interface::print
- \once \override Accidental #'text = #sesquisharp
+ \once \override Accidental.stencil = #ly:text-interface::print
+ \once \override Accidental.text = #sesquisharp
cis4 c
% This improves the spacing
- \once \override Score.AccidentalPlacement #'right-padding = #0.6
- \once \override Accidental
- #'stencil = #ly:text-interface::print
- \once \override Accidental #'text = #sesquisharp
+ \once \override Score.AccidentalPlacement.right-padding = #0.6
+ \once \override Accidental.stencil = #ly:text-interface::print
+ \once \override Accidental.text = #sesquisharp
cis4
}
@end lilypond
durch die Veränderung von @code{right-padding} mit einem
@code{\override}-Befehl.
-@subheading staff-padding (Systemfüllungseigenschaft)
+@node Die staff-padding-Eigenschaft
+@unnumberedsubsubsec The @code{staff-padding}-Eigenschaft (Systemfüllungseigenschaft)
+@translationof The staff-padding property
@cindex staff-padding-Eigenschaft
@cindex Objekte an der Grundlinie ausrichten
@cindex Ausrichten von Objekten an der Grundlinie
-@code{staff-padding} (Verschiebung zum Notensystem) kann
+@code{staff-padding} kann
verwendet werden um Objekte wie Dynamikzeichen an einer
-Grundlinie auf einer bestimmten Höhe über dem System
-auszurichten, sodass sie nicht von der Position der Note abhängen,
-an die sie angehängt sind. Diese Verschiebung ist keine Eigenschaft
+Grundlinie mit einem festen (Mindest-) Abstand zum System auszurichten,
+wenn keine anderen Notationsobjekte einen noch weiteren Abstand erfordern.
+Diese Verschiebung ist keine Eigenschaft
von @code{DynamicText}, sondern von @code{DynamicLineSpanner}.
-Das liegt daran, dass die Grundlinie sich gleicherweise auf
+Das liegt daran, dass die Grundlinie sich gleicherweise auf
@strong{alle} Dynamikzeichen beziehen soll, also auch auf die,
die als Strecker erstellt wurden. Hier also die Lösung, die Dynamikzeichen
aus dem Beispiel des vorigen Abschnitts auszurichten:
@cindex DynamicLineSpanner, Beispiel zur Veränderung
@cindex staff-padding-Eigenschaft, Beispiel
-@lilypond[quote,fragment,ragged-right,verbatim,relative=2]
-\dynamicUp
-% Extend width by 1 unit
-\override DynamicText #'extra-spacing-width = #'(-0.5 . 0.5)
-% Align dynamics to a base line 2 units above staff
-\override DynamicLineSpanner #'staff-padding = #2
-a4\f b\mf c\mp b\p
+@lilypond[quote,fragment,ragged-right,verbatim]
+\override DynamicLineSpanner.staff-padding = #3
+\relative { a'4\f b\mf a\p b\mp }
@end lilypond
-@subheading self-alignment-X (Selbstausrichtung-X-Eigenschaft)
+@node Die self-alignment-X-Eigenschaft
+@unnumberedsubsubsec Die @code{self-alignment-X}-Eigenschaft (Selbstausrichtung-X-Eigenschaft)
+@translationof The self-alignment-X property
-@cindex self-alignment-X-Eigenschaft
-
-Das nächste Beispiel zeigt, wie man den Zusammenstoß
-einer Fingersatzbezeichnung mit einem Notenhals
-verhindern kann, indem die rechte Ecke an dem
-Referenzpunkt der abhängigen Note angeordnet wird:
+Das nächste Beispiel zeigt, wie man die Position einer
+Fingersatzbezeichnung relativ zu einem Notenhals justieren kann,
+indem dessen rechte Kante an dem Referenzpunkt der zugehörigen Note
+ausgerichtet wird:
@cindex StringNumber, Beispiel zur Veränderung
+@cindex self-alignment-X-Eigenschaft
+@cindex Selbstausrichtung-X-Eigenschaft
-@lilypond[quote,fragment,ragged-right,verbatim,relative=3]
+@lilypond[quote,fragment,ragged-right,verbatim]
\voiceOne
-< a\2 >
-\once \override StringNumber #'self-alignment-X = #RIGHT
-< a\2 >
+<a''\2>
+\once \override StringNumber.self-alignment-X = #RIGHT
+<a''\2>
@end lilypond
-
-@subheading staff-position (Position innerhalb des Systems)
+@node Die staff-position-Eigenschaft
+@unnumberedsubsubsec Die @code{staff-position}-Eigenschaft (Position innerhalb des Systems)
+@translationof The staff-position property
@cindex staff-position-Eigenschaft
@cindex Notensystem-Position-Eigenschaft
@cindex Kollision von Objekten im System
@cindex Zusammenstöße von Objekten im System
-Vieltaktpausen in einer Stimmen können mit Noten in anderen
+Mehrtaktpausen in einer Stimmen können mit Noten in anderen
Stimmen kollidieren. Da diese Pausen zentriert zwischen den
-Taktlinien gesetzt werden, würde es für LilyPond eine recht große
+Taktstriche gesetzt werden, würde es für LilyPond eine recht große
Anstrengung bedeuten herauszufinden, welche Noten mit ihnen
zusammenstoßen könnten, denn alle Kollisionsvermeidung
für Noten und Pausen funktioniert nur für Noten bzw. Pausen, die
zur selben Zeit auftreten. Hier ein typisches Beispiel für eine
Kollision dieser Art:
-@lilypond[quote,verbatim,fragment,ragged-right, relative=1]
-<< { c4 c c c } \\ { R1 } >>
+@lilypond[quote,verbatim,ragged-right]
+<< \relative { c'4 c c c } \\ { R1 } >>
@end lilypond
-Die beste Lösung ist es, die Ganztaktpause nach unten zu
+Die beste Lösung ist es hier, die Ganztaktpause nach unten zu
schieben, denn die Pause ist in der zweiten Stimme. Per
Standardeinstellung für die zweite Stimme (@code{\voiceTwo},
also die zweite Stimme in der
-@code{<<@{...@} \\ @{...@}>>}-Konstruktion) wird die
+@code{<<@{@dots{}@} \\ @{@dots{}@}>>}-Konstruktion) wird die
Position auf dem System (@code{staff-position}) auf -4
für @code{MultiMeasureRest}, in unserem Beispiel muss
-es also bspw. auf die Position @code{-8} gesetzt werden,
+es also bspw. auf die Position @w{@code{-8}} gesetzt werden,
d.h. vier halbe Notenlinienabstände weiter nach unten:
@cindex MultiMeasureRest, Beispiel zur Veränderung
@cindex Ganztaktpausen, Beispiel zur Veränderung
@cindex staff-position-Eigenschaft, Beispiel
-@lilypond[quote,verbatim,fragment,ragged-right, relative=1]
+@lilypond[quote,verbatim,ragged-right]
<<
- { c4 c c c }
+ \relative { c'4 c c c }
\\
- \override MultiMeasureRest #'staff-position = #-8
+ \override MultiMeasureRest.staff-position = #-8
{ R1 }
>>
@end lilypond
Das ist besser, als etwa @code{extra-offset} zu benutzen, denn
in unserem Fall wird die Hilfslinie der Pause automatisch gesetzt.
-
-@subheading extra-offset (Genaues Positionieren)
+@node Die extra-offset-Eigenschaft
+@unnumberedsubsubsec Die @code{extra-offset}-Eigenschaft (Genaues Positionieren)
+@translationof The extra-offset property
@cindex extra-offset-Eigenschaft
@cindex Zusätzlicher Abstand, Positionierung
@cindex Fingersatz, Beispiel zur Veränderung
@cindex extra-offset-Eigenschaft, Beispiel
-@lilypond[quote,fragment,relative=1,verbatim]
-\stemUp
-f4-5
-\once \override Fingering #'extra-offset = #'(-0.3 . -1.8)
-f4-5
+@lilypond[quote,fragment,verbatim]
+f'4-5
+\once \override Fingering.extra-offset = #'(-0.3 . -1.8)
+f'4-5
@end lilypond
-@subheading Ausrichtungseigenschaft
+@node Die positions-Eigenschaft
+@unnumberedsubsubsec Die @code{positions}-Eigenschaft (Ausrichtungseigenschaft)
+@translationof The positions property
@cindex positions-Eigenschaft
@cindex Kontrolle über Triolen, Bögen und Balken manuell
@cindex Bögen, manuelle Kontrolle
@cindex Legatobögen, manuelle Kontrolle
@cindex Phrasierungsbögen, manuelle Kontrolle
-@cindex Triollen-Klammer, manuelle Kontrolle
+@cindex Triolen-Klammer, manuelle Kontrolle
-Die @code{positions}-Eigenschaft erlaubt die Kontrolle von Position und
-Steigung von Balken, Legato- und Phrasierungsbögen sowie Triolenklammern.
-Hier ein Beispiel, in der ein unschöner Phrasierungsbogen auftritt, weil
-er den Bogen des Vorschlags vermeidet:
+Die @code{positions}-Eigenschaft ermöglicht es, die vertikale Position
+und damit implizit die Neigung von N-tolen, Legato- und Phrasierungsbögen
+sowie Balken manuell zu steuern.
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
-r4 \acciaccatura e8\( d8 c~ c d c d\)
-@end lilypond
+Im folgenden Beispiel überlappen der Legato- und er Phrasierungsbogen:
-@noindent
-Man könnte einfach den Phrasierungsbogen oberhalb der Noten setzen, und
-das wäre auch die beste Lösung:
+@lilypond[quote,verbatim,ragged-right]
+\relative { a'8 \( ( a'16 ) a \) }
+@end lilypond
@cindex Phrasierungsbogen, Beispiel zur Veränderung
@cindex positions-Eigenschaft, Beispiel
@cindex Positionierung, Beispiel
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
-r4
-\phrasingSlurUp
-\acciaccatura e8\( d8 c~ c d c d\)
-@end lilypond
-
@noindent
-aber wenn es einen Grund geben sollte, warum das nicht geht, könnte
-man das linke Ende des Phrasierungsbogens etwas nach unten verschieben,
-indem man die @code{positions}-Eigenschaft einsetzt. Damit
-verschwindet auch die etwas unschöne Form:
-
-@lilypond[quote,verbatim,fragment,ragged-right,relative=1]
-r4
-\once \override PhrasingSlur #'positions = #'(-4 . -3)
-\acciaccatura e8\( d8 c~ c d c d\)
+Ein Möglichkeit wäre es, die beiden Endpunkte des Phrasierungsbogen
+weiter nach oben zu verschieben. Wir probieren einmal das linke
+Ende 2.5 Staff-Einheiten über die Mittellinie und das rechte Ende
+4.5 Einheiten darüber zu fixieren und überlassen es LilyPond, einen
+zu diesen Endpunkten passenden Phrasierungsbogen auszuwählen:
+
+@lilypond[quote,verbatim,fragment,ragged-right]
+\once \override PhrasingSlur.positions = #'(2.5 . 4.5)
+a'8 \( ( a''16 ) a'' \)
@end lilypond
-Hier noch ein weiteres Beispiel aus der Einleitung von Chopins
-Prelude Op. 28 Nr. 2, das untere System. Wie zu sehen ist,
-stößt der Balken mit den oberen Noten zusammen:
+Auf jeden Fall eine Verbesserung, aber warum das rechte Ende des
+Legatobogens nicht ein wenig nach unten verschieben? Wenn Sie es
+versuchen werden sie feststellen, es ist auf diesem Wege nicht
+möglich, und das liegt daran, dass LilyPond von sich aus keinen
+Bogen erzeugt, der niedriger läge, als der, den es bereits auswählt.
+In solch einem Fall hat eine Änderung der @code{positions}-Eigenschaft
+keinerlei Auswirkung. Allerdings @emph{können} Binde-, Legato- und
+Phrasierungsbögen bei Bedarf sehr exakt positioniert und auch geformt
+werden. Unter @ruser{Bögen verändern} können sie lernen, wie.
-@lilypond[quote,verbatim,fragment,ragged-right]
+Hier noch ein weiteres Beispiel. Wie zu sehen ist,
+stößt der Balken mit den oberen Bögen zusammen:
+
+@lilypond[quote,verbatim,ragged-right]
{
- \clef "bass"
- << { b,8 ais, b, g, } \\ { e, g e, g } >>
- << { b,8 ais, b, g, } \\ { e, g e, g } >>
+ \time 4/2
+ <<
+ \relative { c'1~ 2. e8 f }
+ \\
+ \relative {
+ e''8 e e e
+ e e e e
+ f2 g
+ }
+ >>
+ <<
+ \relative { c'1~ 2. e8 f }
+ \\
+ \relative {
+ e''8 e e e
+ e e e e
+ f2 g
+ }
+ >>
}
@end lilypond
@noindent
Das kann manuell gelöst werden, indem beide Enden des Balkens
-von ihrer Position 2 Notenlinienabstände über der Mittellinie
-hochgeschoben werden, etwa auf 3:
+von ihrer Position 1.81 Notenlinienabstände unter der Mittellinie
+hoch geschoben werden, etwa auf 1:
@cindex Balken, Beispiel zur Veränderung
@cindex positions-Eigenschaft, Beispiel
@cindex Positionierung, Beispiel
-@lilypond[quote,verbatim,fragment,ragged-right]
+@lilypond[quote,verbatim,ragged-right]
{
- \clef "bass"
+ \time 4/2
<<
- \override Beam #'positions = #'(3 . 3)
- { b,8 ais, b, g, }
- \\
- { e, g e, g }
+ \relative { c'1~ 2. e8 f }
+ \\
+ \relative {
+ \override Beam.positions = #'(-1 . -1)
+ e''8 e e e
+ e e e e
+ f2 g
+ }
+ >>
+ <<
+ \relative { c'1~ 2. e8 f }
+ \\
+ \relative {
+ e''8 e e e
+ e e e e
+ f2 g
+ \revert Beam.positions
+ }
>>
- << { b,8 ais, b, g, } \\ { e, g e, g } >>
}
@end lilypond
@noindent
-Hier ist zu beobachten, dass die Veränderung sich auch auf die
-weiteren Achtelbalken der ersten Stimme auswirkt, während sie keine
-Auswirkung auf die Balken der zweiten Stimme hat.
+Hier ist zu beobachten, dass die Veränderung sich auch auf den
+die zweite Stimme des weiteren Taktes mit Achtelnoten auswirkt,
+während sie keine Auswirkung auf die Hälse der ersten Stimme hat.
+Sobald das override nicht mehr benötigt wird, sollte es wie
+zu sehen reverted werden.
-@subheading force-hshift (vertikale Verschiebunseigenschaft)
+@node Die force-hshift-Eigenschaft
+@unnumberedsubsubsec Die @code{force-hshift}-Eigenschaft (horizontale Verschiebunseigenschaft)
+@translationof The force-hshift property
@cindex force-hshift-Eigenschaft
@cindex Vertikale Verschiebung erzwingen
gebracht:
@lilypond[quote,verbatim,fragment,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
\key aes \major
<<
- { c2 aes4. bes8 }
+ { c''2 aes4. bes8 }
\\
- { aes2 f4 fes }
+ { <ees, c>2 des }
\\
- {
- \voiceFour
- <ees c>2 des
- }
+ \\
+ { aes'2 f4 fes }
>> |
<c ees aes c>1 |
}
@end lilypond
@noindent
-Die unteren zwei Noten des ersten Akkords (also die in der
-dritten Stimme) sollten nicht aus der Notenkolumne der
-oberen zwei Noten weggeschoben werden. Um das zu
-korrigieren, setzen wir @code{force-hshift}, das eine
-Eigenschaft von
-@code{NoteColumn} ist, für diese Noten auf Null.
-Die untere Note des zweiten Akkordes wird am besten
-direkt rechts von den oberen Noten gesetzt. Das erreichen
-wir, indem wir @code{force-hshift} für diese Note auf
-0.5 setzen, also eine halbe Notenkopfbreite nach rechts von
-der Kolumne der oberen Noten aus.
+Die inneren Noten des ersten Akkordes (also das As in der vierten Stimme)
+müssen nicht mit shift verschoben aus der Noten-Kolumne der höheren Stimme
+verschoben werden, daher verwenden wir @code{\shiftOff}.
+
+Im zweiten Akkord wollen wir, dass das F sich am As orientiert und die
+tiefste Note leicht nach rechts verschoben wird, damit ein Zusammenstoß
+der Hälse vermieden wird. Das erreicht man mit @code{force-hshift} in
+@code{NoteColumn} des unteren Des, um es einen halben
+Notenlinienzwischenraum nach rechts zu verschieben und gleichzeitig
+@code{force-hshift} für das F auf Null.
+Ihnen ist sicher aufgefallen, dass wir @code{\once} verwenden damit
+die Veränderung nicht über den konkreten Fall hinaus wirkt, auch wenn
+im konkreten kleinen Beispiel @code{\once} und das zweite @code{\override}
+in der vierten Stimme weggelassen werden könnte. Das wäre aber
+schlechter Stil.
Hier das Endergebnis:
@cindex vertikale Verschiebung, Beispiel
@lilypond[quote,verbatim,fragment,ragged-right]
-\new Staff \relative c'' {
+\new Staff \relative {
\key aes \major
<<
- { c2 aes4. bes8 }
+ { c''2 aes4. bes8 }
\\
- { aes2 f4 fes }
+ { <ees, c>2 \once \override NoteColumn.force-hshift = 0.5 des }
\\
- {
- \voiceFour
- \once \override NoteColumn #'force-hshift = #0
- <ees c>2
- \once \override NoteColumn #'force-hshift = #0.5
- des2
- }
+ \\
+ { \once \shiftOff aes'2 \once \shiftOff f4 fes }
>> |
<c ees aes c>1 |
}
@end lilypond
-@node Beispiele aus dem Leben
-@subsection Beispiele aus dem Leben
+@node Beispiel aus dem Leben
+@subsection Beispiel aus dem Leben
@translationof Real music example
Das Kapitel zu Optimierungen soll mit einem komplizierten Beispiel
Dynamik, Fingersatz und Pedalbezeichnung, um das Beispiel nicht
zu kompliziert zu machen.
+@c The following should appear as music without code
@c This example should not be indexed
-@lilypond[quote,ragged-right,line-width=5.5\in]
-rhMusic = \relative c'' {
- r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
- bes1~ |
- \bar "||"
- \time 6/4
- \mergeDifferentlyHeadedOn
- \mergeDifferentlyDottedOn
- bes2.^\markup { \bold "Moderato"} r8
- <<
- { c,8 d fis bes a | }
- \\
- {
- % Reposition the c2 to the right of the merged note
- c,8~ \once \override NoteColumn #'force-hshift = #1.0
- % Move the c2 out of the main note column so the merge will work
- \shiftOnn c2
- }
- \\
- {
- % Stem on the d2 must be down to permit merging
- s8 \stemDown
- \once \override Stem #'transparent = ##t
- d2
- }
- \\
- { s4 fis4.}
- >> |
- \mergeDifferentlyHeadedOff
- \mergeDifferentlyDottedOff
- g2.\)
+@c line-width ensures no break
+@lilypond[quote,ragged-right,line-width=6\in]
+rhMusic = \relative {
+ \new Voice {
+ r2 c''4.\( g8 |
+ \once \override Tie.staff-position = #3.5
+ bes1~ |
+ \bar "||"
+ \time 6/4
+ \mergeDifferentlyHeadedOn
+ \mergeDifferentlyDottedOn
+ bes2.\tempo "Moderato" r8
+ <<
+ { c,8 d fis bes a }
+ \new Voice {
+ \voiceTwo
+ c,8~
+ % Reposition the c2 to the right of the merged note
+ \once \override NoteColumn.force-hshift = #1.0
+ % Move the c2 out of the main note column
+ % so the merge will work
+ \shiftOnn
+ c2
+ }
+ \new Voice {
+ \voiceThree
+ s8
+ % Stem on the d2 must be down to permit merging
+ \stemDown
+ % Stem on the d2 should be invisible
+ \tweak Stem.transparent ##t
+ d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ \mergeDifferentlyHeadedOff
+ \mergeDifferentlyDottedOff
+ g2.\)
+ }
}
-lhMusic = \relative c' {
- r2 <c g ees>2( |
+lhMusic = \relative {
+ r2 <c' g ees>2( |
<d g, d>1)\arpeggio |
r2. d,,4 r4 r |
r4
mit der Achtel D verschmolzen ist, und die punktierte Viertel
Fis, die auch mit einer Achtelnote verschmolzen ist. Alles
andere ist eine einzige Stimme, es ist also am einfachsten, die
-Stimmen nur zeitweise zu erstellen, wenn sie auftreten. Wenn
-Sie vergessen haben, wie man das anstellt, schauen Sie sich
-nochmal den Abschnitt @ref{Ich höre Stimmen} an. Wir
-wollen anfange, indem wir die Noten in zwei Variablen
+zusätzlichen drei Stimmen nur zeitweise zu erstellen, wenn sie
+auftreten. Wenn Sie vergessen haben, wie man das anstellt,
+schauen Sie sich nochmal den Abschnitt @ref{Ich höre Stimmen}
+und @ref{Stimmen explizit beginnen} an. Hier wollen wir explizit
+begonnene Stimmen für die polyphone Stelle benutzen, weil LilyPond
+Kollisionen besser vermeidet, wenn alle Stimmen auf diese Weise
+explizit begonnen werden.
+
+
+Wir wollen anfange, indem wir die Noten in zwei Variablen
notieren und dann die Systemstruktur in einer
@code{\score}-Umgebung erstellen. Das ist, was LilyPond
erstellt:
@c line-width ensures no break
-@lilypond[quote,verbatim,ragged-right,line-width=5.5\in]
-rhMusic = \relative c'' {
- r2 c4. g8 |
- bes1~ |
- \time 6/4
- bes2. r8
- % Start polyphonic section of four voices
- <<
- { c,8 d fis bes a | }
- \\
- { c,8~ c2 | }
- \\
- { s8 d2 | }
- \\
- { s4 fis4. | }
- >> |
- g2. |
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
+rhMusic = \relative {
+ \new Voice {
+ r2 c''4. g8 |
+ bes1~ |
+ \time 6/4
+ bes2. r8
+ % Start polyphonic section of four voices
+ <<
+ { c,8 d fis bes a } % continuation of main voice
+ \new Voice {
+ \voiceTwo
+ c,8~ 2
+ }
+ \new Voice {
+ \voiceThree
+ s8 d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ g2. % continuation of main voice
+ }
}
-lhMusic = \relative c' {
- r2 <c g ees>2 |
+lhMusic = \relative {
+ r2 <c' g ees>2 |
<d g, d>1 |
r2. d,,4 r4 r |
r4
@end lilypond
Alle Noten sind richtig, aber die Positionierung sehr
-verbesserungsbedürftig. Der Bindebogen stößt mit
-der veränderten Taktart zusammen, die Balkung im
-dritten Takt ist falsch, die Noten werden nicht
+verbesserungsbedürftig. Der Bindebogen kollidiert mit
+der veränderten Taktart zusammen, einige Noten werden nicht
verschmolzen und einige Notationselemente fehlen ganz.
Behandeln wir zunächst die einfacheren Dinge. Der
Balken kann durch eine manuelle Begrenzung einfach
Übung erklärt. Damit haben wir folgendes Notenbild:
@c line-width ensures no break
-@lilypond[quote,verbatim,ragged-right,line-width=5.5\in]
-rhMusic = \relative c'' {
- r2 c4.\( g8 |
- bes1~ |
- \time 6/4
- bes2. r8
- % Start polyphonic section of four voices
- <<
- { c,8 d fis bes a | }
- \\
- { c,8~ c2 | }
- \\
- { s8 d2 | }
- \\
- { s4 fis4. | }
- >> |
- g2.\) |
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
+rhMusic = \relative {
+ \new Voice {
+ r2 c''4.\( g8 |
+ bes1~ |
+ \time 6/4
+ bes2. r8
+ % Start polyphonic section of four voices
+ <<
+ { c,8 d fis bes a } % continuation of main voice
+ \new Voice {
+ \voiceTwo
+ c,8~ 2
+ }
+ \new Voice {
+ \voiceThree
+ s8 d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ g2.\) % continuation of main voice
+ }
}
-lhMusic = \relative c' {
- r2 <c g ees>2( |
+lhMusic = \relative {
+ r2 <c' g ees>2( |
<d g, d>1) |
r2. d,,4 r4 r |
r4
@end lilypond
Der erste Takt stimmt jetzt schon. Der zweite Takt enthält ein
-Arpeggio und wird mit einer doppelten Taktlinie beschlossen.
+Arpeggio und wird mit einem doppelten Taktstrich beschlossen.
Wie können wir diese notieren, denn sie sind im Handbuch zum
Lernen nicht vorgekommen? Hier brauchen wir jetzt die
Notationsreferenz. Ein Blick in den Index zeigt uns die
-Einträge für @qq{Arpeggio} und @qq{Taktlinien}: ein
+Einträge für @qq{Arpeggio} und @qq{Taktstriche}: ein
Arpeggio also erstellt man mit dem Befehl @code{\arpeggio}
-hinter einem Akkord und eine doppelte Taktlinie wird mit dem
+hinter einem Akkord und einen doppelten Taktstrich wird mit dem
Befehl @code{\bar "||"} erstellt. Das ist einfach. Als nächstes
muss der Zusammenstoß des Bindebogens mit der Taktartbezeichnung
gelöst werden. Das geht am besten, indem wir den Bogen nach
oben verschieben. Wie man Objekte verschiebt wurde schon
behandelt in @ref{Verschieben von Objekten}, wo stand, dass Objekte
-die
-relativ zum System positioniert werden, verschoben werden
+die relativ zum System positioniert werden, vertikal verschoben werden
können, indem ihre @code{staff-position}-Eigenschaft
geändert wird, die in halben Notenlinienabständen relativ
zur Mittellinie angegeben wird. Dieser @code{\override}-Befehl
-also, direkt vor die erste übergebundene Note gestellt, verschiebt
+also, direkt vor die erste über gebundene Note gestellt, verschiebt
den Bindebogen (@code{tie}) 3,5 halbe Notenlinienabstände
über die Mittellinie:
-@code{\once \override Tie #'staff-position = #3.5}
+@code{\once \override Tie.staff-position = #3.5}
Damit ist auch der zweite Takt vollständig:
-@lilypond[quote,verbatim,ragged-right,line-width=5.5\in]
-rhMusic = \relative c'' {
- r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
- bes1~ |
- \bar "||"
- \time 6/4
- bes2. r8
- % Start polyphonic section of four voices
- <<
- { c,8 d fis bes a | }
- \\
- { c,8~ c2 | }
- \\
- { s8 d2 | }
- \\
- { s4 fis4. | }
- >> |
- g2.\) |
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
+rhMusic = \relative {
+ \new Voice {
+ r2 c''4.\( g8 |
+ \once \override Tie.staff-position = #3.5
+ bes1~ |
+ \bar "||"
+ \time 6/4
+ bes2. r8
+ % Start polyphonic section of four voices
+ <<
+ { c,8 d fis bes a } % continuation of main voice
+ \new Voice {
+ \voiceTwo
+ c,8~ 2
+ }
+ \new Voice {
+ \voiceThree
+ s8 d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ g2.\) % continuation of main voice
+ }
}
-lhMusic = \relative c' {
- r2 <c g ees>2( |
+lhMusic = \relative {
+ r2 <c' g ees>2( |
<d g, d>1)\arpeggio |
r2. d,,4 r4 r |
r4
@end lilypond
In Takt drei beginnt der Moderato-Abschnitt. In der
-Übung wurde behandelt, wie man fetten Text mit dem
-@code{\markup}-Befehl eingibt, es ist also einfach, das
-@qq{Moderato} hinzuzufügen. Wie aber werden Noten
+Übung wurde behandelt, wie man ein Tempobezeichnung mittels des
+@code{\tempo}-Befehls eingibt. Damit ist das hinzufügen des
+@qq{Moderato} einfach. Wie aber werden Noten
verschmolzen? Hier nehmen wir wieder die Notationsreferenz
zu Hilfe. Die Suche nach @qq{Verschmelzen} (engl. merge)
-im Index führt uns zu den Befehlen um Noten mit
+im Index führt uns zu den Befehlen, um Noten mit
unterschiedlichen Köpfen und unterschiedlichen Punkten
-zu verschmelzen in @ruser{Auflösung von Zusammenstößen}. In unserem
+zu verschmelzen, in @ruser{Auflösung von Zusammenstößen}. In unserem
Beispiel müssen sowohl unterschiedliche Köpfe also auch
unterschiedliche Punktierung verschmolzen werden, wir
brauchen also die Befehle
@noindent
um das Verhalten wieder auszuschalten. Das sieht so aus:
-@cindex Bindebogen, Beispiel zur Veränderung
-@cindex staff-position-Eigenschaft, Beispiel
-
-@lilypond[quote,verbatim,ragged-right,line-width=5.5\in]
-rhMusic = \relative c'' {
- r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
- bes1~ |
- \bar "||"
- \time 6/4
- bes2.^\markup { \bold "Moderato"} r8
- \mergeDifferentlyHeadedOn
- \mergeDifferentlyDottedOn
- % Start polyphonic section of four voices
- <<
- { c,8 d fis bes a | }
- \\
- { c,8~ c2 | }
- \\
- { s8 d2 | }
- \\
- { s4 fis4. | }
- >> |
- \mergeDifferentlyHeadedOff
- \mergeDifferentlyDottedOff
- g2.\) |
+@c line-width ensures no break
+@lilypond[quote,ragged-right,line-width=6\in]
+rhMusic = \relative {
+ \new Voice {
+ r2 c''4.\( g8 |
+ \once \override Tie.staff-position = #3.5
+ bes1~ |
+ \bar "||"
+ \time 6/4
+ bes2.\tempo "Moderato" r8
+ \mergeDifferentlyHeadedOn
+ \mergeDifferentlyDottedOn
+ % Start polyphonic section of four voices
+ <<
+ { c,8 d fis bes a } % continuation of main voice
+ \new Voice {
+ \voiceTwo
+ c,8~ 2
+ }
+ \new Voice {
+ \voiceThree
+ s8 d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ \mergeDifferentlyHeadedOff
+ \mergeDifferentlyDottedOff
+ g2.\) % continuation of main voice
+ }
}
-lhMusic = \relative c' {
- r2 <c g ees>2( |
+lhMusic = \relative {
+ r2 <c' g ees>2( |
<d g, d>1)\arpeggio |
r2. d,,4 r4 r |
r4
}
@end lilypond
-Mit diesen Veränderungen wurden die beiden Fis-Noten
+Mit diesen Veränderungen wurden die beiden Fis-Noten
verschmolzen, aber nicht die zwei Ds. Warum nicht? Die
Antwort befindet sich im gleicher Abschnitt der Notationsreferenz:
Noten, die verschmolzen werden, müssen Hälse in entgegengesetzte
es die Verschmelzung der Ds nicht stört. Das sieht jetzt so
aus:
-@lilypond[quote,verbatim,ragged-right,line-width=5.5\in]
-rhMusic = \relative c'' {
- r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
- bes1~ |
- \bar "||"
- \time 6/4
- bes2.^\markup { \bold "Moderato"} r8
- \mergeDifferentlyHeadedOn
- \mergeDifferentlyDottedOn
- % Start polyphonic section of four voices
- <<
- { c,8 d fis bes a | }
- \\
- {
- % Move the c2 out of the main note column so the merge will work
- c,8~ \shiftOnn c2
- }
- \\
- {
- % Stem on the d2 must be down to permit merging
- s8 \stemDown d2
- }
- \\
- { s4 fis4. }
- >> |
- \mergeDifferentlyHeadedOff
- \mergeDifferentlyDottedOff
- g2.\) |
+@cindex Bindebogen, Beispiel zur Veränderung
+@cindex staff-position-Eigenschaft, Beispiel
+
+@c line-width ensures no break
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
+rhMusic = \relative {
+ \new Voice {
+ r2 c''4.\( g8 |
+ \once \override Tie.staff-position = #3.5
+ bes1~ |
+ \bar "||"
+ \time 6/4
+ bes2.\tempo "Moderato" r8
+ \mergeDifferentlyHeadedOn
+ \mergeDifferentlyDottedOn
+ % Start polyphonic section of four voices
+ <<
+ { c,8 d fis bes a } % continuation of main voice
+ \new Voice {
+ \voiceTwo
+ % Move the c2 out of the main note column
+ % so the merge will work
+ c,8~ \shiftOnn c2
+ }
+ \new Voice {
+ \voiceThree
+ % Stem on the d2 must be down to permit merging
+ s8 \stemDown d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ \mergeDifferentlyHeadedOff
+ \mergeDifferentlyDottedOff
+ g2.\) % continuation of main voice
+ }
}
-lhMusic = \relative c' {
- r2 <c g ees>2( |
+lhMusic = \relative {
+ r2 <c' g ees>2( |
<d g, d>1)\arpeggio |
r2. d,,4 r4 r |
r4
@cindex Notenhals, Beispiel zur Veränderung
@cindex transparent-Eigenschaft, Beispiel
-@lilypond[quote,verbatim,ragged-right,line-width=5.5\in]
-rhMusic = \relative c'' {
- r2 c4.\( g8 |
- \once \override Tie #'staff-position = #3.5
- bes1~ |
- \bar "||"
- \time 6/4
- bes2.^\markup { \bold "Moderato"} r8
- \mergeDifferentlyHeadedOn
- \mergeDifferentlyDottedOn
- <<
- { c,8 d fis bes
- % Reposition the c2 to the right of the merged note
- c,8~ \once \override NoteColumn #'force-hshift = #1.0
- % Move the c2 out of the main note column so the merge will work
- \shiftOnn c2
- }
- \\
- {
- % Stem on the d2 must be down to permit merging
- s8 \stemDown
- \once \override Stem #'transparent = ##t
- d2
- }
- \\
- {s4 fis4.}
- >> |
- \mergeDifferentlyHeadedOff
- \mergeDifferentlyDottedOff
- g2.\) |
+@c line-width ensures no break
+@lilypond[quote,verbatim,ragged-right,line-width=6\in]
+rhMusic = \relative {
+ \new Voice {
+ r2 c''4.\( g8 |
+ \once \override Tie.staff-position = #3.5
+ bes1~ |
+ \bar "||"
+ \time 6/4
+ bes2.\tempo "Moderato" r8
+ \mergeDifferentlyHeadedOn
+ \mergeDifferentlyDottedOn
+ % Start polyphonic section of four voices
+ <<
+ { c,8 d fis bes a } % continuation of main voice
+ \new Voice {
+ \voiceTwo
+ c,8~
+ % Reposition the c2 to the right of the merged note
+ \once \override NoteColumn.force-hshift = #1.0
+ % Move the c2 out of the main note column
+ % so the merge will work
+ \shiftOnn
+ c2
+ }
+ \new Voice {
+ \voiceThree
+ s8
+ % Stem on the d2 must be down to permit merging
+ \stemDown
+ % Stem on the d2 should be invisible
+ \tweak Stem.transparent ##t
+ d2
+ }
+ \new Voice {
+ \voiceFour
+ s4 fis4.
+ }
+ >> |
+ \mergeDifferentlyHeadedOff
+ \mergeDifferentlyDottedOff
+ g2.\) % continuation of main voice
+ }
}
-lhMusic = \relative c' {
- r2 <c g ees>2( |
+lhMusic = \relative {
+ r2 <c' g ees>2( |
<d g, d>1)\arpeggio |
r2. d,,4 r4 r |
r4
@menu
* Andere Benutzung von Optimierungen::
-* Variablen für Optimierungen einsetzen::
-* Globale Formatierung::
+* Variablen für Layout Anpassungen einsetzen::
+* Formatvorlagen::
* Mehr Information::
-* Vermeiden von Optimierungen durch langsamere Übersetzung::
* Fortgeschrittene Optimierungen mit Scheme::
@end menu
@subsection Andere Benutzung von Optimierungen
@translationof Other uses for tweaks
+@menu
+* Noten zwischen unterschiedlichen Stimmen überbinden::
+* Eine Fermate in MIDI simulieren::
+@end menu
+
@cindex Transparente Objekte
@cindex Entfernen von Objekten
@cindex Verstecken von Objekten
@cindex Objekte unsichtbar machen
@cindex Objekte entfernen
@cindex Objekte verstecken
-@cindex Noten zwischen Stimmen überbinden
-@cindex Überbinden von Noten zwischen Stimmen
-@subheading Noten zwischen unterschiedlichen Stimmen überbinden
+@node Noten zwischen unterschiedlichen Stimmen überbinden
+@unnumberedsubsubsec Noten zwischen unterschiedlichen Stimmen überbinden
+@translationof Tying notes across voices
+
+@cindex Noten zwischen Stimmen über binden
+@cindex Über binden von Noten zwischen Stimmen
Das nächste Beispiel zeigt, wie man Noten von verschiedenen
Stimmen miteinander verknüpfen kann, indem man Bindebögen
für Überbindungen benutzt. Normalerweise können nur zwei
-Noten der gleichen Stimme übergebunden werden. Wenn
+Noten der gleichen Stimme über gebunden werden. Wenn
man zwei Stimmen benutzt, wobei die überbundenen Noten
sich in der selben befinden,
-@lilypond[quote,fragment,relative=2]
-<< { b8~ b8\noBeam } \\ { b[ g8] } >>
+@lilypond[quote]
+<< { b'8~ 8\noBeam } \\ { b'8[ g'] } >>
@end lilypond
@noindent
sieht es so aus, als ob die Überbindung zwischen
den Stimmen stattfindet:
-@cindex Hals, Beispiel zur Veränderung
-@cindex Notenhals, Beispiel zur Veränderung
+@cindex Hals, Beispiel zum Verstecken
+@cindex Notenhals, Beispiel zum Verstecken
+@cindex Fähnchen, Beispiel zum Verstecken
@cindex transparent-Eigenschaft, Beispiel
+@funindex \omit
-@lilypond[quote,fragment,relative=2,verbatim]
+@lilypond[quote,verbatim]
<<
{
- \once \override Stem #'transparent = ##t
- b8~ b\noBeam
+ \once \omit Stem
+ \once \omit Flag
+ b'8~ 8\noBeam
}
\\
- { b8[ g] }
+ { b'8[ g'] }
>>
@end lilypond
-Um sicherzugehen, dass der unsichtbare Hals den Bindebogen
-nicht zu sehr verkleinert, kann er verlängert werden, indem
-seine Länge (@code{length}) auf den Wert @code{8}
-gesetzt wird:
-
-@lilypond[quote,fragment,relative=2,verbatim]
-<<
- {
- \once \override Stem #'transparent = ##t
- \once \override Stem #'length = #8
- b8~ b\noBeam
- }
-\\
- { b[ g8] }
->>
-@end lilypond
+@seealso
+Handbuch zum Lernen:
+@ref{Der once-Präfix,,Der @code{@bs{}once}-Präfix},
+@ref{Die stencil-Eigenschaft}.
-@subheading Eine Fermate in MIDI simulieren
+@node Eine Fermate in MIDI simulieren
+@unnumberedsubsubsec Eine Fermate in MIDI simulieren
+@translationof Simulating a fermata in MIDI
@cindex stencil-Eigenschaft, Benutzung
@cindex Fermate, Benutzung in MIDI
im Notensatz etwas von diesen Tempoänderungen zu sehen
ist. Die Metronombezeichnung soll auch nicht die Position
von Text an der gleichen Stelle oder die Abstände zwischen
-zwei Systemen beeinflussen. Darum ist es am besten,
+zwei Systemen beeinflussen. Darum ist es am besten,
@code{stencil} auf @code{#f} zu setzen. Im Beispiel wird
der Unterschied zwischen einem unsichtbaren Objekt und
einem entfernten Objekt gezeigt:
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
- \once \override Score.MetronomeMark #'transparent = ##t
+ a'4 a a
+ \once \hide Score.MetronomeMark
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
- a4\fermata
+ a4\fermata |
% New tempo for next section
\tempo 4=100
- a4 a a a
+ a4 a a a |
}
\layout { }
\midi { }
}
@end lilypond
+@cindex Metronom-Bezeichnung, Beispiel zur Veränderung
+@cindex transparent-Eigenschaft, Beispiel
+
@lilypond[quote,verbatim,ragged-right]
\score {
- \relative c'' {
+ \relative {
% Visible tempo marking
\tempo 4=120
- a4 a a
- \once \override Score.MetronomeMark #'stencil = ##f
+ a'4 a a
+ \once \omit Score.MetronomeMark
% Invisible tempo marking to lengthen fermata in MIDI
\tempo 4=80
- a4\fermata
+ a4\fermata |
% New tempo for next section
\tempo 4=100
- a4 a a a
+ a4 a a a |
}
\layout { }
\midi { }
das im zweiten Beispiel, in dem der @code{stencil} entfernt
wurde, nicht passiert.
+@seealso
+Glossar:
+@rglos{system}.
+
-@node Variablen für Optimierungen einsetzen
-@subsection Variablen für Optimierungen einsetzen
-@translationof Using variables for tweaks
+@node Variablen für Layout Anpassungen einsetzen
+@subsection Variablen für Layout Anpassungen einsetzen
+@translationof Using variables for layout adjustments
@cindex Variablen, Benutzung zur Optimierung
@cindex Optimierung mit Variablen
@code{\override} und @code{\revert} zu konstruieren.
@example
-@code{\override Lyrics . LyricText #'font-shape = #'italic}
-@code{\override Lyrics . LyricText #'font-series = #'bold}
+@code{\override Lyrics.LyricText.font-shape = #'italic}
+@code{\override Lyrics.LyricText.font-series = #'bold}
-@code{\revert Lyrics . LyricText #'font-shape}
-@code{\revert Lyrics . LyricText #'font-series}
+@code{\revert Lyrics.LyricText.font-shape}
+@code{\revert Lyrics.LyricText.font-series}
@end example
Das wäre natürlich noch viel mühsamer, wenn viele Wörter eine
@lilypond[quote,verbatim]
emphasize = {
- \override Lyrics.LyricText #'font-shape = #'italic
- \override Lyrics.LyricText #'font-series = #'bold
+ \override Lyrics.LyricText.font-shape = #'italic
+ \override Lyrics.LyricText.font-series = #'bold
}
normal = {
- \revert Lyrics.LyricText #'font-shape
- \revert Lyrics.LyricText #'font-series
+ \revert Lyrics.LyricText.font-shape
+ \revert Lyrics.LyricText.font-series
}
global = { \key c \major \time 4/4 \partial 4 }
-SopranoMusic = \relative c' { c4 | e4. e8 g4 g | a4 a g }
-AltoMusic = \relative c' { c4 | c4. c8 e4 e | f4 f e }
-TenorMusic = \relative c { e4 | g4. g8 c4. b8 | a8 b c d e4 }
-BassMusic = \relative c { c4 | c4. c8 c4 c | f8 g a b c4 }
+SopranoMusic = \relative { c'4 | e4. e8 g4 g | a4 a g }
+AltoMusic = \relative { c'4 | c4. c8 e4 e | f4 f e }
+TenorMusic = \relative { e4 | g4. g8 c4. b8 | a8 b c d e4 }
+BassMusic = \relative { c4 | c4. c8 c4 c | f8 g a b c4 }
VerseOne = \lyrics {
E -- | ter -- nal \emphasize Fa -- ther, | \normal strong to save,
}
VerseTwo = \lyricmode {
- O | \emphasize Christ, \normal whose voice the | wa -- ters heard,
+ O | \once \emphasize Christ, whose voice the | wa -- ters heard,
}
VerseThree = \lyricmode {
@end lilypond
-@node Globale Formatierung
-@subsection Globale Formatierung
+@node Formatvorlagen
+@subsection Formatvorlagen
@translationof Style sheets
Die Ausgabe von LilyPond kann sehr stark verändert werden, siehe
-zu Einzelheiten @ref{Die Ausgabe verändern}. Aber was ist,
+zu Einzelheiten @ref{Die Ausgabe verbessern}. Aber was ist,
wenn man mehrere Eingabedateien hat, die die gleichen Anpassungen
erfahren sollen? Oder wenn Sie einfach nur die Anpassungen von
der eigentlichen Musik trennen wollen? Das lässt sich recht einfach
Schauen wir uns ein Beispiel an. Sorgen Sie sich nicht, wenn Sie
den Abschnitt mit den vielen @code{#()} nicht verstehen. Das wird
-erklärt in @ref{Fortgeschrittene Optimierungen mit Scheme}.
+in @ref{Fortgeschrittene Optimierungen mit Scheme} erklärt.
@lilypond[quote,verbatim,ragged-right]
mpdolce =
-#(make-dynamic-script
- (markup #:hspace 0
- #:translate '(5 . 0)
- #:line (#:dynamic "mp"
- #:text #:italic "dolce")))
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
- (make-music
- 'TextScriptEvent
- 'direction UP
- 'text (markup #:bold (#:box string))))
+ #{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
}
@end lilypond
-Es gibt einige Probleme mit sich überschneidender Ausgabe, die wird
-zurechtgerückt mit den Techniken von @ref{Verschieben von Objekten}.
-Aber jetzt zu den Definitionen von @code{mpdolce} und @code{inst}.
+Vielleicht können die Definitionen von @code{mpdolce} und @code{inst} noch
+etwas verbessert werden.
Sie erstellen die gewünschte Ausgabe, aber wir wollen sie vielleicht
auch in einem anderen Stück verwenden. Wir könnten sie immer wieder
kopieren und oben in jedes Stück einfügen, aber das ist sehr aufwändig.
@example
%%% in Datei "definitions.ily" speichern
mpdolce =
-#(make-dynamic-script
- (markup #:hspace 0
- #:translate '(5 . 0)
- #:line (#:dynamic "mp"
- #:text #:italic "dolce")))
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
- (make-music
- 'TextScriptEvent
- 'direction UP
- 'text (markup #:bold (#:box string))))
+ #@{ <>^\markup \bold \box #string #@})
@end example
Diese Datei wir mit dem @code{\include}-Befehl ziemlich weit oben
-in der Datei eingefügt. (Die Erweiterung @code{.ily} wird benutzt,
+in der Datei eingefügt. (Die Erweiterung @file{.ily} wird benutzt,
um diese Datei als eine eingefügte, inkludierte zu kennzeichnen, die
-man nicht alleinstehend kompilieren kann.) Jetzt ändern wir die
-Noten (in der Datei @file{"music.ly"}).
+man nicht alleinstehend kompilieren kann). Jetzt ändern wir die
+Noten (in der Datei @file{music.ly}).
@c We have to do this awkward example/lilypond-non-verbatim
@c because we can't do the \include stuff in the manual.
@example
\include "definitions.ily"
-\relative c'' @{
+\relative @{
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
@lilypond[quote,ragged-right]
mpdolce =
-#(make-dynamic-script
- (markup #:hspace 0
- #:translate '(5 . 0)
- #:line (#:dynamic "mp"
- #:text #:italic "dolce")))
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
- (make-music
- 'TextScriptEvent
- 'direction UP
- 'text (markup #:bold (#:box string))))
+ #{ <>^\markup \bold \box #string #})
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
@example
%%% definitions.ily
mpdolce =
-#(make-dynamic-script
- (markup #:hspace 0
- #:translate '(5 . 0)
- #:line (#:dynamic "mp"
- #:text #:italic "dolce")))
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
- (make-music
- 'TextScriptEvent
- 'direction UP
- 'text (markup #:bold (#:box string))))
+ #@{ <>^\markup \bold \box #string #@})
\layout@{
\context @{
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-5 . 0)
+ \override MetronomeMark.padding = #'3
@}
\context @{
\Staff
- \override TimeSignature #'style = #'numbered
+ \override TimeSignature.style = #'numbered
@}
\context @{
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
@}
@}
@end example
@lilypond[quote,ragged-right]
mpdolce =
-#(make-dynamic-script
- (markup #:hspace 0
- #:translate '(5 . 0)
- #:line (#:dynamic "mp"
- #:text #:italic "dolce")))
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
- (make-music
- 'TextScriptEvent
- 'direction UP
- 'text (markup #:bold (#:box string))))
+ #{ <>^\markup \bold \box #string #})
\layout{
\context {
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-5 . 0)
+ \override MetronomeMark.padding = #'3
}
\context {
\Staff
- \override TimeSignature #'style = #'numbered
+ \override TimeSignature.style = #'numbered
}
\context {
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
global geändert.
@example
-%%% definitions.ily
+%%% web-publish.ily
mpdolce =
-#(make-dynamic-script
- (markup #:hspace 0
- #:translate '(5 . 0)
- #:line (#:dynamic "mp"
- #:text #:italic "dolce")))
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #@{ \markup @{ \dynamic mp \normal-text \italic \bold dolce @} #@})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
- (make-music
- 'TextScriptEvent
- 'direction UP
- 'text (markup #:bold (#:box string))))
+ #@{ <>^\markup \bold \box #string #@})
#(set-global-staff-size 23)
\layout@{
\context @{
\Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-5 . 0)
+ \override MetronomeMark.padding = #'3
@}
\context @{
\Staff
@}
\context @{
\Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
@}
@}
@end example
@lilypond[quote,ragged-right]
mpdolce =
-#(make-dynamic-script
- (markup #:hspace 0
- #:translate '(5 . 0)
- #:line (#:dynamic "mp"
- #:text #:italic "dolce")))
+ \tweak self-alignment-X #-0.6
+ #(make-dynamic-script
+ #{ \markup { \dynamic mp \normal-text \italic \bold dolce } #})
inst =
#(define-music-function
- (parser location string)
+ (string)
(string?)
- (make-music
- 'TextScriptEvent
- 'direction UP
- 'text (markup #:bold (#:box string))))
+ #{ <>^\markup \bold \box #string #})
#(set-global-staff-size 23)
\layout{
\context { \Score
- \override MetronomeMark #'extra-offset = #'(-9 . 0)
- \override MetronomeMark #'padding = #'3
+ \override MetronomeMark.extra-offset = #'(-5 . 0)
+ \override MetronomeMark.padding = #'3
}
\context { \Voice
- \override Glissando #'thickness = #3
- \override Glissando #'gap = #0.1
+ \override Glissando.thickness = #3
+ \override Glissando.gap = #0.1
}
}
-\relative c'' {
+\relative {
\tempo 4=50
- a4.\mpdolce d8 cis4--\glissando a |
+ a'4.\mpdolce d8 cis4--\glissando a |
b4 bes a2 |
\inst "Clarinet"
cis4.\< d8 e4 fis |
In der Eingabedatei muss jetzt nur noch die Zeile
@code{\include "definitions.ily"} mit
@code{\include "web-publish.ily"} ersetzt werden. Das könnte
-man natürlich noch besser machen. Es könnte eine Datei
+man natürlich noch besser machen. Es könnte eine Datei
@file{definitions.ily} mit allen Definitionen (also
@code{mpdolce} und @code{inst}) geben, eine Datei
@file{web-publish.ily}, die nur die @code{\layout}-Veränderung
Diese Herangehensweise kann auch schon nützlich sein, wenn man
nur ein paar Stimmen schreiben will. Ich habe eine ganze Anzahl
-an @qq{Stylesheets} für meine Projekte. Ich fange jede Datei mit
+an @qq{Formatvorlagen} (engl. Stylesheets) für meine Projekte. Ich fange jede Datei mit
der Zeile @code{\include "../global.ily"} an, die etwa folgendes
einbindet:
@subsection Mehr Information
@translationof Other sources of information
-Die Programmreferenz enthält sehr viel Information über LilyPond, aber
-noch mehr Information findet sich in den internen
+Die Programmreferenz enthält sehr viel Information über LilyPond, aber
+noch mehr Information findet sich in den internen
LilyPond-Dateien. Um sie erforschen zu können, müssen Sie erst
das richtige Verzeichnis auf Ihrem System finden. Die Position
hängt a) davon ab, ob Ihre LilyPond-Installation mit der vorkompilierten
Version von der LilyPond-Internetseite vorgenommen wurde oder Sie
die Version durch Ihren Paketmanager installiert haben (also
-z. B. in einer Linux-Distribution oder unter fink oder cygwin
+z. B. in einer GNU/Linux-Distribution oder unter fink oder cygwin
installiert), und b) auf welchem Betriebssystem Sie das Programm
benutzen:
-@strong{Von lilypond.org heruntergeladen}
+@subsubsubheading Von lilypond.org heruntergeladen
@itemize @bullet
-@item Linux
+@item GNU/Linux
Wechseln Sie in das Verzeichnis
-@file{@var{INSTALL_VERZ}/lilypond/usr/share/lilypond/current/}
+@example
+@file{@var{INSTALL_VERZ}/lilypond/usr/@/share/lilypond/current/}
+@end example
@item MacOS X
Wechseln Sie in das Verzeichnis
-@file{@var{INSTALL_VERZ}/LilyPond.app/Contents/Resources/share/lilypond/current/}
+@example
+@file{@var{INSTALL_VERZ}/LilyPond.app/Contents/@/Resources/share/lilypond/current/}
+@end example
+
indem Sie entweder mit dem Befehl @code{cd} vom Terminal aus
in das Verzeichnis wechseln, oder mit Control-Klick auf das
LilyPond-Programmsymbol gehen und @qq{Show Package Contents}
@item Windows
Wechseln Sie mit dem Windows Explorer ins Verzeichnis
-@file{@var{INSTALL_VERZ}/LilyPond/usr/share/lilypond/current/}
+@example
+@file{@var{INSTALL_VERZ}/LilyPond/usr/@/share/lilypond/current/}
+@end example
@end itemize
-@strong{Mit einem Paket-Manager installiert oder selber aus
-den Quellen kompiliert}
+@subsubsubheading Mit einem Paket-Manager installiert oder selber aus den Quellen kompiliert
Wechseln Sie in das Verzeichnis
@file{@var{PREFIX}/share/lilypond/@var{X.Y.Z}/}, wobei
Schauen wir uns zuerst einige Dateien in @file{ly/} an.
Öffnen Sie @file{ly/property-init.ly} in einem Texteditor.
-Der, den Sie normalerweise für @code{.ly}-Dateien benutzen,
+Der, den Sie normalerweise für @file{.ly}-Dateien benutzen,
genügt. Diese Datei enthält die Definitionen aller vordefinierten
Befehle für LilyPond, wie etwa @code{\stemUp} und
@code{\slurDotted}. Sie können sehen, dass es sich um
nichts mehr handelt als Definitionen von Variablen, die eine
oder mehrere @code{\override}-Befehle enthalten. Der
-Befehl @code{/tieDotted} etwa wird folgendermaßen definiert:
+Befehl @code{\tieDotted} etwa wird folgendermaßen definiert:
@example
tieDotted = @{
- \override Tie #'dash-period = #0.75
- \override Tie #'dash-fraction = #0.1
+ \override Tie.dash-period = #0.75
+ \override Tie.dash-fraction = #0.1
@}
@end example
@end multitable
Andere Einstellungen (wie die Definitionen von Beschriftungsbefehlen)
-sind in @code{.scm}-(Scheme)-Dateien gespeichert. Die
+sind in @file{.scm}-(Scheme)-Dateien gespeichert. Die
Scheme-Programmiersprache wird benutzt, um eine
programmierbare Schnittstelle zu den internen Operationen von
LilyPond zu haben. Eine weitere Erklärung dieser Dateien ist
sie erfordern einige Kenntnis der Scheme-Sprache. Die Warnung
ist hier angebracht, dass des ein gutes technisches Verständnis
oder sehr viel Zeit braucht, um Scheme und diese
-Dateien zu verstehen (siehe auch @rextend{Scheme-Übung}).
+Dateien zu verstehen (siehe auch @rextend{Scheme-Tutorium}).
Wenn Sie sich mit Scheme auskennen, sind hier mögliche
interessante Dateien:
@end multitable
-@node Vermeiden von Optimierungen durch langsamere Übersetzung
-@subsection Vermeiden von Optimierungen durch langsamere Übersetzung
-@translationof Avoiding tweaks with slower processing
-
-LilyPond kann einige zusätzliche Tests durchführen, während
-die Noten gesetzt werden. Dadurch braucht das Programm länger,
-um den Notensatz zu produzieren, aber üblicherweise werden
-weniger nachträgliche Anpassungen nötig sein. Wenn eine
-Textsilbe oder eine Beschriftung aus dem Rand der Partitur
-ragt, wird durch diese Tests die Zeile gerade so weit komprimiert,
-dass sie sich innerhalb der Ränder befindet.
-
-@example
-\new Score \with @{
- % Um sicher zu gehen, dass Texte und Liedtext
- % innerhalb der Papierränder bleiben
- \override PaperColumn #'keep-inside-line = ##t
- \override NonMusicalPaperColumn #'keep-inside-line = ##t
-@} @{
- ...
-@}
-@end example
-
-@code{keep-inside-line} braucht jedoch sehr viel Berechnungen,
-sodass es sich anbietet, diese Funktion zunächst nicht zu aktivieren
-und erst einzufügen, wenn man die endgültige Version erstellt.
-Auf diese Weise muss man nicht mit der Hand @code{\break}-Befehle
-hinzufügen, um zu vermeiden, dass Text über den rechten Rand der
-Seite hinausragt.
-
-
@node Fortgeschrittene Optimierungen mit Scheme
@subsection Fortgeschrittene Optimierungen mit Scheme
@translationof Advanced tweaks with Scheme
geschrieben ist, kann direkt in die interne Satzmaschine von LilyPond
eingefügt werden. Natürlich brauchen Sie dazu wenigstens ein
grundlegendes Verständnis von Scheme. Eine Einleitung finden
-Sie in der @rextend{Scheme-Übung}.
+Sie in der @rextend{Scheme-Tutorium}.
Zur Illustration der vielen Möglichkeiten soll gezeigt werden, dass eine
Eigenschaft nicht nur auf eine Konstante, sondern auch auf eine
((0) (x11-color 'violet )) ; for B
)))
-\relative c' {
+\relative {
% Arrange to obtain color from color-notehead procedure
- \override NoteHead #'color = #color-notehead
+ \override NoteHead.color = #color-notehead
a2 b | c2 d | e2 f | g2 a |
}
@end lilypond
Weiter Beispiele, die die Benutzung dieser programmierbaren
-Schnittstelle zeigen, finden sich in @rextend{Optimierungen mit Scheme}.
+Schnittstelle zeigen, finden sich in @rextend{Callback-Funktionen}.