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

@ignore
    Translation of GIT committish: e5a609e373eae846857f9a6d70a402a3d42b7d94


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

@c \version "2.19.24"

@c Translators: Till Paala

@node Notensatz
@chapter Notensatz
@translationof Music engraving

Dieser Aufsatz beschreibt, wie LilyPond entstand und wie es
benutzt werden kann, um schönen Notensatz zu erstellen.

@menu
* Die Geschichte von LilyPond::
* Details des Notensetzens::
* Automatisierter Notensatz::
* Ein Programm bauen::
* LilyPond die Arbeit überlassen::
* Notensatzbeispiele (BWV 861)::
@end menu


@node Die Geschichte von LilyPond
@section Die Geschichte von LilyPond
@translationof The LilyPond story

Lange bevor LilyPond benutzt werden konnte, um wunderschöne
Aufführungspartituren zu setzen, bevor es in der Lage war, Noten
für einen Unversitätskurs oder wenigstens eine einfache Melodie zu
setzen, bevor es eine Gemeinschaft von Benutzern rund um die Welt oder
wenigstens einen Aufsatz über den Notensatz gab, begann LilyPond
mit einer Frage:

@quotation
Warum schaffen es die meisten computergesetzten Noten nicht, die
Schönheit und Ausgeglichenheit von handgestochenem Notensatz aufzuweisen?
@end quotation

@noindent
Einige der Antworten können gefunden werden, indem wir uns die
beiden folgenden Noten zur Analyse vornehmen.  Das erste Beispiel
ist ein schöner handgestochener Notensatz von 1950, das zweite
Beispiel eine moderne, computergesetzte Edition.

@ifnottex
@quotation
@noindent
Bärenreiter BA 320, @copyright{}1950:

@sourceimage{baer-suite1-fullpage,,,png}
@end quotation

@quotation
@noindent
Henle Nr. 666, @copyright{}2000:
@sourceimage{henle-suite1-fullpage,,,png}
@end quotation
@end ifnottex

Die Noten sind identisch und stammen aus der ersten Solosuite für
Violoncello von J. S. Bach, aber ihre Erscheinung ist sehr
unterschiedlich, insbesondere wenn man sie ausdruckt und aus einigem
Abstand betrachtet.
@ifnottex
(Die PDF-Version dieses Handbuchs hat hochauflösende Abbildungen,
die sich zum Drucken eignen.)
@end ifnottex
Versuchen Sie, beide Beispiele zu lesen oder von ihnen zu spielen,
und Sie werden feststellen, dass der handgestochene Satz sich
angenehmer benutzen lässt.  Er weist fließende Linien und Bewegung
auf und fühlt sich wie ein lebendes, atmendes Stück Musik an, während
die neuere Edition kalt und mechanisch erscheint.

Es ist schwer, sofort die Unterschiede zur neueren Edition auszumachen.
Alles sieht sauber und fein aus, möglicherweise sogar @qq{besser},
weil es eher computerkonform und einheitlich wirkt.  Das hat uns
tatsächlich für eine ganze Weile beschäftigt.  Wir wollten die
Computernotation verbessern, aber wir mussten erst verstehen, was
eigentlich falsch mit ihr war.

Die Antwort findet sich in der präzisen, mathematischen Gleichheit
der neueren Edition.  Suchen Sie die Taktstriche in der Mitte jeder
Zeile: im handgestochenen Satz hat die Position dieser Taktstriche
sozusagen natürliche Variation, während die neuere Version sie
fast immer perfekt in die Mitte setzt.  Das zeigen diese vereinfachten
Diagramme des Seitenlayouts vom handgestochenen (links) und
Computersatz (rechts):

@quotation
@iftex
@sourceimage{pdf/page-layout-comparison,,,}
@end iftex
@ifnottex
@sourceimage{page-layout-comparison,,,png}
@end ifnottex
@end quotation
@noindent

Im Computersatz sind sogar die einzelnen Notenköpfe vertikal
aneinander ausgerichtet, was dazu führt, dass die Melodie hinter
einem starren Gitter aus musikalischen Zeichen verschwindet.

Es gibt noch weitere Unterschiede: in der handgestochenen Version
sind die vertikalen Linien stärker, die Bögen liegen dichter an den
Notenköpfen und es gibt mehr Abweichungen in der Steigung der
Balken.  Auch wenn derartige Details als Haarspalterei erscheinen,
haben wir trotzdem als Ergebnis einen Satz, der einfacher zu lesen
ist.  In der Computerausgabe ist jede Zeile fast identisch mit den
anderen und wenn der Musiker für einen Moment weg schaut, wird
er die Orientierung auf der Seite verlieren.

LilyPond wurde geschaffen, um die Probleme zu lösen, die wir in
existierenden Programmen gefunden haben und um schöne Noten zu
schaffen, die die besten handgestochenen Partituren imitieren.

@iftex
@page
@noindent
Bärenreiter BA 320, @copyright{}1950:

@sourceimage{baer-suite1-fullpage-hires,16cm,,}
@page
@noindent
Henle no. 666, @copyright{}2000:
@sp 3
@sourceimage{henle-suite1-fullpage-hires,16cm,,}
@page
@end iftex


@node Details des Notensetzens
@section Details des Notensetzens
@translationof Engraving details

@cindex Notensatz
@cindex Typographie
@cindex Notengravur
@cindex Gravur, Notensatz
@cindex Plattendruck, Noten

Die Kunst des Notensatzes wird auch als Notenstich bezeichnet. Dieser
Begriff stammt aus dem traditionellen Notendruck@footnote{Frühe
europäische Drucker versuchten sich an verschiedenen Techniken
wie handgeschnitzten Holzblöcken, beweglichen Lettern und
gravierten dünnen Metallblechen.  Der Satz mit Lettern hat den
Vorteil, dass man ihn schnell korrigieren kann und auch Text
einfach einfügen kann, aber nur der Notenstich als Gravur
ermöglichte die Möglichkeit, lebendiges Layout ohne
Qualitätsabstriche zu erstellen.  So wurden der Notenstich
mit der Hand bis ins 20. Jahrhundert zum Standard für alle
gedruckten Noten, ausgenommen einige Hymnale und Liederbücher, wo
der Letterdruck durch seine Einfachheit und Kostenersparnis
gerechtfertigt war.}. Noch bis vor etwa 20
Jahren wurden Noten erstellt, indem man sie in eine Zink- oder Zinnplatte
schnitt oder mit Stempeln schlug. Diese Platte wurde dann mit Druckerschwärze
versehen, so dass sie in den geschnittenen und gestempelten Vertiefungen
blieb. Diese Vertiefungen schwärzten dann ein auf die Platte gelegtes
Papier. Das Gravieren wurde vollständig von Hand erledigt. Es war darum
sehr mühsam, Korrekturen anzubringen, weshalb man von vornherein richtig
schneiden musste. Die Kunst des Notenstechens war eine sehr
spezialisierte Handwerkskunst, für die ein Handwerker etwa fünf
Ausbildungsjahre benötigte, bevor der den Meistertitel tragen durfte.
Weitere fünf Jahre waren erforderlich, um diese Kunst wirklich zu
beherrschen.

@quotation
@iftex
@sourceimage{hader-slaan,,7cm,}
@end iftex
@ifnottex
@sourceimage{hader-slaan,,,jpg}
@end ifnottex
@end quotation

LilyPond wurde von den handgestochenen traditionellen Noten
inspiriert, die in der ersten Hälfte des 20. Jahrhunderts von
europäischen Notenverlagen herausgegeben wurden (insbesondere
Bärenreiter, Duhem, Durand, Hofmeister, Peters und Scott).  Sie
werden teilweise als der Höhepunkt des traditionellen Notenstichs
angesehen.  Beim Studium dieser Editionen haben wir eine Menge
darüber gelernt, was einen gut gesetzten Musikdruck ausmacht und
welche Aspekte des handgestochenen Notensatzes wir in LilyPond
imitieren wollten.

@c Heutzutage wird fast alle gedruckte Musik von Computern erstellt. Das
@c hat einige deutliche Vorteile: Drucke sind billiger als die gravierten
@c Platten und der Computersatz kann per E-Mail verschickt werden. Leider
@c hat der intensive Einsatz des Computers die graphische Qualität
@c des Notensatzes vermindert. Mit dem Computer erstellte Noten sehen
@c langweilig und mechanisch aus, was es erschwert, von ihnen zu spielen.

@menu
* Notenschriftarten::
* Optischer Ausgleich::
* Hilfslinien::
* Optische Größen::
* Warum der große Aufwand?::
 @end menu

@node Notenschriftarten
@unnumberedsubsec Notenschriftarten
@translationof Music fonts

Die Abbildung unten illustriert den Unterschied zwischen
traditionellem Notensatz und einem typischen Computersatz.
Das linke Bild zeigt ein eingescanntes b-Vorzeichen
einer handgestochenen Bärenreiter-Edition, das rechte Bild
hingegen ein Symbol aus einer 2000 herausgegebenen Edition
der selben Noten.  Obwohl beide Bilder mit der gleichen
Tintenfarbe gedruckt sind, wird die frühere Version dunkler: die
Notenlinien sind dicker und das Bärenreiter-b hat ein rundliches,
beinahe sinnliches Aussehen.  Der rechte Scan hingegen hat
dünnere Linien und eine gerade Form mit scharfen Ecken und Kanten.

@multitable @columnfractions .25 .25 .25 .25
@item @tab
@ifnotinfo
@iftex
@sourceimage{baer-flat-gray,,4cm,}
@end iftex
@ifnottex
@sourceimage{baer-flat-gray,,,png}
@end ifnottex

@tab
@iftex
@sourceimage{henle-flat-gray,,4cm,}
@end iftex
@ifnottex
@sourceimage{henle-flat-gray,,,png}
@end ifnottex

@end ifnotinfo
@ifinfo
@sourceimage{henle-flat-bw,,,png}
@sourceimage{baer-flat-bw,,,png}
@sourceimage{lily-flat-bw,,,png}
@end ifinfo


@item @tab
Bärenreiter (1950)
@tab
Henle (2000)

@end multitable


@cindex Musiksymbole
@cindex Schriftart
@cindex Dichte
@cindex Balance

Als wir uns entschlossen hatten, ein Programm zu schreiben, das
die Typographie des Notensatzes beherrscht, gab es keine freien
Musikschriftarten, die unserem geplanten eleganten Notenbild passen
würden.  Unbeirrt schufen wir eine Schriftart und dazu einen
Computerfont mit den musikalischen Symbolen, wobei wir uns an den
schönen Musikdrucken der handgestochenen Noten orientierten.  Ohne
diese Erfahrung hätten wir nie verstanden, wie hässlich die
Schriftarten waren, die wir zuerst bewunderten.

Unten ein Beispiel zweier Notenschriftarten.  Das obere Beispiel ist der
Standard im Sibelius-Programm (die @emph{Opus}-Schriftart), das
untere unsere eigene LilyPond-Schriftart.

@quotation
@iftex
@sourceimage{pdf/OpusAndFeta,,,}
@end iftex
@ifnottex
@sourceimage{OpusAndFeta,,,png}
@end ifnottex
@end quotation

Die LilyPond-Symbole sind schwerer und ihre Dicke ist durchgängiger,
wodurch sie einfacher zu lesen sind.  Feine Enden, wie etwa die
Seiten der Viertelpause, sollten nicht als scharfe Spitzen enden,
sondern etwas abgerundet.  Das liegt daran, dass scharfe Enden
der Stempel sehr fragil sind und sich schnell durch die Verwendung
abnutzen.  Zusammengefasst muss die Schwärze der Schriftart sehr
vorsichtig mit der Schwärze von Notenlinien, Balken und Bögen
abgeglichen werden, um ein starkes, aber doch ausgewogenes Gesamtbild
zu ergeben.

Einige weitere Besonderheiten: der Notenkopf der Halben ist nicht
elliptisch, sondern etwas rautenförmig.  Der vertikale Hals des
b-Symbols ist schwach keilförmig nach oben hin.  Das Kreuz und das
Auflösungszeichen sind einfacher aus der Entfernung zu unterscheiden,
weil ihre schrägen Linien eine andere Neigung haben und die vertikalen
Linien dicker sind.

@node Optischer Ausgleich
@unnumberedsubsec Optischer Ausgleich
@translationof Optical spacing

Die Aufteilung der Noten in der Horizontalen sollte die Dauer der
jeweiligen Note widerspiegeln.  Wie wir jedoch im Beispiel der
Bach-Suite oben sehen konnten, orientieren sich viele moderne
Partituren an den Dauern mit mathematischer Präzision, was zu
schlechten Ergebnissen führt.  Im nächsten Beispiel ist ein Motiv
zweimal dargestellt: das erste Mal mit exakter mathematischer
Aufteilung, das zweite Mal mit Korrekturen.  Welches Beispiel
spricht Sie mehr an?

@cindex Optischer Ausgleich

@lilypond
\paper {
  ragged-right = ##t
  indent = #0.0
}

music = {
   c'4 e''4 e'4 b'4
   \stemDown
   b'8[ e'' a' e'']
   \stemNeutral
   e'8[ e'8 e'8 e'8]
}
\score
{
  \music
  \layout {
    \context {
      \Staff
      \override NoteSpacing.stem-spacing-correction = #0.0
      \override NoteSpacing.same-direction-correction = #0.0
      \override StaffSpacing.stem-spacing-correction = #0.0
    }
  }
}
@end lilypond

@lilypond
\paper {
  ragged-right = ##t
  indent = #0.0
}

music = {
   c'4 e''4 e'4 b'4 |
   \stemDown
   b'8[ e'' a' e'']
   \stemNeutral
   e'8[ e'8 e'8 e'8]
}

\score
{
  \music
  \layout {
    \context {
      \Staff
      \override NoteSpacing.stem-spacing-correction = #0.6
    }
  }
}
@end lilypond

@cindex normale Rhythmen
@cindex normale Abstände
@cindex Abstände, normal
@cindex Rhythmen, normal

In jedem Takt in diesem Ausschnitt kommen Noten vor, die in einem
gleichmäßigen Rhythmus gespielt werden. Die Abstände sollten das
widerspiegeln. Leider lässt uns aber das Auge im Stich: es beachtet
nicht nur den Abstand von aufeinander folgenden Notenköpfen, sondern
auch den ihrer Hälse. Also müssen Noten, deren Hälse in direkter
Folge zuerst nach oben und dann nach unten ausgerichtet sind, weiter
auseinander gezogen werden, während die unten/oben-Folge engere
Abstände fordert, und das alles auch noch in Abhängigkeit von der
vertikalen Position der Noten. Das untere Beispiel ist mit dieser
Korrektur gesetzt. Im oberen Beispiel hingegen bilden sich
für das Auge bei unten/oben-Folgen Notenklumpen.  Ein Notenstechermeister
hätte die Notenaufteilung angepasst, sodass die angenehm zu lesen ist.

Die Algorithmen zur Platzaufteilung von LilyPond berechnen sogar die
Taktstriche mit ein, weshalb die letzte Noten mit Hals nach oben im
richtig platzierten Beispiel etwas mehr Platz vor dem Taktstrich
erhält, damit sie nicht gedrängt wirkt. Ein Hals nach unten würde diesen Ausgleich nicht benötigen.


@node Hilfslinien
@unnumberedsubsec Hilfslinien
@translationof Ledger lines

@cindex Hilfslinien
@cindex Zusammenstöße

Hilfslinien stellen eine typographische Herausforderung dar: sie
machen es schwerer, die Notensymbole dicht anzuordnen und sie müssen
klar genug sein, dass sich die Tonhöhe mit einem schnellen Blick
erkennen lässt.  Im Beispiel unten können wir sehen, dass
Hilfslinien dicker als normale Notenlinien sein sollten und dass
ein gelernter Notenstecher eine Hilfslinie verkürzt, um dichteres
Platzieren von Versetzungszeichen zu erlauben.  Wir haben diese
Eigenschaft in den Notensatz von LilyPond eingebaut.

@multitable @columnfractions .25 .25 .25 .25
@item @tab

@iftex
@sourceimage{baer-ledger,3cm,,}
@end iftex
@ifnottex
@sourceimage{baer-ledger,,,png}
@end ifnottex

@tab

@iftex
@sourceimage{lily-ledger,3cm,,}
@end iftex
@ifnottex
@sourceimage{lily-ledger,,,png}
@end ifnottex

@end multitable


@node Optische Größen
@unnumberedsubsec Optische Größen
@translationof Optical sizing

Noten werden in verschiedenen Größen gedruckt.  Ursprünglich hatte
man hierzu Stempel in verschiedenen Größen, was gleichzeitig heißt,
dass jeder Stempel so beschaffen war, dass er für seine Größe ein
ideales Abbild erzeugte.  Mit den digitalen Fonts kann ein einziger
Umriss mathematisch skaliert werden, um eine beliebige Größe zu
erzeugen, was sehr viele Vorteile hat.  In kleinen Größen erscheinen
die Symbole jedoch zu dünn.

Für LilyPond haben wir Schriftarten mit einer Reihe von Dicken
erstellt, die jeweils einer Notengröße entsprechen.  Hier ein
LilyPond-Notensatz mit der Systemgröße 26:

@quotation
@iftex
@sourceimage{pdf/size26,,23mm,}
@end iftex
@ifnottex
@sourceimage{size26,,,png}
@end ifnottex
@end quotation

@noindent
und hier die gleichen Noten mit Systemgröße 11, anschließend um 236%
vergrößert, damit das Bild in exakt der gleichen Größe wie das
vorige erscheint:

@quotation
@iftex
@sourceimage{pdf/size11,,23mm,}
@end iftex
@ifnottex
@sourceimage{size11,,,png}
@end ifnottex
@end quotation

@noindent
Bei kleineren Größen benutzt LilyPond proportional dickere
Notenlinien, sodass das Notenbild immer noch gut zu lesen ist.

@ignore
Dadurch können auch Notensysteme unterschiedlicher Größe
friedlich nebeneinander auf der gleichen Seite erscheinen:

@c TODO: are the stems in this example the right thickness? How should
@c line weights be scaled for small staves?

@c Grieg's Violin Sonata Op. 45
@lilypond[indent=1.5\cm]
global = {
  \time 6/8
  \key c \minor
}

\score {
  <<
    \new Staff \with {
      fontSize = #-4
      \override StaffSymbol.staff-space = #(magstep -4)
      \override StaffSymbol.thickness = #(magstep -3)
    }
    \relative {
      \global
      \set Staff.instrumentName = "Violin"
      c'8.(\f^> b16 c d) ees8.(^> d16 c b)
      g8.(^> b16 c ees) g8-.^> r r
      R2.
    }
    \new PianoStaff <<
      \set PianoStaff.instrumentName = "Piano"
      \new Staff \relative {
        \global
        s2.
        s4. s8 r8 r16 <c' f aes c>
        <c f aes c>4.^> <c ees g>8 r r
      }
      \new Staff \relative {
        \global
        \clef "bass"
        <<
        {
        \once \override DynamicText.X-offset = #-3
        <ees g c>2.~->^\f
        <ees g c>4.~ <ees g c>8
      } \\ {
        <c g c,>2.~
        <c g c,>4.~ <c g c,>8
      }
        >>
        r8 r16 <f, c' aes'>16
        <f c' aes'>4.-> <c' g'>8 r r
      }
    >>
  >>
>>
}
@end lilypond
@end ignore


@node Warum der große Aufwand?
@unnumberedsubsec Warum der große Aufwand?
@translationof Why work so hard?

Musiker sind üblicherweise zu sehr damit beschäftigt, die Musik aufzuführen,
als dass sie das Aussehen der Noten studieren könnten; darum mag diese
Beschäftigung mit typographischen Details akademisch wirken.
Das ist sie aber nicht.  Notenmaterial ist Aufführungsmaterial:
alles muss unternommen werden, damit der Musiker die Aufführung
besser bewältigt, und alles, das unklar oder unangenehm ist,
ist eine Hindernis.

Der dichtere Eindruck, den die dickeren Notenlinien und schwereren
Notationssymbole schaffen, eignet sich besser für Noten,
die weit vom Leser entfernt stehen, etwa auf einem Notenständer.
Eine sorgfältige Verteilung der Zwischenräume erlaubt es, die
Noten sehr dicht zu setzen, ohne dass die Symbole zusammenklumpen.
Dadurch werden unnötige Seitenumbrüche vermieden, so dass man
nicht so oft blättern muss.

Dies sind die Anforderungen der Typographie: Das Layout sollte
schön sein -- nicht nur aus Selbstzweck, sondern vor allem um dem
Leser zu helfen.  Für Aufführungsmaterial ist das umso wichtiger,
denn Musiker haben eine begrenzte Aufnahmefähigkeit. Je weniger
Mühe nötig ist, die Noten zu erfassen, desto mehr Zeit bleibt für
die Gestaltung der eigentlichen Musik. Das heißt: Gute
Typographie führt zu besseren Aufführungen!

Die Beispiele haben gezeigt, dass der Notensatz eine subtile und
komplexe Kunst ist und gute Ergebnisse nur mit viel Erfahrung
erlangt werden können, die Musiker normalerweise nicht haben.
LilyPond stellt unser Bemühen dar, die graphische Qualität
handgestochener Notenseiten ins Computer-Zeitalter zu transportieren
und sie für normale Musiker erreichbar zu machen. Wir haben
unsere Algorithmen, die Gestalt der Symbole und die Programm-Einstellungen
darauf abgestimmt, einen Ausdruck zu erzielen, der der Qualität
der alten Editionen entspricht, die wir so gerne betrachten
und aus denen wir gerne spielen.



@node Automatisierter Notensatz
@section Automatisierter Notensatz
@translationof Automated engraving

@cindex Notensatz, automatisch
@cindex automatischer Notensatz

Dieser Abschnitt beschreibt, was benötigt wird um ein Programm zu
schreiben, welches das Layout von gestochenen Noten nachahmen kann:
eine Methode, dem Computer gute Layouts zu erklären und detailliertes
Vergleichen mit echten Notendrucken.

@menu
* Schönheitswettbewerb::
* Verbessern durch Benchmarking::
* Alles richtig machen::
@end menu

@node Schönheitswettbewerb
@unnumberedsubsec Schönheitswettbewerb
@translationof Beauty contests

Wie sollen wir also jetzt die Typographie anwenden?
Anders gesagt: welcher von den drei Konfigurationen sollte für
den folgenden Bogen ausgewählt werden?

@lilypond
\relative {
  \clef bass
  \once \override Slur.positions = #'(1.5 . 1)
  e8[( f] g[ a b d,)] r4
  \once \override Slur.positions = #'(2 . 3)
  e8[( f] g[ a b d,)] r4
  e8[( f] g[ a b d,)] r4
}
@end lilypond

Es gibt wenige Bücher über die Kunst des Notensatzes.  Leider
haben sie nur Daumenregeln und einige Beispiele zu bieten.  Solche
Regeln können sehr informativ sein, aber sie sind weit entfernt
von einem Algorithmus, den wir in unser Programm einbauen könnten.
Indem man die Anweisungen der Literatur anwendet, kommt man zu
Algorithmen mit sehr vielen manuellen Ausnahmen.  Alle die möglichen
Fälle zu analysieren stellt sehr viel Arbeit dar und meistens
werden dennoch nicht alle Fälle vollständig abgedeckt:

@quotation
@iftex
@sourceimage{ross-beam-scan,7cm,,}
@end iftex
@ifnottex
@sourceimage{ross-beam-scan,,,.jpg}
@end ifnottex
@end quotation

(Bildquelle: Ted Ross, @emph{The Art of Music Engraving})

Anstatt zu versuchen, für jedes mögliche Szenario eine passende
Layoutregel zu definieren, müssen wir nur die Regeln genau genug
beschreiben, sodass LilyPond die Gefälligkeit von mehreren
Alternativen selber einschätzen kann.  Dann errechnen wir für jede
mögliche Konfiguration eine Hässlichkeits-Rangliste und wir wählen
die Konfiguration aus, die am wenigsten hässlich ist.

Zum Beispiel hier drei mögliche Konfiguration eines Legatobogens,
und LilyPond hat jeder Konfiguration @qq{Hässlichkeitspunkte}
verliehen.  Das erste Beispiel erhält 15.39 Punkte, weil einer der
Notenköpfe angeschnitten wird:

@lilypond
\relative {
  \clef bass
  \once \override Slur.positions = #'(1.5 . 1)
  e8[(_"15.39" f] g[ a b d,)] r4
}
@end lilypond

Das zweite Beispiel ist schöner, aber der Bogen beginnt weder noch
endet er an den Notenköpfen.  Hier werden 1.71 Punkte auf der linken
und 9.37 Punkte auf der rechten Seite verliehen, plus weiteren
2 Punkten, weil der Bogen aufsteigt, während die Melodie absteigt.
Insgesamt also 13.08 Punkte:

@lilypond
\relative {
  \clef bass
  \once \override Slur.positions = #'(2 . 3)
  e8[(_"13.08" f] g[ a b d,)] r4
}
@end lilypond

Der letzte Bogen erhält 10.04 Punkte für die Lücke rechts und
2 Punkte für die Neigung nach oben, aber er ist die schönste
der drei Varianten, sodass LilyPond ihn auswählt:

@lilypond
\relative {
  \clef bass
  e8[(_"12.04" f] g[ a b d,)] r4
}
@end lilypond

Diese Technik ist sehr allgemein und wird benutzt, um optimale
Entscheidungen für Bögenkonfigurationen, Bindebögen und Punkten
in Akkorden, Zeilenumbrüche und Seitenumbrüche zu erhalten.  Die
Ergebnisse dieser Entscheidungen können durch einen Vergleich mit
handgestochenen Noten eingeschätzt werden.


@node Verbessern durch Benchmarking
@unnumberedsubsec Verbessern durch Benchmarking
@translationof Improvement by benchmarking

Die Ausgabe von LilyPond hat sich schrittweise mit der Zeit
verbessert, und sie verbessert sich weiter, indem sie immer wieder
mit handgestochenen Noten verglichen wird.

Hier als Beispiel eine Zeile eines Benchmark-Stückes aus einer
handgestochenen Notenedition (Bärenreiter BA320):

@iftex
@sourceimage{baer-sarabande-hires,16cm,,}
@end iftex
@ifnottex
@sourceimage{baer-sarabande,,,png}
@end ifnottex

@noindent
und die gleiche Zeile als Satz einer sehr alten LilyPond-Version
(Version 1.4, Mai 2001):

@iftex
@sourceimage{pdf/lily14-sarabande,16cm,,}
@end iftex
@ifnottex
@sourceimage{lily14-sarabande,,,png}
@end ifnottex

@noindent
Die Ausgabe von LilyPond 1.4 ist auf jeden Fall leserlich, aber
ein ausführlicher Vergleich mit der Vorlage zeigt viele Fehler in
den Formatierungsdetails:

@iftex
@sourceimage{lily14-sarabande-annotated-hires,16cm,,}
@end iftex
@ifnottex
@sourceimage{lily14-sarabande-annotated,,,png}
@end ifnottex

@itemize @bullet
@item vor der Taktangabe ist nicht genug Platz
@item die Hälse der bebalkten Noten sind zu lang
@item der zweite und vierte Takt sind zu schmal
@item der Bogen sieht ungeschickt aus
@item das Triller-Symbol ist zu groß
@item die Hälse sind zu dünn
@end itemize

@noindent
(Es gibt auch zwei fehlende Notenköpfe, verschiedene editorische
Anweisungen, die Fehler und eine falsche Tonhöhe!)

Indem die Layoutregeln und das Design der Schriftarten angepasst
wurde, hat sich die Ausgabe sehr stark verbessert.  Vergleichen
Sie das gleiche Referenzbeispiel und die Ausgabe der aktuellen
LilyPond-Version (@version{}):

@iftex
@sourceimage{baer-sarabande-hires,16cm,,}
@end iftex
@ifnottex
@sourceimage{baer-sarabande,,,png}
@end ifnottex

@lilypond[staffsize=17.5,line-width=15.9\cm]
\relative c {
  \clef "bass"
  \key d \minor
  \time 3/4
  \mergeDifferentlyDottedOn
  <<
    { \slurDashed d8.-\flageolet( e16) e4.-\trill( d16 e) }
     \\
    { d4_2 a2 }
  >>
  \slurDashed
  <f' a, d,>4. e8( d c)
  \slurSolid
  bes8 g' f e16( f g_1 a_2 bes_3 d,_2)
  \slurDashed
  cis4.-\trill b8_3( a g)
  <<
    { \slurDashed d'8.( e16) e4.-\trill( d16 e) }
     \\
    { <f, a>4 a2 }
  >>
}
@end lilypond

@noindent
Die jetzige Ausgabe ist kein Klon der Referenzedition, aber sie ist
sehr viel näher an einer Publikationsqualität.


@node Alles richtig machen
@unnumberedsubsec Alles richtig machen
@translationof Getting things right

Wir können auch die Fähigkeiten von LilyPond, Notensatzentscheidungen
alleine zu fällen, messen, indem wir die Ausgabe von LilyPond mit
der Ausgabe eines kommerziellen Notensatzprogramms vergleichen.
In diesem Fall haben wir Finale 2008 genommen, eines der beliebtesten
Notensatzprogramme, insbesondere in Nordamerika.  Sibelius ist
Finales hauptsächlicher Gegenspieler, offensichtlich vor allem in
Europa verbreitet.

Für unseren Vergleich haben wir uns für die Fuge in G-Moll aus
dem Wohltemperierten Clavier 1, BWV 861 von J. S. Bach entschieden,
mit dem Hauptthema:

@lilypond
\relative {
  \key g \minor
  \clef "treble_8"
  r8 d' ees g, fis4 g
  r8 a16 bes c8 bes16 a bes8
}
@end lilypond

@noindent
In unserem Vergleich setzten wir die letzten sieben Takte des
Stückes (28--34) in Finale und LilyPond.  Das ist der Punkt, an
der das Thema als dreistimmige Engführung in den Schlussabschnitt
überleitet.  In der Finale-Version haben wir der Versuchung
widerstanden, jedwede Anpassungen abweichend vom Standard vorzunehmen,
weil wir zeigen wollen, welche Dinge von den beiden Programmen
ohne Hilfeleistung richtig gemacht werden.  Die einzigen größeren
Änderungen, die wir vorgenommen haben, war die Anpassung der
Seitengröße an die Seitengröße dieses Aufsatzes und die Begrenzung
der Noten auf zwei Systeme, um den Vergleich einfacher zu machen.
In der Standardeinstellung Finale hätte zwei Zeilen mit je drei
Takten und schließlich eine letzte Zeile gesetzt, die nur einen einzigen
Takt enthält.

Viele der Unterschiede zwischen den beiden Sätzen finden sich
in den Takten 28--29, hier zuerst in Finales Version, dann in der
Version von LilyPond:

@iftex
@sourceimage{pdf/bwv861mm28-29,14cm,,}
@end iftex
@ifnottex
@sourceimage{bwv861mm28-29,,,png}
@end ifnottex

@lilypond[staffsize=19.5,line-width=14\cm]
global = { \key g \minor }

partI = \relative {
  \voiceOne
  fis'8 d' ees g, fis4 g
  r8 a16 bes c8 bes16 a d8 r r4
}

partII = \relative {
  \voiceTwo
  d'4 r4 r8 d'16 c bes8 c16 d
  ees8 d c ees a, r r4
}

partIII = \relative {
  \voiceOne
  r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
}

partIV = \relative {
  \voiceTwo
  d4 r r2
  r8 d ees g, fis4 a
}

\score {
  <<
    % \set Score.barNumberVisibility = #all-bar-numbers-visible
    % required in 2.13
    \set Score.currentBarNumber = #28
    \bar ""
    \new PianoStaff <<
      \new Staff = "RH"
      <<
        \global
        \new Voice = "voiceI" { \partI }
        \new Voice = "voiceII" { \partII }
      >>

      \new Staff = "LH" <<
        \clef "bass"
        \global
        \new Voice = "voiceIII" { \partIII }
        \new Voice = "voiceIV" { \partIV }
      >>
    >>
  >>
  \layout {
    \context {
      \Staff
      \remove "Time_signature_engraver"
    }
    \context {
      \PianoStaff
      \override StaffGrouper.staff-staff-spacing.padding = #1
    }
  }
}
@end lilypond

Einige der Mängel des nicht editierten Finale-Satzes beinhalten:

@itemize @bullet

@item Die meisten Balken sind zu weit vom Notensystem entfernt.
Ein Balken, der zum Zentrum des Systems zeigt, sollte etwa die
Länge einer Oktave haben, aber Notensetzer verkürzen die Länge,
wenn der Balken in polyphonen Situationen aus dem System
herauszeigt.  Die Bebalkung von Finale kann einfach mit ihrem
Patterson Beams-Plugin verbessert werden, aber wir haben diesen
Schritt für dieses Beispiel ausgelassen.

@item Finale passt die Position von ineinander greifenden Notenköpfen
nicht an, sodass die Noten sehr schwer lesbar werden, wenn
die untere und obere Stimme zeitweise ausgetauscht werden:

@lilypond
collide = \once \override NoteColumn.force-hshift = #0

\score {
  <<
    \new Voice = "sample" \relative c''{
      \key g \minor
      <<
        { \voiceOne g4 \collide g4 }
        \new Voice { \voiceTwo bes \collide bes }
      >>
    }
    \new Lyrics \lyricsto "sample" { "good " " bad" }
  >>
}
@end lilypond

@item Finale positioniert alle Pausen an einer festen Position auf
dem System.  Der Benutzer kann sie anpassen, wie er es richtig
findet, aber das Programm unternimmt keinen Versuch, den Inhalt
der anderen Stimme mit einzubeziehen.  Durch einen Glücksfall
kommen keine wirklichen Kollisionen zwischen Noten und Pausen
in diesem Beispiel vor, aber das liegt mehr an der Position der
Noten als an der der Pausen.  Anders gesagt: Bach verdient mehr
Aufmerksamkeit um vollständige Kollisionen zu vermeiden als
Finale ihm gönnt.

@end itemize

Dieses Beispiel soll nicht suggerieren, dass man mit Finale nicht
Notensatz in Publikationsqualität erstellen könnte.  Das Programm ist
durchaus dazu fähig, wenn ein erfahrener Benutzer genug Zeit und Fähigkeit mitbringt.
Einer der fundamentalen Unterschiede zwischen LilyPond und kommerziellen
Notensatzprogrammen ist, dass LilyPond versucht, den Aufwand an
menschlicher Intervention auf ein absolutes Minimum zu reduzieren,
während andere Programme versuchen, ein attraktives Programmfenster
zu bieten, in dem die Anpassungen vorgenommen werden können.

Einen besonders hervorstechenden Mangel von Finale
ist ein fehlendes b-Vorzeichen in Takt 33:

@quotation
@iftex
@sourceimage{pdf/bwv861mm33-34-annotate,7.93cm,,}
@end iftex
@ifnottex
@sourceimage{bwv861mm33-34-annotate,,,png}
@end ifnottex
@end quotation

@noindent
Das b-Symbol wird benötigt, um das Auflösungzeichen im selben
Takt rückgängig zu machen, aber Finale lässt es aus, weil es in
einer anderen Stimme vorkommt.  Der Benutzer muss nicht nur daran
denken, ein Balken-Plugin zu starten und die Notenköpfe und Pausen
neu anzuordnen, er muss auch jeden Takt prüfen, ob Versetzungszeichen
aus anderen Stimmen korrigiert werden müssen, damit nicht ein
Notensatzfehler die Probe unnötig unterbricht.

Wenn Sie diese Beispiel noch detaillierter betrachten wollen,
können Sie den vollen siebentaktigen Ausschnitt am Ende dieses
Aufsatzes als Notensatz in vier unterschiedlichen
publizierten Editionen finden.  Nähere Betrachtung zeigt, dass
es einige akzeptable Variationen zwischen den handgestochenen
Beispielen gibt, dass LilyPond aber ziemlich guten Notensatz
im Rahmen dieser Variationen produziert.  Auch die LilyPond-Ausgabe
hat noch ihre Fehler: sie ist beispielsweise etwas zu aggressiv
bei der Verkürzung einiger Hälse -- hier ist also noch Raum für
weitere Entwicklung und Feineinstellung.

Natürlich hängt Typographie vom menschlichen Urteil der Erscheinung
ab, sodass Menschen nicht vollständig ersetzt werden können.  Viel
der eintönigen Arbeit kann jedoch automatisiert werden.  Wenn
LilyPond die meisten üblichen Situationen richtig löst, ist das
schon eine große Verbesserung gegenüber existierender Software.
Im Laufe der Jahre wir das Programm immer besser und macht mehr
und mehr Sachen automatisch, sodass manuelles Eingreifen immer
seltener wird.  Wo manuelle Anpassungen benötigt werden,
wurde die Struktur von LilyPond mit Flexibilität im Hinterkopf
geplant.


@node Ein Programm bauen
@section Ein Programm bauen
@translationof Building software

Dieser Abschnitt beschreibt einige der Entscheidungen,
die wir während des Programmierens für das Design von LilyPond
getroffen haben.

@menu
* Die Darstellung der Musik::
* Welche Symbole?::
* Flexible Architektur::
@end menu

@node Die Darstellung der Musik
@unnumberedsubsec Die Darstellung der Musik
@translationof Music representation

@cindex Syntax
@cindex rekursive Strukturen

Idealerweise ist das Eingabeformat für ein komplexes Satzsystem die
abstrakte Beschreibung des Inhaltes. In diesem Fall wäre das die
Musik selber. Das stellt uns aber vor ein ziemlich großes Problem,
denn wie können wir definieren, was Musik wirklich ist? Anstatt darauf
eine Antwort zu suchen, haben wir die Frage einfach umgedreht. Wir
schreiben ein Programm, das den Notensatz beherrscht und machen das
Format so einfach wie möglich. Wenn es nicht mehr vereinfacht
werden kann, haben wir per Definition nur noch den reinen Inhalt. Unser
Format dient als die formale Definition eines Musiktextes.

Die Syntax ist gleichzeitig die Benutzerschnittstelle bei LilyPond,
darum soll sie einfach zu schreiben sein; z. B. bedeutet

@example
@{
  c'4 d'8
@}
@end example

@noindent
dass eine Viertel c' und eine Achtel d' erstellt werden sollen,
wie in diesem Beispiel:

@lilypond[quote]
{
  c'4 d'8
}
@end lilypond

In kleinem Rahmen ist diese Syntax sehr einfach zu benutzen.  In
größeren Zusammenhängen aber brauchen wir Struktur.  Wie sonst kann
man große Opern oder Symphonien notieren?  Diese Struktur wird
gewährleistet durch sog. @emph{music expressions} (Musikausdrücke):
indem kleine Teile zu größeren kombiniert werden, kann komplexere
Musik dargestellt werden. So etwa hier:

@lilypond[quote,verbatim,fragment]
f'4
@end lilypond

@noindent
Gleichzeitig erklingende Noten werden hinzugefügt, indem man alle in @code{<<} und @code{>>} einschließt.

@example
<<c4 d4 e4>>
@end example

@lilypond[quote,fragment,relative=1]
\new Voice { <<c4 d4 e>> }
@end lilypond

@noindent
Um aufeinanderfolgende Noten darzustellen, werden sie in geschweifte Klammern gefasst:

@code{@{@tie{}@dots{}@tie{}@}}

@example
@{ f4 <<c4 d4 e4>> @}
@end example

@lilypond[quote,relative=1,fragment]
{ f4 <<c d e4>> }
@end lilypond

@noindent
Dieses Gebilde ist in sich wieder ein Ausdruck, und kann
daher mit einem anderen Ausdruck kombiniert werden (hier mit einer Halben), wobei @code{<<}, @code{\\}, and @code{>>} eingesetzt wird:

@example
<< g2 \\ @{ f4 <<c4 d4 e4>> @} >>
@end example

@lilypond[quote,fragment,relative=2]
\new Voice { << g2 \\ { f4 <<c d e>> } >> }
@end lilypond

Solche geschachtelten Strukturen können sehr gut in einer
kontextunabhängigen Grammatik beschrieben werden. Der Programmcode
für den Satz ist auch mit solch einer Grammatik erstellt. Die Syntax
von LilyPond ist also klar und ohne Zweideutigkeiten definiert.

Die Benutzerschnittstelle und die Syntax werden als erstes vom Benutzer
wahrgenommen. Teilweise sind sie eine Frage des Geschmackes und werden viel
diskutiert. Auch wenn Geschmacksfragen ihre Berechtigung
haben, sind sie nicht sehr produktiv. Im großen Rahmen von LilyPond
spielt die Eingabe-Syntax nur eine geringe Rolle, denn eine logische
Syntax zu schreiben ist einfach, guten Formatierungscode aber sehr viel
schwieriger. Das kann auch die Zeilenzahl der Programmzeilen zeigen:
Analysieren und Darstellen nimmt nur etwa 10% des Codes ein:

Während wir die Strukturen von LilyPond entwickelten, machten wir einige Entscheidungen, die sich von anderen Programmen unterscheiden.
Nehmen wir etwa die hierarchische Natur der Musiknotation:

@lilypond[quote,fragment]
<<
  \new Staff \relative {
    \key g \major
    \time 3/4
    d''4 g,8 a b c d4 g, g
  }
  \new Staff \relative {
    \clef "bass"
    \key g \major
    <g b d>2 a4 b2.
  }
>>
@end lilypond

In diesem Fall werden Tonhöhen in Akkorde gruppiert, die zu Takten
gehören, welche wiederum zu Notensystemen gehören.  Das erinnert an
die saubere Struktur von geschachtelten Kästen:

@quotation
@iftex
@sourceimage{pdf/nestedboxes,,4cm,}
@end iftex
@ifnottex
@sourceimage{nestedboxes,,,png}
@end ifnottex
@end quotation

Leider ist die Struktur nur sauber, weil sie auf einige sehr beschränkte
Annahmen basiert.  Das wird offensichtlich, wenn man ein komplizierteres
Beispiel heranzieht:

@lilypond[quote]
\layout {
  \context {
    \Score
    \remove "Timing_translator"
    \remove "Default_bar_line_engraver"
  }
  \context {
    \Staff
    \consists "Timing_translator"
    \consists "Default_bar_line_engraver"
 }
}

\new PianoStaff <<
  \new Staff = "RH" <<
    \new Voice = "I" \relative {
      \time 3/4
      \voiceOne
      \tuplet 7/6 { g''8 g g g g g g }
      \oneVoice
      r4 <b,, fis' g bes> r4\fermata
    }
    \new Voice = "II" \relative {
      \voiceTwo
      c'4
      \tuplet 5/4 {
        <c ees>8 f g
        \change Staff = "LH" \oneVoice
        \stemUp g,( c}
      r4
      \override Stem.cross-staff = ##t
      \override Stem.length = #12
      <fis, b>) r\fermata
    }
  >>
  \new Staff = "LH" <<
    \new Voice = "III" \relative {
      \time 2/4
      \clef "bass"
      g4 \stopStaff s
      \startStaff s2*2
    }
  >>
>>
@end lilypond

In diesem Beispiel beginnen Systeme plötzlich und enden plötzlich,
Stimmen springen zwischen den Systemen herum und die Systeme haben
unterschiedliche Taktarten.  Viele Software-Pakte würden sehr damit
zu kämpfen haben, dieses Beispiel darzustellen, weil sie nach dem
Prinzip von geschachtelten Kästen aufgebaut sind.  In LilyPond dagegen
haben wir versucht, die Struktur und das Eingabeformat so flexibel wie
möglich zu gestalten.


@node Welche Symbole?
@unnumberedsubsec Welche Symbole?
@translationof What symbols to engrave?

@cindex Notensatz
@cindex Typographie
@cindex Stempel
@cindex Matrize
@cindex Engraver
@cindex Plugin

Während des Notensatzprozesses entscheidet sich, wo
Symbole platziert werden.  Das kann aber nur gelingen,
wenn vorher entschieden wird, @emph{welche} Symbole
gesetzt werden sollen, also welche Art von Notation benutzt
werden soll.

Die heutige Notation ist ein System zur Musikaufzeichnung,
das sich über die letzten 1000 Jahre entwickelt hat.  Die
Form, die heute üblicherweise benutzt wird, stammt aus der frühen
Renaissance.  Auch wenn sich die grundlegenden Formen (also
die Notenköpfe, das Fünfliniensystem) nicht verändert haben,
entwickeln sich die Details trotzdem immer noch weiter, um
die Errungenschaften der Neuen Musik darstellen zu können.  Die
Notation umfasst also 500 Jahre Musikgeschichte.  Ihre Anwendung
reicht von monophonen Melodien bis zu ungeheuer komplexem Kontrapunkt
für großes Orchester.

Wie bekommen wir dieses vielköpfige Monster zu fassen und in die
Fesseln eines Computerprogrammes zu legen?
Unsere Lösung ist es, das Problem in kleine (programmierbare) Happen zu zerteilen, so dass jede Art
von Symbol durch ein eigenes Modul, als Plugin bezeichnet,
verarbeitet werden kann.  Jedes Plugin ist vollständig modular
und unabhängig und kann unabhängig entwickelt und verbessert
werden.  Derartige Plugins werden @code{engraver} genannt,
analog zu den Notenstechern (engl. engraver), die musikalische
Ideen in graphische Symbole übersetzen.

Im nächsten Beispiel wird gezeigt, wie mit dem Plugin für die Notenköpfe,
dem @code{Note_heads_engraver} (@qq{Notenkopfstecher}) der Satz begonnen wird.

@lilypond[quote,ragged-right]
\include "engraver-example.ily"

\score {
  \topVoice
  \layout {
    \context {
      \Voice
      \remove "Stem_engraver"
      \remove "Phrasing_slur_engraver"
      \remove "Slur_engraver"
      \remove "Script_engraver"
      \remove "Beam_engraver"
      \remove "Auto_beam_engraver"
    }
    \context {
      \Staff
      \remove "Accidental_engraver"
      \remove "Key_engraver"
      \remove "Clef_engraver"
      \remove "Bar_engraver"
      \remove "Time_signature_engraver"
      \remove "Staff_symbol_engraver"
      \consists "Pitch_squash_engraver"
    }
  }
}
@end lilypond

@noindent
Dann fügt ein @code{Staff_symbol_engraver} (@qq{Notensystemstecher})
die Notenlinien hinzu.

@lilypond[quote,ragged-right]
\include "engraver-example.ily"

\score {
  \topVoice
  \layout {
    \context {
      \Voice
      \remove "Stem_engraver"
      \remove "Phrasing_slur_engraver"
      \remove "Slur_engraver"
      \remove "Script_engraver"
      \remove "Beam_engraver"
      \remove "Auto_beam_engraver"
    }
    \context {
      \Staff
      \remove "Accidental_engraver"
      \remove "Key_engraver"
      \remove "Clef_engraver"
      \remove "Bar_engraver"
      \consists "Pitch_squash_engraver"
      \remove "Time_signature_engraver"
    }
  }
}
@end lilypond

@noindent
Der @code{Clef_engraver} (@qq{Notenschlüsselstecher}) definiert
eine Referenzstelle für das System.

@lilypond[quote,ragged-right]
\include "engraver-example.ily"

\score {
  \topVoice
  \layout {
    \context {
      \Voice
      \remove "Stem_engraver"
      \remove "Phrasing_slur_engraver"
      \remove "Slur_engraver"
      \remove "Script_engraver"
      \remove "Beam_engraver"
      \remove "Auto_beam_engraver"
    }
    \context {
      \Staff
      \remove "Accidental_engraver"
      \remove "Key_engraver"
      \remove "Bar_engraver"
      \remove "Time_signature_engraver"
    }
  }
}
@end lilypond

@noindent
Der @code{Stem_engraver} (@qq{Halsstecher}) schließlich fügt
 Hälse hinzu.

@lilypond[quote,ragged-right]
\include "engraver-example.ily"

\score {
  \topVoice
  \layout {
    \context {
      \Voice
      \remove "Phrasing_slur_engraver"
      \remove "Slur_engraver"
      \remove "Script_engraver"
      \remove "Beam_engraver"
      \remove "Auto_beam_engraver"
    }
    \context {
      \Staff
      \remove "Accidental_engraver"
      \remove "Key_engraver"
      \remove "Bar_engraver"
      \remove "Time_signature_engraver"
    }
  }
}
@end lilypond

@noindent
Dem @code{Stem_engraver} wird jeder Notenkopf mitgeteilt,
der vorkommt. Jedes Mal, wenn ein Notenkopf erscheint (oder mehrere bei
einem Akkord), wird ein Hals-Objekt erstellt und an den
Kopf geheftet. Wenn wir dann noch Engraver für Balken, Bögen,
Akzente, Versetzungszeichen, Taktstriche, Taktangaben und Tonartbezeichnungen
hinzufügen, erhalten wir eine vollständige Notation.


@lilypond[quote,ragged-right]
\include "engraver-example.ily"
\score { \topVoice }
@end lilypond

@cindex Polyphonie
@cindex Mehrstimmigkeit
@cindex Notensatz, Mehrstimmigkeit
@cindex Kontexte

Dieses System funktioniert gut für monophone Musik, aber wie geht
es mit Polyphonie? Hier müssen sich mehrere Stimmen ein System teilen.

@lilypond[quote,ragged-right]
\include "engraver-example.ily"
\new Staff << \topVoice \\ \botVoice >>
@end lilypond

In diesem Fall benutzen beide Stimmen das System und die Vorzeichen gemeinsam,
aber die Hälse, Bögen, Balken usw. sind jeder einzelnen Stimme
eigen. Die Engraver müssen also gruppiert werden. Die Köpfe,
Hälse, Bögen usw. werden in einer Gruppe mit dem Namen @qq{Voice
context} (Stimmenkontext) zusammengefasst, die Engraver für den
Schlüssel, die Vorzeichen, Taktstriche usw. dagegen in einer
Gruppe mit dem Namen @qq{Staff context} (Systemkontext). Im Falle
von Polyphonie hat ein Staff-Kontext dann also mehr als nur einen
Voice-Kontext. Auf gleiche Weise können auch mehrere Staff-Kontexte
in einen großen Score-Kontext (Partiturkontext) eingebunden werden.
Der Score-Kontext ist auf der höchsten Ebene der Kontexte.


@lilypond[quote,ragged-right]
\include "engraver-example.ily"
\score {
   <<
      \new Staff << \topVoice \\ \botVoice >>
      \new Staff << \pah \\ \hoom >>
   >>
}
@end lilypond

@seealso
Referenz der Interna: @rinternals{Contexts}.


@node Flexible Architektur
@unnumberedsubsec Flexible Architektur
@translationof Flexible architecture

Als wir anfingen, haben wir LilyPond vollständig in der Programmiersprache C++
geschrieben. Das hieß, dass der Funktionsumfang des Programms vollständig durch
die Programmierer festgelegt war. Das stellte sich aus einer Reihe von Gründen
als unzureichend heraus:

@itemize @bullet

@item Wenn LilyPond Fehler macht, muss der Benutzer die
Einstellungen ändern können. Er muss also Zugang zur
Formatierungsmaschinerie haben.  Deshalb können die Regeln und
Einstellungen nicht beim Kompilieren des Programms festgelegt
werden, sondern sie müssen zugänglich sein, während das Programm
aktiv ist.

@item Notensatz ist eine Frage des Augenmaßes, und damit auch vom
Geschmack abhängig.  Benutzer können mit unseren Entscheidungen
unzufrieden sein.  Darum müssen also auch die Definitionen des
typographischen Stils dem Benutzer zugänglich sein.

@item Schließlich verfeinern wir unseren Formatierungsalgorithmus
immer weiter, also müssen die Regeln auch flexibel sein. Die
Sprache C++ zwingt zu einer bestimmten Gruppierungsmethode,
die nicht den Regeln für den Notensatz entspricht.
@end itemize

@cindex Scheme-Programmiersprache

Diese Probleme wurden angegangen, indem ein Übersetzer für
die Programmiersprache Scheme integriert wurde und Teile
von LilyPond in Scheme neu geschrieben wurden.  Die derzeitige
Formatierungsarchitektur ist um die Notation von graphischen
Objekten herum aufgebaut, die von Scheme-Variablen und -Funktionen
beschrieben werden.  Diese Architektur umfasst Formatierungsregeln,
typographische Stile und individuelle Formatierungsentscheidungen.
Der Benutzer hat direkten Zugang zu den meisten dieser Einstellungen.

Scheme-Variablen steuern Layout-Entscheidungen.  Zum Beispiel haben
viele graphische Objekte eine Richtungsvariable, die zwischen
oben und unten (oder rechts und links) wählen kann.  Hier etwa
sind zwei Akkorde mit Akzenten und Arpeggien.
Beim ersten Akkord sind alle Objekte nach unten (oder links)
ausgerichtet, beim zweiten nach oben (rechts).

@lilypond[quote,ragged-right]
\score {
  \relative {
    \stemDown <e' g b>4_>-\arpeggio
    \override Arpeggio.direction = #RIGHT
    \stemUp <e g b>4^>-\arpeggio
  }
  \layout {
    \context {
      \Score
      \override SpacingSpanner.spacing-increment = #3
      \hide TimeSignature
    }
  }
}
@end lilypond

@cindex Formatierung einer Partitur
@cindex Partitur, Formatierung
@cindex Formatierungsregeln

@noindent
Der Prozess des Notensetzens besteht für das Programm darin,
die Variablen der graphischen Objekte zu lesen und zu
schreiben.  Einige Variablen haben festgelegte Werte. So
ist etwa die Dicke von vielen Linien – ein Charakteristikum
des typographischen Stils – von vornherein festgelegt.
Wenn sie geändert werden, ergibt sich ein anderer typographischer Eindruck.

@lilypond[quote,ragged-right]
fragment = {
   \clef bass f8 as8
   c'4-~ c'16 as g f e16 g bes c' des'4
}
<<
   \new Staff \fragment
   \new Staff \with {
      \override Beam.beam-thickness = #0.3
      \override Stem.thickness = #0.5
      \override Bar.thickness = #3.6
      \override Tie.thickness = #2.2
      \override StaffSymbol.thickness = #3.0
      \override Tie.extra-offset = #'(0 .  0.3)
      }
      \fragment
>>
@end lilypond

Formatierungsregeln sind auch vorbelegte Variablen.  Zu jedem Objekt gehören
Variablen, die Prozeduren enthalten. Diese Prozeduren machen die eigentliche
Satzarbeit aus, und wenn man sie durch andere ersetzt, kann die Darstellung
von Objekten verändert werden.  Im nächsten Beispiel wird die Regel, nach der
die Notenköpfe gezeichnet werden, während des Ausschnitts verändert.

@lilypond[quote,ragged-right]
#(set-global-staff-size 30)

#(define (mc-squared grob orig current)
  (let* ((interfaces (ly:grob-interfaces grob))
         (pos (ly:grob-property grob 'staff-position)))
    (if (memq 'note-head-interface interfaces)
        (begin
          (ly:grob-set-property! grob 'stencil
            (grob-interpret-markup grob
              (make-lower-markup 0.5
                (case pos
                  ((-5) "m")
                  ((-3) "c ")
                  ((-2) (make-smaller-markup (make-bold-markup "2")))
                  (else "bla")))))))))

\new Voice \relative {
  \stemUp
  \set autoBeaming = ##f
  \time 2/4
  <d' f g>4
  \once \override NoteHead.stencil = #note-head::brew-ez-stencil
  \once \override NoteHead.font-size = #-7
  \once \override NoteHead.font-family = #'sans
  \once \override NoteHead.font-series = #'bold
  <d f g>4
  \once \override NoteHead.style = #'cross
  <d f g>4
  \applyOutput Voice #mc-squared
  <d f g>4
  <<
    { d8[ es-( fis^^ g] fis2-) }
    \repeat unfold 5 { \applyOutput Voice #mc-squared s8 }
  >>
}
@end lilypond


@node LilyPond die Arbeit überlassen
@section LilyPond die Arbeit überlassen
@translationof Putting LilyPond to work

@cindex einfaches Beispiel
@cindex Beispiel, einfach

Wir haben LilyPond als einen Versuch geschrieben, wie man die Kunst des
Musiksatzes in ein Computerprogramm gießen kann. Dieses
Programm kann nun dank vieler harter Arbeitsstunden benutzt werden,
um sinnvolle Aufgaben zu erledigen. Die einfachste ist dabei der
Notendruck.

@lilypond[quote,relative=1]
{
  \time 2/4
  c4 c g'4 g a4 a g2
}
@end lilypond

@noindent
Indem wir Akkordsymbole und einen Text hinzufügen, erhalten wir
ein Liedblatt.

@lilypond[quote,ragged-right]
<<
   \chords { c2 c f2 c }
   \new Staff
   \relative {
     \time 2/4
     c'4 c g' g a a g2
   }
   \addlyrics { twin -- kle twin -- kle lit -- tle star }
>>
@end lilypond

Mehrstimmige Notation und Klaviermusik kann auch gesetzt werden. Das
nächste Beispiel zeigt einige etwas exotischere Konstruktionen:

@lilypond[quote,line-width=15.9\cm]
\header {
  title = "Screech and boink"
  subtitle = "Random complex notation"
  composer = "Han-Wen Nienhuys"
}

\score {
  \context PianoStaff <<
    \new Staff = "up" {
      \time 4/8
      \key c \minor
      << {
        \revert Stem.direction
        \change Staff = down
        \set subdivideBeams = ##t
        g16.[
          \change Staff = up
          c'''32
          \change Staff = down
          g32
          \change Staff = up
          c'''32
          \change Staff = down
          g16]
        \change Staff = up
        \stemUp
        \set followVoice = ##t
        c'''32([ b''16 a''16 gis''16 g''32)]
      } \\ {
        s4 \tuplet 3/2 { d'16[ f' g'] } as'32[ b''32 e'' d'']
      } \\ {
        s4 \autoBeamOff d''8.. f''32
      } \\ {
        s4 es''4
      } >>
    }

    \new Staff = "down" {
      \clef bass
      \key c \minor
      \set subdivideBeams = ##f
      \override Stem.french-beaming = ##t
      \override Beam.beam-thickness = #0.3
      \override Stem.thickness = #4.0
      g'16[ b16 fis16 g16]
      << \makeClusters {
        as16 <as b>
        <g b>
        <g cis>
      } \\ {
        \override Staff.Arpeggio.arpeggio-direction =#down
        <cis, e, gis, b, cis>4\arpeggio
      }
    >> }
  >>
  \midi {
    \tempo 8 = 60
  }
  \layout {
    \context {
      \Staff
      \consists "Horizontal_bracket_engraver"
    }
  }
}
@end lilypond

Die obenstehenden Beispiele wurde manuell erstellt, aber das ist nicht
die einzige Möglichkeit. Da der Satz fast vollständig automatisch abläuft,
kann er auch von anderen Programmen angesteuert werden, die Musik oder Noten
verarbeiten. So können etwa ganze Datenbanken musikalischer Fragmente automatisch
in Notenbilder umgewandelt werden, die dann auf Internetseiten oder
in Multimediapräsentation Anwendung finden.

Dieser Aufsatz zeigt eine weitere Möglichkeit: Die Noten werden als
reiner Text eingegeben und können darum sehr einfach integriert werden
in andere textbasierte Formate wie etwa @LaTeX{}, HTML oder, wie in diesem
Fall, Texinfo. Mithilfe des Programmes @command{lilypond-book},
das in LilyPond inbegriffen ist, werden die Fragmente mit
Notenbildern ersetzt und in die produzierte PDF- oder HTML-Datei
eingefügt.  Ein weiteres Beispiel ist die von LilyPond unabhängige
Erweiterung OOoLilyPond für OpenOffice.org, mit der es sehr einfach
ist, Musikbeispiele in Dokumente einzufügen.

Zu mehr Beispielen, wie LilyPond sich in Aktion verhält, für vollständige
Dokumentation und das Programm LilyPond besuchen Sie unsere
Webseite: www.lilypond.org.


@page
@node Notensatzbeispiele (BWV 861)
@section Notensatzbeispiele (BWV 861)
@translationof Engraved examples (BWV 861)

Dieser Abschnitt enthält vier Referenz-Notenstiche und zwei
computergesetzte Versionen der Fuge G-Moll aus dem Wohltemperierten
Clavier I (BWV 681) von J. S. Bach (die letzten sieben Takte).

@noindent
Bärenreiter BA5070 (Neue Ausgabe Sämtlicher Werke, Serie V, Band 6.1,
1989):

@iftex
@sourceimage{bwv861-baer,16cm,,}
@end iftex
@ifnottex
@sourceimage{bwv861-baer-small,,,png}
@end ifnottex

@noindent
Bärenreiter BA5070 (Neue Ausgabe Sämtlicher Werke, Serie V, Band 6.1,
1989), eine alternative musikalische Quelle.  Neben den
musikalischen Unterschieden sind hier auch ein paar unterschiedliche
Notensatzentscheidungen getroffen worden, sogar vom selben Herausgeber
in der selben Edition:

@iftex
@sourceimage{bwv861-baer-alt,16cm,,}
@end iftex
@ifnottex
@sourceimage{bwv861-baer-alt-small,,,png}
@end ifnottex

@noindent
Breitkopf & Härtel, bearbeitet von Ferruccio Busoni (Wiesbaden, 1894),
auch in der Petrucci Music Library (IMSLP #22081) erhältlich.
Die editorischen Bezeichnungen (Fingersatz, Artikulation usw.)
wurde entfernt, um bessere Vergleichbarkeit mit den anderen
Editionen zu bieten:

@iftex
@sourceimage{bwv861-breitkopf,16cm,,}
@end iftex
@ifnottex
@sourceimage{bwv861-breitkopf-small,,,png}
@end ifnottex

@noindent
Bach-Gesellschaft Edition (Leipzig, 1866), erhältlich in der Petrucci
Music Library (IMSPL #02221):

@iftex
@sourceimage{bwv861-gessellschaft,16cm,,}
@end iftex
@ifnottex
@sourceimage{bwv861-gessellschaft-small,,,png}
@end ifnottex

@noindent
Finale 2008:

@iftex
@sourceimage{pdf/bwv861-finale2008a,,,}
@end iftex
@ifnottex
@sourceimage{bwv861-finale2008a,,,png}
@end ifnottex

@sp 4
@noindent
LilyPond, version @version{}:

@lilypond[staffsize=14.3,line-width=15.9\cm]
global = {\key g \minor}

partI = \relative {
  \voiceOne
  fis'8 d' ees g, fis4 g
  r8 a16 bes c8 bes16 a d8 r r4
  r2 r8 d16 ees f8 ees16 d
  ees4 ~ 16 d c bes a4 r8 ees'16 d
  c8 d16 ees d8 e16 fis g8 fis16 g a4 ~
  8 d, g f ees d c bes
  a2 g\fermata \bar "|."
}

partII = \relative {
  \voiceTwo
  d'4 r4 r8 d'16 c bes8 c16 d
  ees8 d c ees a, r r4
  r8 fis16 g a8 g16 fis g2 ~
  2 r8 d' ees g,
  fis4 g r8 a16 bes c8 bes16 a
  bes4. <g b>8 <a c> r <d, g> r
  <ees g>4 <d fis> d2
}
partIII = \relative {
  \voiceOne
  r2 r8 d' ees g, fis4 g r8 a16 bes c8 bes16 a
  bes2 ~ 8 b16 a g8 a16 b
  c4 r r2
  R1
  r8 d ees g, fis4 g
  r8 a16 bes c8 bes16 a b2
}
partIV = \relative {
  \voiceTwo
  d4 r r2
  r8 d ees g, fis4 a
  d,8 d'16 c bes8 c16 d ees2 ~
  8 ees16 d c8 d16 ees fis,8 a16 g fis8 g16 a
  d,8 d'16 c bes8 c16 d ees8 c a fis'
  g f ees d c bes a g
  c a d d, g2\fermata
}

\score {
  <<
    % \set Score.barNumberVisibility = #all-bar-numbers-visible
    % required in 2.13
    \set Score.currentBarNumber = #28
    \bar ""
    \new PianoStaff <<
      \new Staff = "RH" <<
        \global
        \new Voice = "voiceI" { \partI }
        \new Voice = "voiceII" { \partII }
      >>

      \new Staff = "LH" <<
        \clef "bass"
        \global
        \new Voice = "voiceIII" { \partIII }
        \new Voice = "voiceIV" { \partIV }
      >>
    >>
  >>
  \layout {
    \context {
      \Staff
      \remove "Time_signature_engraver"
    }
    \context {
      \PianoStaff
      \override StaffGrouper.staff-staff-spacing.padding = #1
    }
  }
}
@end lilypond
