@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
@ignore
- Translation of GIT committish: 8cbb38db1591ab95a178643e7bf41db018aa22c0
+ Translation of GIT committish: 06f227dd80f3a30cbf33c879b7c125079dfaf5c3
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
die in LilyPond möglich sind. Es existiert als ein HTML-Dokumente, das
sich
@c leave the @uref as one long line.
-@uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/user/@/lilypond@/-internals/,on@/-line},
+@uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/internals/,on@/-line},
aber auch lokal in das LilyPond-Dokumentationspaket integriert lesen lässt.
Intern benutzt LilyPond Scheme (ein LISP-Dialekt), um eine Infrastruktur
zur Verfügung zu stellen. Wenn Layoutentscheidungen verändert werden
sollen, müssen auf die programminternen Prozesse zugegriffen werden,
wozu Scheme-Code benötigt wird. Scheme-Abschnitte werden in einer
-LilyPond-Quelldatei mit einer Raute @code{#} begonnen (siehe auch
-@rlearning{Scheme-Übung}).
+LilyPond-Quelldatei mit einer Raute@tie{}@code{#} begonnen.@footnote{@rextend{Scheme-Übung} enthält eine kurze Übung, wie
+man Zahlen, Listen, Zeichenketten und Symbole in Scheme notiert.}
@menu
* Umgebungs-Plugins verändern::
* Die Standardeinstellungen von Kontexten ändern::
* Neue Kontexte definieren::
-* Kontexte aneinander ausrichten::
+* Reihenfolge des Kontextlayouts::
@end menu
Diese Variante wird bei musikalischen Ausdrücken benutzt, die auf
verschiedenen Ebenen interpretiert werden können. Beispielsweise
der @code{\applyOutput}-Befehl (siehe
-@ref{Eine Funktion auf alle Layout-Objekte anwenden}). Ohne einen
+@rextend{Eine Funktion auf alle Layout-Objekte anwenden}). Ohne einen
expliziten @code{\context} wird die Ausgabe normalerweise einem
@code{Voice}-Kontext zugewiesen:
genannt), die die einzelnen Notationselemente erstellen. Ein
@code{Voice}-Kontext enthält beispielsweise einen
@code{Note_heads_engraver}, der die Notenköpfe erstellt, und ein
-@code{Staff}-Kontext einen @code{Key_signature_engraver}, der die
+@code{Staff}-Kontext einen @code{Key_engraver}, der die
Vorzeichen erstellt.
Eine vollständige Erklärung jedes Plugins findet sich in
Veränderungen können auch für den @code{Score}- oder alle
@code{Voice}-Kontexte auf gleiche Weise vorgenommen werden.
-@knownissues
+Kontextänderungen können in eine Variable geschrieben werden und dann
+einer @code{\context}-Definition zu gewiesen werden, indem man der
+Veränderung ein @code{\with} voranstellt:
-Es ist nicht möglich, Kontextänderungen als Variable zu definieren und
-sie dann in der @code{\context}-Definition anzuwenden, indem man die
-Variable aufruft.
+@lilypond[quote,verbatim]
+blubb = \with {
+ fontSize = #-4
+ \override Stem #'thickness = #4.0
+ \remove "Time_signature_engraver"
+}
-Der Befehl @code{\Staff \RemoveEmptyStaves} überschreibt die
-aktuellen Einstellungen für @code{Staff}. Wenn die Einstellungen
-für Systeme verändert werden sollen, die @code{\Staff \RemoveEmptyStaves}
-benutzen, müssen die Veränderungen gemacht werden, nachdem
-@code{\Staff \RemoveEmptyStaves} aufgerufen wurde, etwa:
+bla = \with {
+ fontSize = #3
+ \override Stem #'thickness = #-2.0
+}
-@example
-\layout @{
- \context @{
- \Staff \RemoveEmptyStaves
+melody = \relative c'' {
+ a4 a a a |
+ a4 a a a |
+}
- \override Stem #'thickness = #4.0
- @}
-@}
-@end example
+\score {
+ <<
+ \new Staff <<
+ \melody
+ s1*0^"Small, thicker stems, no time signature"
+ >>
+ \new Staff \bla <<
+ \melody
+ s1*0^"Different"
+ >>
+ >>
+ \layout {
+ \context {
+ \Staff
+ \blubb
+ }
+ }
+}
+@end lilypond
+ @c TODO: add \with in here.
+
@node Neue Kontexte definieren
@subsection Neue Kontexte definieren
@end example
-@node Kontexte aneinander ausrichten
-@subsection Kontexte aneinander ausrichten
-@translationof Aligning contexts
-
-Neue Kontexte können über oder unter existierenden ausgerichtet
-werden. Das kann nützlich sein, wenn man eine Chorparitur
-oder Ossia schreiben will:
-
-@cindex Ossia
-
-@funindex alignAboveContext
-@funindex alignBelowContext
-
-@lilypond[quote,ragged-right]
-ossia = { f4 f f f }
-\score{
- \relative c' \new Staff = "main" {
- c4 c c c
- <<
- \new Staff \with { alignAboveContext = #"main" } \ossia
- { d8 f d f d f d f }
- >>
- }
-}
-@end lilypond
-
-@cindex verschachtelte Kontexte
-@cindex Kontexte, verschachtelt
+@node Reihenfolge des Kontextlayouts
+@subsection Reihenfolge des Kontextlayouts
+@translationof Context layout order
+@cindex Kontext, Layoutreihenfolge
@funindex \accepts
-@funindex accepts
@funindex \denies
-@funindex denies
-Kontexte wie @code{PianoStaff} können andere Kontexte innerhalb
-enthalten. Kontexte, die als innere Kontexte akzeptiert werden,
-werden in einer @qq{accepts}-Liste für den bestimmten Kontext
-definiert. Kontexte, die sich nicht in dieser Liste finden,
-werden unter den äußeren Kontext gesetzt. Der
-@code{PianoStaff}-Kontext etwa akzeptiert die Kontexte @code{Staff}
-und @code{FiguredBass} innerhalb, aber beispielsweise keinen
-@code{Lyrics}-(Gesangstext)-Kontext. In dem folgenden Beispiel
-wird deshalb der Gesangstext unter das gesamte Klaviersystem
-gesetzt, anstatt zwischen die beiden Notensysteme zu kommen:
+Kontexte werden in einer Systemgruppe normalerweise von oben nach
+unten positioniert in der Reihenfolge, wie sie in der Quelldatei
+auftreten. Wenn Kontext verschachtelt ewrden, enthält der äußere
+Kontexte geschachtelte innere Kontexte, wie in der Quelldatei
+angegeben, vorausgesetzt, die inneren Kontexte befinden sich auch
+in der @qq{accepts}-Liste. Geschachtelte Kontexte, die nicht
+in dieser @qq{accepts}-Liste enthalten sind, werden unterhalb
+des äußeren Kontextes neu positioniert, anstatt innerhalb von ihm
+gesetzt zu werden.
+
+Die @qq{accepts}-Liste eines Kontextes kann mit dem Befehlen
+@code{\accepts} und @code{\denies} verändert werden. @code{\accepts}
+fügt einen Kontext zur @qq{accepts}-Liste, und @code{\denies}
+entfernt einen Kontext aus der Liste. Akkordbezeichnungen sollen
+beispielsweise normalerweise nicht innerhalb eines @code{Staff}-Kontextes
+geschachtelt werden, sodass der @code{ChordNames}-Kontext nicht
+automatisch in der @qq{accepts}-Liste des @code{Staff}-Kontextes
+geführt ist. Wenn er aber benötigt wird, kann er hinzugefügt werden:
-@lilypond[verbatim,quote,relative=1]
-\new PianoStaff
-<<
- \new Staff { e4 d c2 }
- \addlyrics { Three blind mice }
+@lilypond[verbatim,quote]
+\score {
\new Staff {
- \clef "bass"
- { c,1 }
+ c' d' e' f'
+ \chords { d1:m7 b1:min7.5- }
}
->>
+}
@end lilypond
-Die @qq{accepts}-Liste eines Kontextes kann verändert werden, so
-dass sie weitere innere Kontexte akzeptiert. Wenn also der
-Gesangstext als Teil eines Klaviersystems gesetzt werden soll,
-müsste man schreiben:
-
-@lilypond[verbatim,quote,relative=1]
-\new PianoStaff \with { \accepts Lyrics }
-<<
- \new Staff { e4 d c2 }
- \addlyrics { Three blind mice }
+@lilypond[verbatim,quote]
+\score {
\new Staff {
- \clef "bass"
- { c,1 }
+ c' d' e' f'
+ \chords { d1:m7 b1:min7.5- }
}
->>
+ \layout {
+ \context {
+ \Staff
+ \accepts "ChordNames"
+ }
+ }
+}
@end lilypond
-Das Gegenteil von @code{\accepts} ist @code{\denies}; es bedeutet,
-dass ein Kontext aus der @code{\accepts}-Liste gestrichen wird.
+@code{\denies} wird vorrangig eingesetzt, wenn ein neuer Kontext
+basierend auf einem existierenden erstellt wird, aber sein
+Schachtelungsverhalten sich unterscheidet. Der
+@code{VaticanaStaff}-Kontext beispielsweise basiert auf dem
+@code{Staff}-Kontext, hat aber den @code{VaticanaVoice}-Kontext
+anstellt des @code{Voice}-Kontexts in seiner @qq{accepts}-Liste.
+
+Zur Erinnerung: ein Kontext wird automatisch erstellt, wenn ein
+Befehl auftritt, der in den aktuellen Kontexten nicht enthalten
+sein kann. Dass kann zu unerwarteten neuen Systemgruppen oder Partituren
+führen.
+
+@seealso
+Handbuch zur Benutzung:
+@rprogram{Ein zusätzliches System erscheint}.
+
+Installierte Dateien:
+@file{ly/engraver-init.ly}.
@node Die Referenz der Programminterna erklärt
\set @var{Kontext}.@var{Eigenschaft} = #@var{Wert}
@end example
-@var{Wert} ist ein Scheme-Objekt, weshalb ihm @code{#} vorangestellt
+@var{Wert} ist ein Scheme-Objekt, weshalb ihm@tie{}@code{#} vorangestellt
werden muss.
Kontexteigenschaften werden üblicherweise mit @code{kleinGroßbuchstabe}
Viele Eigenschaften können unabhängig von der Art der Daten, die
sie enthalten, ausgeschaltet werden, indem man sie als @qq{falsch}
-(@code{##f}) definiert. Dadurch wird diese Eigenschaft von LilyPond
+(@code{#f}) definiert. Dadurch wird diese Eigenschaft von LilyPond
ignoriert. Das ist insbesondere nützlich, wenn man Grob-Eigenschaften
ausschalten will, die Probleme verursachen.
@end ignore
Der Strom der musikalischen Ereignisse (engl. music stream), der aus
dem Quelltext erstellt wird, und zu dem auch die automatisch eingefügten
Elemente gehören, kann betrachtet werden, siehe
-@ref{Musikalische Funktionen darstellen}. Das kann nützlich sein,
+@rextend{Musikalische Funktionen darstellen}. Das kann nützlich sein,
wenn man herausfinden will, was mit dem @code{\tweak}-Befehl
verändert werden kann.
@menu
* Eingabe-Modi::
* Richtung und Platzierung::
-* Reihenfolge des Kontextlayouts::
* Abstände und Maße::
* Eigenschaften des Staff-Symbols::
* Strecker::
@item @code{\markup}-(Textbeschriftungs-)Befehlen
@item @code{\tag}-Befehlen
@item Textbeschriftungen in reiner Textform, wie etwa @code{-"string"}
-@item Fingersatzanweisungen: @code{-1}
-@item Abkürzungen von Artikulationen, wie @code{-.}, @code{->}, @code{--}
+@item Fingersatzanweisungen: @w{@code{-1}}
+@item Abkürzungen von Artikulationen, wie @w{@code{-.}}, @w{@code{->}}, @w{@code{--}}
@end itemize
Ausrichtungsmarkierer haben nur eine Auswirkung auf die nächste Note:
Der Wert der @code{direction}-Eigenschaft kann auf den Wert
@code{1} gesetzt werden, was gleichbedeutend mit @qq{nach oben}
-bzw. @qq{oberhalb} ist, oder auf den Wert @code{-1}, was
+bzw. @qq{oberhalb} ist, oder auf den Wert @w{@code{-1}}, was
@qq{nach unten} bzw. @qq{unterhalb} bedeutet. Die Symbole
@code{UP} und @code{DOWN} können anstelle von @code{1}
-und @code{-1} benutzt werden. Die Standardausrichtung kann
+und @w{@code{-1}} benutzt werden. Die Standardausrichtung kann
angegeben werden, indem @code{direction} auf den Wert
@code{0} oder @code{CENTER} gesetzt wird. In vielen Fällen
bestehen auch vordefinierte Befehle, mit denen die Ausrichtung
vorkommende Beispiel darstellt, entscheidet der Wert von
@code{direction}, ob das Objekt auf der rechten oder linken
Seite das Ursprungsobjektes ausgegeben wird. In diesem Fall
-bedeutet @code{-1} oder @code{LEFT} @qq{auf der linken Seite}
+bedeutet @w{@code{-1}} oder @code{LEFT} @qq{auf der linken Seite}
und @code{1} oder @code{RIGHT} @qq{auf der rechten Seite}. @code{0}
oder @code{CENTER} bedeutet @qq{benutze Standardausrichtung}.
c2( c)
@end lilypond
-
-@node Reihenfolge des Kontextlayouts
-@subsection Reihenfolge des Kontextlayouts
-@translationof Context layout order
-
-@cindex Kontexte, Reihenfolge
-
-Kontexte werden normalerweise in einer Notensystemgruppe dargestellt,
-von oben nach unten in der Reihenfolge, in der sie
-in der Eingabedatei auftreten. Wenn Kontexte verschachtelt sind,
-enthält der äußere Kontext die inneren geschachtelten Kontexte,
-wie in der Eingabedatei angegeben, vorausgesetzt die inneren
-Kontexte befinden sich in der @qq{accepts}-Liste des äußeren
-Kontextes. Verschachtelte Kontexte, die nicht in dieser Liste
-auftauchen, werden neu unter den äußeren Kontext angeordnet, anstatt
-dass sie innerhalb dieses Kontextes gesetzt werden.
-
-Es ist wichtig zu erinnern, dass ein Kontext implizit erstellt
-werden kann, wenn ein Befehl vorkommt und kein passender Kontext
-zur Verfügung steht, um den Befehl auszuführen. Dadurch können
-unerwartet neue Systeme oder Partituren erstellt werden.
-
-Die Standardreihenfolge, in der die Kontexte gesetzt werden und
-die @qq{accepts}-Liste können geändert werden, siehe auch
-@ref{Aligning contexts}.
+In polyphoner Musik ist es normalerweise besser, eine explizite
+Stimme (@code{voice} zu erstellen, als die Richtung eines Objektes zu
+ändern. Zu mehr Information siehe @ref{Mehrere Stimmen}.
@seealso
-Handbuch zum Lernen
-@rlearning{An extra staff appears}.
+Handbuch zum Lernen:
+@rlearning{within-staff (Objekte innerhalb des Notensystems)}.
+
+Notationsreferenz:
+@ref{Mehrere Stimmen}.
@node Abstände und Maße
@item attach-dir
Das entscheidet, wo die Linie auf der X-Achse beginnt und endet,
-relativ zum Elternobjekt. Ein Wert @code{-1} (oder
+relativ zum Elternobjekt. Ein Wert @w{@code{-1}} (oder
@code{LEFT}) lässt die Linie an der linken Seite der Noten
beginnen/enden, mit der sie verknüpft ist.
Dabei sollte beachtet werden, dass negative Werte das Objekt
nach @emph{oben} verschieben, anders als man erwarten könnte,
-weil der Wert @code{-1} oder @code{DOWN} bedeutet, dass
+weil der Wert @w{@code{-1}} oder @code{DOWN} bedeutet, dass
die @emph{Unterkante} des Textes mit der Streckerlinie
ausgerichtet wird. Ein Wert @code{1} oder @code{UP}
richtet die Oberkante des Textes mit der Streckerlinie aus.
@code{1} für @code{layer} hat, nach den Notenlinien gesetzt
(die einen Wert von @code{0} für @code{layer} haben) und
überschneidet sie also. Um das zu ändern, muss dem @code{Clef}-Objekt
-(Notenschlüssel) ein niedrigerer Wert, etwa @code{-1}, gegeben
+(Notenschlüssel) ein niedrigerer Wert, etwa @w{@code{-1}}, gegeben
werden, sodass es früher gesetzt wird:
@lilypond[quote,verbatim,relative=2]
@seealso
Handbuch zum Lernen:
-@rlearning{Sichtbarkeit und Farbe von Objekten}
+@rlearning{Sichtbarkeit und Farbe von Objekten}.
@node Linienstile
@end lilypond
Der Wert von @code{Y} wird für den rechten Endpunkt auf
-@code{-2} gesetzt. Die linke Seite kann ähnlich angepasst
+@w{@code{-2}} gesetzt. Die linke Seite kann ähnlich angepasst
werden, indem man @code{left} anstelle von @code{right} angibt.
Wenn @code{Y} nicht gesetzt ist, wird der Wert ausgehend von
werden muss, unterscheidet sich je nach Objekt.
@menu
-* Drehen von Objekten::
+* Drehen von Layout-Objekten::
* Textbeschriftung drehen::
@end menu
-@node Drehen von Objekten
-@unnumberedsubsubsec Drehen von Objekten
+@node Drehen von Layout-Objekten
+@unnumberedsubsubsec Drehen von Layout-Objekten
@translationof Rotating layout objects
@cindex Drehen von Objekten
* Vertikale Gruppierung der grafischen Objekte („grob“s)::
* stencils verändern::
* Formen verändern::
+* Reine und unreine Container::
@end menu
Notationsreferenz:
@ref{Die Referenz der Programminterna erklärt},
-@ref{Eigenschaften verändern},
-@ref{Schnittstellen für Programmierer}.
+@ref{Eigenschaften verändern}.
+
+Erweitern:
+@rextend{Schnittstellen für Programmierer}.
Installierte Dateien:
@file{scm/define-grobs.scm}.
X-Gesamtausdehnung des Objekts. Negative Werte verschieben
das Objekt nach rechts, positive nach links. Ein Wert von
@code{0} zentriert das Objekt auf dem Referenzpunkt des
-Ursprungs, ein Wert von @code{-1} richtet die linke Ecke des
+Ursprungs, ein Wert von @w{@code{-1}} richtet die linke Ecke des
Objekts am Referenzpunkt des Ursprungsobjektes aus, ein
Wert von @code{1} richtet die rechte Ecke des Objektes am
Referenzpunkt des Ursprungsobjektes aus. Die Symbole
@code{LEFT}, @code{CENTER} und @code{RIGHT} können anstelle
-von @code{-1, 0, 1} eingesetzt werden.
+von @w{@code{-1}}, @code{0} und @code{1} eingesetzt werden.
Normalerweise würde der @code{\override}-Befehl benutzt werden, um
die Werte von @code{self-alignment-X} zu verändern, aber der
Wert für einige Objekte richtig anzupassen. Die Einheiten
sind Halbe der vertikalen Ausdehnung des Objektes, welche
normalerweise recht klein ist, sodass ziemlich große Werte
-erforderlich sein können. Der Wert @code{-1} richtet die
+erforderlich sein können. Der Wert @w{@code{-1}} richtet die
untere Kante des Objekts am Referenzpunkt des Ursprungsobjektes
aus, der Wert @code{0} richtet die Mitte des Objekts am
Referenzpunkt des Ursprungsobjektes aus und der Wert @code{1}
richtet die Oberkante des Objektes am Referenzpunkt des
Ursprungsobjektes aus. Die Symbole @code{DOWN}, @code{CENTER}
-und @code{UP} können anstelle von @code{-1, 0, 1} benutzt
-werden.
+und @code{UP} können anstelle von @w{@code{-1}}, @code{0}
+und @code{1} benutzt werden.
@emph{Automatische Ausrichtung in beide Richtungen}
mit dem @code{\musicglyph}-Befehl erreicht werden.
Siehe auch @ref{Die Feta-Schriftart}.
-
-
@seealso
Notationsreferenz:
@ref{Graphische Notation innerhalb einer Textbeschriftung},
@lilypond[verbatim,quote,relative=1]
<<
- { e1 ~ e }
+ { e1~ e }
\\
{ r4 <g c,> <g c,> <g c,> }
>>
{
\once \override Tie
#'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
- e1 ~ e1
+ e1~ e1
}
\\
- { r4 <g c,> <g c,> <g c,>4 }
+ { r4 <g c,> <g c,> <g c,> }
>>
@end lilypond
Es ist nicht möglich, die Form von Bögen anhand ihrer
@code{control-points}-Eigenschaft zu verändern, wenn
-mehr als ein Bogen zum gleichen musikalischen Moment
-auftritt, nicht einmal mit dem @code{\tweak}-Befehl.
+mehrere Binde- oder Legatobögen zum gleichen musikalischen Moment
+auftreten, nicht einmal mit dem @code{\tweak}-Befehl. Die Eigenschaft
+@code{tie-configuration} von @code{TieColumn} kann jedoch verändert
+werden, sodass Startlinie und Richtung wie benötigt platziert werden.
+
+@seealso
+Referenz der Interna:
+@rinternals{TieColumn}.
+
+
+@cindex Scheme, reine Container
+@cindex Scheme, unreine Container
+@cindex reine Container, Scheme
+@cindex unreine Container, Scheme
+@cindex horizontale Platzierung, verändern
+
+@node Reine und unreine Container
+@subsection Reine und unreine Container
+@translationof Unpure-pure containers
+
+Unreine und reine Container (engl. unpure/pure containers) sind
+nützlich, wenn man die Berechnungen der Platzierungen für die
+@emph{Y-Achse} verändern will, insbesondere für @code{Y-offset}
+und @code{Y-extent}. Mit diesen Containern kann die Veränderung
+durch eine Scheme-Funktion anstelle einer direkten Zahl oder eines
+Paares vorgenommen werden.
+
+Für bestimmte Grobs basiert die Eigenschaft @code{Y-extent} auf
+der @code{stencil}-Eigenschaft. Wenn diese mit @code{\override}
+verändert werden soll, braucht man eine zusätzliche Veränderung
+von @code{Y-extent} mit einem unreinen-reinen Container. Wenn eine
+Funktion @code{Y-offset} und/oder @code{Y-extent} verändert, wird
+angenommen, dass dadurch Zeilenumbruchsberechnungen zu früh während
+der Kompilation aufgerufen werden. Die Funktion wird also überhaupt
+nicht ausgewertet (und gibt also normalerweise den Wert @samp{0} oder
+@samp{'(0 . 0)} zurück), wodurch sich Zusammenstöße ergeben können.
+Eine @qq{saubere} Funktion beeinflusst keine Eigeschaften, Objekte
+oder Grob-Suizide, weshalb ihre Werte, die sich auf @code{Y-axis}
+beziehen, richtig berechnet werden.
+
+Es gibt zuzeit etwa 30 Funktionen, die schon als @qq{sauber} erachtet
+werden, und unsaubere-saubere Container sind eine Möglichkeit, auch
+Funktionen, die sich nicht auf dieser Liste befinden, als @qq{sauber}
+zu markieren. Die @qq{saubere} Funktion wird ausgewertet, @emph{bevor}
+Seitenumbruch stattfindet, sodass die horizontale Platzierung
+@qq{rechtzeitig} stattfindet. Die @qq{unsaubere} Funktion wird dann
+@emph{nach} dem Seitenumbruch ausgewertet.
+
+@warning{Da es schwierig ist, immer sicher zu sein, welche Funktionen sich
+auf dieser Liste befinden, wird empfohlen, dass die selbsterstellten
+@qq{sauberen} Funktionen nicht die Grobs @code{Beam} oder @code{VerticalAlignment}
+einsetzen.}
+
+Ein unsauberer-sauberer Container wird wie folgend erstellt:
+
+@code{(ly:make-unpure-pure-container f0 f1)}
+
+wobei @code{f0} eine Fuktion ist, die @var{n} Arguments braucht
+(@var{n >= 1}) und deren erstes Argument immer der Grob sein muss.
+Das ist die Funktion, die das eigentliche Resultat ausgibt. @var{f1}
+ist die Funktion, die als @qq{sauber} bezeichnet wird, und braucht @var{n + 2}
+Argumente. Wiederum muss das erste Argument immer der Grob sein, aber
+das erste und zweite Argument sind @qq{Beginn-} und @qq{Endeargumente}.
+
+
+
+@var{start} (Beginn) und @var{end} (Ende) sind absichtlich
+nur Platzhalter, die nur für die Strecker gelten (etwa @code{Hairpin} oder
+@code{Beam}), die unterschiedliche Höhenberechnungen je nach beginnender und
+endender Note ausgeben können.
+
+Der Rest sind andere Argumente für die erste Funktion (es können auch
+Null sein, wenn @var{n = 1}).
+
+Die Ergebnisse der zweiten Funktion werden als Näherungswert des benötigten
+Wertes benutzt, welche dann von der ersten Funktion eingesetzt wird,
+um den wirklichen Wert auszugeben, mit dem dann sehr viel später im
+Layoutprozess die Platzierung justiert werden soll.
+
+@lilypond[verbatim,quote,ragged-right]
+#(define (square-line-circle-space grob)
+(let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch))
+ (notename (ly:pitch-notename pitch)))
+ (if (= 0 (modulo notename 2))
+ (make-circle-stencil 0.5 0.0 #t)
+ (make-filled-box-stencil '(0 . 1.0)
+ '(-0.5 . 0.5)))))
+
+squareLineCircleSpace = {
+ \override NoteHead #'stencil = #square-line-circle-space
+}
+
+smartSquareLineCircleSpace = {
+ \squareLineCircleSpace
+ \override NoteHead #'Y-extent =
+ #(ly:make-unpure-pure-container
+ ly:grob::stencil-height
+ (lambda (grob start end) (ly:grob::stencil-height grob)))
+}
+
+\new Voice \with { \remove "Stem_engraver" }
+\relative c'' {
+ \squareLineCircleSpace
+ cis4 ces cisis c
+ \smartSquareLineCircleSpace
+ cis4 ces cisis c
+}
+@end lilypond
+Im ersten Takt weiß die Layoutmaschine ohne den unsauberen-sauberen
+Container nicht die Breite des Notenkopfes und lässt ihn deshalb mit
+den Versetzungszeichen zusammenstoßen. Im zweiten Takt, mit
+unreinen-reinen Containern, weiß die Layoutmaschine die Breite
+des Notenkopfes und vermeidet den Zusammenstoßf, indem die Zeile
+entsprechend verlängert wird.
+
+Normalerweise können für eine einfache Berechnungen fast identische
+Funktionen für den @qq{unsauberen} und @qq{sauberen} Teil benutzt
+werden, indem nur die Zahl der Argumente und die Reichweite der
+Funktion verändert wird.
+
+@warning{Wenn eine Funktion als @qq{sauber} bezeichnet ist und das aber
+nicht ist, können unerwartete Ergebnisse auftreten.}
@node Musikfunktionen benutzen
@menu
* Syntax der Ersetzungsfunktion::
-* Beispiele der Ersetzungsfunktion::
+* Beispiele der Ersetzungsfunktionen::
@end menu
@node Syntax der Ersetzungsfunktion
den Wert @code{#t} ausgibt.
@item @code{@var{@dots{}Noten@dots{}}}
-@tab normale LilyPond-Eingab, wobei @code{$} benutzt wird, um
+@tab normale LilyPond-Eingabe, wobei @code{$} (wenn nur LilyPond-Konstruktionen
+erlaubt sind) oder @code{#} (um es als Scheme-Wert oder Argument einer
+musikalischen Funktionen einzusetzen) benutzt wird, um
Argumente zu referenzieren (etwa @samp{$Arg1}).
@end multitable
-
Die @code{parser} und @code{location}-Argumente sind zwingend und
werden in einigen fortgeschrittenen Situationen benutzt, wie sie
im @qq{Erweitern}-Handbuch beschrieben werden (siehe
@example
boolean?
cheap-list? @emph{(benutze anstelle von }@q{list?}@emph{ für schnelleres Kompilieren)}
+ly:duration?
ly:music?
+ly:pitch?
markup?
number?
pair?
(parser location padding)
(number?)
#{
- \once \override TextScript #'padding = $padding
+ \once \override TextScript #'padding = #padding
#})
\relative c''' {
(parser location padding tempotext)
(number? string?)
#{
- \once \override Score.MetronomeMark #'padding = $padding
+ \once \override Score.MetronomeMark #'padding = #padding
\tempo \markup { \bold #tempotext }
#})