@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-

@ignore
    Translation of GIT committish: e5a609e373eae846857f9a6d70a402a3d42b7d94

    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.17.30"

@c Translators: Till Paala


@node Abstände
@chapter Abstände
@translationof Spacing issues

Das finale Layout der Seite wird von drei Faktoren bestimmt: dem Layout
der Seite, den Zeilenumbrüchen und der Platzverteilung.  Jeder Faktor
beeinflusst auch die anderen mit.  Die Wahl der Platzverteilung
entscheidet, wie eng die Notensysteme gesetzt werden.  Das wiederum
hat Einfluss auf die gewählten Zeilenumbrüche und letztendlich also
auch darauf, wieviele Seiten ein Stück beansprucht.

Die Verteilung der Musik auf der Seite geschieht grob gesagt in
vier Schritten.  Zuerst werden flexible Entfernungen (@qq{springs})
gewählt, die auf den Notendauern basieren.  Alle möglichen
Zeilenumbrüche werden getestet und ein @qq{Schlechtigkeitsscore}
für die Umbrüche erstellt.  Danach wird die mögliche Höhe eines Systems
ermittelt und schließlich wird eine bestimmte Kombination aus
Seiten- und Zeilenumbruch ausgewählt, sodass weder die horizontale
noch die vertikale Platzverteilung zu eng oder zu weit gesetzt wird.

Einstellungen, die das Layout beeinflussen, können in zwei Umgebungen
gesetzt werden: in der @code{\paper @{...@}}- und der @code{\layout @{...@}}-Umgebung.
Die @code{\paper}-Umgebung enthält Einstellungen des Seitenlayouts, die für
alle Partituren innerhalb eines @code{\book} die gleichen sein sollen, wie
etwa Papierhöhe oder ob Seitenzahlen ausgegeben werden sollen.  Siehe
@ref{Seitenlayout}.  Die @code{\layout}-Umbegung enthält Layouteinstellungen
der Partitur selber, wie etwa die Zahl der Systeme oder den Platz zwischen
Systemgruppen usw.  Siehe @ref{Partiturlayout}.

@menu
* Seitenlayout::
* Partiturlayout::
* Umbrüche::
* Vertikale Abstände::
* Horizontale Abstände::
* Die Musik auf weniger Seiten zwingen::
@end menu


@node Seitenlayout
@section Seitenlayout
@translationof Page layout

Dieser Abschnitt behandelt Seitenlayout-Optionen innerhalb der @code{\paper}-Umgebung.

@menu
* Die paper-Umgebung::
* Papierformat und automatische Skalierung::
* Vertikale paper-Variablen mit festen Abständen::
* Vertikale paper-Variablen mit flexiblen Abständen::
* paper-Variablen für horizontale Abstände::
* Andere paper-Variablen::
@end menu


@node Die paper-Umgebung
@subsection Die @code{\paper}-Umgebung
@translationof The \paper block

@cindex Papiergröße
@cindex Größe, Papier
@cindex Seitegröße
@cindex Größe, Seite

Die @code{\paper}-Umgebung kann innerhalb einer @code{\book}-, nicht aber
innerhalb einer @code{\score}-Umgebung vorkommen.  Einstellungen in
@code{\paper} wirken sich auf das gesamte Buch aus, welches viele einzelne
Partituren beinhalten kann.  Einstellungen, die in der @code{\paper}-Umgebung
vorkommen können, beinhalten:

@itemize

@item
die @code{set-paper-size}-Scheme-Funktion,

@item
@code{\paper}-Variablen, die zum Verändern des Seitenlayouts eingesetzt werden und

@item
Beschriftungsdefinitionen, mit denen das Layout von Kopf- und Fußleisten sowie
Titeln beeinflusst wird.

@end itemize

Die @code{set-paper-size}-Funktion wird im nächsten Abschnitt behandelt:
@ref{Papierformat und automatische Skalierung}.  Die @code{\paper}-Variablen,
die das Seitenlayout beeinflussen, werden in späteren Abschnitten behandelt.
Die Beschriftungsdefinitionen für Kopf- und Fußzeilen sowie Titeln werden behandelt
in @ref{Eigene Kopf und Fußzeilen sowie Titel}.

Die meisten @code{\paper}-Variablen funktionieren nur innerhalb der
@code{\paper}-Umgebung.  Die wenigen, die auch in der @code{\layout}-Umgebung
funktionieren, finden sich in @ref{Die \layout-Umgebung}.

Außer wenn anders angegeben, werden alle @code{\paper}-Variablen, die
Abständen auf der Seite antsprechen, in Millimetern gemessen, es sei denn,
eine andere Maßeinheit ist definiert.  Beispielsweise wird mit folgender
Definition der obere Rand (top-margin) 10 mm breit definiert:

@example
\paper @{
  top-margin = 10
@}
@end example

Damit etwa @code{0.5} Zoll benutzt werden, muss @code{\in} dem Maß nachgestellt werden:

@example
\paper @{
  top-margin = 0.5\in
@}
@end example

Mögliche Maßeinheiten sind @code{\mm}, @code{\cm}, @code{\in} und
@code{\pt}.  Diese Maßeinheiten sind einfach Werte, um von Millimetern
zu Konvertieren, sie sind in @file{ly/paper-defaults-init.ly} definiert.
Um Missverständnisse zu vermeiden, wird normalerweise @code{\mm} geschrieben,
auch wenn es eigentlich nicht notwendig wäre.

Man kann die @code{\paper}-Werte auch mit Scheme definieren.  Die Scheme-Entsprechung
der obigen Definition ist:

@example
\paper @{
  #(define top-margin (* 0.5 in))
@}
@end example

@seealso
Notationsreferenz
@ref{Papierformat und automatische Skalierung},
@ref{Eigene Kopf und Fußzeilen sowie Titel},
@ref{Die \layout-Umgebung}.

Installierte Dateien:
@file{ly/paper-defaults-init.ly}.


@node Papierformat und automatische Skalierung
@subsection Papierformat und automatische Skalierung
@translationof Paper size and automatic scaling

@cindex Papierformat
@cindex Seitenformat

@funindex \paper

@menu
* Das Papierformat einstellen::
* Automatische Skalierung auf ein Papierformat::
@end menu


@node Das Papierformat einstellen
@unnumberedsubsubsec Das Papierformat einstellen
@translationof Setting the paper size

@q{A4} ist der Standardwert, wenn keine ausdrückliches Papierformat
eingestellt ist.  Es gibt jedoch zwei Funktionen, mit denen man
das Papierformat ändern kann: @code{set-default-paper-size}

@example
#(set-default-paper-size "quarto")
@end example

@noindent
welcher immer auf oberster Ebene der Datei geschrieben werden muss, und
@code{set-paper-size}

@example
\paper @{
  #(set-paper-size "tabliod")
@}
@end example

@noindent
welcher in eine @code{\paper}-Umgebung geschrieben werden muss.


Wenn die @code{set-default-paper-size}-Funktion auf oberster Ebene der
Datei eingesetzt wird, muss sie vor allen @code{\paper}-Umgebungen kommen.
@code{set-default-paper-size} definiert das Papierformat für alle Seiten,
während @code{set-paper-size} nur das Format der Seiten bestimmt, auf die
sich die @code{\paper}-Umgebung bezieht.  Wenn beispielsweise die
@code{\paper}-Umgebung oben in der Datei steht, dann bezieht sie sich
auf alle Seiten in der Datei.  Wenn die @code{\paper}-Umgebung innherhalb
einer @code{\book}-Umgebung steht, dann bezieht sie sich nur auf das eine
Buch.

Wenn die @code{set-paper-size}-Funktion eingesetzt wird, muss sie @emph{vor}
allen anderen Funktionen stehen, die in derselben @code{\paper}-Umgebung
benützt werden. Siehe @ref{Automatische Skalierung auf ein Papierformat}.

Die Papierformate finden sich in der Datei @file{scm/paper.scm} definiert.
Hierhin kann man eigene Formate definieren, sie werden jedoch bei einer
Aktualisierung von LilyPond überschrieben.  Die vorhandenen Papierformate
finden sich in @ref{Vordefinierte Papierformate}.

@c An appendix entry exists for paper sizes but is not auto-generated
 
Der folgende Befehl kann benützt werden, um ein eigenes Papierformat
hinzuzufügen, welches dann mit @code{set-default-paper-size} oder
@code{set-paper-size} benützt werden kann:

@example
#(set! paper-alist (cons '("mein Format" . (cons (* 15 in) (* 3 in))) paper-alist))

\paper @{
  #(set-paper-size "mein Format")
@}
@end example

Die Einheiten @code{in} (Fuß), @code{cm} (Centimeter) and @code{mm} (Millimeter)
können benützt werden.

@cindex Ausrichtung, Papier
@cindex Papier, Ausrichtung
@cindex hochkant, Papier
@cindex quer, Papier
@cindex Papier, quer

@funindex landscape

Wenn das Symbol @code{'landscape} an die Funktion
@code{set-default-paper-size} gehängt wird, werden die Seiten um
90° gedreht und die Notensysteme entsprechend breiter gesetzt.

@example
#(set-default-paper-size "a6" 'landscape)
@end example

Die Notenausgabe wird @emph{nicht} gedreht, nur das Papierformat.

@seealso
Notationsreferenz:
@ref{Automatische Skalierung auf ein Papierformat},
@ref{Vordefinierte Papierformate}.

Installierte Dateien:
@file{scm/paper.scm}.


@node Automatische Skalierung auf ein Papierformat
@unnumberedsubsubsec Automatische Skalierung auf ein Papierformat
@translationof Automatic scaling to paper size

Wenn das Papierformat mit einer der Scheme-Funktionen
(@code{set-default-paper-size} oder @code{set-paper-size}) geändert wird,
werden die Werte einiger @code{\paper}-Variablen automatisch an die
neue Größe angepasst.  Um die automatische Skalierung für eine bestimmte
Variable zu umgehen, kann die Variable definiert werden, nachdem man
das Papierformat angegeben hat.  Es sollte beachtet werden, dass die
automatische Anpassung nicht ausgelöst wird, wenn man nur die
@code{paper-height} oder @code{paper-width}-Variablen verändert, obwohl
@code{paper-width} andere Werte beeinflussen kann (das muss von der automatischen
Skalierung unterschieden werden und wird unten behandelt).  Die Funktionen
@code{set-default-paper-size} und @code{set-paper-size} werden behandelt
in @ref{Das Papierformat einstellen}.

Die vertikalen Dimensionen, die durch die automatische Skalierung verändert
werden sind: @code{top-margin} und @code{bottom-margin} (siehe
@ref{Vertikale paper-Variablen mit festen Abständen,,Vertikale @code{@bs{}paper}-Variablen mit festen Abständen}).  Die horizontalen
Dimensionen, die durch die automatische Skalierung verändert werden, sind
@code{left-margin}, @code{right-margin}, @code{inner-margin}, @code{outer-margin},
@code{binding-offset}, @code{indent} und @code{short-indent} (siehe
@ref{paper-Variablen für horizontale Abstände,,@code{@bs{}paper}-Variablen für horizontale Abstände}).

Die Standardwerte für diese Dimensionen sind in
@file{ly/paper-defaults-init.ly} definiert, wobei interne Variablen mit den
Bezeichnungen @code{top-margin-default}, @code{bottom-margin-default}, usw.
benutzt werden.  Das sind die Werte für die Standardpapiergröße
@code{a4}.  Zum Vergleich: @code{a4} hat Werte von @code{297\mm} für
@code{paper-height} und @code{210\mm} für @code{paper-width}.

@seealso
Notationsreferenz:
@ref{Vertikale paper-Variablen mit festen Abständen,,Vertikale @code{@bs{}paper}-Variablen mit festen Abständen},
@ref{paper-Variablen für horizontale Abstände,,@code{@bs{}paper}-Variablen für horizontale Abstände}.

Installierte Dateien:
@file{ly/paper-defaults-init.ly},
@file{scm/paper.scm}.



@node Vertikale paper-Variablen mit festen Abständen
@unnumberedsubsubsec Vertikale @code{\paper}-Variablen mit festen Abständen
@translationof Fixed vertical spacing \paper variables

@warning{Einige @code{@bs{}paper}-Dimensionen werden automatisch nach
Papierformat skaliert, was zu ungewolltem Verhalten führen kann.  Siehe
@ref{Automatische Skalierung auf ein Papierformat}.}

Standardwerte (vor der Skalierung) sind definiert in
@file{ly/paper-defaults-init.ly}.

@table @code
@item paper-height
@funindex paper-height

Die Höhe der Seite, standardmäßig nicht definiert.  Die automatische
Skalierung einiger vertikalen Dimensionen wird hiervon nicht betroffen.

@item top-margin
@funindex top-margin

Der Rand zwischen dem oberen Ende der Seite und dem oberen Ende
des bedruckbaren Bereichs.  Wenn das Papierformat verändert wurde, wird
der Standardwert dieser Dimension entsprechend skaliert.

@item bottom-margin
@funindex bottom-margin

Der Rand zwischen dem unteren Ende der Seite und dem unteren Ende des
bedruckbaren Bereichs.  Wenn das Papierformat verändert wurde, wird
der Standardwert dieser Dimension entsprechend skaliert.

@item ragged-bottom
@funindex ragged-bottom

Wenn auf wahr gesetzt, werden die Systeme nicht vertikal bis zum unteren
Seitenrand verteilt.  Sollte auf wahr gesetzt sein für Stücke, die nur
ein bis zwei Notensystemgruppen pro Seite haben, etwa Orchesterpartituren.

@item ragged-last-bottom
@funindex ragged-last-bottom

Wenn auf falsch gesetzt, werden die Systeme vertikal auf der letzten Seite
verteilt.  Bei Stücken, die grob zwei oder mehr Seiten füllen, sollten es auf
falsch (@code{false}) gesetzt werden.  Hiermit wird auch die letzte Seite von Teilen eines
@code{\book}, die mit @code{\bookpart} erstellt sind, beeinflusst.

@end table

@seealso
Notationsreferenz:
@ref{Automatische Skalierung auf ein Papierformat}.

Installierte Dateien:
@file{ly/paper-defaults-init.ly}.

Schnipsel:
@rlsr{Spacing}.

@knownissues

Die Titel (aus der @code{\header}-Umgebung) werden als Systemgruppe
behandelt, sodass @code{ragged-bottom} und @code{ragged-last-bottom} auch
zusätzlichen Abstand zwischen den Titel und dem ersten System einer
Paritur einfügt.

Explizit definierte Papierformate überschreiben alle vom Benutzer erstellte
Randeinstellung für die Ränder oben und unten.


@node Vertikale paper-Variablen mit flexiblen Abständen
@unnumberedsubsubsec Vertikale @code{\paper}-Variablen mit flexiblen Abständen
@translationof Flexible vertical spacing \paper variables

In den meisten Fällen bietet es sich an, dass die vertikalen
Abstände zwischen bestimmten Objekten (wie Ränder, Titel,
Notensystemgruppen und einzelne Partituren) flexibel gehalten
werden, sodass sie je nach Situation gedehnt oder komprimiert
werden können.  Es gibt eine Anzahl von Variablen für die
@code{\paper}-Umgebung, mit denen man das Dehnungsverhalten dieser
Dimensionen beeinflussen kann.  Sie finden sich unten aufgelistet.

Dabei sollte beachtet werden, dass die Variablen, die in diesem
Abschnitt behandelt werden, nicht die Platzierung und das
Dehnungsverhalten von Notensystemen innerhalb der einzelnen
Systemgruppen behandelt.  Die Dehnung zwischen Notensystemen
wird mit Grob-Eigenschaften kontrolliert, deren Einstellungen
normalerweise innerhalb der @code{\score}-Umgebung vorgenommen
werden, und nicht innerhalb der @code{\paper}-Umgebung.  Siehe auch
@ref{Flexible vertikale Abstände in Systemgruppen}.

@menu
* Struktur der Alisten für flexible vertikale Abstände::
* Liste der flexiblen vertikalen Abstandsvariablen in \paper::
@end menu


@node Struktur der Alisten für flexible vertikale Abstände
@unnumberedsubsubsec Struktur der Alisten für flexible vertikale Abstände
@translationof Structure of flexible vertical spacing alists

Jede der flexiblen vertikalen Abstandsvariablen ist eine Aliste (eine assoziative Liste), die
vier @emph{Schlüssel} (engl. key) enthält:

@itemize

@item
@code{basic-distance} (Grund-Abstand) -- der vertikale Abstand, gemessen in
Systemzwischenräumen, zwischen den @emph{Referenzpunkten}
zweier Elemente, wenn keine Zusammenstöße vorkommen würden und
keine Dehnung oder Kompression stattfindet.  Der Referenzpunkt
einer (Titel-)Beschriftung (auf höchster Ebene) ist sein
höchster Punkt und der Referenzpunkt einer Systemgruppe ist
der vertikale Mittelpunkt des nächsten @code{StaffSymbol}
-- sogar wenn eine Nicht-Notensystemzeile (wie etwa ein
@code{Lyrics}-Kontext) dazwischen kommt.  Werte für @code{basic-distance},
die weniger als entweder @code{padding} oder @code{minimum-distance}
sind, haben keine Bedeutung, weil der sich daraus ergebende
Abstand niemals weniger als entweder @code{padding} oder
@code{minimum-distance} ergibt.

@item
@code{minimum-distance} (minimaler Abstand) -- der kleinste
erlaubte vertikale Abstand, gemessen in Systemzwischenräumen,
zwischen den Referenzpunkten der zwei Elemente, wenn Kompression
stattfindet.  Werte für @code{minimum-distance}, die geringer als
@code{padding} sind, haben keine Bedeutung, weil der sich daraus
ergebende Abstand niemals weniger als @code{padding} ergibt.

@item
@code{padding} (Verschiebung) -- der minimal benötigte vertikale blanke
Freiraum zwischen den Bounding-Boxen (oder Skyline) der zwei Objekten, gemessen in Notenlinienabständen.

@item @code{stretchability} (Dehnbarkeit) -- ein einheitsloses
Maß der Leichtigkeit, mit der sich die Dimension dehnen lässt (ohne
dass Zusammenstöße auftreten).  Wenn es null ist, wird der Abstand
nicht gedehnt (außer ein Zusammenstoß würde auftreten), wenn es
positiv ist, hängt die Wichtigkeit der Dehnbarkeit eines bestimmten
Objekts nur noch von seiner Beziehung zu dem Wert des anderen Objekts
ab.  Beispielsweise wennn eine Dimension die doppelte Dehnbarkeit als
die andere hat, wird sie auch zweimal so einfach gedehnt.  Werte sollten
nicht-negativ und reale Zahlen sein.  Der Wert @code{+inf.0}
ruft einen @code{programming_error} hervor und wird ignoriert, aber
@code{1.0e7} kann für einen so gut wie unendlich dehnbaren Abstand eingesetzt
werden.  Wenn der Wert nicht gesetzt wird, ist der Standardwert
der von @code{basic-distance}.  Die Wahrscheinlichkeit einer Dimension, sich
zu verkleinern, kann man nicht direkt beeinflussen, sondern sie ergibt sich
aus (@code{space}@tie{}@minus{}@tie{}@code{minimum-distance}).

@end itemize

Wenn eine Seite einen nicht ausgeglichenen unteren Rand hat, ist der
resultierende Abstand der größte von:

@itemize

@item
@code{basic-distance},

@item
@code{minimum-distance} und

@item
@code{padding} plus der kleinste nötige Abstand, um Zusammenstöße
zu vermeiden.

@end itemize

Bei Partituren über mehrere Seiten mit nicht ausgeglichenem unteren Rand
greift die letzte Seite auf die gleiche Positionierung zurück wie die
vorhergehende Seite, vorausgesetzt, dafür ist genügend Platz vorhanden.

Spezifische Methoden, um Alisten zu verändern, werden behandelt in
@ref{Alisten verändern}.  Das folgende Beispiel demonstriert beide Arten,
wie diese Alisten verändert werden können.  Der erste Aufruf verändert
nur einen Schlüsselwert einzeln, während der zweite die Variable
vollständig neu definiert:

@example
\paper @{
  system-system-spacing #'basic-distance = #8
  score-system-spacing =
    #'((basic-distance . 12)
       (minimum-distance . 6)
       (padding . 1)
       (stretchability . 12))
@}
@end example


@node Liste der flexiblen vertikalen Abstandsvariablen in \paper
@unnumberedsubsubsec Liste der flexiblen vertikalen Abstandsvariablen in @code{\paper}
@translationof List of flexible vertical spacing \paper variables

Die Bezeichnungen dieser Variablen entsprechen dem Format
@code{@var{obere}-@var{untere}-platzierung}, wobei @code{@var{obere}}
und @code{@var{untere}} die zu platzierenden Elemente darstellen.  Jeder
Abstand wird zwischen den Referenzpunkten der beiden Elemente gemessen
(siehe Beschreibung der Alistenstruktur oben).  In diesen Variablenbezeichnungen
bedeutet @q{@code{markup}} (Beschriftung) sowohl
@emph{Titelbeschriftungen} (@code{bookTitleMarkup} oder
@code{scoreTitleMarkup}) als auch @emph{Beschriftungen auf höchster Ebene}
(siehe @ref{Die Dateistruktur}).  Alle Entfernungen werden in Systemzwischenräumen
gemessen.

Standardwerte sind in @file{ly/paper-defaults-init.ly} definiert.

@c TODO: Where do headers/footers fit in? -mp

@table @code
@item markup-system-spacing
@funindex markup-system-spacing

der Abstand zwischen einer (Titel-)Beschriftung (auf höchster Ebene) und der
darauf folgenden Systemgruppe.

@item score-markup-spacing
@funindex score-markup-spacing

der Abstand zwischen dem letzten System einer Partitur und der darauf folgenden
(Titel-)Beschriftung (auf höchster Ebene).

@item score-system-spacing
@funindex score-system-spacing

der Abstand zwischen dem letzten System einer Partitur und dem ersten
System der folgenden Partitur, wenn keine (Titel-)Beschriftung (auf höchster
Ebene) dazwischen vorkommt.

@item system-system-spacing
@funindex system-system-spacing

der Abstand zwischen zwei Systemgruppen der selben Partitur.

@item markup-markup-spacing
@funindex markup-markup-spacing

der Abstand zwischen zwei (Titel-)Beschriftungen (auf höchster Ebene).

@item last-bottom-spacing
@funindex last-bottom-spacing

der Abstand vom letzten System oder Beschriftung auf höchster Ebene auf
einer Seite zum unteren Rand des bedruckbaren Bereichs (also bis zum Anfang
des unteren Randes).

@item top-system-spacing
@funindex top-system-spacing

der Abstand zwischen dem oberen Rand des bedruckbaren Bereichs (also dem Ende
des oberen Rands) und dem ersten System auf der Seite, wenn keine
(Titel-)Beschriftung (auf höchster Ebene) dazwischen kommt.

@item top-markup-spacing
@funindex top-markup-spacing

der Abstand vom oberen Rand des bedruckbaren Bereichs (also dem Ende des
oberen Randes) zur ersten (Titel-)Beschriftung (auf höchster Ebene) auf
einer Seite, wenn keine Systemgruppe dazwischen kommt.
@end table

@seealso
Notationsreferenz:
@ref{Flexible vertikale Abstände in Systemgruppen}.

Installierte Dateien:
@file{ly/paper-defaults-init.ly}.

Schnipsel:
@rlsr{Spacing}.



@node paper-Variablen für horizontale Abstände
@unnumberedsubsubsec \paper-Variablen für horizontale Abstände
@translationof Horizontal spacing \paper variables

@warning{Einige @code{@bs{}paper}-Dimensionen werden automatische
entsprechend dem Papierformat skaliert und können deshalb ungewollte
Resultate haben.  Siehe @ref{Automatische Skalierung auf ein Papierformat}.}

@menu
* paper-Variablen für Breite und Ränder::
* paper-Variablen für zweiseitigen Satz::
* paper-Variablen für Verschiebungen und Einrückungen::
@end menu


@node paper-Variablen für Breite und Ränder
@unnumberedsubsubsec \paper-Variablen für Breite und Ränder
@translationof \paper variables for widths and margins

Standardwerte (vor der Skalierung), die hier nicht aufgelistet
sind, finden sich in @file{ly/paper-defaults-init.ly}.


@table @code

@item paper-width
@funindex paper-width

Die Breide der Seite, standardmäßig nicht definiert.  Während
@code{paper-width} keine Auswirkungen auf die automatische
Skalierung einiger horizontaler Dimensionen hat, beeinflusst es
dennoch die @code{line-width}-Variable.  Wenn sowohl @code{paper-width}
als auch @code{line-width} definiert sind, dann werden auch
@code{left-margin} und @code{right-margin} aktualisiert.  Siehe auch
@code{check-consistency}.

@item line-width
@funindex line-width

Die horizontale Ausdehnung der Notenlinien in nicht-eingerückten,
Systemen mit Ausgleich zum rechten Rand, entspricht
@code{(paper-width@tie{}@minus{}@tie{}left-margin@tie{}@minus{}@tie{}right-margin)}
wenn nicht definiert.  Wenn @code{line-width} definiert ist und sowohl
@code{left-margin} als auch @code{right-margin} nicht definiert sind, dann
werden die Ränder aktualisiert, sodass die Systeme mittig auf der Seite
zentriert werden.  Siehe auch @code{check-consistency}.  Diese Variable
kann auch in der @code{\layout}-Umgebung definiert werden.

@item left-margin
@funindex left-margin

Der Rand zwischen der linken Papierkante und dem Beginn der Systeme
ohne Einrückungen.  Wenn das Papierformat verändert wird, wird auch
der Standardwert dieser Dimension entsprechend skaliert.  Wenn
@code{left-margin} nicht definiert ist und sowohl @code{line-width}
als auch @code{right-margin} definiert sind, dann wird @code{left-margin}
auf den Wert
@code{(paper-width@tie{}@minus{}@tie{}line-width@tie{}@minus{}@tie{}right-margin)}
gesetzt.  Wenn nur @code{line-width} definiert ist, dann werden beide
Ränder auf den Wert
@code{((paper-width@tie{}@minus{}@tie{}line-width)@tie{}/@tie{}2)}
gesetzt und die Systeme demzufolge auf der Seite zentriert.  Siehe auch
@code{check-consistency}.

@item right-margin
@funindex right-margin

Der Rand zwischen der rechten Papierkante und dem Ende der Systeme mit
Randausgleich (@qq{Blocksatz}).  Wenn das Papierformat geändert wird,
wird auch der Standardwert dieser Dimension entsprechend skaliert.  Wenn
@code{right-margin} nicht definiert ist und sowohl @code{line-width} als
auch @code{left-margin} definiert sind, dann wird @code{right-margin} auf den
Wert @code{(paper-width@tie{}@minus{}@tie{}line-width@tie{}@minus{}@tie{}left-margin)}
gesetzt.  Wenn nur @code{line-width} definiert ist, dann werden beide Ränder
auf den Wert
@code{((paper-width@tie{}@minus{}@tie{}line-width)@tie{}/@tie{}2)}
gesetzt und die Systeme demzufolge auf der Seite zentriert.  Siehe auch
@code{check-consistency}.

@item check-consistency
@funindex check-consistency

Wenn wahr, wird eine Warnung ausgegeben, sollten @code{left-margin},
@code{line-width} und @code{right-margin} zusammen nicht exakt den
Wert von @code{paper-width} ergeben, und die Werte (außer
@code{paper-width}) mit ihren Standardwerten belegt (wenn nötig auf
das entsprechende Papierformat skaliert).  Wenn falsch werden derartige
Inkonsistenzen ignoriert und die Systeme dürfen auch über den Seitenrand
hinausragen.

@item ragged-right
@funindex ragged-right

Wenn wahr, werden Notensysteme nicht über die gesamte Zeilenbreite
gestreckt, sondern sie enden horizontal entsprechend den enthaltenen
Noten.  Standard: @code{#t} (wahr) für Partituren mit einem System
und @code{#f} (falsch) für Partituren mit zwei oder mehr Systemen.
Diese Variable kann auch in der @code{\layout}-Umgebung definiert werden.

@item ragged-last
@funindex ragged-last

Wenn wahr, wird das letzte Notensystem einer Partitur nicht über die
gesamte Zeilenbreite gestreckt, sondern es endet horizontal entsprechend
den enthaltenen Noten.  Standard: @code{#f} (falsch).  Diese  Variable
kann auch in der @code{\layout}-Umgebung definiert werden.

@end table

@seealso
Notationsreferenz:
@ref{Automatische Skalierung auf ein Papierformat}.

Installierte Dateien:
@file{ly/paper-defaults-init.ly}.

@knownissues
Explizit definierte Papierformate überschreiben alle vom Benutzer erstellte
Randeinstellung für die Ränder oben und unten.


@node paper-Variablen für zweiseitigen Satz
@unnumberedsubsubsec @code{\paper}-Variablen für zweiseitigen Satz
@translationof \paper variables for two-sided mode

Standardwerte (vor der Skalierung) sind definiert in
@file{ly/paper-defaults-init.ly}.

@table @code

@item two-sided
@funindex two-sided

@cindex Bundsteg
@cindex Binderand

Wenn auf wahr (@code{##t}) gesetzt, werden  @code{inner-margin}, @code{outer-margin}
und @code{binding-offset} zusammen benutzt, um die Ränder der Seite in Abhängigkeit
von einer geraden oder ungeraden Seitennummer zu errechnen.  Damit werden die
Werte von @code{left-margin} und @code{right-margin} überschrieben.  Standard:
@code{##f}.

@item inner-margin
@funindex inner-margin

Der Rand, den alle Seiten auf der Innenseite haben, wenn sie Teil eines
Buches (@code{\book}) sind.  Wenn das Papierformat verändert wird,
wird der Standardwert dieser Dimension entsprechend skaliert.  Funktioniert
nur, wenn @code{two-sided} wahr ist.

@item outer-margin
@funindex outer-margin

Der Rand, den alle Seiten auf der Außenseite haben, wenn sie Teil eines Buches
sind.  Wenn das Papierformat verändert wird,
wird der Standardwert dieser Dimension entsprechend skaliert.  Funktioniert nur,
wenn @code{two-sided} wahr ist.

@item binding-offset
@funindex binding-offset

Der Wert, um welchen @code{inner-margin} erhöht wird, um sicherzugehen, dass
nichts in der Bindung verschwindet.  Wenn das Papierformat verändert wird,
wird der Standardwert dieser Dimension entsprechend skaliert.  Funktioniert nur,
wenn @code{two-sided} wahr ist.

@end table

@seealso
Notationsreferenz:
@ref{Automatische Skalierung auf ein Papierformat}.

Installierte Dateien:
@file{ly/paper-defaults-init.ly}.


@node paper-Variablen für Verschiebungen und Einrückungen
@unnumberedsubsubsec @code{\paper}-Variablen für Verschiebungen und Einrückungen 
@translationof \paper variables for shifts and indents


Standardwerte (vor der Skalierung), die hier nicht aufgeführt sind,
sind definiert in @file{ly/paper-defaults-init.ly}.

@table @code

@item horizontal-shift
@funindex horizontal-shift

@c This default value is buried in the middle of page.scm.  -mp

Der Wert, um den alle Systeme (und auch Überschriften und Systemtrenner)
nach rechts verschoben werden.  Standard: @code{0.0\mm}.

@item indent
@funindex indent

Der Einzug für das erste System einer Partitur.  Wenn das Papierformat
verändert wird, wird der Standardwert dieser Dimension entsprechend skaliert.
Diese Variable kann auch in der @code{\layout}-Umgebung definiert werden.

@item short-indent
@funindex short-indent

Der Einzug für alle Systeme einer Partitur ausschließlich das
erste System.  Wenn das Papierformat
verändert wird, wird der Standardwert dieser Dimension entsprechend skaliert.
Diese Variable kann auch in der @code{\layout}-Umgebung definiert werden.

@end table

@seealso
Notationsreferenz:
@ref{Automatische Skalierung auf ein Papierformat}.

Installierte Dateien:
@file{ly/paper-defaults-init.ly}.

Schnipsel:
@rlsr{Spacing}.


@node Andere paper-Variablen
@subsection Andere @code{\paper}-Variablen
@translationof Other \paper variables

@menu
* paper-Variablen für den Zeilenumbruch::
* paper-Variablen für den Seitenumbruch::
* paper-Variablen für Seitenzahlen::
* Verschiedene paper-Variablen::
@end menu


@node paper-Variablen für den Zeilenumbruch
@unnumberedsubsubsec @code{\paper}-Variablen für den Zeilenumbruch
@translationof \paper variables for line breaking
@c TODO: Mention that ly:optimal-breaking is on by default? -mp

@table @code

@item max-systems-per-page
@funindex max-systems-per-page

Die maximale Anzahl an Notensystemgruppen, die auf einer Seite gesetzt werden.  Das
wird zur Zeit nur von dem @code{ly:optimal-breaking}-Algorithmus
unterstützt.  Standard: nicht gesetzt.

@item min-systems-per-page
@funindex min-systems-per-page

Die minimale Anzahl an Notensystemgruppen, die auf einer Seite gesetzt werden. Das
kann dazu führen, dass Seiten zu dicht gefüllt werden, wenn der Wert
zu groß gewählt wird.  Die Option ist zur Zeit nur von dem
@code{ly:optimal-breaking}-Algorithmus unterstützt.  Standard: nicht gesetzt.

@item systems-per-page
@funindex systems-per-page

Die Anzahl an Systemen, die auf jede Seite gesetzt werden sollen.
Diese Option wird zur Zeit nur von dem @code{ly:optimal-breaking}-Algorithmus
unterstützt.  Standard: nicht gesetzt.

@item system-count
@funindex system-count

Die Anzahl der Systeme, auf denen eine Partitur gesetzt werden soll.
Standard: nicht gesetzt.  Diese Variablen kann auch in der
@code{\layout}-Umgebung definiert werden.

@end table

@seealso
Notationsreferenz:
@ref{Zeilenumbrüche}.


@node paper-Variablen für den Seitenumbruch
@unnumberedsubsubsec @code{\paper}-Variablen für den Seitenumbruch
@translationof \paper variables for page breaking

Standardwerte, die hier nicht aufgelistet sind, finden sich in
@file{ly/paper-defaults-init.ly}

@table @code

@item blank-after-score-page-penalty
@funindex blank-after-score-page-penalty

Die Strafpunke, die erteilt werden, wenn eine leere Seite nach einer
Partitur und vor der nächsten vorkommt.  Der Standardwert hiervon ist
kleiner als @code{blank-page-penalty}, sodass leere Seiten nach einer Partitur
leeren Seiten innerhalb einer Partitur vorgezogen werden.

@item blank-last-page-penalty
@funindex blank-last-page-penalty

Die Strafpunkte, wenn eine Partitur auf einer ungeraden Seite
beendet wird. Standard: @code{0}.

@item blank-page-penalty
@funindex blank-page-penalty

Die Strafpunkte, wenn eine leere Seite mitten in einer Partitur
auftritt.  Das wird nicht benutzt von @code{ly:optimal-breaking},
weil hiermit niemals leere Seiten mitten in einer Partitur zugelassen
werden.

@item page-breaking
@funindex page-breaking

Der Algorithmus, der für Seitenumbrüche eingesetzt wird.  Mögliche
Algorithmen sind: @code{ly:minimal-breaking} (minimale Umbrüche),
@code{ly:page-turn-breaking} (Umbrüche an guten Stellen zum Umblättern)
und @code{ly:optimal-breaking}.

@item page-breaking-system-system-spacing
@funindex page-breaking-system-system-spacing

Überlistet die Seitenumbruchfunktion, indem ihr ein anderer Wert
für @code{system-system-spacing} mitgeteilt wird, als in Wirklichkeit
eingestellt ist.  Wenn beispielsweise
@code{page-breaking-system-system-spacing #'padding} auf einen
deutlich größeren Wert als @code{system-system-spacing #'padding} gesetzt
wird, setzt die Seitenumbruchsfunktion weniger Systeme auf eine
Seite.  Standard: nicht gesetzt.

@item page-count
@funindex page-count

Die Zahl der Seiten, die für eine Partitur benutzt werden sollen.
Standard: nicht gesetzt.

@end table

@seealso
Notationsreferenz:
@ref{Seitenumbrüche},
@ref{Optimale Seitenumbrüche},
@ref{Optimale Umbrüche zum Blättern},
@ref{Minimale Seitenumbrüche},
@ref{Eine-Seite-Seitenumbrüche}.

Installierte Dateien:
@file{ly/paper-defaults-init.ly}.


@node paper-Variablen für Seitenzahlen
@unnumberedsubsubsec @code{\paper}-Variablen für Seitenzahlen
@translationof \paper variables for page numbering

Standardwerte, die hier nicht aufgelistet sind, finden sich in
@file{ly/paper-defaults-init.ly}

@table @code

@item auto-first-page-number
@funindex auto-first-page-number
@cindex Seitenzahlen, automatische Nummerierung

Der Seitenumbruchsalgorithmus wird davon beeinflusst, ob die erste
Seitenzahl gerade oder ungerade ist.  Wenn die Variable auf wahr
gesetzt wird, entscheidet der Seitenumbruchsalgorithmus selber,
ob die Noten auf einer geraden oder ungeraden Seite beginnen sollen.
Das hat dann zur Folge, dass die erste Seite entweder bleibt wie
sie ist oder um eins erhöht wird.  Standard: @code{#f}.

@item first-page-number
@funindex first-page-number
@cindex Sietenzahlen, erste definieren

Der Wert der Seitenzahl auf der ersten Seite.

@item print-first-page-number
@funindex print-first-page-number

Wenn wahr, wird auch auf der ersten Seite die Seitenzahl ausgegeben.
Standard: @code{#f}.

@item print-page-number
@funindex print-page-number
@cindex Seitenzahlen, unterdrücken

Wenn falsch, werden Seitenzahlen nicht ausgegeben.

@end table

@seealso
Installierte Dateien:
@file{ly/paper-defaults-init.ly}.

@knownissues
Ungrade Seitenzahlen befinden sich immer auf der rechten Seite.
Wenn Sie die Noten auf Seite 1 beginnen lassen wollen, müssen Sie
eine leere Seite nach dem Deckblatt einfügen, damit die Noten
auf der rechten Seite mit Seite 1 beginnen.


@node Verschiedene paper-Variablen
@unnumberedsubsubsec Verschiedene @code{\paper}-Variablen
@translationof Miscellaneous \paper variables
@table @code

@item page-spacing-weight
@funindex page-spacing-weight

Die relative Gewichtung von (vertikalem) Abstand auf der Seite und
(horizontalem) Abstand innerhalb der Zeilen.  Hohe Werte gewichten
die vertikalen Abstände mehr.  Standard: @code{10}.

@item print-all-headers
@funindex print-all-headers

Wenn wahr, werden alle Einträge des Titelfeldes (@code{\header}-Umgebung)
für jede Partitur (@code{\score}) ausgegeben.  Normalerweise wird nur die
Satzbezeichnung und die Opuszahl (@code{piece} und @code{opus})
ausgegeben.  Standard: @code{#f}.

@item system-separator-markup
@funindex system-separator-markup

Ein Beschriftungsobjekt, das zwischen zwei Systeme gesetzt wird.  Das
wird oft in Orchesterpartituren eingesetzt.  Standard: nicht gesetzt.
Der Beschriftungsbefehl @code{\slashSeparator}, definiert in
@file{ly/titling-init.ly}, kann für einen Trenner
benutzt werden, etwa so:

@lilypond[quote,verbatim,noragged-right,line-width=30\mm]
#(set-default-paper-size "a8")

\book {
  \paper {
    system-separator-markup = \slashSeparator
  }
  \header {
    tagline = ##f
  }
  \score {
    \relative c'' { c1 \break c1 \break c1 }
  }
}
@end lilypond

@end table


@seealso
Installierte Dateien:
@file{ly/titling-init.ly}.

Schnipsel:
@rlsr{Spacing}.


@knownissues

Die Standard-Kopfzeilendefinition setzt die Seitenzahl und das
@code{instrument}-Feld aus der @code{\header}-Umgebung in eine
Zeile.



@node Partiturlayout
@section Partiturlayout
@translationof Score layout

@menu
* Die \layout-Umgebung
* Die Notensystemgröße einstellen::
@end menu


@node Die \layout-Umgebung
@subsection Die @code{\layout}-Umgebung
@translationof The \layout block

@cindex Partitur, Layout
@cindex Layout, Partitur
@funindex \layout

Während die @code{\paper}-Umgebung Einstellungen für die Formatierung
der Seiten eines gesamten Dokuments enthalten, enthält die
@code{\layout}-Umgebung Einstellungen für einzelne Partituren.  Um
Layoutoptionen für Partituren global einzustellen, müssen sie in einer
@code{\layout}-Umgebung gesetzt werden, die sich auf höchster Ebene in
der Datei befindet.  Um sie für einzelne Partituren festzulegen, muss die
@code{\layout}-Umgebung innerhalb der @code{\score}-Umgebung nach den Noten
eingetraten werden.  Einstellungen, die in einer @code{\layout}-Umgebung
vorkommen können, beinhalten:

@itemize
@item die @code{layout-set-staff-size}-Scheme-Funktion,
@item Kontextveränderungen in @code{\context}-Umgebungen und
@item @code{\paper}-Variablen, die das Aussehen einer Partitur beeinflussen.
@end itemize

Die @code{layout-set-staff-size}-Funktion wird im nächsten Abschnitt behandelt,
@ref{Die Notensystemgröße einstellen}.  Kontextveränderungen werden in einem
eigenen Kapitel behandelt, siehe @ref{Umgebungs-Plugins verändern} and
@ref{Die Standardeinstellungen von Kontexten ändern}.  Die @code{\paper}-Variablen,
die innerhalb der @code{\layout}-Umgebungen erlaubt sind, sind:

@itemize

@item
@code{line-width}, @code{ragged-right} und @code{ragged-last}
(siehe @ref{paper-Variablen für Breite und Ränder,,@code{@bs{}paper}-Variablen für Breite und Ränder})

@item
@code{indent} und @code{short-indent}
(siehe @ref{paper-Variablen für Verschiebungen und Einrückungen,,@code{@bs{}paper}-Variablen für Verschiebungen und Einrückungen})

@item
@code{system-count}
(siehe @ref{paper-Variablen für den Zeilenumbruch,,@code{@bs{}paper}-Variablen für den Zeilenumbruch})

@end itemize

Hier ist ein Beispiel für eine @code{\layout}-Umgebung:

@example
\layout @{
  indent = 2\cm
  \context @{
    \StaffGroup
    \override StaffGrouper.staff-staff-spacing.basic-distance = #8
  @}
  \context @{
    \Voice
    \override TextScript.padding = #1
    \override Glissando.thickness = #3
  @}
@}
@end example

Mehrfache @code{\layout}-Umbgebungen können als Ausdrücke auf höchster
Ebene eingegeben werden.  Das kann beispielsweise nützlich sein, wenn
unterschiedliche Einstellungen in extra Dateien gespeichert werden und
optional eingefügt werden.  Intern wird eine Kopie der aktuellen
@code{\layout}-Konfiguration gemacht, wenn eine @code{\layout}-Umgebung
ausgewertet wird, dann erst werden Änderungen aus der Umgebung angewendet
und das Ergebnis als die neue aktuelle Konfiguration gespeichert.
Aus der Sicht des Benutzers werden die @code{\layout}-Umgebungen
kombiniert, aber in Konfliktsituationen (wenn die gleiche Eigenschaft
in unterschiedlichen Umgebungen geändert wird), erhält die spätere
Definition den Vorrang.

Wenn also diese Umgebung:

@example
\layout @{
  \context @{
    \Voice
    \override TextScript.color = #magenta
    \override Glissando.thickness = #1.5
  @}
@}
@end example

nach der Umgebung aus dem vorherigen Beispiel geschrieben wird, werden
die @code{'padding}- und @code{'color}-Einstellungen für @code{TextScript}
kombiniert, aber die spätere @code{'thickness}-Einstellung für
@code{Glissando} ersetzt (oder versteckt) die vorherige.

@code{\layout}-Umgebungen können einer Variable zur späteren Benutzung
zugewiesen werden, aber die Funktionsweise dieser Zuweisung ist geringfügig
aber deutlich unterschiedlich von der Variante, sie auszuschreiben.

Wenn eine Variable etwa so definiert wird:

@example
layoutVariable = \layout @{
  \context @{
    \Voice
    \override NoteHead.font-size = #4
  @}
@}
@end example

@noindent
dann enthält sie die aktuelle @code{\layout}-Konfiguration mit zusätzlicher
Veränderung von @code{NoteHead #'font-size} (der Schriftgröße der Notenköpfe),
aber diese Kombination wird @emph{nicht} als nächste aktuelle
Konfiguration gespeichert.  Man muss sich im klaren sein, dass die
@qq{aktuelle Konfiguration} gelesen wird, wenn die Variable erstellt
wird, nicht wenn sie benutzt wird.  Darum ist der Inhalt der Variable
abhängig von ihrer Position in der Partitur.

Die Variable kann dann auch innerhalb einer anderen @code{\layout}-Umgebung
eingesetzt werden, etwa:

@example
\layout @{
  \layoutVariable
  \context @{
    \Voice
    \override NoteHead.color = #red
  @}
@}
@end example

Eine @code{\layout}-Umgebung, die eine Variable enthält wie im Beispiel oben,
kopiert die aktuelle Konfiguration @emph{nicht}, sondern benützt den
Inhalt von @code{\layoutVariable} als Basiskonfiguration für die weiteren
Veränderungen.  Das heißt, dass Änderungen, die zwischen der Definition
der Variable und ihrer Benutzung definiert wurden, verloren gehen.

Wenn @code{layoutVariable} kurz vor ihrer Benutzung definiert wird (oder
mit @code{\include} eingefügt wird), entspricht ihr Inhalt der
aktuellen Konfiguration plus die Änderungen, die die Variable definiert.
Das obige Beispiel, das den Einsatz von  @code{\layoutVariable} zeigt,
würde in seiner finalen Version folgende @code{\layout}-Umgebung haben:

@example
  TextScript #'padding = #1
  TextScript #'color = #magenta
  Glissando #'thickness = #1.5
  NoteHead #' font-size = #4
  NoteHead #' color = #red
@end example

plus die Veränderungen an Einrückung (@code{indent}) und @code{StaffGrouper}.

Aber wenn die Variable vor der ersten @code{\layout}-Umgebung definiert
wird, würde die aktuelle Konfiguration nur enthalten:

@example
  NoteHead #' font-size= #4 % (written in the variable definition)
  NoteHead #' color = #red % (added after the use of the variable)
@end example

Wenn man sorgfältig plant, können @code{\layout}-Variablen ein wertvolles
Instrument sein, um das Layout-Design von Quellen zu strukturieren und
auch dazu dienen, die Layout-Einstellungen an einer bestimmten Stelle
wieder zurückzusetzen.

@seealso
Notationsreferenz:
@ref{Die Standardeinstellungen von Kontexten ändern},
@ref{Die Notensystemgröße einstellen},
@ref{Umgebungs-Plugins verändern}.

Schnipsel:
@rlsr{Spacing}.



@node Die Notensystemgröße einstellen
@subsection Die Notensystemgröße einstellen
@translationof Setting the staff size

@cindex Schriftgröße, Einstellung
@cindex Systemgröße, Einstellung
@cindex Verändern der Schriftgröße
@cindex Verändern der Systemgröße
@funindex layout file

Die Standardgröße der Notensysteme beträgt 20 Punkte (pt).
Das kann auf zwei Arten geändert werden:

Um die Systemgröße global für alle Partituren einer
Datei (bzw. einer @code{\book}-Umgebung) zu verändern,
wird @code{set-global-staff-size} benutzt:

@example
#(set-global-staff-size 14)
@end example

@noindent
Hiermit wird die Standardhöhe der Notensysteme auf 14 pt
gesetzt.  Die Schriftarten werden entsprechend verkleinert.

Um die Systemhöhe für jede Partitur einzeln zu verändern,
muss

@example
\score@{
  @dots{}
  \layout @{
    #(layout-set-staff-size 15)
  @}
@}
@end example

@noindent
eingesetzt werden.

Die Feta-Schriftart stellt die Noten- und Musiksymbole
für acht verschiedene Größen zur Verfügung.  Jede
Schriftgröße ist einer bestimmten Systemgröße angepasst:
für kleinere Schriftgrößen werden die Zeichen etwas
schwerer, um mit den ebenfalls dickeren Notenlinien
zu harmonieren.  Die empfohlenen Notensystemgrößen
sind in der Tabelle aufgeführt:

@quotation
@multitable @columnfractions .15 .2 .22 .2

@item @b{Schriftbezeichnung}
@tab @b{Höhe des Systems (pt)}
@tab @b{Höhe des Systems (mm)}
@tab @b{Benutzung}

@item feta11
@tab 11.22
@tab 3.9
@tab Taschenparituren

@item feta13
@tab 12.60
@tab 4.4
@tab

@item feta14
@tab 14.14
@tab 5.0
@tab

@item feta16
@tab 15.87
@tab 5.6
@tab

@item feta18
@tab 17.82
@tab 6.3
@tab Liederbücher

@item feta20
@tab 20
@tab 7.0
@tab Orchesterstimmen

@item feta23
@tab 22.45
@tab 7.9
@tab

@item feta26
@tab 25.2
@tab 8.9
@tab
@c modern rental material?

@end multitable
@end quotation

Diese Schriftarten sind in allen Größen erhältlich.  Die Kontext-Eigenschaft
@code{fontSize} und die Layout-Eigenschaft @code{staff-space} (in
@code{StaffSymbol}) können benutzt werden, um die Schriftgröße für
einzelne Systeme zu verändern.  Die Größe von einzelnen Systemen
ist relativ zur globalen Systemgröße.


@seealso
Notationsreferenz:
@ref{Auswahl der Notations-Schriftgröße}.

Schnipsel:
@rlsr{Spacing}.


@knownissues

@code{layout-set-staff-size} verändert nicht den Abstand zwischen den
Notenlinien.


@node Umbrüche
@section Umbrüche
@translationof Breaks

@menu
* Zeilenumbrüche::
* Seitenumbrüche::
* Optimale Seitenumbrüche::
* Optimale Umbrüche zum Blättern::
* Minimale Seitenumbrüche::
* Eine-Seite-Seitenumbrüche::
* Ausdrückliche Umbrüche::
* Eine zusätzliche Stimme für Umbrüche benutzen::
@end menu


@node Zeilenumbrüche
@subsection Zeilenumbrüche
@translationof Line breaking

@cindex Zeilenumbrüche
@cindex Umbrüche von Zeilen

Zeilenumbrüche werden normalerweise automatisch erstellt.  Sie
werden so ausgewählt, dass die Zeilen weder gedrängt noch zu
weit gespreizt wirken und aufeinander folgende Seiten einen
ähnlichen Grauwert haben.

Einen manuellen Zeilenumbruch fügt man mit dem Befehl @code{\break}
ein:

@lilypond[quote,ragged-right,relative=2,verbatim]
c4 c c c | \break
c4 c c c |
@end lilypond

Normalerweise wird ein @code{\break} in der Mitte eines Takes ignoriert
und eine Warnung ausgegeben.  Um einen Zeilenumbruch in der Mitte eines
Taktes zu erzwingen, können Sie mit @code{\bar ""} eine
unsichtbare Taktlinie hinzufügen, die dann den Zeilenumbruch
erlaubt.

@lilypond[quote,ragged-right,relative=2,verbatim]
c4 c c
\bar "" \break
c |
c4 c c c |
@end lilypond

Ein @code{\break} an einem Taktstrich wird auch ignoriert, wenn der letzte
Takt mitten in einer Note endet, wenn etwa eine N-tole in unterschiedlichen
Takten beginnt und endet.  Damit @code{\break} auch in derartigen Situationen
funktioniert, muss @code{Forbid_line_break_engraver} aus der
@code{Voice}-Umgebung entfernt werden.  Dabei sollte beachtet werden, dass
manuell hervorgerufene Umbrüche parallel mit den Noten hinzugefügt werden
müssen.

@lilypond[quote,ragged-right,verbatim]
\new Voice \with {
  \remove "Forbid_line_break_engraver"
} \relative c'' {
  <<
    { c2. \tuplet 3/2 { c4 c c } c2. | }
    { s1 | \break s1 | }
  >>
}
@end lilypond

Genauso werden normalerweise Zeilenumbrüche auch verhindert, wenn Balken
über die Taktenden hinausragen.  Dieses Verhalten kann verändert werden,
indem man @code{\override Beam.breakable = ##t} einstellt:

@lilypond[quote,ragged-right,relative=2,verbatim]
\override Beam.breakable = ##t
c2. c8[ c | \break
c8 c] c2. |
@end lilypond

Mit dem Befehl @code{\noBreak} wird ein Zeilenumbruch an dem
entsprechenden Taktstrich verboten.

Die grundlegenden Einstellungen, die Einfluss auf die Zeilenlänge
haben, sind @code{indent} (Einzug) und @code{line-width}
(Zeilenbreite).  Sie werden in der @code{\layout}-Umgebung
eingestellt.  Der erste Befehl bestimmt den Einzug der ersten
Zeile, der zweite die Zeilenlänge der weiteren Notenzeilen.

Wenn @code{ragged-right} eingestellt ist (also in der
@code{\layout}-Umgebung auf den Wert @code{#t} gesetzt wurde),
werden die Systeme linksbündig gesetzt und nicht bis zum
rechten Rand hin durchgezogen, sondern den Noten entsprechend
gesetzt.  Das ist oftmals nützlich für kleine Notenfragmente
und um zu überprüfen, wie eng die Noten natürlicherweise
gesetzt werden würden.

Die Option @code{ragged-last} verhält sich ähnlich zu @code{ragged-right},
aber wirkt sich nur auf die letzte Zeile eines Stückes aus.

@example
\layout @{
indent = #0
line-width = #150\mm
ragged-last = ##t
@}
@end example

@cindex regelmäßige Zeilenumbrüche
@cindex Zeilenumbrüche in Intervallen

Um Zeilenumbrüche zu erzwingen, die in festgelegten Intervallen
stattfinden, kann der Befehl @code{\break} in Kombination
mit unsichtbaren Noten und einer Wiederholung (@code{\repeat}) eingesetzt
werden.  Das folgende Beispiel etwa setzt die nächsten
28 Takte (im 4/4-Takt) in Zeilen zu jeweils 4 Takten (die auch nur hier
umgebrochen werden):

@example
<<
  \repeat unfold 7 @{
    s1 \noBreak s1 \noBreak
    s1 \noBreak s1 \break
  @}
  @{ @var{Hier die Noten@dots{}} @}
>>
@end example

Eine Zeilenumbruchkonfiguration kann auch als eine @file{.ly}-Datei
automatisch gespeichert werden.  Damit kann die vertikale Ausrichtung
während eines zweiten Programmdurchlaufs angepasst werden um die
Seiten besser zu füllen.  Diese Eigenschaft ist recht neu und
kompliziert.  Mehr Einzelheiten finden sich in
@rlsr{Spacing}.

@predefined
@funindex \break
@code{\break},
@funindex \noBreak
@code{\noBreak}.
@endpredefined

@seealso
Notationsreferenz:
@ref{paper-Variablen für den Zeilenumbruch,,@code{@bs{}paper}-Variablen für den Zeilenumbruch}.

Schnipsel:
@rlsr{Spacing}.

Referenz der Interna:
@rinternals{LineBreakEvent}.


@node Seitenumbrüche
@subsection Seitenumbrüche
@translationof Page breaking

@cindex Seitenumbrüche
@cindex Umbrüche, Seite

Die Standardseitenumbrüche können verändert werden, indem
man die Befehle @code{\pageBreak} bzw. @code{\noPageBreak}
benutzt.  Sie verhalten sich analog zu den Befehlen
@code{\break} und @code{\noBreak}.  Sie sollten an einem
Taktstrich notiert werden.  Diese Befehle erzwingen bzw.
verbieten einen Seitenumbruch.  Mit dem @code{\pageBreak}-Befehl
wird natürlich gleichzeitig auch ein Zeilenumbruch erzwungen.

Die @code{\pageBreak} und @code{\noPageBreak}-Befehle können
auch auf der höchsten Ebene einer Datei benutzt werden, etwa
zwischen Partituren und Textbeschriftungen.

Es gibt auch vertikale Gegenstücke zu den Variablen
@code{ragged-right} und @code{ragged-last}:
@code{ragged-bottom} und @code{ragged-last-bottom}.  Wenn diese
Variablen auf @code{#t} (wahr) gesetzt werden, werden im ersten
Fall die Notensysteme auf allen Seiten eng nach oben orientiert
gesetzt werden.  Im zweiten Fall bezieht sich dies nur auf die
letzte Seite.
Zu Einzelheiten siehe @ref{Vertikale paper-Variablen mit festen Abständen,,Vertikale @code{@bs{}paper}-Variablen mit festen Abständen}.

Seitenumbrüche werden von der @code{page-breaking}-Funktion errechnet.
LilyPond kennt drei Algorithmen um Seitenumbrüche zu errechnen:
@code{ly:optimal-breaking}, @code{ly:page-turn-breaking} und
@code{ly:minimal-breaking}.  Der Standard ist @code{ly:optimal-breaking},
aber der Wert kann in der @code{\paper}-Umgebung geändert werden:

@example
\paper@{
  #(define page-breaking ly:page-turn-breaking)
@}
@end example

@funindex \bookpart

Wenn ein Buch (@code{\book}) viele Parituren und Seiten hat, kann die
Seitenaufteilung schwer zu ermitteln sein und viel Zeit und Prozessorlast
in Anspruch nehmen.  Um den Seitenumbruchsprozess zu vereinfachen,
werden @code{\bookpart}-Umgebungen benutzt, um das Buch in mehrere Teil
zu trennen: Die Seitenumbrüche werden seperat für jeden Teil berechnet.
Unterschiedliche Seitenumbruchsfunktionen können in unterschiedlichen
Buchteilen benutzt werden.

@example
\bookpart @{
  \header @{
    subtitle = "Vorwort"
  @}
  \paper @{
     %% In einem Abschnitt, der vor allem Text hat,
     %% funktioniert womöglich ly:minimal-breaking besser
     #(define page-breaking ly:minimal-breaking)
  @}
  \markup @{ @dots{} @}
  @dots{}
@}
\bookpart @{
  %% In diesem Abschnitt mit Noten wird
  %% die Standard-Seitenumbruchsfunktion benutzt.
  \header @{
    subtitle = "Erster Satz"
  @}
  \score @{ @dots{} @}
  @dots{}
@}
@end example




@predefined
@funindex \pageBreak
@code{\pageBreak},
@funindex \noPageBreak
@code{\noPageBreak}.
@endpredefined

@seealso
Notationsreferenz:
@ref{paper-Variablen für den Seitenumbruch,,@code{@bs{}paper}-Variablen für den Seitenumbruch}.

Schnipsel:
@rlsr{Spacing}.


@node Optimale Seitenumbrüche
@subsection Optimale Seitenumbrüche
@translationof Optimal page breaking

@funindex ly:optimal-breaking

Die @code{ly:optimal-breaking}-Funktion ist die Standardmethode für
LilyPond, um Seitenumbrüche zu errechnen.  Hiermit wird versucht,
Seitenumbrüche zu finden, die das Stauchen oder Strecken von Zeilen
minimieren, sowohl horizontal als auch vertikal.  Anders als die
@code{ly:page-turn-breaking}-Funktion hat diese Methode keine
Möglichkeit, Überlegungen zum Umblättern mit einzubeziehen.

@seealso
Schnipsel:
@rlsr{Spacing}.


@node Optimale Umbrüche zum Blättern
@subsection Optimale Umbrüche zum Blättern
@translationof Optimal page turning

@funindex ly:page-turn-breaking

Es ist oft nötig, die Seiten so umzubrechen, dass sich eine Pause am
Ende jeder zweiten Seite befindet, damit der Musiker es leichter hat,
die Seite umzublättern ohne das Spielen zu Unterbrechen.  Die
@code{ly:page-turn-breaking}-Funktion versucht, Seitenumbrüche zu
finden, die das Stauchen oder Strecken von Zeilen minimieren und
gleichzeitig auch noch Seitenumbrüchen an angegebenen Stellen
den Vorrang zu geben.

Die Funktion wird in zwei Schritten eingesetzt.  Zunächst muss sie
in der @code{\paper}-Umgebung aktiviert werden, wie gezeigt in
@ref{Seitenumbrüche}.  Dann muss noch angegeben werden, welche Stellen
bevorzugt für Seitenumbrüche benutzt werden sollen.

Für diesen zweiten Schritt gibt es zwei Methoden.  Am Einfachsten ist
es, die möglichen Seitenumbrüche mit dem Befehl @code{\allowPageTurn}
an jeder Stelle manuell anzugeben.

Wenn Ihnen das zu aufwändig ist, können Sie den @code{Page_turn_engraver}
zu einem @code{Staff}- oder @code{Voice}-Kontext hinzufügen.  Dieser
Engraver durchsucht den entsprechenden Kontext nach Stellen ohne Noten.
(Es wird also nicht nach Pausen gesucht, sondern nach Stellen ohne
Noten.  Dieses Verhalten verhindert, dass an polyphonen Stellen umgebrochen
wird, wo nur in einer Stimme Pausen vorhanden sind.)  Wenn eine
derartige Stelle ohne Noten gefunden wird, fügt der Engraver den
Befehl @code{\allowPageTurn} am letzten Taktstrich des Abschnitts ein.  Wenn
in dem Abschnitt ein besonderer Taktstrich vorkommt (wie etwa ein
Doppelstrich), wird der Befehl nach diesem Taktstrich gesetzt.

@funindex minimumPageTurnLength

Der @code{Page_turn_engraver} liest die Kontexteigenschaft
@code{minimumPageTurnLength} um zu erkennen, wie lang eine Stelle
frei von Noten sein muss, damit ein Seitenumbruch in Frage kommt.  Der
Standardwert hierfür ist @code{(ly:make-moment 1/1)}.  Wenn Sie
Seitenumbrüche zum Umblättern ausschalten wollen, können Sie
einen sehr großen Wert angeben.

@example
\new Staff \with @{ \consists "Page_turn_engraver" @}
@{
  a4 b c d |
  R1 | % Ein Seitenumbruch zum Umblättern erlaubt
  a4 b c d |
  \set Staff.minimumPageTurnLength = #(ly:make-moment 5/2)
  R1 | % Seitenumbruch nicht erlaubt
  a4 b r2 |
  R1*2 | % Seitenumbruch erlaubt
  a1
@}
@end example

@funindex minimumRepeatLengthForPageTurn

Der @code{Page_turn_engraver} erkennt Wiederholungen vom Typ @code{volta}.
Ein Seitenumbruch zum Umblättern wird nur zugelassen, wenn vor und nach
der Wiederholung genug Zeit ist, um die Seite wieder zurückzublättern.
Wenn die Wiederholung sehr kurz ist, kann auch Umblättern verboten
werden.  Wenn Sie die Kontexteigenschaft
@code{minimumRepeatLengthForPageTurn} definieren, erlaubt der
@code{Page_turn_engraver} nur Umblättern in Wiederholungen, deren
Dauer länger als dieser Wert ist.

Die Seitenumblätter-Befehle @code{\pageTurn}, @code{\noPageTurn} und
@code{\allowPageTurn} können auch auf oberster Dateiebene benutzt
werden, etwa zwischen Partituren und Textabschnitten.


@predefined
@funindex \pageTurn
@code{\pageTurn},
@funindex \noPageTurn
@code{\noPageTurn},
@funindex \allowPageTurn
@code{\allowPageTurn}.
@endpredefined

@seealso
Schnipsel:
@rlsr{Spacing}.

@knownissues

In einer Partitur sollte nur ein @code{Page_turn_engraver} vorkommen.  Wenn
mehr als einer definiert werden, stören sie sich gegenseitig.


@node Minimale Seitenumbrüche
@subsection Minimale Seitenumbrüche
@translationof Minimal page breaking

@funindex ly:minimal-breaking

Die @code{ly:minimal-breaking}-Funktion benötigt nur minimale Berechnungen,
um die Seitenumbrüche zu bestimmen.  Die Seite wird mit möglichst
vielen Systemen gefüllt und dann zur nächsten Seite gewechselt.  Die
Funktion kann benutzt werden um Partituren mit vielen Seiten zu
setzen, wenn die anderen Seitenumbruchsfunktionen zu langsam wären
oder zu viel Speicher beanspruchen.  Auch für Seiten mit viel Text
ist die Funktion geeignet.  Sie wird folgendermaßen aktiviert:

@example
\paper @{
  page-breaking = #ly:minimal-breaking
@}
@end example

@seealso
Schnipsel:
@rlsr{Spacing}.


@node Eine-Seite-Seitenumbrüche
@subsection Eine-Seite-Seitenumbrüche
@translationof One-line page breaking

@funindex ly:one-line-breaking

Die Funktion @code{ly:one-line-breaking} ist ein besonderer
Seitenumbruchalgorithmus, der jede Partitur (@code{score}) auf
eine eigene Seite ausgibt, und in einer einzlenen Zeile.  Diese
Seitenumbruchfunktion gibt keine Titel oder Ränder aus, nur die
Partitur wird dargestellt.

Die Seitenbreite wird angepasst, sodass die längeste Partitur auf
eine Zeile passt.  Die Variablen @code{paper-width}, @code{line-width}
und @code{indent} in der @code{\paper}-Umgebung werden ignoriert,
wenn auch @code{left-margin} und @code{right-margin} noch beachtet
werden.  Die Höhe der Seite wird nicht verändert.


@node Ausdrückliche Umbrüche
@subsection Ausdrückliche Umbrüche
@translationof Explicit breaks

Es kann vorkommen, dass LilyPond direkte @code{\break} oder
@code{\pageBreak}-Befehl nicht beachtet.  Mit folgenden
Einstellungen kann dieses Verhalten ausgeschaltet werden:

@example
\override NonMusicalPaperColumn.line-break-permission = ##f
\override NonMusicalPaperColumn.page-break-permission = ##f
@end example

Wenn @code{line-break-permission} die Einstellung falsch
(@code{##f}) hat, werden Zeilenumbrüche nur an den Befehlen
@code{\break} eingefügt und nirgendwo anders.  Wenn
@code{page-break-permission} die Einstellung falsch
(@code{##f}) hat, werden Seitenumbrüche nur an den Befehlen
@code{\pageBreak} eingefügt und nirgendwo anders.

@lilypond[quote,verbatim]
\paper {
  indent = #0
  ragged-right = ##t
  ragged-bottom = ##t
}

music = \relative c'' { c8 c c c }

\score {
  \new Staff {
    \repeat unfold 2 { \music } \break
    \repeat unfold 4 { \music } \break
    \repeat unfold 6 { \music } \break
    \repeat unfold 8 { \music } \pageBreak
    \repeat unfold 8 { \music } \break
    \repeat unfold 6 { \music } \break
    \repeat unfold 4 { \music } \break
    \repeat unfold 2 { \music }
  }
  \layout {
    \context {
      \Score
      \override NonMusicalPaperColumn.line-break-permission = ##f
      \override NonMusicalPaperColumn.page-break-permission = ##f
    }
  }
}
@end lilypond


@seealso
Schnipsel:
@rlsr{Spacing}.


@node Eine zusätzliche Stimme für Umbrüche benutzen
@subsection Eine zusätzliche Stimme für Umbrüche benutzen
@translationof Using an extra voice for breaks

Zeilen- und Seitenumbruchbefehle werden normalerweise direkt
zusammen mit den Noten eingegeben.

@example
music = \relative c'' @{ c4 c c c @}

\score @{
  \new Staff @{
    \repeat unfold 2 @{ \music @} \break
    \repeat unfold 3 @{ \music @}
  @}
@}
@end example

Hierdurch sind zwar die Befehle @code{\break} und @code{\pageBreak}
einfach zu notieren, es werden aber Informationen zur Notation
mit Informationen zur Anordnung auf der Seite vermischt.  Man kann
diese Informationen auch voneinander trennen, indem man eine zusätzliche
Stimme einfügt, in der Zeilen- und Seitenumbrüche vorgenommen werden.
Diese zusätzliche Stimme enthält nur unsichtbare Noten und die
Umbruchbefehle:

@lilypond[quote,verbatim]
music = \relative c'' { c4 c c c }

\score {
  \new Staff <<
    \new Voice {
      s1 * 2 \break
      s1 * 3 \break
      s1 * 6 \break
      s1 * 5 \break
    }
    \new Voice {
      \repeat unfold 2 { \music }
      \repeat unfold 3 { \music }
      \repeat unfold 6 { \music }
      \repeat unfold 5 { \music }
    }
  >>
}
@end lilypond

Mit dieser Herangehensweise kann der Code insbesondere
dann klarer notiert werden, wenn man Einstellungen der
@code{line-break-system-details}-Eigenschaft oder
anderer Eigenschaften von
@code{NonMusicalPaperColumnGrob} vornimmt (hierzu auch
@ref{Vertikale Abstände}).

@lilypond[quote,verbatim]
music = \relative c'' { c4 c c c }

\score {
  \new Staff <<
    \new Voice {
      \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0))
      s1 * 2 \break

      \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 35))
      s1 * 3 \break

      \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 70))
      s1 * 6 \break

      \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 105))
      s1 * 5 \break
    }
    \new Voice {
      \repeat unfold 2 { \music }
      \repeat unfold 3 { \music }
      \repeat unfold 6 { \music }
      \repeat unfold 5 { \music }
    }
  >>
}
@end lilypond


@seealso
Notationsreferenz:
@ref{Vertikale Abstände}.

Schnipsel:
@rlsr{Spacing}.


@node Vertikale Abstände
@section Vertikale Abstände
@translationof Vertical spacing

@cindex vertikale Positionierung
@cindex Positionierung, vertikal
@cindex Abstände, vertikal

Vertikale Abstände werden durch drei Eigenschaften
bestimmt:  wieviel Platz frei ist (etwa Papiergröße
und Ränder), wieviel Platz zwischen Systemgruppen
(engl. system) gesetzt werden soll und wieviel
Platz zwischen Notensystemen (engl. staff, Pl. staves)
innerhalb von Gruppen gesetzt wird.

@menu
* Flexible vertikale Abstände in Systemgruppen::
* Explizite Positionierung von Systemen::
* Vermeidung von vertikalen Zusammenstößen::
@end menu


@node Flexible vertikale Abstände in Systemgruppen
@subsection Flexible vertikale Abstände in Systemgruppen
@translationof Flexible vertical spacing within systems

@cindex Abstand zwischen Notensystemen
@cindex Notensystemabstand
@cindex Platz zwischen Notensystemen
@cindex Platz innerhalb von Systemgruppen
@cindex Systemgruppen, Abstände innerhalb

Drei unterschiedliche Mechanismen kontrollieren das flexible Abstandaufteilung
in Systemgruppen, einer für jede der folgenden Kathegorien:

@itemize

@item
@emph{ungruppierte Systeme},

@item
@emph{Systemgruppen} (Systeme innerhalb einer @code{staff-group} wie etwa
@code{ChoirStaff} usw.) und

@item
@emph{Nicht-Notensystemzeilen} (wie etwa @code{Lyrics} (Gesangstext),
@code{ChordNames} (Akkordbezeichnungen) usw.).

@end itemize

Die Höhe jeder Systemgruppe wird in zwei Schritten bestimmt.  Zunächst
werden alle Systeme anhand des vorhandenen Platzes aufgeteilt.  Dann
werden die nicht-Notensysteme (also Akkorde oder Gesangstext) zwischen
den Systemen verteilt.

Es ist zu beachten, dass der Platzverteilungsmechanismus, der in diesem
Abschnitt behandelt wird, nur die vertikale Platzierung von Systemen und
nicht-Systemzeilen in einzelnen Systemgruppen behandelt.  Die vertikale
Platzierung zwischen einzelnen Systemgruppen, Partituren, Beschriftungen
usw. und den Rändern wird durch @code{\paper}-Variablen kontrolliert, die
@ref{Vertikale paper-Variablen mit flexiblen Abständen,,Vertikale @code{@bs{}paper}-Variablen mit flexiblen Abständen}.

@menu
* Eigenschaften für Abstände innerhalb von Systemgruppen::
* Abstände von nicht gruppierten Notensystemen::
* Abstände von gruppierten Notensystemen::
* Abstände von nicht-Notensystemzeilen::
@end menu


@node Eigenschaften für Abstände innerhalb von Systemgruppen
@unnumberedsubsubsec Eigenschaften für Abstände innerhalb von Systemgruppen
@translationof Within-system spacing properties

@funindex staff-affinity
@funindex staffgroup-staff-spacing
@funindex staff-staff-spacing
@funindex nonstaff-unrelatedstaff-spacing
@funindex nonstaff-relatedstaff-spacing
@funindex nonstaff-nonstaff-spacing
@funindex default-staff-staff-spacing
@funindex minimum-Y-extent
@funindex extra-offset
@funindex self-alignment-X
@funindex X-offset
@funindex VerticalAxisGroup

Der vertikalen Platzierungsmechanismen für Abstände innerhalb von Systemgruppen
werden durch zwei Gruppen von Grob-Eigenschaften kontrolliert.  Die erste
Gruppe ist mit dem @code{VerticalAxisGroup}-Grob verknüpft, der von allen
Notensystemen und Nicht-Notensystemzeilen erstellt wird.  Die zweite Gruppe
ist mit dem @code{StaffGrouper}-Grob verknüpft, der von Systemgruppen erstellt
werden kann, aber nur, wenn das explizit verlangt wird.  Die einzelnen Eigenschaften
werden am Ende dieses Abschnitts beschrieben.

Die Bezeichnungen dieser Eigenschaften (mit Außnahmen von @code{staff-affinity})
haben das Format @code{@var{Element1}-@var{Element2}-spacing}, wobei
@code{@var{Element1}} und @code{@var{Element2}} die Elemente sind, deren
Abstände eingestellt werden sollen.  Dabei ist allerdings zu beachten, dass
@code{@var{Element2}} sich nicht notwendigerweise unterhalb von
@code{@var{Element1}} befindet; beispielsweise
@code{nonstaff-relatedstaff-spacing} (Nicht-Notensystem-verwandtesNotensystem)
misst von dem Nicht-Notensystem nach oben, wenn @code{staff-affinity}
(Richtung, an der sich ein System ausrichtet) auf @code{UP} (nach oben)
eingestellt ist.

Jeder Abstand wird zwischen den @emph{Referenzpunkten} der zwei Objekten
gemessen.  Der Referenzpunkt eines Notensystems ist die vertikale Mitte
seines @code{StaffSymbol}-Objekts (also die Mittellinie, wenn
@code{line-count} (Notenlinienzähler) ungrade ist, oder der mittlere
Zwischenraum, wenn @code{line-count} grade ist).  Die Referenzpunkte für
einzelne Nicht-Notensystemzeilen ergibt sich aus der folgenden Tabelle:

@multitable {Nicht-Notensystemzeile} {Referenzpunkt}
@headitem Nicht-Notensystemzeile @tab Referenzpunkt
@item @code{ChordNames}  @tab Grundlinie
@item @code{NoteNames}   @tab Grundlinie
@item @code{Lyrics}      @tab Grundlinie
@item @code{Dynamics}    @tab vertikale Mitte
@item @code{FiguredBass} @tab höchster Punkt
@item @code{FretBoards}  @tab Oberlinie
@end multitable

Im nächsten Bild zeigen horizontale Striche die Positionen dieser
Referenzpunkte an:

@lilypond[quote,noragged-right,line-width=110\mm]
#(define zero-space '((padding . -inf.0) (basic-distance . 0)))

alignToZero = \with {
  \override VerticalAxisGroup.nonstaff-relatedstaff-spacing = #zero-space
  \override VerticalAxisGroup.nonstaff-nonstaff-spacing = #zero-space
}
lowerCaseChords = \with {
  chordNameLowercaseMinor = ##t
}
staffAffinityDown = \with {
  \override VerticalAxisGroup.staff-affinity = #DOWN
}
labelContext =
#(define-music-function
     (parser location context)
     (string?)
   #{ s1*0^\markup { \typewriter #context } #})

\layout {
  \context { \Dynamics    \alignToZero }
  \context { \FiguredBass \alignToZero }
  \context { \Lyrics      \alignToZero }
  \context { \NoteNames   \alignToZero \staffAffinityDown }
  \context { \ChordNames  \alignToZero
                          \staffAffinityDown
			  \lowerCaseChords }
  \context { \FretBoards  \alignToZero \staffAffinityDown }
  \context { \Score
    \omit BarLine
    \override DynamicText.self-alignment-X = #-1
    \override FretBoard.X-offset = #1.75
    \override InstrumentName.minimum-Y-extent = #'(-2 . 2)
    \override InstrumentName.extra-offset = #'(0 . -0.5)
    \override TextScript.minimum-Y-extent = #'(-2 . 3)
    \omit TimeSignature
  }
}

%% These contexts have reference points at the baseline:
%%   ChordNames, NoteNames, and Lyrics
<<
  \new ChordNames { \chords { g1:m } }
  \new NoteNames { s1 | g1 | }
  \new RhythmicStaff {
    \set RhythmicStaff.instrumentName = #"baseline "
    \textLengthOn
    \labelContext "ChordNames " s1 |
    \labelContext "NoteNames "  s1 |
    \labelContext "Lyrics"     s1 |
  }
  \new Lyrics { \lyrics { \skip 1*2 | ghijk1 | } }
>>

%% The reference point for Dynamics is its vertical center
<<
  \new RhythmicStaff {
    \set RhythmicStaff.instrumentName = #"vertical center "
    \labelContext "Dynamics" s1*3
  }
  \new Dynamics { s1\mp s\fp }
>>

%% The reference point for FiguredBass is its highest point
<<
  \new RhythmicStaff {
    \set RhythmicStaff.instrumentName = #"highest point "
    \labelContext "FiguredBass" s1
  }
  \new FiguredBass { \figuremode { <6 5>1 } }
>>

%% The reference point for FretBoards is the top line
\include "predefined-guitar-fretboards.ly"
<<
  \new FretBoards { \chordmode { e1 } }
  \new RhythmicStaff {
    \set RhythmicStaff.instrumentName = #"top line "
    \labelContext "FretBoards " s1
  }
>>
@end lilypond

Jeder der vertikalen Platzierungs-Grobeigenschaften (außer
@code{staff-affinity}) benutzt die gleiche Alistenstruktur
wie die @code{\paper}-Variablen, behandelt in
@ref{Vertikale paper-Variablen mit flexiblen Abständen,,Vertikale @code{@bs{}paper}-Variablen mit flexiblen Abständen}.  Besondere
Methoden um Alisten zu verändern finden sich in
@ref{Alisten verändern}.  Grob-Eigenschaften sollten mit
dem @code{\override}-Befehle innerhalb einer @code{\score}-
oder @code{\layout}-Umgebung angepasst werden, nicht innerhalb einer
@code{\paper}-Umgebung.

Das folgende Beispiel zeigt die beiden Arten, Alisten zu modifizieren.
Der erste Aufruf verändert nur einen Schlüsselwert einzlen, während
der zweite die Eigenschaft komplett neu definiert:

@example
\new Staff \with @{
  \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
@} @{ @dots{} @}

\new Staff \with @{
  \override VerticalAxisGroup.default-staff-staff-spacing =
    #'((basic-distance . 10)
       (minimum-distance . 9)
       (padding . 1)
       (stretchability . 10))
@} @{ @dots{} @}
@end example

Um Platzierungseinstellungen global vorzunehmen, müssen sie in der
@code{\layout}-Umgebung vorgenommen werden:

@example
\layout @{
  \context @{
    \Staff
    \override VerticalAxisGroup.default-staff-staff-spacing.basic-distance = #10
  @}
@}
@end example

Standardeinstellungen für die vertikalen Platzierungs-Grobeigenscahften
finden sich in @rinternals{VerticalAxisGroup} und
@rinternals{StaffGrouper} aufgelistet.  Standardveränderungen für bestimmte
Typen von Nicht-Notensystemzeilen finden sich im relevanten Abschnitt in
in @rinternals{Contexts} aufgelistet.


@subsubheading Eigenschaften des @code{VerticalAxisGroup}-Grobs

@code{VerticalAxisGroup}-Eigenschaften werden normalerweise mit einem
@code{\override}-Befehl auf @code{Staff}-(Notensystem-)Ebene (oder
entsprechend) vorgenommen.

@table @code
@item staff-staff-spacing
System-System-Platzierung

Wird benutzt, um den Abstand zwischen dem aktuellen Notensystem und dem
Notensystem direkt darunter in der gleichen Notensystemgruppe zu bestimmen,
auch wenn eine oder mehrere Nicht-Notensystemzeilen (wie etwa @code{Lyrics})
dazwischen stehen.  Gilt nicht für das unterste System einer Systemgruppe.

Die Eigenschaft @code{staff-staff-spacing} einer @code{VerticalAxisGroup}
ist eine Scheme-Funktion, welche die Eigenschaften vom @code{StaffGrouper}-Grob
den Notensystemen zuweist, wenn sie einer Systemgruppe angehören, bzw.
die @code{default-staff-staff-spacing}-Eigenschaft bei einem einzelnen Notensystem.
Dadurch können Systeme unterschiedlich in Abhängigkeit von ihrer Zugehörigkeit
zu einer Gruppe (StaffGroup) platziert werden.  Wenn gleichmäßige Aufteilung
ohne Berücksichtigung von Gruppierungen gewünscht ist, kann diese Funktion durch
eine flexible Platzierungs-Aliste ersetzt werden, wobei man die vollständige
Redefinition auf die oben gezeigte Weise vornehmen muss.

@item default-staff-staff-spacing
Normale-System-System-Platzierung

Eine flexible Platzierungs-Aliste, die den Wert von @code{staff-staff-spacing}
für ungruppierte Notensysteme einstellt, es sei denn,
@code{staff-staff-spacing} wirde explizit mit @code{\override} eingestellt.

@item staff-affinity
System-Anziehung

Die Richtung des Systems, die benutzt wird, um die aktuelle
Nicht-Notensystemzeile zu platzieren.  Mögliche Werte sind
@code{UP} (nach oben), @code{DOWN} (nach unten) und
@code{CENTER} (mittig).  Wenn @code{CENTER} wird die Nicht-Notensystemzeile
vertikal mittig zwischen den beiden nächsten Systemen oben und unten
platziert, außer Zusammenstöße und andere Platzierungsprobleme verhindern
das.  Aufeinanderfolgende Nicht-Notensystemzeilen sollten nicht-aufsteigende
@code{staff-affinity} von oben nach unten haben; also ein Nicht-Notensystemzeile
mit @code{UP} sollte nicht direkt auf eine mit @code{DOWN} folgen.
Nicht-Notensystemzeilen über einem Notensystem sollten @code{DOWN}
benutzen, unter einem Notensystem dagegen @code{UP}.  Wenn
@code{staff-affinity} für eine Notensystem eingestellt wird, wird es wie
eine Nicht-Notensystemzeile behandelt.  Wenn @code{staff-affinity}
auf @code{#f} gesetzt wird, wird eine Nicht-Notensystemzeile wie ein
Notensystem behandelt. Wird @code{staff-affinity} auf @code{UP},
@code{CENTER} oder @code{DOWN} gesetzt, wird das Notensystem als
Nicht-Notensystemzeile plaziert.

@item nonstaff-relatedstaff-spacing
Nicht-Notensystem-verwandtesSystem-Platzierung

Der Abstand zwischen der aktuellen Nicht-Notensystemzeile und
dem nächsten Notensystem in der Richtung von @code{staff-affinity},
wenn keine Nicht-Notensystemzeilen dazwischen auftreten und @code{staff-affinity}
entweder @code{UP} oder @code{DOWN} ist.  Wenn @code{staff-affinity}
@code{CENTER} ist, dann wird @code{nonstaff-relatedstaff-spacing} für die
nächsten Notensysteme auf @emph{beiden} Seiten benutzt, auch wenn andere
Nicht-Notensystemzeilen zwischen der aktuellen und einem der Notensystem
auftreten.  Das heißt, dass die Platzierung eine Nicht-Notensystemzeile
sowohl von den umliegenden Notensystemen als auch den umliegenden
Nicht-Notensystemzeilen abhängt.  Wenn @code{stretchability} einer dieser
Platzierungstypen auf einen kleinen Wert gesetzt wird, dominiert diese
Platzierung.  Wird es dagegen auf einen großen Wert gesetzt, hat die
Platzierung dieses Objekts nur einen kleinen Einfluss.

@item nonstaff-nonstaff-spacing
Nicht-Notensystemzeile-Nicht-Notensystemzeile-Platzierung

Der Abstand zwischen der aktuellen Nicht-Notensystemzeile und der
Nicht-Notensystemzeile in der Richtung von @code{staff-affinity},
wenn beide sich auf der gleichen Seite des verwandten Notensystems
befinden und @code{staff-affinity} entweder @code{UP} oder @code{DOWN} ist.

@item nonstaff-unrelatedstaff-spacing
Nicht-Notensystemzeile-Nicht-verwandtesSystem-Platzierung

Der Abstand zwischen der aktuellen Nicht-Notensystemzeile und
dem Notensystem in der gegenüberliegenden Richtung von @code{staff-affinity},
wenn keine anderen Nicht-Notensystemzeilen dazwischen auftreten und
@code{staff-affinity} entweder @code{UP} oder @code{DOWN} ist.  Das kann
benutzt werden, um einen Minimalfüllabstand (padding) zwischen einer
@code{Lyrics}-Gesangstextzeile und dem zugehörigen Notensystem zu verlangen.
@end table


@subsubheading Eigenschaften des @code{StaffGrouper}-Grobs

@code{StaffGrouper}-Eigenschaften werden normalerweise mit einem
@code{\override}-Befehl auf @code{StaffGroup}-Ebene (oder
entsprechend) eingestellt.

@table @code
@item staff-staff-spacing
Notensystem-Notensystem-Abstand

Der Abstand zwischen zwei aufeinanderfolgenden Notensystemen in
der aktuellen @code{StaffGroup}.  Die @code{staff-staff-spacing}-Eigenschaft
des @code{VerticalAxisGroup}-Grobs eines einzelnen Notensytems
kann mit @code{\override} in andere Platzierungswerte für dieses Notensystem
geändert werden.

@item staffgroup-staff-spacing
Systemgruppe-System-Abstand

Der Abstand zwischen dem letzten Notensystem der aktuellen @code{StaffGroup}
und dem Notensystem dirket darunter in der selben Notensystemgruppe,
auch wenn eine oder mehrere Nicht-Notensystemzeilen (wie etwa
Gesangstext) zwischen den zwei Notensystemen vorkommen.  Gilt nicht
für das letzte Notensystem einer Systemgruppe.  Die
@code{staff-staff-spacing}-Eigenschaft des @code{VerticalAxisGroup}-Grobs
individueller Notensysteme kann mit @code{\override} in andere Platzierungswerte
für dieses Notensystem geändert werden.
@end table

@seealso
Notationsreferenz:
@ref{Vertikale paper-Variablen mit flexiblen Abständen,,Vertikale @code{@bs{}paper}-Variablen mit flexiblen Abständen},
@ref{Alisten verändern}.

Installierte Dateien:
@file{ly/engraver-init.ly},
@file{scm/define-grobs.scm}.

Referenz der Interna:
@rinternals{Contexts},
@rinternals{VerticalAxisGroup},
@rinternals{StaffGrouper}.


@node Abstände von nicht gruppierten Notensystemen
@unnumberedsubsubsec Abstände von nicht gruppierten Notensystemen
@translationof Spacing of ungrouped staves

@emph{Notensysteme} (wie etwa @code{Staff}, @code{DrumStaff},
@code{TabStaff} usw.) sind Kontexte, die eine oder mehrere Stimmen-Kontexte
enthalten, aber keine anderen Notensysteme enthalten können.

Folgende Eigenschaften beeinflussen die Abstände von @emph{nicht gruppierten}
Notensystemen:

@itemize
@item @code{VerticalAxisGroup}-Eigenschaften:
@itemize
@item @code{default-staff-staff-spacing}
@item @code{staff-staff-spacing}
@end itemize
@end itemize

Diese Eigenschaften sind einzlen oben behandelt worden, siehe
@ref{Eigenschaften für Abstände innerhalb von Systemgruppen}.

Zusätzliche Eigenschaften kommen hinzu für Notensysteme, die Teil
einer Gruppieren (@code{StaffGroup}) werden, siehe
@ref{Abstände von gruppierten Notensystemen}.

Folgendes Beispiel zeigt, wie die @code{default-staff-staff-spacing}-Eigenschaft
sich auf die Platzierung von nicht-gruppierten Notensystemen auswirken kann.
Wenn man die gleichen @code{\override}-Befehle auf @code{staff-staff-spacing}
anwendet, ergäbe das den selben Effekt, würde sich aber auch in Fällen auswirken,
in denen die Systeme gruppiert sind.

@lilypond[verbatim,quote,staffsize=16]
\layout {
  \context {
    \Staff
    \override VerticalAxisGroup.default-staff-staff-spacing =
      #'((basic-distance . 8)
         (minimum-distance . 7)
         (padding . 1))
  }
}

<<
  % The very low note here needs more room than 'basic-distance
  % can provide, so the distance between this staff and the next
  % is determined by 'padding.
  \new Staff { b,2 r | }

  % Here, 'basic-distance provides enough room, and there is no
  % need to compress the space (towards 'minimum-distance) to make
  % room for anything else on the page, so the distance between
  % this staff and the next is determined by 'basic-distance.
  \new Staff { \clef bass g2 r | }

  % By setting 'padding to a negative value, staves can be made to
  % collide.  The lowest acceptable value for 'basic-distance is 0.
  \new Staff \with {
    \override VerticalAxisGroup.default-staff-staff-spacing =
      #'((basic-distance . 3.5)
         (padding . -10))
  } { \clef bass g2 r | }
  \new Staff { \clef bass g2 r | }
>>
@end lilypond

@seealso
Installierte Dateien:
@file{scm/define-grobs.scm}.

Schnipsel:
@rlsr{Spacing}.

Referenz der Interna:
@rinternals{VerticalAxisGroup}.


@node Abstände von gruppierten Notensystemen
@unnumberedsubsubsec Abstände von gruppierten Notensystemen
@translationof Spacing of grouped staves

In Orchesterpartituren und anderen großen Partituren werden Notensysteme
normalerweise in Gruppen zusammengefasst.  Der Platz zwischen Gruppen
ist normalerweise größer als der Zwischenraum zwischen einzlenen
Notensystemen der gleichen Gruppe.

@emph{Gruppierte Notensysteme} (wie @code{StaffGroup}, @code{ChoirStaff},
@code{GrandStaff} usw.) sind Kontexte, die mehr als ein Notensystem
gleichzeitig enthalten können.

Folgende Eigenschaften beeinflussen die Platzierung von Notensystemen
innerhalb von Gruppen:

@itemize
@item @code{VerticalAxisGroup}-Eigenschaften:
@itemize
@item @code{staff-staff-spacing}
@end itemize
@item @code{StaffGrouper}-Eigenschaften:
@itemize
@item @code{staff-staff-spacing}
@item @code{staffgroup-staff-spacing}
@end itemize
@end itemize

Diese Grob-Eigenschaften sind weiter oben einzeln beschrieben, siehe
@ref{Eigenschaften für Abstände innerhalb von Systemgruppen}.

Das folgende Beispiel zeigt, wie Eigenscchaften des
@code{StaffGrouper}-Grobs die Platzierung von gruppierten Notensystemen
beeinflussen kann:

@lilypond[verbatim,quote,staffsize=16]
\layout {
  \context {
    \Score
    \override StaffGrouper.staff-staff-spacing.padding = #0
    \override StaffGrouper.staff-staff-spacing.basic-distance = #1
  }
}

<<
  \new PianoStaff \with {
    \override StaffGrouper.staffgroup-staff-spacing.basic-distance = #20
  } <<
    \new Staff { c'1 }
    \new Staff { c'1 }
  >>

  \new StaffGroup <<
    \new Staff { c'1 }
    \new Staff { c'1 }
  >>
>>
@end lilypond

@seealso
Installierte Dateien:
@file{scm/define-grobs.scm}.

Schnipsel:
@rlsr{Spacing}.

Referenz der Interna:
@rinternals{VerticalAxisGroup},
@rinternals{StaffGrouper}.


@node Abstände von nicht-Notensystemzeilen
@unnumberedsubsubsec Abstände von nicht-Notensystemzeilen
@translationof Spacing of non-staff lines

@emph{Nicht-Notensystemzeilen} (wie @code{Lyrics}, @code{ChordNames}
usw.) sind Kontexte, deren Layoutobjekte wie Notensysteme gesetzt
werden (also als horizontale Zeilen zwischen Notensystemen).  Genau
gesagt sind Nicht-Notensystemzeilen Nicht-Notensystemkontexte, die
ein @code{VerticalAxisGroup}-Layoutobjekt erstellen.

Folgende Eigenschaften beeinflussen die Abstände von Nicht-Notensystemzeilen:

@itemize
@item @code{VerticalAxisGroup}-Eigenschaften:
@itemize
@item @code{staff-affinity}
@item @code{nonstaff-relatedstaff-spacing}
@item @code{nonstaff-nonstaff-spacing}
@item @code{nonstaff-unrelatedstaff-spacing}
@end itemize
@end itemize

Diese Grob-Eigenschaften sind weiter oben einzlen beschrieben; siehe
@ref{Eigenschaften für Abstände innerhalb von Systemgruppen}.

Das folgende Beispiel zeigt, wie die @code{nonstaff-nonstaff-spacing}-Eigenschaft
die Platzierung von aufeinanderfolgenden Nicht-Notensystemzeilen beeinflussen
kann.  Indem hier der Wert von @code{stretchability} auf einen sehr hohen Wert
gesetzt wird, kann der Gesangstext sehr viel weiter als normal gespreizt
werden:

@lilypond[verbatim,quote,staffsize=16]
\layout {
  \context {
    \Lyrics
    \override VerticalAxisGroup.nonstaff-nonstaff-spacing.stretchability = #1000
  }
}

\new StaffGroup
<<
  \new Staff \with {
    \override VerticalAxisGroup.staff-staff-spacing = #'((basic-distance . 30))
  } { c'1 }
  \new Lyrics \with {
    \override VerticalAxisGroup.staff-affinity = #UP
  } \lyricmode { up }
  \new Lyrics \with {
    \override VerticalAxisGroup.staff-affinity = #CENTER
  } \lyricmode { center }
  \new Lyrics \with {
    \override VerticalAxisGroup.staff-affinity = #DOWN
  } \lyricmode { down }
  \new Staff { c'1 }
>>
@end lilypond


@seealso
Installierte Dateien:
@file{ly/engraver-init.ly},
@file{scm/define-grobs.scm}.

Schnispel:
@rlsr{Spacing}.

@c @lsr{spacing,page-spacing.ly},
@c @lsr{spacing,alignment-vertical-spacing.ly}.

Referenz der Interna:
@rinternals{Contexts},
@rinternals{VerticalAxisGroup}.



@node Explizite Positionierung von Systemen
@subsection Explizite Positionierung von Systemen
@translationof Explicit staff and system positioning

Man kann die flexiblen Einstellungen der vertikalen Abstände, wie sie im
vorigen Abschnitt
erklärt wurden, als eine Sammlung verschiedenerer Einstellmöglichkeiten
verstehen, die vor allem die Größe des vertikalen Platzes zwischen
Notensystemen und Gruppen auf der Seite kontrollieren.

Die vertikale Platzverteilung kann aber auch auf andere Weise
eingestellt werden: mit den Optionen von
@code{NonMusicalPaperColumn #'line-break-system-details}.  Während
der flexible vertikale Abstandsmechanismus vertikalen Füllplatz
definiert, werden mit
@code{NonMusicalPaperColumn #'line-break-system-details} absolute vertikale
Positionen auf der Seite festgelegt.

@code{NonMusicalPaperColumn #'line-break-system-details} akzeptiert eine
Liste aus drei unterschiedlichen Einstellungen:

@itemize
@item @code{X-offset}
@item @code{Y-offset}
@item @code{alignment-distances}
@end itemize

Veränderungen von Grobs (wozu auch @code{NonMusicalPaperColumn} gehört),
können an drei unterschiedlichen Stellen in der Quelldatei vorgenommen
werde:

@itemize
@item mitten im Notentext
@item in einer @code{\context}-Umgebung
@item in einer @code{\with}-Umgebung
@end itemize

Wenn der Grob @code{NonMusicalPaperColumn} verändert werden soll,
wird der @code{\override}-Befehl in der @code{\context} oder
@code{\with}-Umgebung eingesetzt.  Wenn die Veränderungen aber
mitten im Notentext stattfinden sollen, müssen Sie den Befehl
@code{\overrideProperty} einsetzen.  Einige Beispiele für eine
Veränderungen von @code{NonMusicalPaperColumn} mit dem
@code{\overrideProperty}-Befehl sind hier aufgelistet:

@example
\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20))

\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 40))

\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20)
                                 (Y-offset . 40))

\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((alignment-distances . (15)))

\overrideProperty NonMusicalPaperColumn.line-break-system-details #'((X-offset . 20)
                                 (Y-offset . 40)
                                 (alignment-distances . (15)))
@end example

Um zu verstehen, wie jede dieser unterschiedlichen Einstellungen
funktioniert, wollen wir uns ein Beispiel vornehmen, dass überhaupt
keine Einstellungen (d.h. @code{\override}-Befehle) enthält:

@c \book { } is required in these examples to ensure the spacing
@c overrides can be seen between systems. -np

@lilypond[verbatim,quote,staffsize=16]
\header { tagline = ##f }
\paper { left-margin = 0\mm }
\book {
  \score {
    <<
      \new Staff <<
        \new Voice {
          s1*5 \break
          s1*5 \break
          s1*5 \break
        }
        \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
      >>
      \new Staff {
        \repeat unfold 15 { d'4 d' d' d' }
      }
    >>
  }
}
@end lilypond

Diese Partitur nimmt Zeilen- und Seitenumbruchinformationen in einer
eigenen Stimme vor.  Mit dieser Methode kann die Layout-Information
einfach von den Noten getrennt werden, was sehr hilfreich ist, wenn
das Beispiel komplizierter wird.  Siehe auch
@ref{Eine zusätzliche Stimme für Umbrüche benutzen}.

Ausdrückliche @code{\break}-Befehle teilen die Noten in sechs Takte
lange Zeilen.  Die vertikale Platzverteilung wird von LilyPond
errechnet.  Um den vertikalen Beginn einer jeden Systemgruppe
genau anzugeben, kann @code{Y-offset} in der
@code{line-break-system-details}-Eigenschaft des
@code{NonMusicalPaperColumn}-Grobs wie in dem Beispiel
ersichtlich benutzt werden:

@lilypond[verbatim,quote,staffsize=16]
\header { tagline = ##f }
\paper { left-margin = 0\mm }
\book {
  \score {
    <<
      \new Staff <<
        \new Voice {
          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0))
          s1*5 \break
          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 40))
          s1*5 \break
          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 80))
          s1*5 \break
        }
        \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
      >>
      \new Staff {
        \repeat unfold 15 { d'4 d' d' d' }
      }
    >>
  }
}
@end lilypond

In der @code{line-break-system-details}-Eigenschaft kann eine Liste
mit vielen Einstellungen eingegeben werden, aber hier wird nur eine
Einstellung angegeben.  Die @code{Y-offset}-Eigenschaft bestimmt
hier die exakte vertikale Position auf der Seite, an welcher jede
neue Systemgruppe begonnen wird.

Da jetzt der exakte Beginn einer jeden Systemgruppe explizit festgelegt wurde,
können wir auch den exakten Beginn eines jeden Notensystems in der
Gruppe festlegen.  Dies geschieht mit der @code{alignment-distances}-Eigenschaft
von @code{line-break-system-details}.

@lilypond[verbatim,quote,staffsize=16]
\header { tagline = ##f }
\paper { left-margin = 0\mm }
\book {
  \score {
    <<
      \new Staff <<
        \new Voice {
          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 20)
                                           (alignment-distances . (15)))
          s1*5 \break
          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 60)
                                           (alignment-distances . (15)))
          s1*5 \break
          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 100)
                                           (alignment-distances . (15)))
          s1*5 \break
        }
        \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
      >>
      \new Staff {
        \repeat unfold 15 { d'4 d' d' d' }
      }
    >>
  }
}
@end lilypond

Dem @code{line-break-system-details}-Attribut des
@code{NonMusicalPaperColumn}-Grobs werden zwei unterschiedliche Eigenschaften
zugewiesen.  Auch wenn die Aliste der Attribute von
@code{line-break-system-details} sehr viel mehr Platzierungsparameter
akzeptiert (wie etwa ein korrespondierendes @code{X-offset}-Paar), müssen
hier nur die Parameter @code{Y-offset} und
@code{alignment-distances} gesetzt werden, um den vertikalen Beginn
jedes Systems und jeder Systemgruppe zu kontrollieren.  @code{Y-offset}
bestimmt also die vertikale Position von Systemgruppen und @code{alignment-distances}
die vertikale Position von einzelnen Notensystemen.

@lilypond[verbatim,quote,staffsize=16]
\header { tagline = ##f }
\paper { left-margin = 0\mm }
\book {
  \score {
    <<
      \new Staff <<
        \new Voice {
          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 0)
                                           (alignment-distances . (30 10)))
          s1*5 \break
          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 60)
                                           (alignment-distances . (10 10)))
          s1*5 \break
          \overrideProperty Score.NonMusicalPaperColumn.line-break-system-details #'((Y-offset . 100)
                                           (alignment-distances . (10 30)))
          s1*5 \break
        }
        \new Voice { \repeat unfold 15 { c'4 c' c' c' } }
      >>
      \new StaffGroup <<
        \new Staff { \repeat unfold 15 { d'4 d' d' d' } }
        \new Staff { \repeat unfold 15 { e'4 e' e' e' } }
      >>
    >>
  }
}
@end lilypond

Einige Dinge sollten beachtet werden:

@itemize
@item Wenn @code{alignment-distances} benutzt wird, werden Gesangstextzeilen
nicht als ein System gezählt.

@item Die Einheiten der Zahlen, die für @code{X-offset},
@code{Y-offset} und @code{alignment-distances} benutzt werden, werden als
Vielfaches des Abstandes zwischen zwei Notenlinien gewertet.  Positive
Werte verschieben Systeme und Gesangstext nach oben, negative Werte nach
unten.

@item Weil die Einstellungen von @code{NonMusicalPaperColumn #'line-break-system-details}
es möglich machen, Notensysteme und Gruppen an beliebigen Stellen auf der
Seite zu platzieren, kann man damit auch Ränder überschreiben oder sogar
Notensysteme übereinander platzieren.  Sinnvolle Werte für diese
Parameter werden derartiges Verhalten vermeiden.
@end itemize


@seealso
Schnipsel:
@rlsr{Spacing}.


@node Vermeidung von vertikalen Zusammenstößen
@subsection Vermeidung von vertikalen Zusammenstößen
@translationof Vertical collision avoidance

@cindex Vermeidung von vertikalen Zusammenstößen
@cindex Zusammenstöße, vertikal, vermeiden
@cindex vertikale Zusammenstöße, vermeiden
@cindex Kollisionen, vertikal, vermeiden

@funindex outside-staff-priority
@funindex outside-staff-padding
@funindex outside-staff-horizontal-padding

Intuitiv gibt es in der Notation einige Objekte, die zu dem Notensystem
gehören, und einige andere, die immer außerhalb des Notensystems
positioniert werden sollten.  Zu diesen letzteren gehören etwa
Übungszeichen, Textbeschriftung und Dynamikbezeichnung (die als
Objekte außerhalb des Systems bezeichnet werden können).  LilyPonds
Regeln um diese Objekte zu positionieren lautet: so nah am Notensystem
wie möglich, aber gerade so weit weg, dass sie nicht mit anderen
Objekten zusammenstoßen.

Dabei setzt LilyPond die @code{outside-staff-priority}-Eigenschaft
ein um herauszufinden, ob ein Grob ein Objekt außerhalb des Systems
ist: wenn @code{outside-staff-priority} eine Zahl ist, dann handelt
es sich um ein Objekt außerhalb des Systems.  Zusätzlich teilt
@code{outside-staff-priority} noch mit, in welcher Reihenfolge
die Objekte außerhalb des Systems gesetzt werden sollen.

Zuerst werden alle Objekte gesetzt, die nicht außerhalb des Systems
gehören.  Dann werden die Objekte außerhalb des Systems nach dem Wert
ihrer @code{outside-staff-priority}  (in aufsteigender Anordnung)
sortiert.  Eins nach dem anderen werden diese Objekte schließlich
genommen und so platziert, dass sie nicht mit den Objekten zusammenstoßen,
die bereits platziert worden sind.  Wenn also zwei Objekte außerhalb
des Systems um den gleichen Platz streiten, wird das mit dem
geringeren Wert von @code{outside-staff-priority} näher an das
entsprechende Notensystem gesetzt.

@lilypond[quote,ragged-right,relative=2,verbatim]
c4_"Text"\pp
r2.
\once \override TextScript.outside-staff-priority = #1
c4_"Text"\pp % this time the text will be closer to the staff
r2.
% by setting outside-staff-priority to a non-number,
% we disable the automatic collision avoidance
\once \override TextScript.outside-staff-priority = ##f
\once \override DynamicLineSpanner.outside-staff-priority = ##f
c4_"Text"\pp % now they will collide
@end lilypond

Der Platz, der zwischen einem Objekt außerhalb des Systems und
dem vorhergehenden Objekt eingefügt werden kann (auch als
padding bezeichnet), kann durch @code{outside-staff-padding}
kontrolliert werden.

@lilypond[quote,ragged-right,relative=2,verbatim,staffsize=18]
\once \override TextScript.outside-staff-padding = #0
a'^"This text is placed very close to the note"
\once \override TextScript.outside-staff-padding = #3
c^"This text is padded away from the previous text"
c^"This text is placed close to the previous text"
@end lilypond

Standardmäßig werden Objekte außerhalb des Systems so gesetzt,
dass sie eine horizontale Überschneidung mit einem der
vorher gesetzten Grobs vermeiden.  Das kann zu Situationen
führen, in denen Objekte sehr dicht nebeneinander gesetzt
werden.  Der vertikale Platz zwischen Notensystemen kann
auch gesetzt werden, sodass Objekte außerhalb des Systems
ineinander greifen. Mit der Eigenschaft
@code{outside-staff-horizontal-padding} können Objekte vertikal
verschoben werden und derartige Situationen kommen nicht
vor.

@lilypond[quote,ragged-right,relative=2,verbatim]
% the markup is too close to the following note
c4^"Text"
c4
c''2
% setting outside-staff-horizontal-padding fixes this
R1
\once \override TextScript.outside-staff-horizontal-padding = #1
c,,4^"Text"
c4
c''2
@end lilypond

@seealso
Schnipsel:
@rlsr{Spacing}.


@node Horizontale Abstände
@section Horizontale Abstände
@translationof Horizontal spacing

@cindex horizontale Platzierung
@cindex horizontale Anordnung
@cindex Anordnung, horizontal

@menu
* Überblick über horizontale Abstände::
* Eine neuer Bereich mit anderen Abständen::
* Horizontale Abstände verändern::
* Zeilenlänge::
* Proportionale Notation::
@end menu


@node Überblick über horizontale Abstände
@subsection Überblick über horizontale Abstände
@translationof Horizontal spacing overview

Die Setzmaschine interpretiert unterschiedliche Notendauern als
dehnbare Abstände (engl. spring) unterschiedlicher Länge.  Längere
Dauern erhalten mehr Platz, kürzere weniger.  Die kürzeste Dauer
erhält eine feste Breite (die mit @code{shortest-duration-space}
im @code{SpacingSpanner}-Objekt kontrolliert werden kann).  Je
länger die Dauer, umso mehr Platz erhält die Note: wenn ihre
Dauer verdoppelt wird, wird ein bestimmter Platz hinzugefügt
(dessen Breite durch @code{spacing-increment} bestimmt werden
kann).

Das folgende Stück beispielsweise enthält Halbe, Viertel und Achtel.
Die Achtelnote wird gefolgt von einem Notenkopfabstand (NKA).  Die
Viertel wird von 2 NKA gefolgt, die Halbe von 3 NKA usw.

@lilypond[quote,fragment,verbatim,relative=1]
c2 c4. c8 c4. c8 c4. c8 c8
c8 c4 c4 c4
@end lilypond

Normalerweise ist @code{spacing-increment} definiert als 1.2 mal
der Abstand zwischen zwei Notenlinien, was in etwa die Breite eines
Notenkopfes ist.  @code{shortest-duration-space} ist definiert als
2.0, was bedeutet, dass die kürzeste Note 2.4 Notenlinienabstände
2.0 mal der Wert von @code{spacing-increment}) horizontalen
Abstand erhält.  Der Abstand wird von der linken Kante des Symbols
errechnet, so dass die kürzeste Note üblicherweise von 1 NKA
Abstand gefolgt wird.

Wenn diese Herangehensweise konsequent angewandt würde, würde eine
einzige Zweiunddreißigstel eine Partitur, in der vor allem Achtel und
Sechzehntel vorkommen, sehr weit auseinanderdehnen.  Die kürzeste
Note wäre nun keine Sechzehntel mehr, sondern eine Zweiunddreißigstel,
wodurch an jede Note der Wert von 1 NKA hinzugefügt würde.  Um das
zu vermeiden, ist die kürzeste Dauer für die Platzverteilung nicht die
kürzeste Note einer Partitur, sondern die, die am häufigsten vorkommt.

Die Notendauer, die am häufigsten vorkommt, wird auf folgende
Weise bestimmt: in jedem Takt wird die kürzeste Note bestimmt.  Die
häufigste kürzeste Note wird dann als Grundlage für die Platzverteilung
der Noten herangezogen, mit der Bedingung, dass diese kürzeste
Note immer ein Achtel oder kürzer sein soll.  Die kürzeste Dauer
wird ausgegeben, wenn @code{lilypond} mit der Option @option{--verbose}
aufgerufen wird.

Diese Dauern können aber auch angepasst werden.  Wenn Sie die Eigenschaft
@code{common-shortest-duration} in dem @code{SpacingSpanner} setzen,
dann wird hiermit die Grunddauer für die Platzverteilung eingestellt.
Die maximale Dauer für diesen Grundwert (normalerweise eine Achtel)
wird definiert mit @code{base-shortest-duration}.

@funindex common-shortest-duration
@funindex base-shortest-duration
@funindex stem-spacing-correction
@funindex spacing

Noten, die noch kürzer sind als die häufigste kürzeste Note, werden
durch einen Platz voneinander getrennt, der proportional zu ihrer
Dauer in Beziehung zur häufigsten kürzesten Note ist.  Wenn also
nur ein paar Sechzehntel zu dem obigen Beispiel hinzugefügt werden,
würden sie von 1/2 NKA gefolgt werden:

@lilypond[quote,fragment,verbatim,relative=2]
c2 c4. c8 c4. c16[ c] c4. c8 c8 c8 c4 c4 c4
@end lilypond

In dem @emph{Aufsatz zum automatisierten Notensatz} wurde erklärt, dass die
Richtung der Notenhälse die Platzverteilung beeinflusst (siehe
@ressay{Optischer Ausgleich}).  Das wird
kontrolliert durch die @code{stem-spacing-correction}-Eigenschaft
in dem @code{NoteSpacing}-Objekt.  Dieses Objekt wird für jeden
@code{Voice}-Kontext erstellt.  Das @code{StaffSpacing}-Objekt (in
einem @code{Staff}-Kontext erstellt) enthält die gleiche Eigenschaft,
um die Verteilung von Hälsen neben Taktlinien zu kontrollieren.  In
dem folgenden Beispiel werden diese Einstellungen gezeigt, einmal
mit den Standardwerten und dann mit größeren Werten, damit man sie
besser sieht:

@lilypond[quote,ragged-right]
{
  c'4 e''4 e'4 b'4 |
  b'4 e''4 b'4 e''4 |
  \override Staff.NoteSpacing.stem-spacing-correction = #1.5
  \override Staff.StaffSpacing.stem-spacing-correction = #1.5
  c'4 e''4 e'4 b'4 |
  b'4 e''4 b'4 e''4 |
}
@end lilypond

Proportionale Notation ist unterstützt, siehe @ref{Proportionale Notation}.

@seealso
Aufsatz über den automatischen Notensatz:
@ressay{Optischer Ausgleich}.

Schnipsel:
@rlsr{Spacing}.

Referenz der Interna:
@rinternals{SpacingSpanner},
@rinternals{NoteSpacing},
@rinternals{StaffSpacing},
@rinternals{NonMusicalPaperColumn}.

@knownissues

Es gibt keine sinnvolle Möglichkeit, die horizontale Verteilung der
Noten zu unterdrücken.  Die folgende Problemumgehung, mit der
dehnbare Abstände (padding) eingesetzt werden, kann benutzt
werden, um zusätzlichen Platz in eine Partitur einzufügen.

@example
 \override Score.NonMusicalPaperColumn.padding = #10
@end example

Es gibt derzeit keine Möglichkeit, den Platz zu verringern.


@node Eine neuer Bereich mit anderen Abständen
@subsection Eine neuer Bereich mit anderen Abständen
@translationof New spacing area

@cindex horizontale Notenabstände, Abschnitte definierten
@cindex Notenabstände, Abschnitte definieren
@cindex Abschnitte definieren, Notenabstände

Neue Abschnitte mit unterschiedlichen Notenabstandsparametern
können mit dem Befehl @code{newSpacingSection} begonnen werden.
Das ist hilfreich, wenn in verschiedenen Abschnitten die
Verhältnisse von kurzen und langen Noten sehr unterschiedlich
ausfallen.

Im folgenden Beispiel wird durch die neue Taktart ein neuer
Abschnitt begonnen, in dem die Sechzehntel weiter außeinander
gesetzt werden sollen.

@lilypond[relative,fragment,verbatim,quote]
\time 2/4
c4 c8 c
c8 c c4 c16[ c c8] c4
\newSpacingSection
\time 4/16
c16[ c c8]
@end lilypond

Der @code{\newSpacingSection}-Befehl erstellt ein neues
@code{SpacingSpanner}-Objekt, weshalb auch neue Anpassungen
mit dem @code{\override}-Befehl an dieser Stelle eingesetzt
werden können.

@seealso
Schnipsel:
@rlsr{Spacing}.

Referenz der Interna:
@rinternals{SpacingSpanner}.


@node Horizontale Abstände verändern
@subsection Horizontale Abstände verändern
@translationof Changing horizontal spacing

@cindex Notenabstände, horizontal
@cindex horizontale Abstände
@cindex horizontale Notenabstände

Die horizontalen Abstände können mit der
@code{base-shortest-duration}-Eigenschaft
verändert werden.  In den folgenden Beispielen
werden die gleichen Noten eingesetzt, zuerst
ohne die Eigenschaft zu verändern, im zweiten
Beispiel dann mit einem anderen Wert.  Größere
Werte für @code{ly:make-moment} ergeben dichtere
Noten.  @code{ly:make-moment} erstellt eine Dauer,
die als Bruch notiert wird, sodass @code{1 4}
eine größere Dauer ist als @code{1 16}.

@lilypond[verbatim,line-width=12\cm]
\score {
  \relative c'' {
    g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 |
    g4 e e2 | f4 d d2 | c4 e g g | c,1 |
    d4 d d d | d4 e f2 | e4 e e e | e4 f g2 |
    g4 e e2 | f4 d d2 | c4 e g g | c,1 |
  }
}
@end lilypond

@lilypond[verbatim,line-width=12\cm]
\score {
  \relative c'' {
    g4 e e2 | f4 d d2 | c4 d e f | g4 g g2 |
    g4 e e2 | f4 d d2 | c4 e g g | c,1 |
    d4 d d d | d4 e f2 | e4 e e e | e4 f g2 |
    g4 e e2 | f4 d d2 | c4 e g g | c,1 |
  }
  \layout {
    \context {
      \Score
      \override SpacingSpanner.base-shortest-duration = #(ly:make-moment 1/16)
    }
  }
}
@end lilypond


@snippets

Standardmäßig wird die Platzverteilung in Triolen und andern
rhythmischen Aufteilungen nach verschiedenen nicht von der
Dauer abgeleiteten Faktoren (wie Versetzungszeichen,
Schlüsselwechseln usw.) berechnet.  Um diese Symbole zu
ignorieren und eine gleichmäßige Verteilung der Noten
zu erzwingen, kann die gleichmäßige Dehnung (engl.
uniform stretching) zu Beginn einer Partitur
mit @code{Score.SpacingSpanner #'uniform-stretching} eingeschaltet
werden:

@lilypond[quote,ragged-right,verbatim]
\score {
  <<
    \new Staff {
      \tuplet 5/4 {
        c8 c8 c8 c8 c8
      }
      c8 c8 c8 c8
    }
    \new Staff {
      c8 c8 c8 c8
      \tuplet 5/4 {
        c8 c8 c8 c8 c8
      }
    }
  >>
  \layout {
    \context {
      \Score
      \override SpacingSpanner.uniform-stretching = ##t
    }
  }
}
@end lilypond

Wenn @code{strict-note-spacing} eingestellt ist, werden Noten
gesetzt, ohne dass Schlüssel, Taktlinie oder Verzierungsnoten
zusätzlichen Platz erhalten.

@lilypond[quote,ragged-right,relative=2,fragment,verbatim]
\override Score.SpacingSpanner.strict-note-spacing = ##t
\new Staff { c8[ c \clef alto c \grace { c16 c } c8 c c]  c32[ c32] }
@end lilypond


@seealso
Schnipsel:
@rlsr{Spacing}.


@node Zeilenlänge
@subsection Zeilenlänge
@translationof Line length

@cindex Seitenumbrüche
@cindex Umbrechen von Seiten
@cindex Zeilenlänge
@cindex Länge von Zeilen

@funindex indent
@funindex line-width
@funindex ragged-right
@funindex ragged-last

@c Although line-width can be set in \layout, it should be set in paper
@c block, to get page layout right.
@c Setting indent in \paper block makes not much sense, but it works.

@c Bit verbose and vague, use examples?
Die grundlegenden Einstellungen, die Einfluss auf die Zeilenlänge
haben, sind @code{indent} (Einzug) und @code{line-width}
(Zeilenbreite).  Sie werden in der @code{\layout}-Umgebung
eingestellt.  Der erste Befehl bestimmt den Einzug der ersten
Zeile, der zweite die Zeilenlänge der weiteren Notenzeilen.

Wenn @code{ragged-right} eingestellt ist (als in der
@code{\layout}-Umgebung auf den Wert @code{#t} gesetzt wurde),
werden die Systeme linksbündig gesetzt und nicht bis zum
rechten Rand hin durchgezogen, sondern den Noten entsprechend
gesetzt.  Das ist oftmals nützlich für kleine Notenfragmente
und um zu überprüfen, wie eng die Noten natürlicherweise
gesetzt werden würden.   Die normale Einstellung ist unwahr
(@code{#f}), aber wenn eine Partitur nur aus einer Zeile besteht,
ist der Standardwert wahr.

Die Option @code{ragged-last} verhält sich ähnlich zu @code{ragged-right},
aber wirkt sich nur auf die letzte Zeile eines Stückes aus.
Für diese letzte Zeile gibt es keine Einschränkungen.  Das
Resultat erinnert an Textabsätze im Blocksatz, wo die letzte
Zeile des Absatzes mit ihrer natürlichen Länge gesetzt wird.
@c Note that for text there are several options for the last line.
@c While Knuth TeX uses natural length, lead typesetters use the same
@c stretch as the previous line.  eTeX uses \lastlinefit to
@c interpolate between both these solutions.

@example
\layout @{
indent = #0
line-width = #150
ragged-last = ##t
@}
@end example

@seealso
Schnipsel:
@rlsr{Spacing}.


@node Proportionale Notation
@subsection Proportionale Notation
@translationof Proportional notation

LilyPond hat Unterstützung für proportionale Notation.  Dabei handelt
es sich um eine horizontale Platzverteilung, die jeder Note einen
exakt ihrer Dauer entsprechenden Platz zuordnet.  Man kann es vergleichen
mit der Notenplatzierung auf einem Raster.  In einigen Partituren
des späten 20. und frühen 21. Jahrhunderts wird dies proportionale
Notation benutzt, um sehr komplizierte rhythmische Verhältnisse
klarer darzustellen, oder um einen Zeitstrahl oder ähnliche Graphiken
direkt in die Partitur zu integrieren.

LilyPond hat Unterstützung für fünf verschiedene Einstellungen der
proportionalen Notation, die alle zusammen oder jede für sich
benutzt werden können:

@itemize
@item @code{proportionalNotationDuration} (proportionale Notendauer)
@item @code{uniform-stretching} (gleichmäßige Dehnung)
@item @code{strict-note-spacing} (strenge Notenverteilung)
@item @code{\remove "Separating_line_group_engraver"} (entferne Liniengruppentrennungsengraver)
@item @code{\override PaperColumn.used = ##t} (PapierSpalte benutzt = wahr)
@end itemize

In den Beispielen unten werden diese fünf unterschiedlichen Einstellungen
für die proportionale Notation vorgestellt und ihre Wirkungen
untereinander illustriert.

Es soll mit diesem 1 Takt langen Beispiel begonnen werden, in welchem
die klassischen Abstände und Flattersatz (ragged-right) eingesetzt werden:

@lilypond[quote,verbatim,ragged-right]
\score {
  <<
    \new RhythmicStaff {
      c'2
      c'16 c'16 c'16 c'16
      \tuplet 5/4 {
        c'16 c'16 c'16 c'16 c'16
      }
    }
  >>
}
@end lilypond

Die Halbe, mit der der Takt beginnt, braucht weitaus weniger
Platz als die Hälfte des Taktes.  Gleichermaßen haben die
Sechzehntel und die Sechzehntel-Quintolen (oder Zwanzigstel),
mit denen der Takt endet, insgesamt weitaus mehr als die Hälfte
der Taktbreite.

Im klassischen Notensatz kann dieses Verhalten genau das gewünschte
Ergebnis bringen, weil dadurch horizontaler Platz von der Halben
weggenommen werden kann und so insgesamt Platz in dem Takt eingespart
wird.

Wenn allerdings ein Zeitstrahl oder andere zeitliche ablaufende
Graphiken über oder unter dem Takt eingefügt werden soll, braucht man
eine Notenplatzierung, die exakt der von ihnen eingenommenen Dauer
entspricht.  Auf folgende Art wird die proportionale Notation
eingeschaltet:

@lilypond[quote,verbatim,ragged-right]
\score {
  <<
    \new RhythmicStaff {
      c'2
      c'16 c'16 c'16 c'16
      \tuplet 5/4 {
        c'16 c'16 c'16 c'16 c'16
      }
    }
  >>
 \layout {
    \context {
      \Score
      proportionalNotationDuration = #(ly:make-moment 1/20)
    }
  }
}
@end lilypond

Die Halbe zu Beginn des Taktes und die schnelleren Noten in der zweiten
Takthälfte nehmen jetzt genau den gleichen horizontalen Platz ein.  Jetzt
könnte man einen Zeitstrahl mit dem Takt synchronisieren.

Die Einstellung von @code{proportionalNotationDuration} gehört zum
@code{Score}-Kontext.  Kontexteinstellungen können an drei verschiedenen
Stellen in der Quelldatei geschrieben werden: in einer @code{\with}-Umgebung,
in einer @code{\context}-Umgebung oder direkt in den Noten mit dem
@code{\set}-Befehl.  Alle drei Positionen sind gleichwertig und es hängt
vom Benutzer ab, welche bevorzugt wird.

Die Eigenschaft @code{proportionalNotationDuration} braucht ein Argument,
welches die Referenzdauer ist, anhand welcher alle Noten platziert werden.
Hier wird die LilyPond Scheme-Funktion @code{make-moment} eingesetzt.  Sie
braucht zwei Argumente: einen Zähler und einen Nenner, die einen Bruch einer
Ganzen darstellen.  Die Funktion @code{(ly:make-moment 1/20)} ergibt also
eine Referenzdauer von einer Zwanzigstel.  Genauso gut können etwa die Dauern
@code{(ly:make-moment 1/16)}, @code{(ly:make-moment 1/8)} oder
@code{(ly:make-moment 3/97)} eingesetzt werden.

Die richtige Referenzdauer, mit der eine vernünftige Verteilung der Noten
proportional möglich ist, muss durch Ausprobieren herausgefunden werden.
Dabei sollte man mit einer Dauer beginnen, die der kleinsten Note des
Stückes nahekommt.  Kleine Referenzdauern lassen die Noten sehr gedehnt
erscheinen, größere Referenzdauern zwingen sie dichter zusammen.

@lilypond[quote,verbatim,ragged-right]
\score {
  <<
    \new RhythmicStaff {
      c'2
      c'16 c'16 c'16 c'16
      \tuplet 5/4 {
        c'16 c'16 c'16 c'16 c'16
      }
    }
  >>
  \layout {
    \context {
      \Score
      proportionalNotationDuration = #(ly:make-moment 1/8)
    }
  }
}

\score {
  <<
    \new RhythmicStaff {
      c'2
      c'16 c'16 c'16 c'16
      \tuplet 5/4 {
        c'16 c'16 c'16 c'16 c'16
      }
    }
  >>
  \layout {
    \context {
      \Score
      proportionalNotationDuration = #(ly:make-moment 1/16)
    }
  }
}

\score {
  <<
    \new RhythmicStaff {
      c'2
      c'16 c'16 c'16 c'16
      \tuplet 5/4 {
        c'16 c'16 c'16 c'16 c'16
      }
    }
  >>
  \layout {
    \context {
      \Score
      proportionalNotationDuration = #(ly:make-moment 1/32)
    }
  }
}
@end lilypond

Man muss beachten, dass die Referenzdauer nicht zu groß ist
(wie die Achtel in dem Beispiel oben), denn dadurch werden
die Noten so dicht gesetzt, dass sich eventuell sogar Notenköpfe
von sehr kleinen Notenwerten überschneiden können.  Die proportionale
Notation nimmt üblicherweise mehr Platz ein als die klassische
Platzverteilung.  Der rhythmischen Klarheit muss ein eng gesetztes
Notenbild geopfert werden.

In Folgenden soll betrachtet werden, wie sich überlappende
rhythmische Aufteilungen am besten positioniert werden.  Als Referenz
wird das erste Beispiel herangezogen, zu welchem ein zweites
System mit anderen rhythmischen Werten hinzugefügt wird:

@lilypond[quote,verbatim,ragged-right]
\score {
  <<
    \new RhythmicStaff {
      c'2
      c'16 c'16 c'16 c'16
      \tuplet 5/4 {
        c'16 c'16 c'16 c'16 c'16
      }
    }
    \new RhythmicStaff {
      \tuplet 9/8 {
        c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
      }
    }
  >>
}
@end lilypond

Die Platzaufteilung ist schlecht, weil die gleichlangen Noten des
untersten Systems nicht gleichmäßig verteilt sind.  Im klassischen
Notensatz kommen komplexe rhythmische Verhältnisse wie dieses sehr
selten vor, sodass der Notensatz nicht in Hinsicht auf sie optimiert
ist.  @code{proportionalNotationDuration} hilft in
dieser Situation deutlich:

@lilypond[quote,verbatim,ragged-right]
\score {
  <<
    \new RhythmicStaff {
      c'2
      c'16 c'16 c'16 c'16
      \tuplet 5/4 {
        c'16 c'16 c'16 c'16 c'16
      }
    }
    \new RhythmicStaff {
      \tuplet 9/8 {
        c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
      }
    }
  >>
  \layout {
    \context {
      \Score
      proportionalNotationDuration = #(ly:make-moment 1/20)
    }
  }
}
@end lilypond

Aber bei sehr genauer Betrachtung sind die Noten der zweiten Hälfte
der Nonole doch immer noch eine Spur weiter gesetzt als die Noten
der ersten Hälfte.  Um wirklich gleichmäßige Abstände zu erzwingen,
sollte auch noch die gleichmäßige Dehnung (@code{uniform-stretching}) angeschaltet werden, die eine Eigenschaft von @code{SpacingSpanner} ist:

@lilypond[quote,verbatim,ragged-right]
\score {
  <<
    \new RhythmicStaff {
      c'2
      c'16 c'16 c'16 c'16
      \tuplet 5/4 {
        c'16 c'16 c'16 c'16 c'16
      }
    }
    \new RhythmicStaff {
      \tuplet 9/8 {
        c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8 c'8
      }
    }
  >>
  \layout {
    \context {
      \Score
      proportionalNotationDuration = #(ly:make-moment 1/20)
      \override SpacingSpanner.uniform-stretching = ##t
    }
  }
}
@end lilypond

Das Beispiel mit den zwei Systemen ist nun exakt nach den
rhythmischen Werten der Noten gesetzt, sodass ein Zeitstrahl
oder ähnliches eingefügt werden könnte.

Alle Einstellungen zur proportionalen Notation erwarten,
dass die @code{uniform-stretching}-Eigenschaft des
@code{SpacingSpanner}-Objekts auf wahr (@code{#t}) gesetzt wird.  Andernfalls
kann es vorkommen, dass bestimmte Abstände (etwa von
unsichtbaren Noten) nicht richtig gesetzt werden.

Das @code{SpacingSpanner}-Objekt ist ein abstraktes Grob, dass sich im
@code{Score}-Kontext befindet.  Genauso wie die Einstellungen
von @code{proportionalNotationDuration} können auch diese
Veränderungen an den drei Stellen in der Quelldatei vorkommen:
in der @code{\with}-Umgebung innerhalb von @code{Score}, in
einer @code{\context}-Umgebung oder direkt im Notentext.

Standardmäßig gibt es nur ein @code{SpacingSpanner} pro @code{Score}.
Das heißt, dass @code{uniform-stretching} für die gesamte Partitur
(d.h. für die Reichweite von @code{Score}) entweder an- oder
ausgeschaltet ist.  Man kann allerdings in einer Partitur unterschiedliche
Abschnitte mit verschiedenem Platzierungsverhalten definieren.
Hierzu ist der Befehl @code{\newSpacingSection} da.  Siehe auch @ref{Eine neuer Bereich mit anderen Abständen}.

Im Folgenden soll gezeigt werden, wie sich der
@code{Separating_line_group_engraver}
auswirkt und warum er normalerweise für proportionale Notation ausgeschaltet wird.
In diesem Beispiel wird verdeutlicht, dass vor jeder ersten Note eines Notensystems
immer etwas zusätzlicher Platz gesetzt wird:

@lilypond[quote,verbatim,ragged-right]
\paper {
  indent = #0
}

\new Staff {
  c'1
  \break
  c'1
}
@end lilypond

Der gleiche horizontale zusätzliche Platz wird vor eine Noten gesetzt, wenn sie
einer Taktart, einem Schlüssel oder einer Tonartbezeichnung folgt.
Dieser Platz wird durch @code{Separating_line_group_engraver}
eingefügt; wenn wir ihn aus der Partitur entfernen, entfällt
auch dieser zusätzliche Platz:

@lilypond[quote,verbatim,ragged-right]
\paper {
  indent = #0
}

\new Staff \with {
  \remove "Separating_line_group_engraver"
} {
  c'1
  \break
  c'1
}
@end lilypond

Nichtmusikalische Elemente wie Takt- und Tonartangaben, Schlüssel und
Versetzungszeichen sind problematisch in proportionaler
Notation.  Keine dieser Elemente hat eine rhythmische Dauer, aber
alle brauchen horizontalen Platz.  Das Problem wird auf unterschiedliche
Weise gelöst.

Es ist manchmal möglich, Probleme mit Tonarten zu lösen, indem keine
benutzt werden.  Das ist durchaus eine ernstzunehmende Option, weil
die meisten Partituren mit proportionaler Notation für heutige
Musik geschrieben werden.  Ähnliches gilt für Taktarten, insbesondere,
wenn ein Zeitstrahl in die Partitur eingearbeitet werden soll.
In den meisten Partituren kommt jedoch irgendeine Taktart vor.
Schlüssel und Versetzungszeichen sind noch wichtiger; auf
sie kann selten verzichtet werden.

Eine Lösungsmöglichkeit ist es, die @code{strict-note-spacing}-Eigenschaft
des @code{SpacingSpanner}-Objekts zu benutzen.  Zum Vergleich
die beiden Partituren unten:

@lilypond[quote,verbatim,ragged-right]
\new Staff {
  \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
  c''8
  c''8
  c''8
  \clef alto
  d'8
  d'2
}

\new Staff {
  \set Score.proportionalNotationDuration = #(ly:make-moment 1/16)
  \override Score.SpacingSpanner.strict-note-spacing = ##t
  c''8
  c''8
  c''8
  \clef alto
  d'8
  d'2
}
@end lilypond

Bei beiden handelt es sich um proportionale Notation, aber
die Platzverteilung im oberen Beispiel ist zu weit wegen
des Schlüsselwechsels.  Die Platzverteilung des zweiten
Beispiels dagegen bleibt rhythmisch korrekt.
@code{strict-note-spacing} bewirkt, dass Takt- und
Tonartbezeichnungen, Schlüssel und Versetzungszeichen
keine Rolle bei der Berechnung der Abstände spielen.

Zusätzlich zu den hier vorgestellten Einstellungen gibt es
noch eine Reihe von Möglichkeiten, die oft in proportionaler
Notation benutzt werden.  Dazu gehören:

@itemize
@item @code{\override SpacingSpanner.strict-grace-spacing = ##t}
@item @code{tupletFullLength = ##t}
@item @code{\override Beam.breakable = ##t}
@item @code{\override Glissando.breakable = ##t}
@item @code{\override TextSpanner.breakable = ##t}
@item @code{\remove "Forbid_line_break_engraver" in the Voice context}
@end itemize

Diese Einstellungen bewirken, dass auch Verzierungsnoten proportional
gesetzt werden, dass Klammern von rhythmischen Gruppen bis zu den
Anfangs- und Endpunkten ausgedehnt werden und lassen dehnbare
Objekte wie Balken und Glissandi auch über Taktstriche hinweg zu.

@seealso
Notationsreferenz:
@ref{Eine neuer Bereich mit anderen Abständen}.

Schnipsel:
@rlsr{Spacing}.


@node Die Musik auf weniger Seiten zwingen
@section Die Musik auf weniger Seiten zwingen
@translationof Fitting music onto fewer pages

Manchmal kommt es vor, dass nur ein oder zwei Systeme auf die
nächste Seite geraten, obwohl es so aussieht, als ob auf der
vorigen Seite genügend Platz ist, um diese Systeme auch noch
unterzubringen.

Wenn man derartige Platzierungsprobleme untersucht, ist die
Funktion @code{annotate-spacing} von sehr großer Hilfe.  Hiermit
wird in den Musiksatz zusätzlich Information darüber ausgegeben,
wieviel Platz bestimmten Parametern zugewiesen wird.  Genaueres
hierzu in @ref{Abstände anzeigen lassen}.

@menu
* Abstände anzeigen lassen::
* Abstände verändern::
@end menu


@node Abstände anzeigen lassen
@subsection Abstände anzeigen lassen
@translationof Displaying spacing

@cindex Platzierung, Layouteinstellungen

@funindex annotate-spacing

Die Dimensionen von vertikalen und horizontalen Platzierungsvariablen,
die veränderbar sind, lassen sich mit ihren aktuellen Werten im
Notentext anzeigen, wenn man die Funktion
@code{annotate-spacing} in der @code{\paper}-Umgebung einschaltet:

@c need to have \book{} otherwise we get the separate systems. -hwn
@lilypond[verbatim,quote]
#(set-default-paper-size "a6" 'landscape)
\book {
  \score { { c4 } }
  \paper { annotate-spacing = ##t }
}
@end lilypond

@noindent
Alle Layoutdimensionen werden in Notenlinienzwischenräumen
aufgelistet, unabhängig von den Einheiten, mit denen sie in der
@code{\paper}- oder @code{\layout}-Umgebung definiert worden
sind.  In dem letzten Beispiel hat @code{paper-height} einen Wert von
59.75 Notenlinienzwischenräumen und @code{staff-size}
Systemhöhe) ist 20 Punkte.  Dabei gilt:

@multitable {1 Notenlinienzwischenraum} {Systemgröße)/4 * (25.4/72.27) mm}

@item 1 Punkt
@tab = (25.4/72.27) mm

@item 1 Notenlinienzwischenraum
@tab = (@code{staff-size})/4 pts
@item
@tab = (@code{staff-size})/4 * (25.4/72.27) mm

@end multitable

In diesem Fall ist ein @code{staff-space} (Notenlinienzwischenraum)
etwa gleich 1.757 mm.  Deshalb entspricht der Wert von 95.75
@code{staff-space} für @code{paper-height} (Papierhöhe) 105 mm,
die Höhe eines quer gelegten A6-Papiers.  Die Paare (@var{a},@var{b}) sind
Intervalle, wobei @var{a} der untere Rand und @var{b} der
obere Rand des Intervalls.

@seealso

Notationsreferenz:
@ref{Die Notensystemgröße einstellen}

Schnipsel:
@rlsr{Spacing}.


@node Abstände verändern
@subsection Abstände verändern
@translationof Changing spacing

Die Ausgabe von @code{annotate-spacing} bietet sehr viele
Details zu den vertikalen Dimensionen einer Partitur.  Zu Information,
wie Seitenränder und andere Layout-Variablen geändert werden
können, siehe @ref{Seitenlayout}.

Neben Rändern gibt es einige weitere Optionen, Platz zu sparen:

@itemize
@item
LilyPond kann die Systeme so dicht wie möglich platzieren (damit
so viele Systeme wie möglich auf eine Seite passen), aber sie
dann so anordnen, dass kein weißer Rand unten auf der Seite entsteht.

@example
\paper @{
  system-system-spacing = #'((padding . 0) (basic-distance . 0.1))
  ragged-last-bottom = ##f
  ragged-bottom = ##f
@}
@end example

@item
Die Anzahl der Systeme kann erzwungen werden.  Das kann auf
zwei Arten helfen: wenn einfach nur ein Wert gesetzt wird, auch
wenn es die gleiche Anzahl ist, die auch schon vorher von LilyPond
erstellt wurde, kann manchmal dazu führen, dass mehr Systeme
auf eine Seite gesetzt werden.  Das liegt daran, dass ein
Schritt im Notensatz ausgelassen wird, der die Seitenverteilung
nur grob einschätzt, sodass eine bessere Seitenverteilung
entsteht.  Auch wenn man eine Verringerung der Anzahl an Systemen
erzwingt, kann oft eine Seite eingespart werden.  Wenn LilyPond
die Musik etwa auf 11 Systeme verteilt, kann man die Benutzung von
nur 10 Systemen erzwingen.

@example
\paper @{
  system-count = #10
@}
@end example

@item
Die Anzahl der Seiten kann erzwungen werden.  Beispielsweise erzwingt
folgender Code ein Layout mit zwei Seiten:

@example
\paper @{
  page-count = #2
@}
@end example

@item
Vermeidung (oder Verminderung) von Objekten, die den vertikalen Abstand von Systemen
vergrößern, hilft oft. Die Verwendung von Klammern bei Wiederholungen
(oder alternativen Wiederholungen)
etwa braucht mehr Platz. Wenn die Noten innerhalb der Klammern  auf
zwei Systeme verteilt sind, brauchen sie mehr Platz, als wenn sie
nur auf einer Zeile gedruckt werden.

Ein anderes Beispiel ist es, Dynamik-Zeichen, die besonders
weit @qq{hervorstehen}, zu verschieben.

@lilypond[verbatim,quote,relative=1]
e4 c g\f c
e4 c g-\tweak X-offset #-2.7 -\tweak Y-offset #2.5 \f c
@end lilypond

@item
Die horizontalen Abstände können mit der
@code{SpacingSpanner}-Eigenschaft verändert werden.  Siehe
@ref{Horizontale Abstände verändern} für Einzelheiten.  Dieses
Beispiel zeigt die normalen Abstände:

@lilypond[verbatim,quote]
\score {
  \relative c'' {
    g4 e e2 |
    f4 d d2 |
    c4 d e f |
    g4 g g2 |
    g4 e e2 |
  }
}
@end lilypond

@noindent
Das nächste Beispiel verändert @code{common-shortest-duration} (die
häufigste kürzeste Note) von @code{1/4} zu @code{1/2}.  Die Viertelnote
ist dennoch die häufigste Note in diesem Abschnitt, sodass der
Notentext zusammengedrängt, wird, wenn eine Halbe als Standard
angegeben wird:

@lilypond[verbatim,quote]
\score {
  \relative c'' {
    g4 e e2 |
    f4 d d2 |
    c4 d e f |
    g4 g g2 |
    g4 e e2 |
  }
  \layout {
    \context {
      \Score
      \override SpacingSpanner.common-shortest-duration = #(ly:make-moment 1/2)
    }
  }
}
@end lilypond

@noindent
Die @code{common-shortest-duration}-Eigenschaft kann nicht
dynamisch verändert werden, darum muss sie immer in der
@code{\context}-Umgebung definiert werden und wirkt sich somit
auf eine ganze @code{\score}-Umgebung aus.

@end itemize

@seealso
Notationsreferenz:
@ref{Seitenlayout},
@ref{Horizontale Abstände verändern}.

Schnipsel:
@rlsr{Spacing}.
