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

@ignore
    Translation of GIT committish: 8819d7cb0ba2ab359e4aa2276695afb9c1957c42

    When revising a translation, copy the HEAD committish of the
    version that you are working on.  For details, see the Contributors'
    Guide, node Updating translation committishes.
@end ignore

@c \version "2.19.22"
@c Translators: Till Paala, Reinhold Kainhofer, Michael Gerdau

@node Grundbegriffe
@chapter Grundbegriffe
@translationof Fundamental concepts

Nachdem im Tutorium gezeigt wurde, wie aus einfachen Text-Dateien
wunderschön formatierte Musiknoten erzeugt werden können, stellt
dieses Kapitel die Konzepte und Techniken vor, wie auch komplexere
Partituren erstellt werden können.

@menu
* Wie eine LilyPond-Eingabe-Datei funktioniert::
* Voice enthält Noten::
* Kontexte und Engraver::
* Erweiterung der Vorlagen::
@end menu

@node Wie eine LilyPond-Eingabe-Datei funktioniert
@section Wie eine LilyPond-Eingabe-Datei funktioniert
@translationof How LilyPond input files work

Das LilyPond Eingabeformat hat eine ziemlich freie Form, so dass
für erfahrene Benutzer viel Freiheit besteht, die Struktur ihrer
Quelldateien anzulegen.  Für Neulinge kann diese Flexibilität aber
erst einmal verwirrend sein.  In diesem Kapitel soll darum ein Teil
dieser Strukturen dargestellt werden, vieles aber zur Vereinfachung
auch weggelassen werden.  Für eine komplette Beschreibung des Eingabeformats
siehe @ruser{Die Dateistruktur}.

@menu
* Einführung in die Dateistruktur von LilyPond::
* Score ist ein (einziger) zusammengesetzter musikalischer Ausdruck::
* Musikalische Ausdrücke ineinander verschachteln::
* Über die Nicht-Schachtelung von Klammern und Bindebögen::
@end menu

@node Einführung in die Dateistruktur von LilyPond
@subsection Einführung in die Dateistruktur von LilyPond
@translationof Introduction to the LilyPond file structure

@cindex Eingabeformat
@cindex Dateistruktur
@cindex Struktur, Datei

Ein grundlegendes Beispiel einer Eingabedatei für LilyPond lautet:

@example
\version @w{"@version{}"}

\header @{ @}

\score @{
  @var{ @dots{} zusammengesetzter Musik-Ausdruck @dots{} }  % Die gesamten Noten kommen hier hin!
  \layout @{ @}
  \midi @{ @}
@}
@end example

@noindent
Zu diesem Muster gibt es viele Variationen, aber obiges Beispiel stellt
eine hilfreiche Ausgangsbasis dar.

@funindex \book
@funindex \score
@funindex book
@funindex score
@cindex book
@cindex score

Bis jetzt hat keines der verwendeten Beispiele den @code{\score@{@}}
Befehl gebraucht.  Das liegt daran, dass LilyPond automatisch fehlende
Befehle hinzufügt, sollten sie fehlen.  Konkret betrachtet LilyPond eine
Eingabe in der Form

@example
\relative @{
  c''4 a d c
@}
@end example

@noindent
als eine abgekürzte Form von

@example
\book @{
  \score @{
    \new Staff @{
      \new Voice @{
        \relative @{
          c''4 a b c
        @}
      @}
    @}
    \layout @{ @}
  @}
@}
@end example

@noindent
Mit anderen Worten:  Wenn die Eingabedatei einen einfachen Musik-Ausdruck
enthält, wird LilyPond die Datei so interpretieren, als ob dieser
Ausdruck in den oben gezeigten Befehlen eingegeben wurde.  Diese nötige
Struktur wird automatisch im Speicher beim Aufruf von LilyPond erzeugt,
ohne dass der Benutzer davon etwas bemerkt.

@cindex Implizite Kontexte
@cindex Kontexte, implizit

@strong{Ein Wort der Warnung ist jedoch angebracht!} Viele der Beispiele
in der Dokumentation von LilyPond lassen die @code{\new Staff} und @code{\new Voice}
Befehle zur Erzeugung einer Notenzeile und einer Stimme (beides ist in
LilyPond ein sogenannter Kontext) bewusst aus,
damit sie implizit von LilyPond im Speicher erzeugt werden.
Für einfache Dokumente funktioniert das im Allgemeinen sehr gut, für
komplexere Partituren können dadurch aber unerwartete Ergebnisse
entstehen, teilweise sogar unerwartete leere Notenzeilen.  Um
die entsprechenden Kontexte in diesem Fall explizit zu erzeugen,
siehe @ref{Kontexte und Engraver}.

@warning{Wenn mehr als ein paar Zeilen an Musik eingegeben werden,
empfiehlt es sich, die Notenzeilen und die Stimmen immer explizit
mit @code{\new Staff} und @code{\new Voice} zu erzeugen.}

Im Moment wollen wir aber zu unserem ersten Beispiel zurückkehren und
nur den @code{\score}-Befehl näher betrachten.

Eine Partitur (@code{\score}) muss immer genau einen musikalischen Ausdruck
enthalten.  Es sei daran erinnert, dass ein musikalischer alles mögliche sein
kann. Angefangen bei einer einzelnen Note bis hin zu riesigen zusammengesetzten
Ausdrücken wie

@example
@{
  \new StaffGroup <<
    @var{ @dots{} füge hier die gesamte Partitur einer Wagner Oper ein @dots{} }
  >>
@}
@end example

@noindent
Da sich alles innerhalb der geschweiften Klammern @code{@{ @dots{} @}}
befindet, wird es wie ein einziger musikalischer Ausdruck behandelt.

Wie wir oben schon gesehen haben kann der @code{\score} Block auch andere
Dinge enthalten, wie etwa

@example
\score @{
  @{ c'4 a b c' @}
  \header @{ @}
  \layout @{ @}
  \midi @{ @}
@}
@end example

@funindex \header
@funindex \layout
@funindex \midi
@funindex header
@funindex layout
@funindex midi
@cindex header
@cindex midi
@cindex Layout
@cindex Kopfzeile

@noindent
Wie man sieht, sind die drei Befehle @code{\header}, @code{\layout} und
@code{\midi} von spezieller Natur: Im Gegensatz zu vielen anderen Befehlen,
die auch mit einem @code{\} beginnen, liefern sie @emph{keinen} Musikausdruck
und sind auch nicht Teil eines musikalischen Ausdrucks.  Daher können sie
sowohl innerhalb eines @code{\score}-Blocks als auch außerhalb platziert
werden.  Tatsächlich werden einige dieser Befehle meist außerhalb des
@code{\score}-Blocks gesetzt, z.B. findet sich der @code{\header}
sehr oft oberhalb der @code{\score}-Umgebung.  Das
funktioniert genauso gut.

Zwei bisher noch nicht aufgetauchte Befehle sind
@code{\layout @{ @}} und @code{\midi @{@}}.  Wenn sie in einer
Datei vorkommen, führt dies dazu, dass LilyPond eine druckfähige PDF-Datei
bzw. eine MIDI-Ausgabe erzeugt.  Genauer beschrieben werden sie im
Benutzerhandbuch -- @ruser{Partiturlayout} und
@ruser{MIDI-Dateien erstellen}.

@cindex Partituren, mehrfache
@cindex book-Abschnitte, implizit
@cindex implizite book-Umgebung
@funindex \book

Ihr LilyPond Code kann auch mehrere @code{\score}-Blöcke enthalten.
Jeder davon wird als eigenständige Partitur interpretiert, die
allerdings alle in dieselbe Ausgabedatei platziert werden.
Ein @code{\book}-Befehl ist nicht explizit notwendig -- er wird
implizit erzeugt.  Wenn jedoch für jeden @code{\score}-Block in einer
einzigen @file{.ly}-Datei eine eigene Ausgabe-Datei erzeugt werden soll,
dann muss jeder dieser Blöcke in einen eigenen @code{\book}-Block
gesetzt werden: Jeder @code{\book}-Block erzeugt dann eine
eigene Ausgabedatei.

Zusammenfassung:

Jeder @code{\book}-Block erzeugt eine eigene Ausgabedatei (z.B. eine
PDF-Datei).  Wenn Sie keinen derartigen Block explizit angegeben haben,
setzt LilyPond den gesamten Dateiinhalt innerhalb eines einzigen
impliziten @code{\book}-Blocks.

Jeder @code{\score}-Block beschreibt ein eigenständiges Musikstück
innerhalb des @code{\book}-Blocks.

@cindex Layout-Umgebung, Platzierung
@cindex Platzierung von layout-Umgebung

Jeder @code{\layout}-Block wirkt sich auf den @code{\score}- oder
@code{\book}-Block aus, in dem er auftritt.  So wirkt z.B. ein
@code{\layout}-Block innerhalb eines @code{\score}-Blocks nur auf
diesen einen Block und seinen gesamten Inhalt, ein @code{\layout}-Block
außerhalb eines @code{\score}-Blocks (und daher innerhalb des implizit
erzeugten oder explizit angegebenen @code{\book}-Blocks) jedoch auf
alle @code{\score}-Blocks innerhalb dieses @code{\book}-Blocks.

Nähere Details finden sich im Abschnitt @ruser{Mehrere Partituren in einem Buch}.

@cindex Variablen
@cindex Bezeichner

Eine gute Möglichkeit zur Vereinfachung sind selbst definierte Variablen, wie
auch in @ref{Stücke durch Variablen organisieren} gezeigt.
Alle Vorlagen verwenden diese Möglichkeit:

@example
melodie = \relative @{
  c'4 a b c
@}

\score @{
  \melodie
@}
@end example

Wenn LilyPond diese Datei analysiert, nimmt es den Inhalt
von @code{melodie} (alles nach dem Gleichheitszeichen) und
fügt ihn immer dann ein, wenn ein @code{\melodie}
vorkommt.  Die Namen sind frei wählbar, die Variable kann genauso
gut  @code{melodie}, @code{GLOBAL}, @code{rechteHandKlavier},
oder @code{foofoobarbaz} heißen.
Als Variablenname kann fast jeder beliebige Name benutzt werden,
allerdings dürfen nur Buchstaben vorkommen (also keine Zahlen, Unterstriche,
Sonderzeichen, etc.) und er darf nicht wie ein LilyPond-Befehl
lauten.  Für mehr Information siehe
@ref{Tipparbeit durch Variablen und Funktionen einsparen}.  Die genauen
Einschränkungen sind beschrieben in @ruser{Die Dateistruktur}.


@seealso
Eine vollständige Definition des Eingabeformats findet sich in
@ruser{Die Dateistruktur}.


@node Score ist ein (einziger) zusammengesetzter musikalischer Ausdruck
@subsection Score ist ein (einziger) zusammengesetzter musikalischer Ausdruck
@translationof Score is a (single) compound musical expression

@funindex \score
@cindex score
@cindex Partitur
@cindex Musikstück
@cindex zusammengesetzter Musikausdruck
@cindex Musikausdruck, zusammengesetzter


Im vorigen Kapitel, @ref{Einführung in die Dateistruktur von LilyPond},
wurde die allgemeine Struktur einer LilyPond-Quelldatei
beschrieben.  Aber anscheinend haben wir die wichtigste
Frage ausgelassen, nämlich wie man herausfindet, was nach
dem @code{\score} geschrieben werden soll.

In Wirklichkeit ist das aber gar kein Geheimnis.  Diese
Zeile ist die Antwort:

@quotation
@emph{Ein @code{\score} Block enthält immer genau einen musikalischen Ausdruck.}
@end quotation

@noindent
Vielleicht wollen Sie noch einmal
@ref{Musikalische Ausdrücke erklärt} überfliegen.  In diesem
Kapitel wurde gezeigt, wie sich große musikalische Ausdrücke
aus kleinen Teilen zusammensetzen.  Noten können zu Akkorden
verbunden werden usw. Jetzt gehen wir aber in die andere Richtung
und betrachten, wie sich ein großer musikalischer Ausdruck
zerlegen lässt. Zur Einfachheit soll nur ein Sänger und Klavier
in unserem Beispiel eingesetzt werden.  Wir brauchen
keine Systemgruppe (StaffGroup), die einfach nur bewirkt,
dass die Systeme mit einer Klammer zusammengefasst werden; sie
wird also entfernt.  Wir @emph{brauchen} aber einen Sänger und ein Klavier.

@example
\score @{
  <<
    \new Staff = "Sänger" <<
    >>
    \new PianoStaff = "Klavier" <<
    >>
  >>
  \layout @{ @}
@}
@end example

Hier wurden die Systeme (Staff) benannt: @qq{Sänger} und
@qq{Klavier}.  Das ist zwar nicht direkt notwendig,
aber es ist gut, sich diese Schreibweise anzugewöhnen, damit man
immer sofort erkennt, um welches System es sich handelt.

Zur Erinnerung: mit @code{<< @dots{} >>} (an Stelle von @code{@{ @dots{} @}})
werden Noten gleichzeitig gesetzt.
Dadurch werden Vokalstimme und Klaviersystem übereinander
ausgegeben.  Die @code{<< @dots{} >>}-Konstruktion ist für das
Sänger-System nicht notwendig, wenn hier nur die Noten einer
einzigen Stimme eingefügt werden sollen, aber @code{<< @dots{} >>}
anstelle von geschwungenen Klammern sind notwendig,
sobald mehr als eine Stimme oder etwa eine Notenstimme und
Gesangstext eingefügt werden sollen.  In unserem Fall soll eine
Stimme mit Gesangstext notiert werden, sodass die spitzen Klammern
benötigt werden.  Die Noten sollen erst später hinzugefügt werden,
hier also erst mal nur ein paar Platzhalternoten und Text.  Wenn
Sie sich nicht erinnern, wie man Gesangstext notiert, lesen
Sie noch einmal @code{\addlyrics} in @ref{Setting simple songs}.

@c KEEP LY
@lilypond[verbatim,quote,ragged-right]
\score {
  <<
    \new Staff = "Sänger" <<
      \new Voice = "Singstimme" { c'1 }
      \addlyrics { And }
    >>
    \new PianoStaff = "Klavier" <<
      \new Staff = "oben" { c'1 }
      \new Staff = "unten" { c'1 }
    >>
  >>
  \layout { }
}
@end lilypond

Jetzt haben wir viel mehr Details.  Wir haben ein System (engl. staff)
für einen Sänger, in dem sich wieder eine Stimme (engl. voice)
befindet.  @code{Voice} bedeutet für LilyPond eine Stimme (sowohl
gesungen als auch gespielt) und evtl. zusätzlich einen Text.  Zusätzlich
werden zwei Notensysteme für das Klavier mit dem Befehl @code{\new
PianoStaff} gesetzt.  @code{PianoStaff} bezeichnet die Piano-Umgebung (etwa
durchgehende Taktstriche und die geschweifte Klammer am Anfang), in der
dann wiederum zwei eigene Systeme ("oben" für die rechte Hand und
"unten"
für die linke) erstellt werden, auch wenn das untere System noch
einen Bassschlüssel erhalten muss.

Jetzt könnte man in diese Umgebung Noten einfügen.  Innerhalb der
geschweiften Klammern neben @code{\new Voice = "Singstimme"}
könnte man

@example
\relative @{
  r4 d''8\noBeam g, c4 r
@}
@end example

@noindent
schreiben.  Aber wenn man seine Datei so direkt schreibt, wird
der @code{\score}-Abschnitt sehr lang und es wird ziemlich schwer zu
verstehen, wie alles zusammenhängt.  Darum bietet es sich an, Bezeichner
(oder Variablen) zu verwenden.  Sie wurden zu Beginn des vorigen
Abschnitts erklärt, erinnern Sie sich?  Damit wir sicher gehen
können, dass der Inhalt der @code{text}-Variable als Gesangstext
interpretiert wird, wird ihm @code{\lyricmode} voran gesetzt.  Wie
@code{\addlyrics} wird hiermit in den Eingabemodus für Gesangstext
gewechselt. Ohne diesen Befehl würde LilyPond versuchen, den Inhalt
der Variable als Noten zu interpretieren und dabei eine Menge
Fehler produzieren. (Einige andere Eingabemodi sind außerdem noch
verfügbar, siehe @ruser{Input modes}.)

Also haben wir, wenn wir ein paar Noten und einen Bassschlüssel
für die linke Hand hinzufügen, folgendes Beispiel:

@c KEEP LY
@lilypond[verbatim,quote,ragged-right]
melodie = \relative { r4 d''8\noBeam g, c4 r }
text    = \lyricmode { And God said, }
oben    = \relative { <g' d g,>2~ <g d g,> }
unten   = \relative { b,2 e }

\score {
  <<
    \new Staff = "Sänger" <<
      \new Voice = "Singstimme" { \melodie }
      \addlyrics { \text }
    >>
    \new PianoStaff = "Klavier" <<
      \new Staff = "oben" { \oben }
      \new Staff = "unten" {
        \clef "bass"
        \unten
      }
    >>
  >>
  \layout { }
}
@end lilypond

Beim Schreiben (oder Lesen) einer @code{\score}-Umgebung
sollte man langsam und sorgfältig vorgehen.  Am besten fängt
man mit dem größten Gebilde an und definiert dann die darin
enthaltenen kleineren der Reihe nach.  Es hilft auch, sehr
genau mit den Einzügen zu sein, so dass jede Zeile, die
der gleichen Ebene angehört, wirklich horizontal an der
gleichen Stelle beginnt.


@seealso
Benutzerhandbuch: @ruser{Struktur einer Partitur}.


@node Musikalische Ausdrücke ineinander verschachteln
@subsection Musikalische Ausdrücke ineinander verschachteln
@translationof Nesting music expressions

@cindex Notenzeilen, temporäre
@cindex Ossia
@cindex temporäre Notenzeilen

Notenzeilen (die @q{Staff}-Kontexte) müssen nicht unbedingt gleich
zu Beginn erzeugt werden -- sie können auch zu einem späteren
Zeitpunkt eingeführt werden.  Das ist vor allem nützlich, um
@rglosnamed{ossia,Ossias} zu erzeugen.  Hier folgt ein kurzes Beispiel,
wie eine zusätzliche temporäre Notenzeile für nur drei Noten erzeugt
werden kann:

@lilypond[verbatim,quote,ragged-right]
\new Staff {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff {
        f8 f c
      }
    >>
    r4 |
  }
}
@end lilypond

@noindent
Wie man sieht, ist die Größe des Notenschlüssels dieselbe, wie sie
auch bei einer Schlüsseländerung auftritt -- etwas kleiner als
der Schlüssel am Beginn einer Notenzeile.   Dies ist normal für
Notenschlüssel, die innerhalb einer Notenzeile gesetzt werden.

@cindex Notenzeile, Positionierung
@cindex Positionierung einer Notenzeile

Der Ossia-Abschnitt kann auch oberhalb der Hauptnotenzeile
gesetzt werden:

@c KEEP LY
@lilypond[verbatim,quote,ragged-right]
\new Staff = "Hauptzeile" {
  \relative {
    r4 g'8 g c4 c8 d |
    e4 r8
    <<
      { f8 c c }
      \new Staff \with {
        alignAboveContext = "Hauptzeile"
      } { f8 f c }
    >>
    r4 |
  }
}
@end lilypond

Dieses Beispiel benutzt den @code{\with}-Befehl, der später noch
genauer erklärt wird.  Damit kann das Standardverhalten einer
einzelnen Notenzeile geändert werden: Hier wird einfach angegeben,
dass die neue Notenzeile oberhalb der bereits existierenden Zeile
mit Namen @qq{Hauptzeile} plaziert werden soll, anstatt
standardmäßig unterhalb.


@seealso
Ossia werden oft ohne Notenschlüssel und Taktangabe gedruckt, meist
auch etwas kleiner als die anderen Notenzeilen.  Dies ist natürlich
auch in LilyPond möglich, benötigt aber Befehle, die bisher noch
nicht vorgestellt wurden.  Siehe @ref{Größe von Objekten}
und @ruser{Ossia-Systeme}.


@node Über die Nicht-Schachtelung von Klammern und Bindebögen
@subsection Über die Nicht-Schachtelung von Klammern und Bindebögen
@translationof On the un-nestedness of brackets and ties

@cindex Klammern, geschachtelt
@cindex Schachtelung von Klammern
@cindex Klammer-Typen

Sie haben bisher zahlreiche verschiedene Arten von Klammern
und Klammer-artigen Konstruktionen beim Schreiben von Musik mit
LilyPond kennengelernt.  Diese folgen verschiedenen Regeln, die zu
Beginn vielleicht verwirrend wirken.  Bevor die genauen Regeln
vorgestellt werden, wollen wir die diversen Klammerarten und Arten
von Klammer-artigen Konstrukten kurz rekapitulieren:

@c attempt to force this onto a new page
@need 50
@multitable @columnfractions .3 .7
@headitem Klammerart
  @tab Funktion
@item @code{@{ @dots{} @}}
  @tab Umschließt ein sequenzielles Musiksegment
@item @code{< @dots{} >}
  @tab Umschließt die Noten eines Akkords
@item @code{<< @dots{} >>}
  @tab Umschließt parallele Musikausdrücke
@item @code{( @dots{} )}
  @tab Markiert den Beginn und das Ende eines Haltebogens
@item @code{\( @dots{} \)}
  @tab Markiert den Beginn und das Ende eines Phasierungsbogens
@item @code{[ @dots{} ]}
  @tab Markiert den Beginn und das Ende eines manuell erzeugten Balkens
@end multitable

Zusätzlich sollten vielleicht noch einige weiter Konstruktionen
erwähnt werden, die Noten auf irgendeine Art und Weise verbinden:
Haltebögen (durch eine Tilde @code{~} markiert),
N-tolen (als @code{\tuplet x/y @{ @dots{} @}} geschrieben) und
Vorschlagnoten (als @code{\grace@{ @dots{} @}} notiert).

Außerhalb von LilyPond fordert die übliche Benutzung von
Klammern, dass die entsprechenden Arten korrekt verschachtelt
werden, wie z.B. in @code{<< [ @{ ( @dots{} ) @} ] >>}.  Die
schließenden Klammern kommen dabei in der umgekehrten Reihenfolge
wie die öffnenden Klammern vor.  Dies ist auch in LilyPond
ein @strong{Muss} für die drei Klammerarten, die in obiger
Tabelle mit dem Wort @q{Umschließt} beschrieben werden -- sie
müssen korrekt geschachtelt werden.
Die restlichen Klammer-artigen Konstruktionen (durch @q{Markiert}
in der Tabelle oben beschrieben), die Haltebögen und die Triolen
brauchen jedoch mit
den anderen Klammern oder Klammer-artigen Konstrukten @strong{nicht}
unbedingt korrekt geschachtelt werden.  Tatsächlich sind sie auch
keine Klammern in dem Sinn, dass sie etwas umschließen, sondern
viel mehr Indikatoren, an welcher Stelle ein bestimmtes
musikalisches Objekt beginnt oder endet.

So kann also z.B. einen Phrasierungsbogen vor einem manuellen
Balken beginn, jedoch schon vor dem Ende des Balkens enden.
Dies mag zwar musikalisch wenig Sinn ergeben, ist aber in LilyPond
auch möglich:

@lilypond[quote,verbatim,ragged-right]
\relative { g'8\( a b[ c b\) a] g4 }
@end lilypond

Im Allgemeinen können die verschiedenen Klammerarten,
Klammer-artigen Konstruktionen, Haltebögen,
Triolen und Vorschlagnoten beliebig kombiniert werden.
Das folgende Beispiel zeigt einen Balken, der in eine Triole reicht
(Zeile 1), eine Bindebogen, der ebenfalls in eine Triole
reicht (Zeile 2), einen Balken und einen Bindebogen in eine Triole,
ein Haltebogen, der über zwei Triolen läuft, sowie einen
Phrasierungsbogen, der in einer Triole beginnt (Zeilen 3 und 4).

@lilypond[quote,verbatim,ragged-right]
\relative {
  r16[ g' \tuplet 3/2 { r16 e'8] }
  g,16( a \tuplet 3/2 { b16 d) e }
  g,8[( a \tuplet 3/2 { b8 d) e~] } |
  \tuplet 5/4 { e32\( a, b d e } a4.\)
}
@end lilypond


@node Voice enthält Noten
@section Voice enthält Noten
@translationof Voices contain music

Sänger brauchen Stimmen zum Singen, und LilyPond braucht sie auch:
in der Tat sind alle Noten für alle Instrumente in einer Partitur
innerhalb von Stimmen gesetzt.  Die Stimme ist das grundlegende Prinzip
von LilyPond.

@menu
* Ich höre Stimmen::
* Stimmen explizit beginnen::
* Stimmen und Text::
@end menu

@node Ich höre Stimmen
@subsection Ich höre Stimmen
@translationof I'm hearing Voices

@cindex Polyphonie
@cindex Ebenen
@cindex mehrere Stimmen
@cindex Stimmen, mehrere
@cindex Voice context
@cindex context, Voice
@cindex Kontext, Stimme
@cindex Stimmenkontext
@cindex gleichzeitige Noten
@cindex Stimmen versus Akkorde
@cindex Akkorde versus Stimmen
@cindex Noten gleichzeitig

Die grundlegenden und innersten Ebenen in einer LilyPond-Partitur
werden @qq{Voice context} (Stimmenkontext) oder auch nur @qq{Voice}
(Stimme) genannt.  Stimmen werden in anderen Notationsprogrammen
manchmal auch als @qq{layer} (Ebene) bezeichnet.

Tatsächlich ist die Voice-Ebene die einzige, die wirklich Noten
enthalten kann.  Wenn kein Voice-Kontext explizit erstellt wird,
wird er automatisch erstellt, wie am Anfang dieses Kapitels
gezeigt.  Manche Instrumente wie etwa die Oboe können nur eine
Note gleichzeitig spielen.  Noten für solche Instrumente brauchen nur
eine einzige Stimme.  Instrumente, die
mehrere Noten gleichzeitig spielen können, wie das Klavier, brauchen
dagegen oft mehrere Stimmen, um die verschiedenen gleichzeitig
erklingenden Noten mit oft unterschiedlichen Rhythmen darstellen
zu können.

Eine einzelne Stimme kann natürlich auch vielen Noten in einem Akkord
enthalten -- wann also braucht man dann mehrere Stimmen? Schauen wir
uns zuerst dieses Beispiel mit vier Akkorden an:

@lilypond[quote,verbatim,ragged-right]
\relative {
  \key g \major
  <d' g>4 <d fis> <d a'> <d g>
}
@end lilypond

Das kann ausgedrückt werden, indem man die einfachen spitzen Klammern
@code{< @dots{} >} benützt, um Akkorde anzuzeigen.  Hierfür braucht man
nur eine Stimme.  Aber gesetzt der Fall das Fis sollte eigentlich
eine Achtelnote sein, gefolgt von einer Achtelnote G (als Durchgangsnote
hin zum A)? Hier haben wir also zwei Noten, die zur gleichen Zeit
beginnen, aber unterschiedliche Dauern haben: die Viertelnote D und die
Achtelnote Fis.  Wie können sie notiert werden? Als Akkord kann man sie
nicht schreiben, weil alle Noten in einem Akkord die gleiche Länge besitzen
müssen.  Sie können auch nicht als aufeinander folgende Noten geschrieben
werden, denn sie beginnen ja zur selben Zeit.  In diesem Fall also brauchen
wir zwei Stimmen.

Wie aber wird das in der LilyPond-Syntax ausgedrückt?

@funindex << \\ >>
@funindex \\

Die einfachste Art, Fragmente mit mehr als einer Stimme auf einem System
zu notieren, ist, die Stimmen nacheinander (jeweils mit den Klammern
@code{@{ @dots{} @}}) zu schreiben und dann mit den spitzen Klammern
(@code{<< @dots{} >>}) simultan zu kombinieren.  Die beiden Fragmente müssen
zusätzlich noch mit zwei Backslash-Zeichen (@code{\\}) voneinander
getrennt werden, damit sie als zwei unterschiedliche Stimmen erkannt
werden.  Ohne diese Trenner würden sie als eine einzige Stimme notiert
werden.  Diese Technik ist besonders dann angebracht, wenn es sich bei
den Noten um hauptsächlich homophone Musik handelt, in der hier und da
polyphone Stellen vorkommen.

So sieht es aus, wenn die Akkorde in zwei Stimmen aufgeteilt werden
und zur Durchgangsnote noch ein Bogen hinzugefügt wird:

@lilypond[quote,verbatim,ragged-right]
\relative {
  \key g \major
  %    Voice = "1"             Voice = "2"
  << { g'4 fis8( g) a4 g } \\ { d4 d d d }  >>
}
@end lilypond

Beachten Sie, dass die Hälse der zweiten Stimme nun nach unten zeigen.

Hier ein anderes Beispiel:

@lilypond[quote,verbatim,ragged-right]
\relative {
  \key d \minor
  %    Voice = "1"           Voice = "2"
  << { r4 g' g4. a8 }   \\ { d,2 d4 g }       >> |
  << { bes4 bes c bes } \\ { g4 g g8( a) g4 } >> |
  << { a2. r4 }         \\ { fis2. s4 }       >> |
}
@end lilypond

Es ist nicht notwendig, für jeden Takt eine eigene
@code{<< \\ >>}-Konstruktion zu benutzen.  Bei Musik mit nur wenigen
Noten pro Takt kann es die Quelldatei besser lesbar machen, aber
wenn in einem Takt viele Noten vorkommen, kann man die gesamten Stimmen
separat schreiben, wie hier:

@lilypond[quote,verbatim,ragged-right]
<<
  \key d \minor
  \relative { % Voice = "1"
    r4 g' g4. a8 |
    bes4 bes c bes |
    a2. r4 |
  } \\
  \relative { % Voice = "2"
    d'2 d4 g |
    g4 g g8( a) g4 |
    fis2. s4 |
  }
>>
@end lilypond


@cindex Voice, Benennung
@cindex Voices crossing brackets
@cindex Legatobögen crossing brackets
@cindex Bindebögen crossing brackets

Dieses Beispiel hat nur zwei Stimmen, aber die gleiche Konstruktion kann
angewendet werden, wenn man drei oder mehr Stimmen hat, indem man weitere
Backslash-Trenner hinzufügt.

Die Stimmenkontexte tragen die Namen @code{"1"}, @code{"2"} usw. Der erste
Kontext stellt die @qq{äußeren} Stimmen ein, die höchste Stimme im
Kontext @code{"1"} und die tiefste Stimme im Kontext @code{"2"}.  Die
inneren Stimmen kommen in die Kontexte @code{"3"} und @code{"4"}.  In
jedem dieser Kontexte wird die vertikale Ausrichtung von Bögen, Hälsen,
Dynamik usw. entsprechend eingestellt.

@lilypond[quote,verbatim]
\new Staff \relative {
  % Main voice
  c'16 d e f
  %    Voice = "1"   Voice = "2"              Voice = "3"
  << { g4 f e } \\ { r8 e4 d c8~ } >> |
  << { d2 e }   \\ { c8 b16 a b8 g~ 2 } \\ { s4 b c2 } >> |
}
@end lilypond

Diese Stimmen sind alle getrennt von der Hauptstimme, die die Noten
außerhalb der @code{<< .. >>}-Konstruktion beinhaltet.  Lassen wir es
uns die @emph{simultane Konstruktion} nennen.  Bindebögen und Legatobögen
können nur Noten in der selben Stimmen miteinander verbinden und können
also somit nicht aus der simultanen Konstruktion hinausreichen.  Umgekehrt
gilt, dass parallele Stimmen aus eigenen simultanen Konstruktionen auf
dem gleichen Notensystem die gleiche Stimme sind.  Auch andere, mit dem
Stimmenkontext verknüpfte Eigenschaften erstrecken sich auf alle
simultanen Konstrukte.  Hier das gleiche Beispiel, aber mit unterschiedlichen Farben für die Notenköpfe der unterschiedlichen Stimmen.
Beachten Sie, dass Änderungen in einer Stimme sich nicht auf die anderen
Stimmen erstrecken, aber sie sind weiterhin in der selben Stimme vorhanden,
auch noch später im Stück.  Beachten Sie auch, dass übergebundene Noten
über die gleiche Stimme in zwei Konstrukten verteilt werden können, wie
hier an der blauen Dreieckstimme gezeigt.

@lilypond[quote,verbatim]
\new Staff \relative {
  % Hauptstimme
  c'16 d e f
  <<  % Takt 1
    {
      \voiceOneStyle
      g4 f e
    }
  \\
    {
      \voiceTwoStyle
      r8 e4 d c8~
    }
  >> |
  <<  % Takt 2
     % Voice 1 wird fortgesetzt
    { d2 e }
  \\
     % Voice 2 wird fortgesetzt
    { c8 b16 a b8 g~ 2 }
  \\
    {
      \voiceThreeStyle
      s4 b c2
    }
  >> |
}
@end lilypond

@funindex \voiceOneStyle
@funindex \voiceTwoStyle
@funindex \voiceThreeStyle
@funindex \voiceFourStyle
@funindex \voiceNeutralStyle

Die Befehle @code{\voiceXXXStyle} sind vor allem dazu da, um in
pädagogischen Dokumenten wie diesem hier angewandt zu werden.
Sie verändern die Farbe des Notenkopfes, des Halses und des Balkens, und
zusätzlich die Form des Notenkopfes, damit die einzelnen Stimmen
einfach auseinander gehalten werden können.  Die erste Stimme ist als
rote Raute definiert, die zweite Stimme als blaue Dreiecke, die dritte
Stimme als grüne Kreise mit Kreuz und die vierte Stimme (die hier nicht
benutzt wird) hat dunkelrote Kreuze.  @code{\voiceNeutralStyle} (hier auch
nicht benutzt) macht diese Änderungen rückgängig.  Später soll gezeigt
werden, wie Befehle wie diese vom Benutzer selber erstellt werden
können.  Siehe auch @ref{Sichtbarkeit und Farbe von Objekten} und
@ref{Variablen für Layout Anpassungen einsetzen}.

@cindex Polyphonie und relativer Notationsmodus
@cindex relativer Notationsmodus und Polyphonie

Polyphonie ändert nicht die Verhältnisse der Noten innerhalb eines
@code{\relative}-Blocks.  Jede Note wird weiterhin relativ zu
der vorherigen Note errechnet, oder relativ zur ersten Note des vorigen
Akkords.  So ist etwa hier

@example
\relative @{ noteA << < noteB noteC > \\ noteD >> noteE @}
@end example

@noindent
@code{NoteB} bezüglich @code{NoteA}                      @*
@code{NoteC} bezüglich @code{NoteB}, nicht @code{noteA};   @*
@code{NoteD} bezüglich @code{NoteB}, nicht @code{NoteA} oder
@code{NoteC};                                                 @*
@code{NoteE} bezüglich @code{NoteD}, nicht @code{NoteA} errechnet.

Eine andere Möglichkeit ist, den @code{\relative}-Befehl vor jede
Stimme zu stellen.  Das bietet sich an, wenn die Stimmen weit voneinander
entfernt sind.

@example
\relative @{ NoteA @dots{} @}
<<
  \relative @{ < NoteB NoteC > @dots{} @}
\\
  \relative @{ NoteD @dots{} @}
>>
\relative @{ NoteE @dots{} @}
@end example

Zum Schluss wollen wir die Stimmen in einem etwas komplizierteren Stück
analysieren.  Hier die Noten der ersten zwei Takte von Chopins
@notation{Deux Nocturnes}, Op. 32.  Dieses Beispiel soll später in diesem
und dem nächsten Kapitel benutzt werden, um verschiedene Techniken,
Notation zu erstellen, zu demonstrieren.  Ignorieren Sie deshalb an diesem
Punkt alles in folgendem Code, das Ihnen seltsam vorkommt, und konzentrieren
Sie sich auf die Noten und die Stimmen.  Die komplizierten Dinge werden
in späteren Abschnitten erklärt werden.

@c The following should appear as music without code
@lilypond[quote,ragged-right]
\new Staff \relative {
  \key aes \major
  <<  % Voice 1
    { c''2 aes4. bes8 }
  \\  % Voice 2
    {
      % Ignoriere diese Befehle vorerst - sie werden in Kap. 4 erklärt
      \once \override NoteColumn.force-hshift = #0
      <ees, c>2
      \once \override NoteColumn.force-hshift = #0.5
      des2
    }
  \\  % Keine voice 3
  \\  % Voice 4
    {
      \override NoteColumn.force-hshift = #0
      aes'2 f4 fes
    }
  >> |
  <c ees aes c>1 |
}
@end lilypond

Die Richtung der Hälse wird  oft benutzt, um anzuzeigen, dass zwei
gleichzeitige Melodien sich fortsetzen.  Hier zeigen die Hälse aller
oberen Noten nach oben und die Hälse aller unteren Noten nach unten.
Das ist der erste Anhaltspunkt, dass mehr als eine Stimme benötigt
wird.

Aber die wirkliche Notwendigkeit für mehrere Stimmen tritt erst
dann auf, wenn unterschiedliche Noten gleichzeitig erklingen, aber
unterschiedliche Dauern besitzen.  Schauen Sie sich die Noten
auf dem dritten Schlag im ersten Takt an.  Das As ist eine punktierte
Viertel, das F ist eine Viertel und das Des eine Halbe.  Sie können
nicht als Akkord geschrieben werden, denn alle Noten in einem Akkord
besitzen die gleiche Dauer.  Sie können aber auch nicht nacheinander
geschrieben werden, denn sie beginnen auf der gleichen Taktzeit.  Dieser
Taktabschnitt benötigt drei Stimmen, und normalerweise schreibt man
drei Stimmen für den ganzen Takt, wie im Beispiel unten zu sehen ist;
hier sind unterschiedliche Köpfe und Farben für die verschiedenen Stimmen
eingesetzt.  Noch einmal: der Quellcode für dieses Beispiel wird später
erklärt werden, deshalb ignorieren Sie alles, was Sie hier nicht
verstehen können.

@c The following should appear as music without code
@c The three voice styles should be defined in -init
@lilypond[quote,ragged-right]
\new Staff \relative {
  \key aes \major
  <<
    {  % Voice 1
      \voiceOneStyle
      c''2 aes4. bes8
    }
  \\  % Voice 2
    { \voiceTwoStyle
      % Ignoriere diese Befehle vorerst - sie werden in Kap. 4 erklärt
      \once \override NoteColumn.force-hshift = #0
      <ees, c>2
      \once \override NoteColumn.force-hshift = #0.5
      des2
    }
  \\  % Keine Voice 3 (wir wollen Hälse nach unten)
  \\  % Voice 4
    { \voiceThreeStyle
      \override NoteColumn.force-hshift = #0
      aes'2 f4 fes
    }
  >> |
  <c ees aes c>1 |
}
@end lilypond


Versuchen wir also, diese Musik selber zu notieren.  Wie wir sehen
werden, beinhaltet das einige Schwierigkeiten.  Fangen wir an, wie
wir es gelernt haben, indem wir mit der @code{<< \\  >>}-Konstruktion
die drei Stimmen des ersten Taktes notieren:

@lilypond[quote,verbatim,ragged-right]
\new Staff \relative {
  \key aes \major
  <<
    { c''2 aes4. bes8 } \\ { <ees, c>2 des } \\ { aes'2 f4 fes }
  >> |
  <c ees aes c>1 |
}
@end lilypond

@cindex Hals nach unten
@cindex Hals nach oben
@cindex Notenhals, Richtung
@cindex Richtung des Notenhalses
@cindex Notenhalsrichtung
@cindex Stimmen und Notenhalsrichtung
@cindex Notenhalsrichtung in Stimmen

Die Richtung des Notenhalses wird automatisch zugewiesen; die ungeraden
Stimmen tragen Hälse nach oben, die gerade Hälse nach unten.  Die Hälse
für die Stimmen 1 und 2 stimmen, aber die Hälse in der dritten Stimme
sollen in diesem Beispiel eigentlich nach unten zeigen.  Wir können das
korrigieren, indem wir die dritte Stimme einfach auslassen und die
Noten in die vierte Stimme verschieben.  Das wird einfach vorgenommen,
indem noch ein Paar @code{\\}-Stimmen hinzugefügt wird.

@lilypond[quote,verbatim,ragged-right]
\new Staff \relative {
  \key aes \major
  <<  % Voice 1
    { c''2 aes4. bes8 }
  \\  % Voice 2
    { <ees, c>2 des }
  \\  % Auslassen von Voice 3
  \\  % Voice 4
    { aes'2 f4 fes }
  >> |
  <c ees aes c>1 |
}
@end lilypond

@noindent
Wie zu sehen ist, ändert das die Richtung der Hälse, aber die horizontale
Ausrichtung der Noten ist nicht so, wie wir sie wollen.  LilyPond
verschiebt die inneren Noten wenn sie oder ihre Hälse mit den äußeren
Stimmen zusammenstoßen würden, aber das ist nicht richtig für Klaviermusik.
In anderen Situationen können die Verschiebungen von LilyPond nicht
ausreichend sein, um Überlappungen aufzulösen.  LilyPond stellt verschiedene
Möglichkeiten zur Verfügung, um die horizontale Ausrichtung von Noten
zu beeinflussen.  Wir sind aber noch nicht so weit, dass wir diese Funktionen
anwenden könnten.  Darum heben wir uns das Problem für einen späteren Abschnitt
auf; siehe @code{force-hshift}-Eigenschaft in
@ref{Überlappende Notation in Ordnung bringen}.

@warning{Gesangstext und Strecker (wie etwa Bögen, Crescendo-Klammern usw.) können
nicht von einer Stimme zur anderen erstellt werden.}


@seealso
Notationsreferenz: @ruser{Mehrere Stimmen}.


@node Stimmen explizit beginnen
@subsection Stimmen explizit beginnen
@translationof Explicitly instantiating voices

@funindex \voiceOne
@funindex \voiceTwo
@funindex \voiceThree
@funindex \voiceFour
@funindex \oneVoice
@funindex \new Voice
@cindex Voice context, erstellen von
@cindex Stimmenkontexte, erstellen von

Voice-Kontexte können auch manuell innerhalb
eines @code{<< >>}-Abschnittes initiiert werden.  Mit den Befehlen
@code{\voiceOne} bis hin zu @code{\voiceFour} kann jeder Stimme
entsprechendes Verhalten von vertikaler Verschiebung und Richtung
von Hälsen und anderen Objekten hinzugefügt werden.  In längeren
Partituren können die Stimmen damit besser auseinander gehalten
werden.

Die @code{<< \\ >>}-Konstruktion, die wir im vorigen Abschnitt
verwendet haben:

@example
\new Staff @{
  \relative @{
    << @{ e'4 f g a @} \\ @{ c,4 d e f @} >>
  @}
@}
@end example

@noindent
ist identisch zu

@example
\new Staff <<
  \new Voice = "1" @{ \voiceOne \relative @{ e'4 f g a @} @}
  \new Voice = "2" @{ \voiceTwo \relative @{ c'4 d e f @} @}
>>
@end example

Beide würden folgendes Notenbild erzeugen:

@c The following example should not display the code
@lilypond[ragged-right,quote]
\new Staff <<
  \new Voice = "1" { \voiceOne \relative { e'4 f g a } }
  \new Voice = "2" { \voiceTwo \relative { c'4 d e f } }
>>
@end lilypond

@cindex Stimmen, mehrere zu einer zusammenführen
@cindex eine Stimme wiederherstellen

Der @code{\voiceXXX}-Befehl setzt die Richtung von Hälsen,
Bögen, Artikulationszeichen, Text, Punktierungen und Fingersätzen.
@code{\voiceOne} und @code{\voiceThree} lassen diese Objekte
nach oben zeigen, @code{\voiceTwo} und @code{\voiceFour}
dagegen lassen sie abwärts zeigen. Diese Befehle erzeugen eine
horizontale Verschiebung, wenn es erforderlich ist, um Zusammenstöße
zu vermeiden.  Der Befehl
@code{\oneVoice} stellt wieder auf das normale Verhalten um.

Schauen wir uns in einigen einfachen Beispielen an, was genau
die Befehle @code{\oneVoice}, @code{\voiceOne} und @code{voiceTwo}
mit Text, Bögen und Dynamikbezeichnung anstellen:

@lilypond[quote,ragged-right,verbatim]
\relative {
  % Default behavior or behavior after \oneVoice
  c'4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond

@lilypond[quote,ragged-right,verbatim]
\relative {
  \voiceOne
  c'4 d8~ 8 e4( f | g4 a) b-> c |
  \oneVoice
  c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond

@lilypond[quote,ragged-right,verbatim]
\relative {
  \voiceTwo
  c'4 d8~ 8 e4( f | g4 a) b-> c |
  \oneVoice
  c,4 d8~ 8 e4( f | g4 a) b-> c |
}
@end lilypond

Schauen wir und nun drei unterschiedliche Arten an, den gleichen
Abschnitt polyphoner Musik zu notieren, jede Art mit ihren
Vorteilen in unterschiedlichen Situationen.  Wir benutzen dabei
das Beispiel vom vorherigen Abschnitt.

Ein Ausdruck, der direkt innerhalb einer @code{<< >>}-Umgebung
auftritt, gehört der Hauptstimme an.  Das ist nützlich, wenn zusätzliche
Stimme auftreten, während die Hauptstimme sich fortsetzt.  Hier also
eine bessere Version des Beispiels aus dem vorigen Abschnitt.  Die
farbigen Kreuz-Notenköpfe zeigen, dass die Hauptstimme sich jetzt in
einem einzigen Stimmen (@code{voice})-Kontext befindet.  Somit kann ein
Phrasierungsbogen ober sie gesetzt werden.

@lilypond[quote,ragged-right,verbatim]
\new Staff \relative {
  \voiceOneStyle
  % This section is homophonic
  c'16^( d e f
  % Start simultaneous section of three voices
  <<
    % Continue the main voice in parallel
    { g4 f e | d2 e) | }
    % Initiate second voice
    \new Voice {
      % Set stems, etc., down
      \voiceTwo
      r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
    }
    % Initiate third voice
    \new Voice {
      % Set stems, etc, up
      \voiceThree
      s2. | s4 b c2 |
    }
  >>
}
@end lilypond

@cindex Verschachteln von musikalischen Ausdrücken
@cindex Verschachteln von gleichzeitigen Ausdrücken
@cindex Ausdrücke, Verschachteln von
@cindex Stimmen, temporär
@cindex Stimmen, Verschachteln von
@cindex Verschachteln von Stimmen
@cindex temporäre Stimmen

Tiefer verschachtelte polyphone Konstrukte sind möglich, und
wenn eine Stimme nur kurz auftaucht, kann das der bessere Weg
sein, Noten zu setzen:

@lilypond[quote,ragged-right,verbatim]
\new Staff \relative {
  c'16^( d e f
  <<
    { g4 f e | d2 e) | }
    \new Voice {
      \voiceTwo
      r8 e4 d c8~ |
      <<
        { c8 b16 a b8 g~ 2 | }
        \new Voice {
          \voiceThree
          s4 b c2 |
        }
      >>
    }
  >>
}
@end lilypond

@cindex Platzhalternoten
@cindex unsichtbare Noten
@cindex Noten verstecken

Diese Methode, neue Stimmen kurzzeitig zu verschachteln, bietet sich
an, wenn nur sehr kleine Abschnitte polyphonisch gesetzt sind.  Wenn
aber die ganze Partitur polyphon ist, ist es meistens klarer, direkt
unterschiedliche Stimmen über die gesamte Partitur hinweg einzusetzen.
Hierbei kann man mit unsichtbaren Noten dann die Stellen überspringen,
an denen die Stimme nicht auftaucht, wie etwa hier:

@lilypond[quote,ragged-right,verbatim]
\new Staff \relative <<
  % Initiate first voice
  \new Voice {
    \voiceOne
    c'16^( d e f g4 f e | d2 e) |
  }
  % Initiate second voice
  \new Voice {
    % Set stems, etc, down
    \voiceTwo
    s4 r8 e4 d c8~ | 8 b16 a b8 g~ 2 |
  }
  % Initiate third voice
  \new Voice {
    % Set stems, etc, up
    \voiceThree
    s1 | s4 b c2 |
  }
>>
@end lilypond

@subsubheading Notenkolumnen

@cindex Notenkolumne
@cindex Notenkollision
@cindex Zusammenstöße von Noten
@cindex Kollisionen von Noten
@cindex Vertikale Position
@cindex shift-Befehle
@cindex Verschieben von Noten
@funindex \shiftOff
@funindex \shiftOn
@funindex \shiftOnn
@funindex \shiftOnnn
@funindex shiftOff
@funindex shiftOn
@funindex shiftOnn
@funindex shiftOnnn

Dicht notierte Noten in einem Akkord, oder Noten auf der gleichen
Taktzeit aber in unterschiedlichen Stimmen, werden in zwei, manchmal
auch mehreren Kolumnen gesetzt, um die Noten am Überschneiden zu
hindern.  Wir bezeichnen sie als Notenkolumnen.  Jede Stimme hat
eine eigene Kolumne, und ein stimmenabhängiger Verschiebunsbefehl (engl.
shift) wird eingesetzt, wenn eine Kollision auftreten könnte.
Das zeigt das Beispiel oben.  Im zweiten Takt wird das C der zweiten
Stimme nach rechts verschoben, relativ gesehen zum D der ersten Stimme,
und im letzten Akkord wird das C der dritten Stimme auch nach
rechts verschoben im Verhältnis zu den anderen Stimmen.

Die Befehle @code{\shiftOn}, @code{\shiftOnn}, @code{\shiftOnnn} und
@code{\shiftOff} bestimmen den Grad, zu dem Noten und Akkorde
verschoben werden sollen, wenn sich sonst eine Kollision nicht
vermeiden ließe.  Die Standardeinstellung ist, dass die äußeren
Stimmen (also normalerweise Stimme 1 und 2) @code{\shiftOff}
eingestellt haben, während für die inneren Stimmen (3 und 4)
@code{\shiftOn} eingeschaltet ist.  Wenn eine Verschiebung
auftritt, werden Stimmen 1 und 3 nach rechts und Stimmen 2 und 4
nach links verschoben.

@code{\shiftOnn} und @code{\shiftOnnn} definieren weitere
Verschiebungsebenen, die man kurzzeitig anwählen kann, um
Zusammenstöße in komplexen Situationen aufzulösen, siehe auch
@ref{Beispiel aus dem Leben}.

Eine Notenkolumne kann nur eine Note (oder einen Akkord) von
einer Stimme mit Hälsen nach oben und eine Note (oder einen
Akkord) von einer Stimme mit Hälsen nach unten tragen.  Wenn
Noten von zwei Stimmen mit den Hälsen in die gleiche Richtung
an der selben Stelle auftreten und in beiden Stimmen ist
keine Verschiebung oder die gleiche Verschiebungsebene
definiert, wird die Fehlermeldung
@qq{diese Stimme benötigt einen @code{@bs{}voiceXx} oder
@code{@bs{}shiftXx} Befehl}
ausgegeben.


@seealso
Handbuch zum Lernen:
@ref{Verschieben von Objekten}.

Notationsreferenz:
@ruser{Mehrere Stimmen}.


@node Stimmen und Text
@subsection Stimmen und Text
@translationof Voices and vocals

Die Notation von Vokalmusik ihre eigene Schwierigkeit, nämlich
die Kombination von zwei Ausdrücken: den Noten und dem Text.
Achtung: Der Gesangstext wird auf Englisch @qq{lyrics} genannt.


@funindex \new Lyrics
@funindex \lyricsto
@funindex Lyrics
@cindex Lyrics context, erstellen
@cindex Gesangstext, Verbindung mit Noten

Wir haben schon den @code{\addlyrics@{@}}-Befehl betrachtet,
mit dem einfache Partituren gut erstellt werden können.
Diese Methode ist jedoch recht eingeschränkt.  Wenn der Notensatz
komplexer wird, muss der Gesangstext mit einem neuen
@code{Lyrics}-Kontext begonnen werden (mit dem Befehl
@code{\new Lyrics}) und durch den Befehl @code{\lyricsto@{@}}
mit einer bestimmten Stimme verknüpft werden, indem die
Bezeichnung der Stimme benutzt wird.

@lilypond[quote,verbatim]
<<
  \new Voice = "one" {
    \relative {
      \autoBeamOff
      \time 2/4
      c''4 b8. a16 | g4. f8 | e4 d | c2 |
    }
  }
  \new Lyrics \lyricsto "one" {
    No more let | sins and | sor -- rows | grow. |
  }
>>
@end lilypond

Beachten Sie, dass der Notentext nur mit einem @code{Voice}-Kontext
verknüpft werden kann, nicht mit einem @code{Staff}-Kontext.
In diesem Fall also müssen Sie ein System (@code{Staff}) und
eine Stimme (@code{Voice}) explizit erstellen, damit alles
funktioniert.

@cindex Gesangstext und Balken
@cindex Text und Balken
@cindex Balken und Text
@funindex \autoBeamOff

Die automatischen Balken, die LilyPond in der Standardeinstellung
setzt, eignen sich sehr gut für instrumentale Musik, aber nicht
so gut für Musik mit Text, wo man entweder gar keine Balken
benutzt oder sie einsetzt, um Melismen zu verdeutlichen.
Im Beispiel oben wird deshalb der Befehl @code{\autoBeamOff}
eingesetzt um die automatischen Balken (engl. beam) auszuschalten.

@funindex \new ChoirStaff
@funindex \lyricmode
@funindex ChoirStaff
@funindex lyricmode
@cindex Vokalpartitur, Aufbau
@cindex Chorpartitur, Aufbau

Wir wollen das frühere Beispiel von @notation{Judas Maccabæus}
benutzen, um diese flexiblere Technik für Gesangstexte
zu illustrieren.  Das Beispiel wurde so umgeformt, dass jetzt
Variablen eingesetzt werden, um den Text und die Noten
von der Partiturstruktur zu trennen.  Es wurde zusätzlich
eine Chorpartiturklammer hinzugefügt.  Der Gesangstext muss mit
@code{\lyricmode} eingegeben werden, damit er als Text und
nicht als Noten interpretiert werden kann.

@lilypond[quote,verbatim]
global = { \key f \major \time 6/8 \partial 8 }

SopOneMusic = \relative {
  c''8 | c8([ bes)] a a([ g)] f | f'4. b, | c4.~ 4
}
SopOneLyrics = \lyricmode {
  Let | flee -- cy flocks the | hills a -- dorn, __
}
SopTwoMusic = \relative {
  r8 | r4. r4 c'8 | a'8([ g)] f f([ e)] d | e8([ d)] c bes'
}
SopTwoLyrics = \lyricmode {
  Let | flee -- cy flocks the | hills a -- dorn,
}

\score {
  \new ChoirStaff <<
    \new Staff <<
      \new Voice = "SopOne" {
        \global
        \SopOneMusic
      }
      \new Lyrics \lyricsto "SopOne" {
        \SopOneLyrics
      }
    >>
    \new Staff <<
      \new Voice = "SopTwo" {
        \global
        \SopTwoMusic
      }
      \new Lyrics \lyricsto "SopTwo" {
        \SopTwoLyrics
      }
    >>
  >>
}
@end lilypond

Dies ist die Grundstruktur für alle Chorpartituren.  Mehr
Systeme können hinzugefügt werden, wenn sie gebraucht werden, mehr
Stimmen können zu jedem System hinzugefügt werden, mehr
Strophen können zum Text hinzugefügt werden, und schließlich
können die Variablen schnell in eine eigene Datei verschoben
werden, wenn sie zu lang werden sollten.

@cindex Choralnotation
@cindex Hymnus-Notation
@cindex SATB-Partitur
@cindex mehrere Strophen
@cindex Strophen, mehrere
@cindex Choral mit mehreren Strophen

Hier ein Beispiel der ersten Zeile eines Chorals mit vier
Strophen für gemischten Chor.  In diesem Fall ist der Text
für alle vier Stimmen identisch.  Beachten Sie, wie die
Variablen eingesetzt werden, um Inhalt (Noten und Text) und Form
(die Partitur) voneinander zu trennen.  Eine Variable wurde
eingesetzt, um die Elemente, die auf beiden Systemen auftauchen,
aufzunehmen, nämlich Taktart und Tonart.  Solch eine
Variable wird oft auch mit @qq{global} bezeichnet.

@lilypond[quote,verbatim]
keyTime = { \key c \major \time 4/4 \partial 4 }

SopMusic   = \relative { c'4 | e4. e8 g4  g    | a4   a   g  }
AltoMusic  = \relative { c'4 | c4. c8 e4  e    | f4   f   e  }
TenorMusic = \relative {  e4 | g4. g8 c4.   b8 | a8 b c d e4 }
BassMusic  = \relative {  c4 | c4. c8 c4  c    | f8 g a b c4 }

VerseOne =
  \lyricmode { E -- | ter -- nal fa -- ther, | strong to save, }
VerseTwo   =
  \lyricmode { O | Christ, whose voice the | wa -- ters heard, }
VerseThree =
  \lyricmode { O | Ho -- ly Spi -- rit, | who didst brood }
VerseFour  =
  \lyricmode { O | Tri -- ni -- ty of | love and pow'r }

\score {
  \new ChoirStaff <<
    \new Staff <<
      \clef "treble"
      \new Voice = "Sop"  { \voiceOne \keyTime \SopMusic }
      \new Voice = "Alto" { \voiceTwo \AltoMusic }
      \new Lyrics \lyricsto "Sop" { \VerseOne   }
      \new Lyrics \lyricsto "Sop" { \VerseTwo   }
      \new Lyrics \lyricsto "Sop" { \VerseThree }
      \new Lyrics \lyricsto "Sop" { \VerseFour  }
    >>
    \new Staff <<
      \clef "bass"
      \new Voice = "Tenor" { \voiceOne \keyTime \TenorMusic }
      \new Voice = "Bass"  { \voiceTwo \BassMusic }
    >>
  >>
}
@end lilypond


@seealso
Notationsreferenz: @ruser{Notation von Gesang}.


@node Kontexte und Engraver
@section Kontexte und Engraver
@translationof Contexts and engravers

Kontexte und Engraver (@qq{Stempel}) sind in den vorherigen
Abschnitten schon aufgetaucht; hier wollen wir uns ihnen
nun etwas ausführlicher widmen, denn sie sind sehr
wichtig, um Feineinstellungen in der LilyPond-Notenausgabe
vornehmen zu können.

@menu
* Was sind Kontexte?::
* Kontexte erstellen::
* Was sind Engraver?::
* Kontexteigenschaften verändern::
* Engraver hinzufügen und entfernen::
@end menu

@node Was sind Kontexte?
@subsection Was sind Kontexte?
@translationof Contexts explained

@cindex Kontexte erklärt

Wenn Noten gesetzt werden, müssen viele Elemente zu der Notenausgabe
hinzugefügt werden,
die im Quellcode gar nicht explizit vorkommen.  Vergleichen Sie
etwa den Quellcode und die Notenausgabe des folgenden Beispiels:

@lilypond[quote,verbatim]
\relative { cis''4 cis2. | a4 a2. | }
@end lilypond

Der Quellcode ist sehr kurz und knapp, während in der
Notenausgabe Taktstriche, Vorzeichen, ein Schlüssel und
eine Taktart hinzugefügt wurden.  Während LilyPond
den Eingabetext @emph{interpretiert}, wird die
musikalische Information von rechts nach links gelesen,
in etwa, wie man eine Partitur von links nach
rechts liest.  Während das Programm den Code liest,
merkt es sich, wo sich Taktgrenzen befinden und
für welche Tonhöhen Versetzungszeichen gesetzt werden
müssen.  Diese Information muss auf mehreren Ebenen
gehandhabt werden, denn Versetzungszeichen etwa
beziehen sich nur auf ein System, Taktstriche dagegen
üblicherweise auf die gesamte Partitur.

Innerhalb von LilyPond sind diese Regeln und
Informationshappen in @emph{Kontexten} (engl.
contexts) gruppiert.  Der @code{Voice} (Stimmen)-Kontext
wurde schon vorgestellt.  Daneben
gibt es noch die @code{Staff} (Notensystem-) und
@code{Score} (Partitur)-Kontexte.  Kontexte sind
hierarchisch geschichtet um die hierarchische
Struktur einer Partitur zu spiegeln.  Ein @code{Staff}-Kontext
kann zum Beispiel viele @code{Voice}-Kontexte beinhalten,
und ein @code{Score}-Kontext kann viele
@code{Staff}-Kontexte beinhalten.

@quotation
@sourceimage{context-example,5cm,,}
@end quotation

Jeder Kontext hat die Aufgabe, bestimmte Notationsregeln
zu erzwingen, bestimmte Notationsobjekte zu erstellen und
verbundene Elemente zu ordnen.  Der @code{Voice}-Kontext
zum Beispiel kann eine Vorzeichenregel einführen und der
@code{Staff}-Kontext hält diese Regel dann aufrecht, um
einzuordnen, ob ein Versetzungszeichen gesetzt werden
muss oder nicht.

Ein anderes Beispiel: die Synchronisation der Taktstriche ist
standardmäßig im @code{Score}-Kontext verankert.  Manchmal sollen
die Systeme einer Partitur aber unterschiedliche Taktarten
enthalten, etwa in einer polymetrischen Partitur mit
4/4- und 3/4-Takt.  In diesem Fall müssen also die Standardeinstellungen
der @code{Score}- und @code{Staff}-Kontexte verändert werden.

In einfachen Partituren werden die Kontexte implizit erstellt,
und es kann sein, dass Sie sich dessen gar nicht bewusst sind.
Für etwas größere Projekte, etwa mit vielen Systemen, müssen
die Kontexte aber explizit erstellt werden, um sicher zu gehen,
dass man auch wirklich die erwünschte Zahl an Systemen in der
richtigen Reihenfolge erhält.  Wenn Stücke mit spezialisierter
Notation gesetzt werden sollen, ist es üblich, die existierenden
Kontexte zu verändern oder gar gänzlich neue zu definieren.

Zusätzlich zu den @code{Score,} @code{Staff} und
@code{Voice}-Kontexten gibt es noch Kontexte, die zwischen
der Partitur- und Systemebene liegen und Gruppen von Systemen
kontrollieren.  Das sind beispielsweise der
@code{PianoStaff} und @code{ChoirStaff}-Kontext.  Es gibt zusätzlich
alternative Kontexte für Systeme und Stimmen sowie eigene Kontexte
für Gesangstexte, Perkussion, Griffsymbole, Generalbass usw.

Die Bezeichnungen all dieser Kontexte werden von einem oder mehreren
englischen
Wörtern gebildet, dabei wird jedes Wort mit einem Großbuchstaben
begonnen und direkt an das folgende ohne Bindestrich oder Unterstrich
angeschlossen, etwa
@code{GregorianTranscriptionStaff}.


@seealso
Notationsreferenz: @ruser{Was sind Kontexte?}.


@node Kontexte erstellen
@subsection Kontexte erstellen
@translationof Creating contexts

@funindex \new
@cindex Neue Kontexte
@cindex Erstellen von Kontexten
@cindex Kontexte, Erstellen

In einer Eingabedatei enthält eine @code{Score}-Umgebung (einen
Kontext), die mit
dem Befehl @code{\score} eingeleitet wird, nur einen einzigen
musikalischen Ausdruck und mit ihm verknüpft eine Ausgabedefinition
(entweder eine @code{\layout}- oder eine @code{\midi}-Umgebung).
Üblicherweise wird der @code{Score}-Kontext automatisch von
LilyPond erstellt, wenn der musikalische Ausdruck interpretiert
wird.

Wenn nur ein System vorhanden ist, kann man es ruhig
LilyPond überlassen, auch die @code{Voice}- und @code{Staff}-Kontexte
zu erstellen, aber für komplexere Partituren ist es notwendig,
sie mit einem Befehl zu erstellen.  Der einfachste Befehl
hierzu ist @code{\new}.  Er wird dem musikalischen Ausdruck
vorangestellt, etwa so:

@example
\new @var{Typ} @var{musikalischer Ausdruck}
@end example

@noindent
wobei @var{Typ} eine Kontextbezeichnung (wie etwa @code{Staff} oder
@code{Voice}) ist.  Dieser Befehl erstellt einen neuen Kontext und
beginnt, den @var{muskalischen Ausdruck} innerhalb dieses
Kontexts auszuwerten.

@warning{Der @bs{}@code{new Score}-Befehl sollte nicht benutzt werden,
weil der Partitur-(Score)-Kontext der obersten Ebene
normalerweise automatisch erstellt wird, wenn der musikalische Ausdruck
innerhalb der @code{\score}-Umgebung interpretiert wird.  Standard-Werte
von Kontexteigenschaften, die für einen bestimmten @code{Score} gelten
sollen, können innerhalb der @bs{}@code{layout}-Umgebung definiert werden.
Siehe @ref{Kontexteigenschaften verändern}.}

Wir haben schon viele explizite Beispiel gesehen, in denen
neue @code{Staff}- und @code{Voice}-Kontexte erstellt wurden, aber
um noch einmal ins Gedächtnis zu rufen, wie diese Befehle benutzt
werden, hier ein kommentiertes Beispiel aus dem richtigen Leben:

@lilypond[quote,verbatim,ragged-right]
\score {  % start of single compound music expression
  <<  % start of simultaneous staves section
    \time 2/4
    \new Staff {  % create RH staff
      \clef "treble"
      \key g \minor
      \new Voice {  % create voice for RH notes
        \relative {  % start of RH notes
          d''4 ees16 c8. |
          d4 ees16 c8. |
        }  % end of RH notes
      }  % end of RH voice
    }  % end of RH staff
    \new Staff <<  % create LH staff; needs two simultaneous voices
      \clef "bass"
      \key g \minor
      \new Voice {  % create LH voice one
        \voiceOne
        \relative {  % start of LH voice one notes
          g8 <bes d> ees, <g c> |
          g8 <bes d> ees, <g c> |
        }  % end of LH voice one notes
      }  % end of LH voice one
      \new Voice {  % create LH voice two
        \voiceTwo
        \relative {  % start of LH voice two notes
          g4 ees |
          g4 ees |
        }  % end of LH voice two notes
      }  % end of LH voice two
    >>  % end of LH staff
  >>  % end of simultaneous staves section
}  % end of single compound music expression
@end lilypond

(Beachten Sie, dass wir hier alle Zeilen, die eine neue
Umgebung entweder mit einer geschweiften Klammer (@code{@{})
oder doppelten spitzen Klammern (@code{<<}) öffnen, mit
jeweils zwei Leerzeichen, und die entsprechenden
schließenden Klammern mit der gleichen Anzahl Leerzeichen
eingerückt werden.  Dies ist nicht erforderlich, es wird aber
zu einem großen Teil die nicht passenden Klammerpaar-Fehler
eliminieren und ist darum sehr empfohlen.  Es macht es
möglich, die Struktur einer Partitur auf einen Blick zu
verstehen, und alle nicht passenden Klammern
erschließen sich schnell.  Beachten Sie auch, dass das
untere Notensystem mit eckigen Klammern erstellt wird,
denn innerhalb dieses Systems brauchen wir zwei Stimmen,
um die Noten darzustellen.  Das obere System braucht
nur einen einzigen musikalischen Ausdruck und ist deshalb
von geschweiften Klammern umschlossen.)

@cindex Kontexte, Benennung
@cindex Benennung von Kontexten

Der @code{\new}-Befehl kann einem Kontext auch einen
Namen zur Identifikation geben, um ihn von anderen Kontexten des
selben Typs zu unterscheiden:

@example
\new @var{Typ} = @var{Name} @var{musikalischer Ausdruck}
@end example

Beachten Sie den Unterschied zwischen der Bezeichnung des
Kontexttyps (@code{Staff}, @code{Voice}, usw.) und dem
Namen, der aus beliebigen Buchstaben bestehen kann
und vom Benutzer frei erfunden werden kann.  Zahlen und
Leerzeichen können auch benutzt werden, in dem Fall
muss der Name aber von doppelten Anführungszeichen
umgeben werden, also etwa
@code{\new Staff = "Mein System 1" @var{musikalischer Ausdruck}}.
Der Name wird
benutzt, um später auf genau diesen spezifischen Kontext
zu verweisen.  Dieses Vorgehen wurde schon in dem Abschnitt
zu Gesangstexten angewandt, siehe @ref{Stimmen und Text}.


@seealso
Notationsreferenz: @ruser{Kontexte erstellen und referenzieren}.


@node Was sind Engraver?
@subsection Was sind Engraver?
@translationof Engravers explained

@cindex Engraver
@cindex Stempel (Engraver)

Jedes Zeichen des fertigen Notensatzes von LilyPond wird
von einem @code{Engraver} (Stempel) produziert.  Es gibt
also einen Engraver, der die Systeme erstellt, einen, der die
Notenköpfe ausgibt, einen für die Hälse, einen für die
Balken usw. Insgesamt gibt es über 120 Engraver! Zum
Glück braucht man für die meisten Partituren nur ein
paar Engraver, und für einfache Partituren muss man eigentlich
überhaupt nichts über sie wissen.

Engraver leben und wirken aus den Kontexten heraus.  Engraver
wie der @code{Metronome_mark_engraver}, dessen Aktion
und Ausgabe sich auf die gesamte Partitur bezieht, wirken
in der obersten Kontextebene -- dem @code{Score}-Kontext.

Der @code{Clef_engraver} (Schlüssel-Stempel) und der
@code{Key_engraver} (Vorzeichen-Stempel)  finden sich in
jedem @code{Staff}-Kontext, denn unterschiedliche Systeme
könnten unterschiedliche Tonarten und Notenschlüssel
brauchen.

Der @code{Note_heads_engraver} (Notenkopf-Stempel) und der
@code{Stem_engraver} (Hals-Stempel) befinden sich in jedem
@code{Voice}-Kontext, der untersten Kontextebene.

Jeder Engraver bearbeitet die bestimmten Objekte, die mit
seiner Funktion assoziiert sind, und verwaltet die Eigenschaften
dieser Funktion.  Diese Eigenschaften, wie etwa die Eigenschaften,
die mit Kontexten assoziiert sind, können verändert werden,
um die Wirkungsweise des Engravers oder das Erscheinungsbild
der von ihm produzierten Elemente in der Partitur zu ändern.

Alle Engraver haben zusammengesetzte Bezeichnung, die aus
den (englischen) Wörtern ihrer Funktionsweise bestehen.  Nur
das erste Wort hat einen Großbuchstaben, und die restlichen
Wörter werden mit einem Unterstrich angefügt.  Ein
@code{Staff_symbol_engraver} verantwortet also die Erstellung
der Notenlinien, ein @code{Clef_engraver} entscheidet über die
Art der Notenschlüssel und setzt die entsprechenden Symbole; damit
wird gleichzeitig die Referenztonhöhe auf dem Notensystem festgelegt.

Hier die meistgebräuchlichen Engraver mit ihrer Funktion.
Sie werden sehen, dass es mit etwas Englischkenntnissen
einfach ist, die Funktion eines Engravers von seiner Bezeichnung
abzuleiten.

@multitable @columnfractions .3 .7
@headitem Engraver
  @tab Funktion
@item Accidental_engraver
  @tab Erstellt Versetzungszeichen, vorgeschlagene und Warnversetzungszeichen.
@item Beam_engraver
  @tab Erstellt Balken.
@item Clef_engraver
  @tab Erstellt Notenschlüssel.
@item Completion_heads_engraver
  @tab Teilt Noten in kleiner Werte, wenn sie über den Taktstrich reichen.
@item Dynamic_engraver
  @tab Erstellt Dynamik-Klammern und Dynamik-Texte.
@item Forbid_line_break_engraver
  @tab Verbietet Zeilenumbrüche, solange ein musikalisches Element aktiv ist.
@item Key_engraver
  @tab Erstellt die Vorzeichen.
@item Metronome_mark_engraver
  @tab Erstellt Metronom-Bezeichnungen.
@item Note_heads_engraver
  @tab Erstellt Notenköpfe.
@item Rest_engraver
  @tab Erstellt Pausen.
@item Staff_symbol_engraver
  @tab Erstellt die (standardmäßig) fünf Notenlinien des Systems.
@item Stem_engraver
  @tab Erstellt die Notenhälse und Tremolos mit einem Hals.
@item Time_signature_engraver
  @tab Erstellt die Taktartbezeichnung.
@end multitable

@smallspace

Es soll später gezeigt werden, wie die LilyPond-Ausgabe
verändert werden kann, indem die Wirkungsweise der
Engraver beeinflusst wird.


@seealso
Referenz der Interna: @rinternals{Engravers and Performers}.


@node Kontexteigenschaften verändern
@subsection Kontexteigenschaften verändern
@translationof Modifying context properties

@cindex Kontext-Eigenschaften, Verändern
@cindex Eigenschaften von Kontexten
@cindex Verändern von Kontext-Eigenschaften
@funindex \set
@funindex \unset
@funindex set
@funindex unset

Kontexte sind dafür verantwortlich, die Werte bestimmter
Kontext-@emph{Eigenschaften} zu speichern.  Viele davon
können verändert werden, um die Interpretation der
Eingabe zu beeinflussen und die Ausgabe zu verändern.
Kontexte werden mit dem @code{\set}-Befehl geändert.
Er wird in Form

@example
\set @emph{KontextBezeichnung}.@emph{EigenschaftsBezeichnung} = #@emph{Wert}
@end example

@noindent
verwendet, wobei @emph{KontextBezeichnung} üblicherweise
@code{Score},
@code{Staff} oder @code{Voice} ist.  Der erste Teil kann auch
ausgelassen werden; in diesem Fall wird der aktuelle
Kontext (üblicherweise @code{Voice}) angenommen.

Die Bezeichnung von Kontexten-Eigenschaften besteht
aus zwei Wörtern, die ohne Unterstrich oder Bindestrich
verbunden sind.  Alle außer dem ersten werden am Anfang
groß geschrieben.  Hier einige Beispiele der gebräuchlichsten
Kontext-Eigenschaften.  Es gibt sehr viel mehr.

@c attempt to force this onto a new page
@need 50
@multitable @columnfractions .25 .15 .45 .15
@headitem Eigenschaftsbezeichnung
  @tab Typ
  @tab Funktion
  @tab Beispiel-Wert
@item extraNatural
  @tab boolescher Wert
  @tab Wenn wahr, werden zusätzliche Auflösungszeichen vor Versetzungszeichen gesetzt.
  @tab @code{#t}, @code{#f}
@item currentBarNumber
  @tab Integer
  @tab Setzt die aktuelle Taktnummer.
  @tab @code{50}
@item doubleSlurs
  @tab boolescher Wert
  @tab Wenn wahr, werden Legatobögen über und unter die Noten gesetzt.
  @tab @code{#t}, @code{#f}
@item instrumentName
  @tab Text
  @tab Setzt die Instrumentenbezeichnung am Anfang eines Systems.
  @tab @code{"Cello I"}
@item fontSize
  @tab reale Zahl
  @tab Vergrößert oder verkleinert die Schriftgröße.
  @tab @code{2.4}
@item stanza
  @tab Text
  @tab Setzt den Text zu Beginn einer Strophe.
  @tab @code{"2"}
@end multitable

@noindent
Ein boolescher Wert ist entweder wahr  (@code{#t})
oder falsch (@code{#f}),
ein Integer eine positive ganze Zahl, ein Real (reelle Zahl) eine positive
oder negative Dezimalzahl, und Text wird in doppelte
Anführungszeichen (Shift+2) eingeschlossen.  Beachten Sie
das Vorkommen des Rautenzeichens
(@code{#}) an unterschiedlichen Stellen: als Teil eines
booleschen Wertes vor dem @code{t} oder @code{f}, aber
auch vor einem @emph{Wert} in der
@code{\set}-Befehlskette.  Wenn ein boolescher Wert
eingegeben werden soll, braucht man also zwei
Rautenzeichen, z. B. @code{##t}.

@cindex Eigenschaften in Kontexten
@cindex Veränderung von Eigenschaften in Kontexten

Bevor eine Eigenschaft geändert werden kann, muss man wissen,
in welchem Kontext sie sich befindet.  Manchmal versteht das
sich von selbst, aber in einigen Fällen kann es zunächst
unverständlich erscheinen.  Wenn der falsche Kontext angegeben
wird, wird keine Fehlermeldung produziert, aber die
Veränderung wird einfach nicht ausgeführt.
@code{instrumentName} befindet sich offensichtlich innerhalb
von einem @code{Staff}-Kontext, denn das Notensystem soll
benannt werden.  In dem folgenden Beispiel erhält das erste
System korrekt die Instrumentenbezeichnung, das zweite aber
nicht, weil der Kontext ausgelassen wurde.

@lilypond[quote,verbatim,ragged-right]
<<
  \new Staff \relative {
    \set Staff.instrumentName = "Soprano"
    c''2 c
  }
  \new Staff \relative {
    \set instrumentName = "Alto"  % Wrong!
    d'2 d
  }
>>
@end lilypond

Denken Sie daran, dass der Standardkontext @code{Voice} ist; in dem
zweiten @code{\set}-Befehl wird also die Eigenschaft @code{instrumentName}
im @code{Voice}-Kontext auf @qq{Alto}, gesetzt, aber weil LilyPond diese
Eigenschaft nicht im @code{Voice}-Kontext vermutet, passiert einfach
gar nichts.  Das ist kein Fehler, und darum wird auch keine Fehlermeldung
produziert.

Ebenso gibt es keine Fehlermeldung, wenn die Kontext-Bezeichnung
falsch geschrieben wird und die Änderung also nicht ausgeführt werden
kann.  Tatsächlich kann eine beliebige (ausgedachte) Kontextbezeichnung
mit dem @code{\set}-Befehl eingesetzt werden, genauso wie die, die
wirklich existieren.  Aber wenn LilyPond diese Bezeichnung nicht
zuordnen kann, bewirkt der Befehl einfach gar nichts.  Manche Editoren,
die Unterstützung für LilyPond-Befehle mitbringen, markieren existierende
Kontextbezeichnungen mit einem Punkt, wenn man mit der Maus darüber
fährt (wie etwa JEdit mit dem LilyPondTool), oder markieren
unbekannte Bezeichnungen anders (wie ConTEXT).  Wenn Sie keinen
Editor mit LilyPond-Unterstützung einsetzen, wird empfohlen, die
Bezeichnungen in der Interna-Referenz zu überprüfen: siehe
@rinternals{Tunable context properties}, oder
@rinternals{Contexts}.

Die Eigenschaft @code{instrumentName} wird erst aktiv, wenn sie
in einem @code{Staff}-Kontext gesetzt wird, aber manche Eigenschaften
können in mehr als einem Kontext benutzt werden.  Als Beispiel mag die
@code{extraNatural}-Eigenschaft dienen, die zusätzliche Auflösungszeichen
setzt.  Die Standardeinstellung ist ##t (wahr) in allen Systemen.
Wenn sie nur in einem @code{Staff} (Notensystem) auf ##f (falsch)
gesetzt wird, wirkt sie sich auf alle Noten in diesem System aus.  Wird
sie dagegen in der @code{Score}-Umgebung gesetzt, wirkt sich das
auf alle darin enthaltenen Systeme aus.

Das also bewirkt, dass die zusätzlichen Auflösungszeichen in einem System
ausgeschaltet sind:

@lilypond[quote,verbatim,ragged-right]
<<
  \new Staff \relative {
    aeses'2 aes
  }
  \new Staff \relative {
    \set Staff.extraNatural = ##f
    aeses'2 aes
  }
>>
@end lilypond

@noindent
während dies dazu dient, sie in allen Systemen auszuschalten:

@lilypond[quote,verbatim,ragged-right]
<<
  \new Staff \relative {
    aeses'2 aes
  }
  \new Staff \relative {
    \set Score.extraNatural = ##f
    aeses'2 aes
  }
>>
@end lilypond

Ein anderes Beispiel ist die Eigenschaft @code{clefTransposition}:
wenn sie im @code{Score}-Kontext gesetzt wird, ändert sich sofort
der Wert der Tranponierung in allen aktuellen Systemen und wird
auf einen neuen Wert gesetzt, der sich auf alle Systeme auswirkt.

Der gegenteilige Befehl, @code{\unset}, entfernt die Eigenschaft
effektiv wieder von dem Kontext: in den meisten Fällen wird der
Kontext auf ihre Standardeinstellungen zurückgesetzt.
Normalerweise wird aber @code{\unset} nicht benötigt,
denn ein neues @code{\set} erledigt alles, was man braucht.

Die @code{\set}- und @code{\unset}-Befehle könne überall im
Eingabequelltext erscheinen und werden aktiv von dem Moment, an
dem sie auftreten bis zum Ende der Partitur oder bis die Eigenschaft
mit @code{\set} oder @code{\unset} neu gesetzt wird.  Versuchen
wir als Beispiel, die Schriftgröße mehrmals zu ändern, was sich unter anderem
auf die Notenköpfe auswirkt.  Die Änderung bezieht sich immer auf den Standard,
nicht vom letzten gesetzten Wert.

@lilypond[quote,verbatim,ragged-right]
\relative {
  c'4 d
  % make note heads smaller
  \set fontSize = #-4
  e4 f |
  % make note heads larger
  \set fontSize = #2.5
  g4 a
  % return to default size
  \unset fontSize
  b4 c |
}
@end lilypond

Wir haben jetzt gesehen, wie sich die Werte von unterschiedlichen
Eigenschaften ändern lassen.  Beachten Sie, dass Integer und
Zahlen immer mit einem Rautenzeichen beginnen, während
die Werte wahr und falsch (mit @code{##t} und @code{##f}
notiert) immer mit zwei Rauten beginnen.  Eine Eigenschaft, die
aus Text besteht, muss in doppelte Anführungsstriche gesetzt werden,
auch wenn wir später sehen werden, dass Text auf eine sehr viel
allgemeinere und mächtigere Art mit dem @code{\markup}-Befehl
eingegeben werden kann.

@subsubheading Kontexteigenschaften mit @code{\with} setzen

@funindex \with
@cindex Kontexteigenschaft, setzen mit \with

Die Standardwerte von Kontexteigenschaften können zu dem Zeitpunkt
definiert werden, an welchem der Kontext erstellt wird.  Manchmal
ist das eine saubere Weise, eine Eigenschaft zu bestimmen, die für
die gesamte Partitur erhalten bleiben soll.  Wenn ein Kontext mit
einem @code{\new}-Befehl erstellt wird, können in einer
direkt folgenden @code{\with @{ @dots{} @}}-Umgebung die Eigenschaften
bestimmt werden.  Wenn also die zusätzlichen
Auflösungszeichen für eine ganze Partitur gelten sollen, könnte
man schreiben:

@example
\new Staff \with @{ extraNatural = ##f @}
@end example

@noindent
etwa so:

@lilypond[quote,verbatim,ragged-right]
<<
  \new Staff {
    \relative {
      gisis'4 gis aeses aes
    }
  }
  \new Staff \with { extraNatural = ##f } {
    \relative {
      gisis'4 gis aeses aes
    }
  }
>>
@end lilypond

Eigenschaften, die auf diese Arte gesetzt werden, können immer noch
dynamisch mit dem @code{\set}-Befehl geändert werden und mit
@code{\unset} auf ihre Standardeinstellungen zurückgesetzt werden,
wie sie vorher in der @code{\with}-Umgebung definiert wurden.

@cindex Schriftgröße, Standardeinstellung
@cindex fontSize (Schriftgröße), Standardeinstellung

Wenn also die @code{fontSize}-Eigenschaft in einer @code{\with}-Umgebung
definiert wird, wird der Standardwert für die Schriftgröße
festgelegt.  Wenn dieser Wert später mit @code{\set} verändert
wird, kann dieser neue Standardwert mit dem Befehl
@code{\unset fontSize} wieder erreicht werden.

@subsubheading Kontexteigenschaften mit @code{\context} setzen

@cindex Kontexteigenschaften, mit \context setzen
@cindex Eigenschaften von Kontexten, mit \context setzen
@funindex \context

Die Werte von Kontext-Eigenschaften können in @emph{allen} Kontexten
eines bestimmten Typs (etwa alle @code{Staff}-Kontexte)
gleichzeitig mit einem Befehl gesetzt werden.  Der Kontext wird
spezifiziert, indem seine Bezeichnung benutzt wird, also etwa
@code{Staff}, mit einem Backslash davor: @code{\Staff}.  Der Befehl
für die Eigenschaft ist der gleiche, wie er auch in der
@code{\with}-Konstruktion benutzt wird, wie oben gezeigt.  Er wird in
eine @code{\context}-Umgebung eingebettet, welche wiederum innerhalb
von einer @code{\layout}-Umgebung steht.  Jede @code{\context}-Umgebung
wirkt sich auf alle Kontexte dieses Typs aus, welche sich in der
aktuellen Partitur befinden (d. h. innerhalb einer @code{\score}-
oder @code{\book}-Umgebung).  Hier ist ein Beispiel, wie man diese
Funktion anwendet:

@lilypond[verbatim,quote]
\score {
  \new Staff {
    \relative {
      cisis''4 e d cis
    }
  }
  \layout {
    \context {
      \Staff
      extraNatural = ##t
    }
  }
}
@end lilypond

Wenn die Veränderung der Eigenschaft sich auf alle Systeme einer
@code{score}-Umgebung beziehen soll:

@lilypond[quote,verbatim]
\score {
  <<
    \new Staff {
      \relative {
        gisis'4 gis aeses aes
      }
    }
    \new Staff {
      \relative {
        gisis'4 gis aeses aes
      }
    }
  >>
  \layout {
    \context {
      \Score extraNatural = ##f
    }
  }
}
@end lilypond

@noindent
Kontext-Eigenschaften, die auf diese Weise gesetzt werden, können für
bestimmten Kontexte überschrieben werden, indem die
@code{\with}-Konstruktion eingesetzt wird, oder mit @code{\set}-Befehlen
innerhalb der aktuellen Noten.


@seealso
Notationsreferenz:
@ruser{Die Standardeinstellungen von Kontexten ändern},
@ruser{Der set-Befehl}.

Referenz der Interna:
@rinternals{Contexts},
@rinternals{Tunable context properties}.


@node Engraver hinzufügen und entfernen
@subsection Engraver hinzufügen und entfernen
@translationof Adding and removing engravers

@cindex Engraver, Hinzufügen von
@cindex Engraver, Entfernen von
@cindex Hinzufügen von Engravern
@cindex Entfernen von Engravern

@funindex \consists
@funindex \remove
@funindex consists
@funindex remove

Wir haben gesehen, dass jeder Kontext eine Anzahl an Engravern
(Stempeln) beinhaltet, von denen ein jeder einen bestimmten
Teil des fertigen Notensatzes produziert, wie z. B. Taktstriche,
Notenlinien, Notenköpfe, Hälse usw. Wenn ein Engraver aus
einem Kontext entfernt wird, kann er seine Objekte nicht
länger produzieren.  Das ist eine eher grobe Methode, die
Notenausgabe zu beeinflussen, aber es kann von großem
Nutzen sein.

@subsubheading Einen einzelnen Kontext verändern

Um einen Engraver von einem einzelnen Kontext zu entfernen,
wir der @code{\with}-Befehl eingesetzt, direkt hinter
den Befehl zur Kontext-Erstellung geschrieben, wie
in dem vorigen Abschnitt gezeigt.

Als ein Beispiel wollen wir das Beispiel aus dem letzten
Abschnitt produzieren, aber die Notenlinien entfernen.  Erinnern
Sie sich, dass die Notenlinien vom @code{Staff_symbol_engraver}
erstellt werden.

@lilypond[quote,verbatim,ragged-right]
\new Staff \with {
  \remove "Staff_symbol_engraver"
}
\relative {
  c'4 d
  \set fontSize = #-4  % make note heads smaller
  e4 f |
  \set fontSize = #2.5  % make note heads larger
  g4 a
  \unset fontSize  % return to default size
  b4 c |
}
@end lilypond

@cindex Ambitus-Engraver

Engraver können auch zu einem bestimmten
Kontext hinzugefügt werden.  Dies geschieht
mit dem Befehl

@code{\consists @var{Engraver_bezeichnung}}

@noindent
welcher auch wieder innerhalb der @code{\with}-Umgebung
gesetzt wird.  Einige Chorpartituren zeigen einen
Ambitus direkt zu Beginn der ersten Notenzeile, um
den Stimmumfang des Stückes anzuzeigen, siehe auch
@rglos{ambitus}.  Der Ambitus wird vom
@code{Ambitus_engraver} erstellt, der normalerweise
in keinem Kontext enthalten ist.  Wenn wir
ihn zum @code{Voice}-Kontext hinzufügen, errechnet
er automatisch den Stimmumfang für diese einzelne Stimme
und zeigt ihn an:

@lilypond[quote,verbatim,ragged-right]
\new Staff <<
  \new Voice \with {
    \consists "Ambitus_engraver"
  } {
    \relative {
      \voiceOne
      c''4 a b g
    }
  }
  \new Voice {
    \relative {
      \voiceTwo
      c'4 e d f
    }
  }
>>
@end lilypond

@noindent
wenn wir den Ambitus-Engraver allerdings zum
@code{Staff}-Kontext hinzufügen, wird der Stimmumfang aller
Stimmen in diesem Notensystem errechnet:

@lilypond[quote,verbatim,ragged-right]
\new Staff \with {
  \consists "Ambitus_engraver"
}
<<
  \new Voice {
    \relative {
      \voiceOne
      c''4 a b g
    }
  }
  \new Voice {
    \relative {
      \voiceTwo
      c'4 e d f
    }
  }
>>
@end lilypond

@subsubheading Alle Kontexte des gleichen Typs verändern

@funindex \layout

Die vorigen Beispiele zeigen, wie man Engraver in einem
bestimmten Kontext hinzufügen oder entfernen kann.  Es ist
auch möglich, Engraver in jedem Kontext eines bestimmten
Typs hinzuzufügen oder zu entfernen.  Dazu werden die
Befehle in dem entsprechenden Kontext in einer
@code{\layout}-Umgebung gesetzt.  Wenn wir also z. B.
den Ambitus für jedes Notensystem in einer Partitur
mit vier Systemen anzeigen wollen, könnte das so aussehen:

@lilypond[quote,verbatim,ragged-right]
\score {
  <<
    \new Staff {
      \relative {
        c''4 a b g
      }
    }
    \new Staff {
      \relative {
        c'4 a b g
      }
    }
    \new Staff {
      \clef "G_8"
      \relative {
        c'4 a b g
      }
    }
    \new Staff {
      \clef "bass"
      \relative {
        c4 a b g
      }
    }
  >>
  \layout {
    \context {
      \Staff
      \consists "Ambitus_engraver"
    }
  }
}
@end lilypond

@noindent
Die Werte der Kontext-Eigenschaften können auch für
alle Kontexte eines bestimmten Typs auf die gleiche
Weise geändert werden, indem der @code{\set}-Befehl in
einer @code{\context}-Umgebung angewendet wird.


@seealso
Notationsreferenz: @ruser{Umgebungs-Plugins verändern},
@ruser{Die Standardeinstellungen von Kontexten ändern}.

@knownissues
Die @code{Stem_engraver} und @code{Beam_engraver} fügen ihre
Objekte an Notenköpfe an.  Wenn der @code{Note_heads_engraver}
entfernt wird, werden keine Notenköpfe erstellt und demzufolge auch keine
Hälse oder Bögen dargestellt.


@node Erweiterung der Vorlagen
@section Erweiterung der Vorlagen
@translationof Extending the templates

Sie haben sich durch das Tutorium gearbeitet, Sie
wissen jetzt, wie Sie Notensatz produzieren, und Sie
haben die grundlegenden Konzepte verstanden.  Aber wie
erhalten Sie genau die Systeme, die Sie brauchen? Es
gibt eine ganze Anzahl an fertigen Vorlagen
(siehe @ref{Vorlagen}), mit denen Sie beginnen
können.  Aber was, wenn Sie nicht genau das finden,
was Sie brauchen? Lesen Sie weiter.

@menu
* Sopran und Cello::
* Vierstimmige SATB-Partitur::
* Eine Partitur von Grund auf erstellen::
* Tipparbeit durch Variablen und Funktionen einsparen::
* Partituren und Stimmen::
@end menu


@node Sopran und Cello
@subsection Sopran und Cello
@translationof Soprano and cello

@cindex Template, Verändern von
@cindex Vorlage, Verändern von
@cindex Veränderung von Vorlagen

Beginnen Sie mit der Vorlage, die Ihren Vorstellungen
am nächsten kommt.  Nehmen wir einmal an, Sie wollen
ein Stück für Sopran und Cello schreiben.  In diesem
Fall könnten Sie mit der Vorlage @qq{Noten und Text}
(für die Sopran-Stimme) beginnen.

@example
\version @w{"@version{}"}

melody = \relative @{
  \clef "treble"
  \key c \major
  \time 4/4
  a4 b c d
@}

text = \lyricmode @{
  Aaa Bee Cee Dee
@}

\score @{
  <<
    \new Voice = "one" @{
      \autoBeamOff
      \melody
    @}
    \new Lyrics \lyricsto "one" \text
  >>
  \layout @{ @}
  \midi @{ @}
@}
@end example

Jetzt wollen wir die Cello-Stimme hinzufügen.  Schauen wir uns das
Beispiel @qq{Nur Noten} an:

@example
\version @w{"@version{}"}

melody = \relative @{
  \clef "treble"
  \key c \major
  \time 4/4
  a4 b c d
@}

\score @{
  \new Staff \melody
  \layout @{ @}
  \midi @{ @}
@}
@end example

Wir brauchen den @code{\version}-Befehl nicht zweimal.  Wir
brauchen aber den @code{melody}-Abschnitt.  Wir wollen
keine zwei @code{\score} (Partitur)-Abschnitte -- mit zwei
@code{\score}-Abschnitten würden wir zwei Stimmen
getrennt voneinander erhalten.  In diesem Fall wollen wir
sie aber zusammen, als Duett.  Schließlich brauchen wir
innerhalb des @code{\score}-Abschnittes nur einmal die
Befehle @code{\layout} und @code{\midi}.

Wenn wir jetzt einfach zwei @code{melody}-Abschnitte in
unsere Datei kopieren würden, hätten wir zwei @code{melody}-Variable.
Das würde zu keinem Fehler führen, aber die zweite von ihnen
würde für beide Melodien eingesetzt werden.  Wir müssen
ihnen also andere Bezeichnungen zuweisen, um sie voneinander
zu unterscheiden.  Nennen wir die Abschnitte also @code{SopranNoten}
für den Sopran und @code{CelloNoten} für die Cellostimme.  Wenn
wir schon dabei sind, können wir @code{text}auch nach
@code{SoprText} umbenennen.  Denken Sie daran, beide
Vorkommen der Bezeichnung zu ändern: einmal die Definition
gleich am Anfang (@code{melody = \relative @{ }) und
dann auch noch die Benutzung der Variable innerhalb des
@code{\score}-Abschnittes.

Gleichzeitig können wir auch noch das Notensystem für das
Cello ändern -- das Cello hat normalerweise einen Bassschlüssel.
Wir ändern auch die Noten etwas ab.

@example
\version @w{"@version{}"}

SopranNoten = \relative @{
  \clef "treble"
  \key c \major
  \time 4/4
  a4 b c d
@}

SoprText = \lyricmode @{
  Aaa Bee Cee Dee
@}

CelloNoten = \relative @{
  \clef "bass"
  \key c \major
  \time 4/4
  d4 g fis8 e d4
@}

\score @{
  <<
    \new Voice = "eins" @{
      \autoBeamOff
      \SopranNoten
    @}
    \new Lyrics \lyricsto "eins" \Soprantext
  >>
  \layout @{ @}
  \midi @{ @}
@}
@end example

Das sieht schon vielversprechend aus, aber die Cello-Stimme
erscheint noch nicht im Notensatz -- wir haben vergessen,
sie in den @code{\score}-Abschnitt einzufügen.  Wenn die
Cello-Stimme unterhalb des Soprans erscheinen soll, müssen
wir

@example
\new Staff \CelloNoten
@end example

@noindent
unter dem Befehl für den Sopran hinzufügen.  Wir brauchen auch
die spitzen Klammern (@code{<<} und @code{>>}) um die
Noten, denn damit wird LilyPond mitgeteilt, dass mehr als
ein Ereignis gleichzeitig stattfindet (in diesem Fall sind es
zwei @code{Staff}-Instanzen).  Der @code{\score}-Abschnitt
sieht jetzt so aus:

@c Indentation in this example is deliberately poor
@example
\score @{
  <<
  <<
    \new Voice = "eins" @{
      \autoBeamOff
      \SopranNoten
    @}
    \new Lyrics \lyricsto "eins" \SoprText
  >>
  \new Staff \CelloNoten
  >>
  \layout @{ @}
  \midi @{ @}
@}
@end example

@noindent
Das sieht etwas unschön aus, vor allem die Einrückung stimmt
nicht mehr.  Das können wir aber schnell in Ordnung bringen.
Hier also die gesamte Vorlage für Sopran und Cello:

@lilypond[quote,verbatim,ragged-right,addversion]
sopranoMusic = \relative {
  \clef "treble"
  \key c \major
  \time 4/4
  a4 b c d
}

sopranoLyrics = \lyricmode {
  Aaa Bee Cee Dee
}

celloMusic = \relative {
  \clef "bass"
  \key c \major
  \time 4/4
  d4 g fis8 e d4
}

\score {
  <<
    <<
      \new Voice = "one" {
        \autoBeamOff
        \sopranoMusic
      }
      \new Lyrics \lyricsto "one" \sopranoLyrics
    >>
    \new Staff \celloMusic
  >>
  \layout { }
  \midi { }
}
@end lilypond


@seealso
Die Vorlagen, mit denen wir begonnen haben, können im
Anhang @qq{Vorlagen} gefunden werden, siehe
@ref{Vorlagen für ein einzelnes System}.


@node Vierstimmige SATB-Partitur
@subsection Vierstimmige SATB-Partitur
@translationof Four-part SATB vocal score

@cindex Vorlage, SATB
@cindex Vorlage, Chorpartitur
@cindex SATB-Vorlage
@cindex Chorpartitur, Vorlage

Die meisten Partituren für vierstimmigen gemischten Chor
mit Orchesterbegleitung (wie etwa Mendelssohns @notation{Elias}
oder Händels @notation{Messias})  sind so aufgebaut, dass
für jede der vier Stimmen ein eigenes System besteht und
die Orchesterbegleitung dann als Klavierauszug darunter
notiert wird.  Hier ein Beispiel aus Händels @notation{Messias}:

@c The following should appear as music without code
@lilypond[quote,ragged-right]
global = { \key d \major \time 4/4 }

sopranoMusic = \relative {
  \clef "treble"
  r4 d''2 a4 | d4. d8 a2 | cis4 d cis2 |
}
sopranoWords = \lyricmode {
  Wor -- thy | is the lamb | that was slain |
}

altoMusic = \relative {
  \clef "treble"
  r4 a'2 a4 | fis4. fis8 a2 | g4 fis e2 |
}
altoWords = \sopranoWords

tenorMusic = \relative {
  \clef "G_8"
  r4 fis'2 e4 | d4. d8 d2 | e4 a, cis2 |
}
tenorWords = \sopranoWords

bassMusic = \relative {
  \clef "bass"
  r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
}
bassWords = \sopranoWords

upper = \relative {
  \clef "treble"
  \global
  r4 <a' d fis>2 <a e' a>4 |
  <d fis d'>4. <d fis d'>8 <a d a'>2 |
  <g cis g'>4 <a d fis> <a cis e>2 |
}

lower = \relative {
  \clef "bass"
  \global
  <d, d'>4 <d d'>2 <cis cis'>4 |
  <b b'>4. <b' b'>8 <fis fis'>2 |
  <e e'>4 <d d'> <a' a'>2 |
}

\score {
  <<  % combine ChoirStaff and PianoStaff in parallel
    \new ChoirStaff <<
      \new Staff = "sopranos" <<
        \set Staff.instrumentName = "Soprano"
        \new Voice = "sopranos" {
          \global
          \sopranoMusic
        }
      >>
      \new Lyrics \lyricsto "sopranos" {
        \sopranoWords
      }
      \new Staff = "altos" <<
        \set Staff.instrumentName = "Alto"
        \new Voice = "altos" {
          \global
          \altoMusic
        }
      >>
      \new Lyrics \lyricsto "altos" { \altoWords }
      \new Staff = "tenors" <<
        \set Staff.instrumentName = "Tenor"
        \new Voice = "tenors" {
          \global
          \tenorMusic
        }
      >>
      \new Lyrics \lyricsto "tenors" { \tenorWords }
      \new Staff = "basses" <<
        \set Staff.instrumentName = "Bass"
        \new Voice = "basses" {
          \global
          \bassMusic
        }
      >>
      \new Lyrics \lyricsto "basses" {
        \bassWords
      }
    >>  % end ChoirStaff
    \new PianoStaff <<
      \set PianoStaff.instrumentName = "Piano"
      \new Staff = "upper" \upper
      \new Staff = "lower" \lower
    >>
  >>
}
@end lilypond

@warning{Das vorliegende Layout kann sehr einfach erzeugt werden.  Am Besten
verwenden sie dafür das vordefinierte Beispiel @code{satb.ly}, siehe auch
@ref{Built-in templates}.  Zum Zweck der einfachen Handhabung wird der
verwendete Kontextaufbau bewusst versteckt und sich darauf verlassen, dass LilyPond
alles automatisch bereit stellt.  Lassen sie uns zu Lehrzwecken probieren,
das alles von Grund auf selbst zu entwickeln.  Irgendwann werden sie das sowieso machen
müssen, nämlich genau dann, wenn ein vorgegebenes Beispiel ihre
Anforderungen nicht angemessen erfüllt.}

Dem gewünschten Ergebnis am nächsten kommt sicher das
@ref{SATB-Partitur und automatischer Klavierauszug} -- wir müssen diese
Vorlage aber so anpassen, dass die Noten für das Klavier nicht
automatisch aus dem Chorsatz generiert werden.  Die Variablen
für die Noten und den Text des Chores sind in Ordnung, wir
müssen nun noch Variablen für die Klaviernoten hinzufügen.

Die Reihenfolge, in welcher die Variablen in das Chorsystem
(@code{ChoirStaff}) eingefügt werden, entspricht nicht der
in dem Beispiel oben.  Wir wollen sie so sortieren, dass die
Texte jeder Stimme direkt unter den Noten notiert werden.
Alle Stimmen sollten als @code{\voiceOne} notiert werden,
welches die Standardeinstellung ist; wir können also die
@code{\voiceXXX}-Befehle entfernen.  Wir müssen auch noch
den Schlüssel für den Tenor ändern.  Die Methode, mit der
der Text den Stimmen zugewiesen wird, ist uns noch nicht
bekannt, darum wollen wir sie umändern auf die Weise, die
wir schon kennen.  Wir fügen auch noch Instrumentbezeichnungen
zu den Systemen hinzu.

Damit erhalten wir folgenden @code{ChoirStaff}:

@example
\new ChoirStaff <<
  \new Staff = "sopranos" <<
    \set Staff.instrumentName = "Soprano"
    \new Voice = "sopranos" @{
      \global
      \sopranoMusic
    @}
  >>
  \new Lyrics \lyricsto "sopranos" @{
    \sopranoWords
  @}
  \new Staff = "altos" <<
    \set Staff.instrumentName = "Alto"
    \new Voice = "altos" @{
      \global
      \altoMusic
    @}
  >>
  \new Lyrics \lyricsto "altos" @{
    \altoWords
  @}
  \new Staff = "tenors" <<
    \set Staff.instrumentName = "Tenor"
    \new Voice = "tenors" @{
      \global
      \tenorMusic
    @}
  >>
  \new Lyrics \lyricsto "tenors" @{
    \tenorWords
  @}
  \new Staff = "basses" <<
    \set Staff.instrumentName = "Bass"
    \new Voice = "basses" @{
      \global
      \bassMusic
    @}
  >>
  \new Lyrics \lyricsto "basses" @{
    \bassWords
  @}
>>  % end ChoirStaff
@end example

Als nächstes müssen wir das Klaviersystem bearbeiten.
Das ist einfach: wir nehmen einfach den Klavierteil
aus der @qq{Piano solo}-Vorlage:

@example
\new PianoStaff <<
  \set PianoStaff.instrumentName = "Piano  "
  \new Staff = "upper" \upper
  \new Staff = "lower" \lower
>>
@end example

@noindent
und fügen die Variablen @code{upper}
und @code{lower} hinzu.

Das Chorsystem und das Pianosystem müssen mit
spitzen Klammern kombiniert werden, damit beide
übereinander erscheinen:

@example
<<  % ChoirStaff und PianoStaff parallel kombinieren
  \new ChoirStaff <<
    \new Staff = "sopranos" <<
      \new Voice = "sopranos" @{
        \global
        \sopranoMusic
      @}
    >>
    \new Lyrics \lyricsto "sopranos" @{
      \sopranoWords
     @}
    \new Staff = "altos" <<
      \new Voice = "altos" @{
        \global
        \altoMusic
      @}
    >>
    \new Lyrics \lyricsto "altos" @{
      \altoWords
    @}
    \new Staff = "tenors" <<
      \clef "G_8"  % tenor clef
      \new Voice = "tenors" @{
        \global
        \tenorMusic
      @}
    >>
    \new Lyrics \lyricsto "tenors" @{
      \tenorWords
    @}
    \new Staff = "basses" <<
      \clef "bass"
      \new Voice = "basses" @{
        \global
        \bassMusic
      @}
    >>
    \new Lyrics \lyricsto "basses" @{
      \bassWords
    @}
  >>  % end ChoirStaff

  \new PianoStaff <<
    \set PianoStaff.instrumentName = "Piano"
    \new Staff = "upper" \upper
    \new Staff = "lower" \lower
  >>
>>
@end example

Alles miteinander kombiniert und mit den Noten für drei
Takte sieht unser Beispiel nun so aus:

@lilypond[quote,verbatim,ragged-right,addversion]
global = { \key d \major \time 4/4 }
sopranoMusic = \relative {
  \clef "treble"
  r4 d''2 a4 | d4. d8 a2 | cis4 d cis2 |
}
sopranoWords = \lyricmode {
  Wor -- thy | is the lamb | that was slain |
}
altoMusic = \relative {
  \clef "treble"
  r4 a'2 a4 | fis4. fis8 a2 | g4 fis fis2 |
}
altoWords = \sopranoWords
tenorMusic = \relative {
  \clef "G_8"
  r4 fis'2 e4 | d4. d8 d2 | e4 a, cis2 |
}
tenorWords = \sopranoWords
bassMusic = \relative {
  \clef "bass"
  r4 d'2 cis4 | b4. b8 fis2 | e4 d a'2 |
}
bassWords = \sopranoWords
upper = \relative {
  \clef "treble"
  \global
  r4 <a' d fis>2 <a e' a>4 |
  <d fis d'>4. <d fis d'>8 <a d a'>2 |
  <g cis g'>4 <a d fis> <a cis e>2 |
}
lower = \relative {
  \clef "bass"
  \global
  <d, d'>4 <d d'>2 <cis cis'>4 |
  <b b'>4. <b' b'>8 <fis fis'>2 |
  <e e'>4 <d d'> <a' a'>2 |
}

\score {
  <<  % combine ChoirStaff and PianoStaff in parallel
    \new ChoirStaff <<
      \new Staff = "sopranos" <<
        \set Staff.instrumentName = "Soprano"
        \new Voice = "sopranos" {
          \global
          \sopranoMusic
        }
      >>
      \new Lyrics \lyricsto "sopranos" {
        \sopranoWords
      }
      \new Staff = "altos" <<
        \set Staff.instrumentName = "Alto"
        \new Voice = "altos" {
          \global
          \altoMusic
        }
      >>
      \new Lyrics \lyricsto "altos" {
        \altoWords
      }
      \new Staff = "tenors" <<
        \set Staff.instrumentName = "Tenor"
        \new Voice = "tenors" {
          \global
          \tenorMusic
        }
      >>
      \new Lyrics \lyricsto "tenors" {
        \tenorWords
      }
      \new Staff = "basses" <<
        \set Staff.instrumentName = "Bass"
        \new Voice = "basses" {
          \global
          \bassMusic
        }
      >>
      \new Lyrics \lyricsto "basses" {
        \bassWords
      }
    >>  % end ChoirStaff

    \new PianoStaff <<
      \set PianoStaff.instrumentName = "Piano  "
      \new Staff = "upper" \upper
      \new Staff = "lower" \lower
    >>
  >>
}
@end lilypond


@node Eine Partitur von Grund auf erstellen
@subsection Eine Partitur von Grund auf erstellen
@translationof Building a score from scratch

@cindex Template, eigene schreiben
@cindex Vorlagen, eigene schreiben
@cindex eigene Vorlagen erstellen
@cindex Erstellen von eigenen Vorlagen
@cindex Schreiben von eigenen Vorlagen

Wenn Sie einige Fertigkeit im Schreiben von LilyPond-Code
gewonnen haben, werden Sie vielleicht feststellen, dass es
manchmal einfacher ist, von Grund auf anzufangen, anstatt
die fertigen Vorlagen zu verändern.  Auf diese Art könne Sie
auch Ihren eigenen Stil entwickeln, und ihn der Musik anpassen,
die Sie notieren wollen.  Als Beispiel wollen wir demonstrieren,
wie man die Partitur für ein Orgelpräludium von Grund auf
konstruiert.

Beginnen wir mit dem Kopf, dem @code{header}-Abschnitt.
Hier notieren wir den Titel, den Namen des Komponisten usw.
Danach schreiben wir die einzelnen Variablen auf und
schließlich am Ende die eigentliche Partitur, den
@code{\score}-Abschnitt.  Beginnen wir mit einer groben
Struktur, in die wir dann die Einzelheiten nach und nach
eintragen.

Als Beispiel benutzen wir zwei Takte aus dem Orgelpräludium
@notation{Jesu, meine Freude} von J. S. Bach, notiert
für zwei Manuale und Pedal.  Sie können die Noten am Ende
dieses Abschnittes sehen.  Das obere Manual trägt zwei Stimmen,
das untere und das Pedalsystem jeweils nur eine.  Wir
brauchen also vier Variablen für die Noten und eine, um
Taktart und Tonart zu definieren.

@example
\version @w{"@version{}"}
\header @{
  title = "Jesu, meine Freude"
  composer = "J S Bach"
@}
keyTime = @{ \key c \minor \time 4/4 @}
ManualOneVoiceOneMusic = @{ s1 @}
ManualOneVoiceTwoMusic = @{ s1 @}
ManualTwoMusic = @{ s1 @}
PedalOrganMusic = @{ s1 @}

\score @{
@}
@end example

Im Moment haben wir eine unsichtbare
Note in jede Stimme eingesetzt (@code{s1}).
Die Noten werden später hinzugefügt.

Als nächstes schauen wir uns an, was in die
Partitur (die @code{\score}-Umgebung)
kommt.  Dazu wird einfach die Notensystemstruktur
konstruiert, die wir benötigen.  Orgelmusik
wird meistens auf drei Systemen notiert, eins
für jedes Manual und ein drittes für die Pedalnoten.
Die Systeme für die Manuale werden mit einer
geschweiften Klammer verbunden, wir
benutzen hier also ein @code{PianoStaff}.
Das erste Manualsystem braucht zwei Stimmen,
das zweite nur eine.

@example
\new PianoStaff <<
  \new Staff = "ManualOne" <<
    \new Voice @{
      \ManualOneVoiceOneMusic
    @}
    \new Voice @{
      \ManualOneVoiceTwoMusic
    @}
  >>  % Ende ManualOne Systemkontext
  \new Staff = "ManualTwo" <<
    \new Voice @{
      \ManualTwoMusic
    @}
  >>  % Ende ManualTwo Systemkontext
>>  % Ende PianoStaff Kontext
@end example

Als nächstes soll das System für das Pedal hinzugefügt
werden.  Es soll unter das Klaviersystem gesetzt
werden, aber muss gleichzeitig mit ihm erscheinen.
Wir brauchen also spitze Klammern um beide
Definitionen.  Sie wegzulassen würde eine Fehlermeldung
in der Log-Datei hervorrufen.  Das ist ein sehr
häufiger Fehler, der wohl auch Ihnen früher
oder später unterläuft.  Sie können das fertige
Beispiel am Ende des Abschnittes kopieren und die
Klammern entfernen, um zu sehen, wie die
Fehlermeldungen aussehen könnten, die Sie in solch
einem Fall erhalten würden.

@example
<<  % PianoStaff and Pedal Staff must be simultaneous
  \new PianoStaff <<
    \new Staff = "ManualOne" <<
      \new Voice @{
        \ManualOneVoiceOneMusic
      @}
      \new Voice @{
        \ManualOneVoiceTwoMusic
      @}
    >>  % end ManualOne Staff context
    \new Staff = "ManualTwo" <<
      \new Voice @{
        \ManualTwoMusic
      @}
    >>  % end ManualTwo Staff context
  >>  % end PianoStaff context
  \new Staff = "PedalOrgan" <<
    \new Voice @{
      \PedalOrganMusic
    @}
  >>
>>
@end example

Es ist nicht notwendig, die simultane Konstruktion
@code{<< @dots{} >>} innerhalb des zweiten Manualsystems
und des Pedalsystems zu benutzen, denn sie enthalten
nur eine Stimme.  Andererseits schadet es nichts, sie
zu schreiben, und es ist eine gute Angewohnheit, immer
die spitzen Klammern nach einem @code{\new Staff} zu
schreiben, wenn mehr als eine Stimme vorkommen könnten.
Für Stimmen (@code{Voice}) dagegen gilt genau das
Gegenteil: eine neue Stimme sollte immer von
geschweiften Klammern (@code{@{ @dots{} @}}) gefolgt
werden, falls Sie ihre Noten in mehrere Variable aufteilen,
die nacheinander gesetzt werden sollen.

Fügen wir also diese Struktur zu der @code{\score}-Umgebung
hinzu und bringen wir die Einzüge in Ordnung.  Gleichzeitig
wollen wir die richtigen Schlüssel setzen und die Richtung der
Hälse und Bögen in den Stimmen des oberen Systems
kontrollieren, indem die obere Stimme ein
@code{\voiceOne}, die untere dagegen ein @code{\voiceTwo}
erhält.  Die Taktart und Tonart werden mit unserer fertigen
Variable @code{\keyTime} eingefügt.

@example
\score @{
  <<  % PianoStaff and Pedal Staff must be simultaneous
    \new PianoStaff <<
      \new Staff = "ManualOne" <<
        \keyTime  % set key and time signature
        \clef "treble"
        \new Voice @{
          \voiceOne
          \ManualOneVoiceOneMusic
        @}
        \new Voice @{
          \voiceTwo
          \ManualOneVoiceTwoMusic
        @}
      >>  % end ManualOne Staff context
      \new Staff = "ManualTwo" <<
        \keyTime
        \clef "bass"
        \new Voice @{
          \ManualTwoMusic
        @}
      >>  % end ManualTwo Staff context
    >>  % end PianoStaff context
    \new Staff = "PedalOrgan" <<
      \keyTime
      \clef "bass"
      \new Voice @{
        \PedalOrganMusic
      @}
    >>  % end PedalOrgan Staff
  >>
@}  % end Score context
@end example

@cindex Spreizbarkeit von Systemen
@cindex Dehnung von Systemen, vertikal
@cindex Systeme, vertikales Dehnen

Das Layout des Orgelsystems oben ist fast perfekt, es hat jedoch einen kleinen
Fehler, den man nicht bemerken kann, wenn man nur ein einzelnes System
betrachtet:  Der Abstand des Pedalsystems zum System der linken Hand
sollte in etwa der gleiche sein wie der Abstand zwischen den Systemen
der linken und rechten Hand.  Die Dehnbarkeit von Systemen in einem
Klaviersystem (@code{PianoStaff})-Kontext ist beschränkt (sodass der
Abstand zwischen den Systemen der linken und rechten Hand nicht zu groß
wird), und das Pedalsystem sollte sich genauso verhalten.

@cindex Untereigenschaft
@cindex sub-properties
@cindex graphische Objekte
@cindex Grobs
@cindex Objekte, graphische

Die Spreizbarkeit von Systemen kann mit der @code{staff-staff-spacing}-Eigenschaft
des @code{VerticalAxisGroup}-@qq{graphischen Objekts} (üblicherweise als
@qq{Grob} innerhalb der LilyPond-Dokumentation bezeichnet) kontrolliert
werden.  An dieser Stelle brauchen Sie sich um die Details nicht zu
sorgen, sie werden später erklärt.  Sehr Neugierige können sich den
Abschnitt @ruser{Grundlagen zum Verändern von Eigenschaften} anschauen.  Im Moment
kann man nicht nur die @code{strechability} (Spreizbarkeit)-Untereigenschaft verändern,
darum müssen hier auch die anderen Untereigenschaften kopiert werden.  Die
Standardeinstellungen dieser Untereigenschaften finden sich in der Datei
@file{scm/define-grobs.scm} in den Definitionen für den
@code{VerticalAxisGroup}-Grob.  Der Wert für @code{strechability} wird aus
der Definition für das Klaviersystem (@code{PianoStaff}) entnommen
(in der Datei @file{ly/engraver-init.ly}), damit die Werte identisch
sind.

@example
\score @{
  <<  % PianoStaff and Pedal Staff must be simultaneous
    \new PianoStaff <<
      \new Staff = "ManualOne" <<
        \keyTime  % set key and time signature
        \clef "treble"
        \new Voice @{
          \voiceOne
          \ManualOneVoiceOneMusic
        @}
        \new Voice @{
          \voiceTwo
          \ManualOneVoiceTwoMusic
        @}
      >>  % end ManualOne Staff context
      \new Staff = "ManualTwo" \with @{
        \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
      @} <<
        \keyTime
        \clef "bass"
        \new Voice @{
          \ManualTwoMusic
        @}
      >>  % end ManualTwo Staff context
    >>  % end PianoStaff context
    \new Staff = "PedalOrgan" <<
      \keyTime
      \clef "bass"
      \new Voice @{
        \PedalOrganMusic
      @}
    >>  % end PedalOrgan Staff
  >>
@}  % end Score context
@end example
Damit ist das Grundgerüst fertig.  Jede Orgelmusik mit drei
Systemen hat die gleiche Struktur, auch wenn die Anzahl der Stimmen
in einem System sich ändern kann.  Jetzt müssen wir nur noch
die Noten einfügen und alle Teile zusammenfügen, indem wir
die Variablen mit einem Backslash in die Partitur einbauen.

@lilypond[quote,verbatim,ragged-right,addversion]
\header {
  title = "Jesu, meine Freude"
  composer = "J S Bach"
}
keyTime = { \key c \minor \time 4/4 }
ManualOneVoiceOneMusic = \relative {
  g'4 g f ees |
  d2 c |
}
ManualOneVoiceTwoMusic = \relative {
  ees'16 d ees8~ 16 f ees d c8 d~ d c~ |
  8 c4 b8 c8. g16 c b c d |
}
ManualTwoMusic = \relative {
  c'16 b c8~ 16 b c g a8 g~ 16 g aes ees |
  f16 ees f d g aes g f ees d ees8~ 16 f ees d |
}
PedalOrganMusic = \relative {
  r8 c16 d ees d ees8~ 16 a, b g c b c8 |
  r16 g ees f g f g8 c,2 |
}

\score {
  <<  % PianoStaff and Pedal Staff must be simultaneous
    \new PianoStaff <<
      \new Staff = "ManualOne" <<
        \keyTime  % set key and time signature
        \clef "treble"
        \new Voice {
          \voiceOne
          \ManualOneVoiceOneMusic
        }
        \new Voice {
          \voiceTwo
          \ManualOneVoiceTwoMusic
        }
      >>  % end ManualOne Staff context
      \new Staff = "ManualTwo" \with {
        \override VerticalAxisGroup.staff-staff-spacing.stretchability = 5
      } <<
        \keyTime
        \clef "bass"
        \new Voice {
          \ManualTwoMusic
        }
      >>  % end ManualTwo Staff context
    >>  % end PianoStaff context
    \new Staff = "PedalOrgan" <<
      \keyTime
      \clef "bass"
      \new Voice {
        \PedalOrganMusic
      }
    >>  % end PedalOrgan Staff context
  >>
}  % end Score context
@end lilypond

@seealso
Glossar:
@rglos{system}.


@node Tipparbeit durch Variablen und Funktionen einsparen
@subsection Tipparbeit durch Variablen und Funktionen einsparen
@translationof Saving typing with variables and functions

@cindex Variablen

Bis jetzt wurde immer derartige Notation vorgestellt:

@lilypond[quote,verbatim,ragged-right]
hornNotes = \relative { c''4 b dis c }

\score {
  {
    \hornNotes
  }
}
@end lilypond

Sie können sich vorstellen, dass das etwa für minimalistische
Musik sehr nützlich sein könnte:

@lilypond[quote,verbatim,ragged-right]
fragmentA = \relative { a'4 a8. b16 }
fragmentB = \relative { a'8. gis16 ees4 }

violin = \new Staff {
  \fragmentA \fragmentA |
  \fragmentB \fragmentA |
}

\score {
  {
    \violin
  }
}
@end lilypond

Diese Variablen (die man auch als Makros oder Benutzer-Befehl
bezeichnet) können jedoch auch für eigene Anpassungen eingesetzt
werden:

@lilypond[quote,verbatim,ragged-right]
dolce = \markup { \italic \bold dolce }

centreText = { \once \override TextScript.self-alignment-X = #CENTER }

fthenp =_\markup {
  \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p
}

violin = \relative {
  \repeat volta 2 {
    c''4._\dolce b8 a8 g a b |
    \centreText
    c4.^"hi there!" d8 e f g d |
    c4.\fthenp b8 c4 c-. |
  }
}

\score {
  {
    \violin
  }
}
@end lilypond

Derartige Variablen sind offensichtlich sehr nützlich, sich
Tipparbeit zu ersparen.  Aber es lohnt sich schon, sie zu
benutzen, wenn man sie nur einmal benutzen will, denn sie
vereinfachen die Struktur einer Datei sehr stark.  Hier das
vorige Beispiel ohne jede Benutzung von Variablen.  Es ist
sehr viel schwerer lesbar, besonders die letzte Zeile.

@example
violin = \relative @{
  \repeat volta 2 @{
    c''4._\markup @{ \italic \bold dolce @} b8 a8 g a b |
    \once \override TextScript.self-alignment-X = #CENTER
    c4.^"hi there!" d8 e f g d |
    c4._\markup @{
      \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p
    @}
    b8 c4 c-. |
  @}
@}
@end example

Bisher haben wir vor allem statische Ersetzungen betrachtet:
wenn LilyPond etwa @code{\centreText} sieht, wird es ersetzt mit
all dem Code, mit dem wir es definiert haben (also alles,
was sich rechts von @code{centreText=} befindet).

LilyPond kann auch nicht-statische Ersetzungen bewältigen.  Man
kann sie sich als Funktionen vorstellen.

@lilypond[quote,verbatim,ragged-right]
padText =
#(define-music-function
     (padding)
     (number?)
   #{
     \once \override TextScript.padding = #padding
   #})

\relative {
  c''4^"piu mosso" b a b
  \padText #1.8
  c4^"piu mosso" b a b
  \padText #2.6
  c4^"piu mosso" b a b
}
@end lilypond

Die Benutzung von Variablen ist auch eine gute Möglichkeit,
Arbeit zu vermeiden, wenn sich einmal die Syntax von LilyPond
ändern sollte (siehe auch @rprogram{Dateien mit convert-ly aktualisieren}).
Wenn man eine einzige Definition hat (wie etwa @code{\dolce}),
die für alle Vorkommen in der Notation eingesetzt wird, muss
man auch nur einmal diese Definition aktualisieren, anstatt
dass man sie in jeder @file{.ly}-Datei einzeln ändern müsste.


@node Partituren und Stimmen
@subsection Partituren und Stimmen
@translationof Scores and parts

In Orchestermusik werden alle Noten zweimal gedruckt.  Einmal
in einer Stimme für die Spieler, und einmal ein der Partitur
für den Dirigenten.  Variablen können benutzen, um sich doppelte
Arbeit zu ersparen.  Die Noten werden nur einmal eingegeben und
in einer Variable abgelegt.  Der Inhalt der Variable wird dann
benutzt um sowohl die Stimme als auch die Partitur zu erstellen.

Es bietet sich an, die Noten in einer extra Datei abzulegen.
Nehmen wir an, dass die Datei @file{horn-music.ly} folgende
Noten eines Horn/@/Fagott-Duos enthält:

@example
hornNotes = \relative @{
  \time 2/4
  r4 f8 a | cis4 f | e4 d |
@}
@end example

@noindent
Eine Stimme wird also erstellt, indem man folgendes in eine
Datei schreibt:

@example
\include "horn-music.ly"

\header @{
  instrument = "Horn in F"
@}

@{
 \transpose f c' \hornNotes
@}
@end example

Die Zeile

@example
\include "horn-music.ly"
@end example

@noindent
ersetzt den Inhalt von @file{horn-music.ly} an dieser Position
in der Datei, sodass @code{hornNotes} im Folgenden definiert
ist.  Der Befehl @code{\transpose f@tie{}c'} zeigt an, dass
das Argument (@code{\hornNotes}) eine Quinte nach oben transponiert
werden soll.  Klingendes @code{f} wird als @code{c'}, wie es
die Stimmung eines normalen F-Hornes verlangt.  Die Transposition
kann in folgender Notenausgabe gesehen werden:

@lilypond[quote,ragged-right]
\transpose f c' \relative {
  \time 2/4
  r4 f8 a | cis4 f | e4 d |
}
@end lilypond

In Ensemblestücken sind manche Stimmen für viele Takte stumm.
Das wird durch eine besondere Pause notiert, die Mehrtaktpause.
Sie wird mit einem großen @code{R} notiert, gefolgt von der
Dauer (@code{1}@tie{}für eine Ganze, @code{2}@tie{}für eine Halbe usw.).  Indem man die Dauern multipliziert, kann man auch
längere Dauern erzeugen.  Diese Pause etwa dauert drei Takte
in einem 2/4-Takt:

@example
R2*3
@end example

Wenn die Stimme gesetzt wird, sollen Mehrtaktpausen zusammen gefasst werden.
Zu diesem Zweck gibt es eine Musik Funktion:

@example
\compressMMRests @{ ... @}
@end example

Angewendet auf @code{hornNotes} erhält man:

@lilypond[quote,ragged-right]
\compressMMRests \transpose f c' \relative {
  \time 2/4
  R2*3 |
  r4 f8 a | cis4 f | e4 d |
}
@end lilypond

Die Partitur wird erstellt, indem man alle Noten kombiniert.
Angenommen, die andere Stimme ist in @code{bassoonNotes}
in der Datei @file{bassoon-music.ly} definiert, würde eine
Partitur erstellt mit:

@example
\include "bassoon-music.ly"
\include "horn-music.ly"

<<
  \new Staff \hornNotes
  \new Staff \bassoonNotes
>>
@end example

@noindent
woraus sich ergibt:

@lilypond[quote,ragged-right]
\relative <<
  \new Staff {
    \clef "treble"
    \time 2/4
    R2*3 |
    r4 f8 a | cis4 f | e4 d |
  }
  \new Staff {
    \clef "bass"
    \time 2/4
    r4 d,8 f | gis4 c | b4 bes |
    a8 e f4 | g4 d | gis4 f |
  }
>>
@end lilypond

@seealso
Handbuch zum Lernen:
@ref{Stücke durch Variablen organisieren}.

Notationsreferenz:
@ruser{Transponieren},
@ruser{Orchesterstimmen erstellen},
@ruser{Ganztaktpausen},
@ruser{LilyPond-Dateien einfügen}.
