]> git.donarmstrong.com Git - lilypond.git/commitdiff
Merge branch 'lilypond/translation' of ssh://git.sv.gnu.org/srv/git/lilypond into...
authorTill Paala <till.rettig@gmx.de>
Fri, 29 Jan 2010 20:18:39 +0000 (22:18 +0200)
committerTill Paala <till.rettig@gmx.de>
Fri, 29 Jan 2010 20:18:39 +0000 (22:18 +0200)
Conflicts:
Documentation/de/learning.tely

16 files changed:
Documentation/de/essay.tely
Documentation/de/essay/engraving.itely
Documentation/de/essay/literature.itely
Documentation/de/extending.tely [new file with mode: 0644]
Documentation/de/extending/programming-interface.itely [new file with mode: 0644]
Documentation/de/extending/scheme-tutorial.itely [new file with mode: 0644]
Documentation/de/learning.tely
Documentation/de/learning/common-notation.itely
Documentation/de/learning/introduction.itely [deleted file]
Documentation/de/learning/scheme-tutorial.itely [deleted file]
Documentation/de/learning/tutorial.itely [new file with mode: 0644]
Documentation/de/macros.itexi
Documentation/de/notation.tely
Documentation/de/notation/programming-interface.itely [deleted file]
Documentation/de/usage.tely
Documentation/de/usage/suggestions.itely [new file with mode: 0644]

index bb776b8aabbac0461283059579ea7b6348c04c6e..dbda6b668f216a2d6b27626d04188d623b2e0410 100644 (file)
@@ -1,23 +1,34 @@
 \input texinfo @c -*- coding: utf-8; mode: texinfo; -*-
 @ignore
-    Translation of GIT committish: 67373601dabc72e32e3e7a4364c8be123d785e0b
+    Translation of GIT committish: 83c1d1a6ee4e89f7f913fab904816e6c033b6b04
 
     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
 @setfilename lilypond-essay.info
-@settitle GNU LilyPond Notation Reference
+@settitle Aufsatz über den automatischen Musiksatz
 @documentencoding UTF-8
 @documentlanguage de
+@afourpaper
+
 
 @c Translators: Till Paala
-@c this is a stub:
-@c TODO: translate essay.itely
 
 @include macros.itexi
 
-@afourpaper
+@macro manualIntro
+Dieser Aufsatz disskutiert den automatischen Musiksatz von
+LilyPond Version @version{}.
+@end macro
+
+@c `Essay' was born 2002-06-03 with git commit e38f5fc...
+@macro copyrightDeclare
+Copyright @copyright{} 2002--2010 bei den Autoren.
+@end macro
+
+@set FDL
+
 @c don't remove this comment.
 @ignore
 @omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen
 @omflanguage German
 @end ignore
 
-@ifnottex
-@node Oben
-@top Aufsatz über den automatischen Musiksatz
-@end ifnottex
-
+@lilyTitlePage{Aufsatz über den automatischen Musiksatz}
 
-@ifhtml
-@ifclear bigpage
-Dieses Dokument ist auch als
-@uref{source/Documentation/essay.de.pdf,PDF} und als HTML
-@uref{source/Documentation/essay-big-page.de.html,auf einer Seite} erhältlich.
-@end ifclear
-@ifset bigpage
-Dieses Dokument ist auch als
-@uref{source/Documentation/essay.de.pdf,PDF} und als
-@uref{source/Documentation/essay/index.html,HTML auf mehreren indizierten Seiten} erhältlich.
-@end ifset
-@end ifhtml
-
-@finalout
-
-@titlepage
-@title LilyPond
-@subtitle Das Musiksatzprogramm
-@titlefont{Aufsatz über den automatischen Musiksatz}
-@author Han-Wen Nienhuys und Jan Nieuwenhuizen
-
-Copyright @copyright{} ???? bei den Authoren
-
-@emph{The translation of the following copyright notice is provided
-for courtesy to non-English speakers, but only the notice in English
-legally counts.}
-
-@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung
-für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber
-nur die englische Version gültig.}
-
-@quotation
-Es ist erlaubt, dieses Dokument unter den Bedingungen der
-GNU Free Documentation Lizenz (Version 1.1 oder
-spätere, von der Free Software Foundation publizierte Versionen, ohne
-invariante Abschnitte),
-zu kopieren, zu verbreiten und/oder
-zu verändern. Eine Kopie der Lizenz ist im Abschnitt ``GNU
-Free Documentation License'' angefügt.
-@end quotation
-
-@quotation
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1
-or any later version published by the Free Software Foundation;
-with no Invariant Sections.
-A copy of the license is included in the section entitled ``GNU
-Free Documentation License''.
-@end quotation
-
-@end titlepage
-
-@copying
-Copyright @copyright{} ???? bei den Authoren
-
-@emph{The translation of the following copyright notice is provided
-for courtesy to non-English speakers, but only the notice in English
-legally counts.}
-
-@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung
-für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber
-nur die englische Version gültig.}
-
-@quotation
-Es ist erlaubt, dieses Dokument unter den Bedingungen der
-GNU Free Documentation Lizenz (Version 1.1 oder
-spätere, von der Free Software Foundation publizierte Versionen, ohne
-invariante Abschnitte),
-zu kopieren, zu verbreiten und/oder
-zu verändern. Eine Kopie der Lizenz ist im Abschnitt ``GNU
-Free Documentation License'' angefügt.
-@end quotation
-
-@quotation
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1
-or any later version published by the Free Software Foundation;
-with no Invariant Sections.
-A copy of the license is included in the section entitled ``GNU
-Free Documentation License''.
-@end quotation
-@end copying
 
 @ifnottex
-Copyright ???? bei den Authoren
-
-@emph{The translation of the following copyright notice is provided
-for courtesy to non-English speakers, but only the notice in English
-legally counts.}
-
-@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung
-für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber
-nur die englische Version gültig.}
-
-@quotation
-Es ist erlaubt, dieses Dokument unter den Bedingungen der
-GNU Free Documentation Lizenz (Version 1.1 oder
-spätere, von der Free Software Foundation publizierte Versionen, ohne
-invariante Abschnitte),
-zu kopieren, zu verbreiten und/oder
-zu verändern. Eine Kopie der Lizenz ist im Abschnitt ``GNU
-Free Documentation License'' angefügt.
-@end quotation
-
-@quotation
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1
-or any later version published by the Free Software Foundation;
-with no Invariant Sections.
-A copy of the license is included in the section entitled ``GNU
-Free Documentation License''.
-@end quotation
-@end ifnottex
 
 @menu
-@c * Musiksatz::
+* Musiksatz::
 * Literatur::
 * GNU Free Documentation License:: Die Lizenz dieses Dokuments.
 * LilyPond-Index::
 @end menu
 
+@docMain
+@end ifnottex
+
 @contents
 
 @include essay/engraving.itely
index da4889478e82aa24b59144040d0f70a3da900338..aa33c42a4857864457f276f22e65adeae7fac8c4 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
 
 @ignore
-    Translation of GIT committish: 4582b7b24d22b2041bfcba49e716a714effcce92
+    Translation of GIT committish: 83c1d1a6ee4e89f7f913fab904816e6c033b6b04
 
 
     When revising a translation, copy the HEAD committish of the
@@ -11,6 +11,8 @@
 
 @c \version "2.13.4"
 
+@c Translators: Till Paala
+
 @node Notensatz
 @chapter Notensatz
 @translationof Music engraving
 Dieser Abschnitt erklärt die Ziele und die Architektur von LilyPond.
 
 @menu
-* Notensatz::
+* Die Geschichte von LilyPond::
+* Details des Notensetzens::
 * Automatisierter Notensatz::
 * Welche Symbole?::
 * Die Darstellung der Musik::
 * Beispielanwendung::
+* Anhang::
 @end menu
 
 
-@node Notensatz
-@unnumberedsubsec Notensatz
-@translationof Engraving
+@node Die Geschichte von LilyPond
+@unnumberedsec Die Geschichte von LilyPond
+@translationof The LilyPond story
+
+Bevor LilyPond eine Gemeinschaft von Benutzern rund um die Welt
+besaß, bevor es benutzt worden war um Noten für Kurse in der Uni
+zu erstellen oder die Partituren von Opern, die ihre erste Premiere
+erleben, bevor es einen Aufsatz über den Notensatz, Computercode
+oder wenigstens ein organisiertes Entwicklerteam 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
+@noindent
+Bärenreiter BA 320, @copyright{}1950:
+
+@sourceimage{baer-suite1-fullpage,,,png}
+
+@noindent
+Henle Nr. 666, @copyright{}2000:
+@sourceimage{henle-suite1-fullpage,,,png}
+@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 komputerkonform 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
+Zeiel: 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 Vielfalt in der Platzierung 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.
+Während unserer Arbeit an dem Programm haben wir sehr viel gelernt
+über die Art und Weise wie ein gut gestochener Notensatz erstellt
+wird.  In diesem Aufsatz beschreiben wir einige der Aspekte, die
+wir versucht haben, mit LilyPond nachzuahmen.
+
+@iftex
+@page
+@noindent
+Bärenreiter BA 320, @copyright{}1950:
+
+@sourceimage{baer-suite1-fullpage,16cm,,}
+@page
+@noindent
+Henle no. 666, @copyright{}2000:
+@sp 3
+@sourceimage{henle-suite1-fullpage,16cm,,}
+@page
+@end iftex
+
+
+@node Details des Notensetzens
+@unnumberedsec Details des Notensetzens
+@translationof Engraving details
 
 @cindex Notensatz
 @cindex Typographie
@@ -37,78 +149,106 @@ Dieser Abschnitt erklärt die Ziele und die Architektur von LilyPond.
 @cindex Plattendruck, Noten
 
 Die Kunst des Notensatzes wird auch als Notenstich bezeichnet. Dieser 
-Begriff stammt aus dem traditionellen Notendruck. Noch bis vor etwa 20 
+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 
+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. Es handelte sich dabei um ein sehr spezialisiertes Handwerk.
+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.
 
-Heutzutage wird fast alle gedruckte Musik von Computern erstellt. Das 
-hat einige deutliche Vorteile: Drucke sind billiger als die gravierten
-Platten und der Computersatz kann per E-Mail verschickt werden. Leider
-hat der intensive Einsatz des Computers die graphische Qualität
-des Notensatzes vermindert. Mit dem Computer erstellte Noten sehen 
-langweilig und mechanisch aus, was es erschwert, von ihnen zu spielen.
+@quotation
+@iftex
+@sourceimage{hader-slaan,,7cm,}
+@end iftex
+@ifnottex
+@sourceimage{hader-slaan,,,jpg}
+@end ifnottex
+@end quotation
+
+LilyPond wurd 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.
+
+@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
 
-@c introduce illustrating aspects of engraving, font...
 Die Abbildung unten illustriert den Unterschied zwischen  
-traditionellem Notensatz und einem typischen Computersatz. Das 
-dritte Bild zeigt, wie LilyPond die Formen des traditionellen
-Satzes nachahmt. Das linke Bild zeigt ein eingescanntes b-Vorzeichen 
-aus einer 2000 herausgegebenen Edition. Das mittlere Bild
-zeigt das b-Vorzeichen derselben Musik aus einer handgestochenen 
-Bärenreiter-Ausgabe. Das linke Bild zeigt die typischen Makel
-des Computer-Satzes: Die Notenlinien sind sehr dünn, die Schwärze 
-des Vorzeichens entspricht den dünnen Linien und hat eine gerade 
-Form mit scharfen Ecken und Kanten. Im Gegensatz dazu hat das
-Bärenreiter-Vorzeichen dicke, geradezu sinnlich rundliche
-Formen. Unser Symbol für das Vorzeichen hat neben anderen 
-auch dieses b als Vorbild. Es ist abgerundet und passt zu unseren
-Notenlinien, die sehr viel dicker sind als die der entsprechenden
-Computer-Ausgabe.
-
-@multitable @columnfractions .125 .25 .25 .25 .125
+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,
+beihnahe 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
-@image{pictures/henle-flat-gray,,4cm}
+@sourceimage{baer-flat-gray,,4cm,}
 @end iftex
 @ifnottex
-@image{pictures/henle-flat-gray,,,png}
+@sourceimage{baer-flat-gray,,,png}
 @end ifnottex
 
 @tab
 @iftex
-@image{pictures/baer-flat-gray,,4cm}
+@sourceimage{henle-flat-gray,,4cm,}
 @end iftex
 @ifnottex
-@image{pictures/baer-flat-gray,,,png}
+@sourceimage{henle-flat-gray,,,png}
 @end ifnottex
 
-@tab
-@iftex
-@image{pictures/lily-flat-bw,,4cm}
-@end iftex
-@ifnottex
-@image{pictures/lily-flat-bw,,,png}
-@end ifnottex
 @end ifnotinfo
 @ifinfo
-@image{pictures/henle-flat-bw,,,png}
-@image{pictures/baer-flat-bw,,,,png}
-@image{pictures/lily-flat-bw,,,png}
+@sourceimage{henle-flat-bw,,,png}
+@sourceimage{baer-flat-bw,,,png}
+@sourceimage{lily-flat-bw,,,png}
 @end ifinfo
 
+
 @item @tab
-Henle (2000)
-@tab
 Bärenreiter (1950)
 @tab
-LilyPond Feta-Schriftart (2003)
+Henle (2000)
 
 @end multitable
 
@@ -118,18 +258,60 @@ LilyPond Feta-Schriftart (2003)
 @cindex Dichte
 @cindex Balance
 
-@c introduce illustrating aspects of engraving, spacing...
-Die Verteilung der Noten innerhalb des Taktes sollte ihrer Dauer
-entsprechen. Moderne Partituren zeigen diese Verhältnisse jedoch 
-mit einer mathematischen Präzision, die nur sehr schlechte 
-Ergebnisse bringt. Im nächsten Beispiel ist ein Motiv zweimal
-gesetzt: einmal mit den exakten mathematischen Längenverhältnissen, dann
-mit kleinen Korrekturen. Welches von beiden ist mit dieser Korrektur
-gesetzt?
+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
+Coputerfont 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 Schä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
-@c file spacing-optical.
-@c need to include it here,  because we want two images.
+
 @lilypond
 \paper {
   ragged-right = ##t
@@ -143,14 +325,15 @@ music = {
    \stemNeutral
    e'8[ e'8 e'8 e'8]
 }
-
 \score
 {
   \music
   \layout {
     \context {
       \Staff
-      \override NoteSpacing #'stem-spacing-correction = #0.6
+      \override NoteSpacing #'stem-spacing-correction = #0.0
+      \override NoteSpacing #'same-direction-correction = #0.0
+      \override StaffSpacing #'stem-spacing-correction = #0.0
     }
   }
 }
@@ -169,15 +352,14 @@ music = {
    \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
+      \override NoteSpacing #'stem-spacing-correction = #0.6
     }
   }
 }
@@ -188,32 +370,198 @@ music = {
 @cindex Abstände, normal
 @cindex Rhythmen, normal
 
-In diesem Ausschnitt kommen nur Viertel vor, Noten, 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 obere Beispiel ist mit dieser 
-Korrektur gesetzt, das untere ohne. In letzterem Fall bilden sich 
-für das Auge bei unten/oben-Folgen Notenklumpen mit schmalen Abständen 
-zwischen den Notenhälsen.
+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.
+
+Ein weiteres Beispiel optischen Ausgleichs ist das visualle Zusammenspiel
+von Hälsen und Taktstrichen.  Wenn eine Noten mit Hals nach oben
+vor einem Taktstrich kommt, braucht man etwas mehr Platz, damit
+sich die Aufteilung nicht zu dicht anfühlt:
 
-@cindex Typographie
+@lilypond
+\paper {
+  ragged-right = ##t
+}
+
+\score {
+  {
+    c''8 c'' c'' c'' c'' c'' c'' c'' \break
+    a' a' a' a' a' a' a' a'
+  }
+  \layout {
+    \context {
+      \Staff
+      \remove "Time_signature_engraver"
+      \override NoteSpacing #'stem-spacing-correction = #0.7
+    }
+    \context {
+      \Score
+      \remove "Bar_number_engraver"
+    }
+  }
+}
+@end lilypond
+
+@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 Beispeil unten können wir sehen, dass
+Hilfslinien dicker als normale Notenlinien sein sollten und dass
+ein gelernter Notenstecher eine Hilfslinie verkürzt, um dichteres
+Platzzieren 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 immernoch 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.5cm]
+global = {
+  \time 6/8
+  \key c \minor
+}
+
+\new Score <<
+  \new Staff \with {
+      fontSize = #-4
+      \override StaffSymbol #'staff-space = #(magstep -4)
+      \override StaffSymbol #'thickness = #(magstep -3)
+    }
+    \relative c' {
+      \global
+      \set Staff.instrumentName = #"Violin"
+      c8.(\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 c' {
+      \global
+      s2.
+      s4. s8 r8 r16 <c f aes c>
+      <c f aes c>4.^> <c ees g>8 r r
+    }
+    \new Staff \relative c {
+      \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; und diese 
-Beschäftigung mit typographischen Details mag akademisch wirken. 
-Das ist sie aber nicht. Unser Beispielstück hat einen 
-monotonen Rhythmus, und wenn alle Zeilen einförmig aussehen, wird 
-das Notenblatt zu einem Labyrinth. Wenn der Spieler auch nur 
-einmal wegschaut oder kurze Zeit unkonzentriert ist, findet er 
-nicht mehr zurück zu der Stelle, an der er war.
+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 auch besser für Noten,
+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. 
@@ -221,10 +569,11 @@ 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 aus Selbstzweck, sondern 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 
+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 
@@ -247,23 +596,402 @@ und aus denen wir gerne spielen.
 @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, detailliertes
+Vergleichen mit echten Notendrucken und genug Flexibilität, um mit
+den vielen Herausforderungen fertig zu werden, die der Notensatz
+mit sich bringt.
+
+@menu
+* Schönheitswettbewerb::             
+* Verbessern durch Benchmarking::  
+* Alles richtig machen::        
+* Flexible Architektur::       
+@end menu
+
+@node Schönheitswettbewerb
+@unnumberedsubsec Schönheitswettbewerb
+@translationof Beauty contests
+
 Wie sollen wir also jetzt die Typographie anwenden?
-Wie können wir erwarten, dass wir in der Lage wären, 
-ein Programm zu schreiben, dass den Beruf des 
-Notenstechers ersetzt, wo dieser doch mehr als zehn 
-Jahre braucht, um ein Meister zu werden?
-
-Wir können es tatsächlich nicht! Da Typographie allein 
-durch das menschliche Auge bestimmt ist, kann der Mensch 
-nicht ersetzt werden. Aber sehr viel mechanische Arbeit 
-kann automatisiert werden. Indem etwa LilyPond die üblichen 
-Situationen kennt und bewältigt, können die restlichen 
-Fehler von Hand beseitigt werden. Das ist schon ein 
-großer Fortschritt im Vergleich zu den existierenden 
-Programmen. Und mit der Zeit können immer mehr Fälle 
-automatisiert werden, so dass immer weniger Eingriffe 
-von Hand notwendig werden.
+Anders gesagt: welcher von den drei Konfigurationen sollte für
+den folgenden Bogen ausgewählt werden?
 
+@lilypond
+\relative c {
+    \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 eine der
+Noten angeschnitten wird:
+
+@lilypond
+\relative c {
+    \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 c {
+    \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 c {
+    \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 starkt 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
+  bes 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.
+
+In unserem 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 c' {
+  \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 vorzunehemn,
+weil wir zeigen wollen, welche Dinge von den beiden Programmen
+ohne Hilfeleistung richtig gemacht werden.
+
+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 c' {
+  \voiceOne
+  fis8 d' ees g, fis4 g
+  r8 a16 bes c8 bes16 a d8 r r4
+}
+
+partII = \relative c' {
+  \voiceTwo
+  d4 r4 r8 d'16 c bes8 c16 d
+  ees8 d c ees a, r r4
+}
+partIII = \relative c' {
+  \voiceOne
+  r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+}
+partIV = \relative c {
+  \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 #'between-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 dem
+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
+\new Score <<
+  \new Voice = "sample" \relative c''{
+    \key g \minor
+    <<
+      {\voiceOne g4 \collide g4}
+      \new Voice {\voiceTwo bes \collide bes}
+    >>
+  }
+  \new Lyrics \lyricsto "sample" \lyricmode { "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
+schöne Ausgabe erstellen könnte.  Das Programm ist 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.
+
+Z. 859
+Einen besonders hervorstechenden Mangel in dem Finale-Beispiel
+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 von Finale und LilyPond sowie in vier
+publizierten Editionen finden.  Nähere Betrachtung zeigt, dass
+es einige akzeptable Variationen zwischen den handgestochenen
+Beispielen gibt.  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 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
@@ -273,15 +1001,14 @@ 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 
+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 
+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 
@@ -294,19 +1021,19 @@ die nicht den Regeln für den Notensatz entspricht.
 
 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 
+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,
+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 
+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. 
+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).
+ausgerichtet, beim zweiten nach oben (rechts).
 
 @lilypond[quote,ragged-right]
 \new Score \with {
@@ -326,9 +1053,9 @@ Beim ersten Akkord sind alle Objekte nach unten (oder links)
 @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. 
+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]
@@ -350,10 +1077,10 @@ 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 
+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]
@@ -408,33 +1135,31 @@ die Notenköpfe gezeichnet werden, während des Ausschnitts verändert.
 @cindex Plugin
 
 Während des Notensatzprozesses entscheidet sich, wo
-Symbole platziert werden. Das kann aber nur gelingen, 
+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 de
-Barock. 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 
+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? 
-Unsere Lösung ist es, eine strikte Trennung zwischen der Notation, 
-also welche Symbole benutzt werden, und dem Satz, also wohin sie 
-gesetzt werden, zu machen. Um das Problem anzupacken, haben wir 
-es in kleine (programmierbare) Happen zerteilt, so dass jede Art 
-von Symbol durch ein eigenes Plugin verarbeitet wird. Alle Plugins
- kooperieren durch die LilyPond-Architektur. Sie sind vollständig 
-modular und unabhängig und können somit auch unabhängig voneinander
- entwickelt werden. Der Schreiber, der die Musik in Graphik umwandelt,
- ist ein Kopist oder Notenstecher (engl. engraver). Darum werden 
-die Plugins  als @code{engraver} bezeichnet.
+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.
@@ -563,8 +1288,8 @@ Der @code{Stem_engraver} (@qq{Halsstecher}) schließlich fügt
 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, Vorzeichen, Taktlinien, Taktangaben und Tonartbezeichnungen 
+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.
 
 
@@ -587,15 +1312,16 @@ es mit Polyphonie? Hier müssen sich mehrere Stimmen ein System teilen.
 @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
+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.
 
 
 @seealso
@@ -612,6 +1338,7 @@ Programmreferenz: @rinternals{Contexts}.
 }
 @end lilypond
 
+
 @node Die Darstellung der Musik
 @unnumberedsubsec Die Darstellung der Musik
 @translationof Music representation
@@ -633,11 +1360,14 @@ Die Syntax ist gleichzeitig die Benutzerschnittstelle bei LilyPond,
 darum soll sie einfach zu schreiben sein; z. B. bedeutet
 
 @example
-c'4 d'8
+@{
+  c'4 d'8
+@}
 @end example
 
 @noindent
-eine Viertel c' und eine Achtel d', wie in diesem Beispiel:
+dass eine Viertel c' und eine Achtel d' erstellt werden sollen,
+wie in diesem Beispiel:
 
 @lilypond[quote]
 {
@@ -645,12 +1375,12 @@ eine Viertel c' und eine Achtel d', wie in diesem Beispiel:
 }
 @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. music expressions (Musikausdrücke): indem 
-kleine Teile zu größeren kombiniert werden, kann komplexere Musik 
-dargestellt werden. So etwa hier:
+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,relative=1]
 f4
@@ -659,9 +1389,6 @@ f4
 @noindent
 Gleichzeitig erklingende Noten werden hinzugefügt, indem man alle in @code{<<} und @code{>>} einschließt.
 
-@c < > is not a music expression,
-@c so we use <<>> iso. <> to drive home the point of
-@c expressions.  Don't change this back --hwn.
 @example
 <<c4 d4 e4>>
 @end example
@@ -684,8 +1411,8 @@ Um aufeinanderfolgende Noten darzustellen, werden sie in geschweifte Klammern ge
 @end lilypond
 
 @noindent
-Dieses Gebilde ist in sich wieder ein Ausdruck, und kann 
-daher mit einem anderen Ausdruck kombiniert werden (hier mit einer Halben).
+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>> @} >>
@@ -709,6 +1436,7 @@ 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:
 
+
 @node Beispielanwendung
 @unnumberedsubsec Beispielanwendung
 @translationof Example applications
@@ -731,7 +1459,7 @@ Notendruck.
 
 @noindent
 Indem wir Akkordsymbole und einen Text hinzufügen, erhalten wir 
-ein Lead Sheet.
+ein Liedblatt.
 
 @lilypond[quote,ragged-right]
 <<
@@ -826,10 +1554,162 @@ verarbeiten. So können etwa ganze Datenbanken musikalischer Fragmente automatis
 in Notenbilder umgewandelt werden, die dann auf Internetseiten oder 
 in Multimediapräsentation Anwendung finden.
 
-Dieses Benutzerhandbuch zeigt eine weitere Möglichkeit: Die Noten werden als 
+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. Durch ein spezielles Programm werden die Eingabefragmente durch 
 Notenbilder in der resultierenden PDF- oder HTML-Datei ersetzt. Dadurch ist
 es sehr einfach, Noten und Text zu kombinieren.
 
+
+@page
+@node Anhang
+@unnumberedsec Anhang
+@translationof Appendix
+
+Dieser Anhang 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 c' {
+  \voiceOne
+  fis8 d' ees g, fis4 g
+  r8 a16 bes c8 bes16 a d8 r r4
+  r2 r8 d16 ees f8 ees16 d
+  ees4 ~ ees16 d c bes a4 r8 ees'16 d
+  c8 d16 ees d8 e16 fis g8 fis16 g a4 ~
+  a8 d, g f ees d c bes
+  a2 g\fermata \bar "|."
+}
+
+partII = \relative c' {
+  \voiceTwo
+  d4 r4 r8 d'16 c bes8 c16 d
+  ees8 d c ees a, r r4
+  r8 fis16 g a8 g16 fis g2 ~
+  g2 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 c' {
+  \voiceOne
+  r2 r8 d ees g, fis4 g r8 a16 bes c8 bes16 a
+  bes2 ~ bes8 b16 a g8 a16 b
+  c4 r r2
+  R1
+  r8 d ees g, fis4 g
+  r8 a16 bes c8 bes16 a b2
+}
+partIV = \relative c {
+  \voiceTwo
+  d4 r r2
+  r8 d ees g, fis4 a
+  d,8 d'16 c bes8 c16 d ees2 ~
+  ees8 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 #'between-staff-spacing #'padding = #1
+    }
+  }
+}
+@end lilypond
+
index fb60609cbfe4a8f6b6416e68527739ad6e7004ea..f37d69840feccb8d1bc2c3af5879c30e4dd8de97 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
 
 @ignore
-    Translation of GIT committish: 67373601dabc72e32e3e7a4364c8be123d785e0b
+    Translation of GIT committish: 83c1d1a6ee4e89f7f913fab904816e6c033b6b04
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
diff --git a/Documentation/de/extending.tely b/Documentation/de/extending.tely
new file mode 100644 (file)
index 0000000..c69b2e1
--- /dev/null
@@ -0,0 +1,77 @@
+\input texinfo @c -*- coding: utf-8; mode: texinfo; -*-
+@ignore
+    Translation of GIT committish: 354f8ea159bb5216202e5815685fca8bd7e6919c
+
+    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
+
+@setfilename lilypond-extending.info
+@settitle Extending LilyPond
+@documentencoding UTF-8
+@documentlanguage de
+@afourpaper
+
+@c Translators: Till Paala
+
+@macro manualIntro
+Diese Datei erklärt, wie man die Funktionalität von
+LilyPond Version @version{} erweitern kann.
+@end macro
+
+@c `Extending' was born 2003-04-23 with git commit c08f6e8...
+@macro copyrightDeclare
+Copyright @copyright{} 2003--2009 bei den Autoren.
+@end macro
+
+@set FDL
+@include macros.itexi
+
+
+@c don't remove this comment.
+@ignore
+@omfcreator Han-Wen Nienhuys, Jan Nieuwenhuizen and Graham Percival
+@omfdescription Programming extensions for the LilyPond music engraving system
+@omftype program usage
+@omfcategory Applications|Publishing
+@omflanguage German
+@end ignore
+
+
+@lilyTitlePage{Extending}
+
+
+@c TOC -- non-tex
+@ifnottex
+
+@menu
+* Scheme-Übung::                Programmieren innerhalb von LilyPond.
+* Schnittstellen für Programmierer::     Wie man mit Scheme kommunizieren kann.
+* LilyPond Scheme interfaces::     Information in die Noten senden und aus den Noten erhalten.
+
+Anhänge
+
+* GNU Free Documentation License:: Die Lizenz dieses Dokuments.
+* LilyPond-Index::
+@end menu
+
+@docMain
+@end ifnottex
+
+
+@contents
+
+
+@include extending/scheme-tutorial.itely
+@include extending/programming-interface.itely
+
+@include fdl.itexi
+
+@node LilyPond-Index
+@appendix LilyPond-Index
+@translationof LilyPond index
+
+@printindex cp
+
+@bye
diff --git a/Documentation/de/extending/programming-interface.itely b/Documentation/de/extending/programming-interface.itely
new file mode 100644 (file)
index 0000000..a2cc768
--- /dev/null
@@ -0,0 +1,1633 @@
+@c -*- coding: utf-8; mode: texinfo; -*-
+
+@ignore
+    Translation of GIT committish: 7b70644b95f383b4281e9ffa146d315d2ada11d3
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  For details, see the Contributors'
+    Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.12.0"
+
+@c Translators: Till Paala
+
+@node Schnittstellen für Programmierer
+@chapter Schnittstellen für Programmierer
+@translationof Interfaces for programmers
+
+Fortgeschrittene Anpassungen können mithilfe der Programmiersprache
+Scheme vorgenommen werden.  Wenn Sie Scheme nicht kennen, gibt
+es eine grundlegende Einleitung in LilyPonds
+@rlearning{Scheme-Übung}.
+
+@menu
+* Musikalische Funktionen::
+* Schnittstelle für Programmierer::
+* Komplizierte Funktionen erstellen::
+* Programmierungsschnittstelle für Textbeschriftungen::
+* Kontexte für Programmierer::
+* Scheme-Vorgänge als Eigenschaften::
+* Scheme-Code anstelle von \tweak verwenden::
+* Schwierige Korrekturen::
+@end menu
+
+
+@node Musikalische Funktionen
+@section Musikalische Funktionen
+@translationof Music functions
+
+Dieser Abschnitt behandelt die Erstellung von musikalischen Funktionen
+innerhalb von LilyPond.
+
+@menu
+* Überblick über musikalische Funktionen::
+* Einfache Ersetzungsfunktionen::
+* Paarige Ersetzungsfunktionen::
+* Mathematik in Funktionen::
+* Leere Funktionen::
+* Funktionen ohne Argumente::
+* Überblick über vorhandene musikalische Funktionen::
+@end menu
+
+@node Überblick über musikalische Funktionen
+@subsection Überblick über musikalische Funktionen
+@translationof Overview of music functions
+
+Es ist einfach, eine Funktion zu erstellen, die Variablen
+im LilyPond-Code ersetzt.  Die allgemeine Form derartiger
+Funktionen ist
+
+@example
+function =
+#(define-music-function (parser location @var{var1} @var{var2}...@var{vari}... )
+                        (@var{var1-type?} @var{var2-type?}...@var{vari-type?}...)
+  #@{
+    @emph{...Noten...}
+  #@})
+@end example
+
+@noindent
+wobei
+
+@multitable @columnfractions .33 .66
+@item @var{vari}         @tab die @var{i}te Variable
+@item @var{vari-type?}   @tab die Art der @var{i}ten Variable
+@item @var{...Noten...}  @tab normaler LilyPond-Code, in dem Variablen 
+wie @code{#$var1} usw. benutzt werden.
+@end multitable
+
+Die folgenden Eingabetypen können als Variablen in einer musikalischen
+Funktion benutzt werden.  Diese Liste ist nicht vollständig -- siehe
+auch andere Dokumentationen überScheme für weitere Variablenarten.
+
+@multitable @columnfractions .33 .66
+@headitem Eingabetyp           @tab @var{vari-type?}-Notation
+@item Ganzzahl                 @tab @code{integer?}
+@item Float (Dezimalzahl)      @tab @code{number?}
+@item Zeichenkette             @tab @code{string?}
+@item Textbeschriftung         @tab @code{markup?}
+@item Musikalischer Ausdruck   @tab @code{ly:music?}
+@item Ein Variablenpaar        @tab @code{pair?}
+@end multitable
+
+Die Argumente @code{parser} und @code{location} sind zwingend erforderlich
+und werden in einigen fortgeschrittenen Situationen eingesetzt.  Das
+Argument @code{parser} wird benutzt, um auf den Wert einer weiteren
+LilyPond-Variable zuzugreifen.  Das Argument @code{location} wird
+benutzt, um den @qq{Ursprung} des musikalischen Ausdrucks zu definieren, der von
+der musikalischen Funktion erzeugt wird.  Das hilft, wenn ein
+Syntaxfehler auftaucht: in solchen Fällen kann LilyPond mitteilen,
+an welcher Stelle in der Eingabedatei sich der Fehler befindet.
+
+
+@node Einfache Ersetzungsfunktionen
+@subsection Einfache Ersetzungsfunktionen
+@translationof Simple substitution functions
+
+Hier ist ein einfaches Beispiel:
+
+@lilypond[quote,verbatim,ragged-right]
+padText = #(define-music-function (parser location padding) (number?)
+  #{
+    \once \override TextScript #'padding = #$padding
+  #})
+
+\relative c''' {
+  c4^"piu mosso" b a b
+  \padText #1.8
+  c4^"piu mosso" d e f
+  \padText #2.6
+  c4^"piu mosso" fis a g
+}
+@end lilypond
+
+Musikalische Ausdrücke können auch ersetzt werden:
+
+@lilypond[quote,verbatim,ragged-right]
+custosNote = #(define-music-function (parser location note)
+                                     (ly:music?)
+  #{
+    \once \override Voice.NoteHead #'stencil =
+      #ly:text-interface::print
+    \once \override Voice.NoteHead #'text =
+      \markup \musicglyph #"custodes.mensural.u0"
+    \once \override Voice.Stem #'stencil = ##f
+    $note
+  #})
+
+{ c' d' e' f' \custosNote g' }
+@end lilypond
+
+Mehrere Variablen können benutzt werden:
+
+@lilypond[quote,verbatim,ragged-right]
+tempoPadded = #(define-music-function (parser location padding tempotext)
+  (number? string?)
+#{
+  \once \override Score.MetronomeMark #'padding = $padding
+  \tempo \markup { \bold $tempotext }
+#})
+
+\relative c'' {
+  \tempo \markup { "Low tempo" }
+  c4 d e f g1
+  \tempoPadded #4.0 #"High tempo"
+  g4 f e d c1
+}
+@end lilypond
+
+
+@node Paarige Ersetzungsfunktionen
+@subsection Paarige Ersetzungsfunktionen
+@translationof Paired substitution functions
+
+Einige @code{\override}-Befehle benötigen ein Zahlenpaar
+(als @code{cons}-Zelle in Scheme bezeichnet).  Um beide Zahlen
+einer Funktion zuzuweisen, kann entweder die Variable @code{pair?}
+benutzt werden oder die @code{cons} in die musikalische Funktion
+eingefügt werden.
+
+@quotation
+@example
+manualBeam =
+#(define-music-function (parser location beg-end)
+                        (pair?)
+#@{
+  \once \override Beam #'positions = #$beg-end
+#@})
+
+\relative @{
+  \manualBeam #'(3 . 6) c8 d e f
+@}
+@end example
+@end quotation
+
+@noindent
+oder
+
+@lilypond[quote,verbatim,ragged-right]
+manualBeam =
+#(define-music-function (parser location beg end)
+                        (number? number?)
+#{
+  \once \override Beam #'positions = #(cons $beg $end)
+#})
+
+\relative {
+  \manualBeam #3 #6 c8 d e f
+}
+@end lilypond
+
+
+@node Mathematik in Funktionen
+@subsection Mathematik in Funktionen
+@translationof Mathematics in functions
+
+Musikalische Funktionen können neben einfachen Ersetzungen
+auch Scheme-Programmcode enthalten:
+
+@lilypond[quote,verbatim,ragged-right]
+AltOn = #(define-music-function (parser location mag) (number?)
+  #{ \override Stem #'length = #$(* 7.0 mag)
+     \override NoteHead #'font-size =
+       #$(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #})
+
+AltOff = {
+  \revert Stem #'length
+  \revert NoteHead #'font-size
+}
+
+{ c'2 \AltOn #0.5 c'4 c'
+  \AltOn #1.5 c' c' \AltOff c'2 }
+@end lilypond
+
+@noindent
+Dieses Beispiel kann auch umformuliert werden, um musikalische Ausdrücke
+zu integrieren:
+
+@lilypond[quote,verbatim,ragged-right]
+withAlt = #(define-music-function (parser location mag music) (number? ly:music?)
+  #{ \override Stem #'length = #$(* 7.0 mag)
+     \override NoteHead #'font-size =
+       #$(inexact->exact (* (/ 6.0 (log 2.0)) (log mag)))
+     $music
+     \revert Stem #'length
+     \revert NoteHead #'font-size #})
+
+{ c'2 \withAlt #0.5 {c'4 c'}
+  \withAlt #1.5 {c' c'} c'2 }
+@end lilypond
+
+
+@node Leere Funktionen
+@subsection Leere Funktionen
+@translationof Void functions
+
+Eine musikalische Funktion muss einen musikalischen Ausdruck
+ausgeben, aber in manchen Fällen müssen Funktionen erstellt werden,
+die keine Notation enthalten (wie etwa eine Funktion, mit der
+man @qq{Point and Click} ausschalten kann).  Um das vornehmen zu
+können, wird ein @code{leere}r musikalischer Ausdruck ausgegeben.
+
+Das ist der Grund, warum die Form, die ausgegeben wird,
+@code{(make-music ...)} heißt.  Wird die Eigenschaft
+@code{'void} (engl. für @qq{leer}) auf @code{#t} gesetzt, wird der
+Parser angewiesen, den ausgegebenen musikalischen Ausdruck zu ignorieren.
+Der maßgebliche Teil der @code{'void}-Funktion ist also die Verarbeitung,
+die die Funktion vornimmt, nicht der musikalische Ausdruck, der ausgegeben
+wird.
+
+@example
+noPointAndClick =
+#(define-music-function (parser location) ()
+   (ly:set-option 'point-and-click #f)
+   (make-music 'SequentialMusic 'void #t))
+...
+\noPointAndClick   % disable point and click
+@end example
+
+
+@node Funktionen ohne Argumente
+@subsection Funktionen ohne Argumente
+@translationof Functions without arguments
+
+In den meisten Fällen sollten Funktionen ohne Argumente mit einer
+Variable notiert werden:
+
+@example
+dolce = \markup@{ \italic \bold dolce @}
+@end example
+
+In einigen wenigen Fällen kann es aber auch sinnvoll sein, eine
+musikalische Funktion ohne Argumente zu erstellen:
+
+@example
+displayBarNum =
+#(define-music-function (parser location) ()
+   (if (eq? #t (ly:get-option 'display-bar-numbers))
+       #@{ \once \override Score.BarNumber #'break-visibility = ##f #@}
+       #@{#@}))
+@end example
+
+Damit auch wirklich Taktzahlen angezeigt werden, wo die
+Funktion eingesetzt wurde, muss @command{lilypond} mit
+der Option
+
+@example
+lilypond -d display-bar-numbers Dateiname.ly
+@end example
+
+@noindent
+aufgerufen werden.
+
+
+@node Überblick über vorhandene musikalische Funktionen
+@subsection Überblick über vorhandene musikalische Funktionen
+@translationof Overview of available music functions
+
+@c fixme ; this should be move somewhere else?
+Die folgenden Befehle sind musikalische Funktionen:
+
+@include identifiers.tely
+
+
+
+@node Schnittstelle für Programmierer
+@section Schnittstelle für Programmierer
+@translationof Programmer interfaces
+
+Dieser Abschnitt zeigt, wie LilyPond und
+Scheme gemischt werden können.
+
+@menu
+* Eingabevariablen und Scheme::
+* Interne Repräsentation der Musik::
+@end menu
+
+
+@node Eingabevariablen und Scheme
+@subsection Eingabevariablen und Scheme
+@translationof Input variables and Scheme
+
+Das Eingabeformat unterstützt die Notation von Variablen: im
+folgenden Beispiel wird ein musikalischer Ausdruck einer Variable
+mit der Bezeichnung @code{traLaLa} zugewiesen:
+
+@example
+traLaLa = @{ c'4 d'4 @}
+@end example
+
+Der Geltungsbereich von Variablen ist beschränkt: im folgenden
+Beispiel enthält die @code{\layout}-Umgebung auch eine
+@code{traLaLa}-vVariable, die unabhängig von der äußeren
+@code{\traLaLa}-Variable ist:
+
+@example
+traLaLa = @{ c'4 d'4 @}
+\layout @{ traLaLa = 1.0 @}
+@end example
+
+Grundsätzlich ist jede Eingabedatei ein Geltungsbereich, und
+alle @code{\header}-, @code{\midi}- und @code{\layout}-Umgebungen
+sind Geltungsbereiche, die unterhalb des globalen Geltungsbereiches
+angeordnet sind.
+
+Sowohl Variablen als auch Geltungsbereiche sind in Form des
+GUILE-Modulsystems implementiert.  Ein anonymes Scheme-Modul
+wird an jeden Geltunsbereich angehängt.  Eine Zuweisung der form
+
+@example
+traLaLa = @{ c'4 d'4 @}
+@end example
+
+@noindent
+wird intern in die Scheme-Definition
+
+@example
+(define traLaLa @var{Scheme-Wert von `@code{... }'})
+@end example
+
+@noindent
+umgewandelt.
+
+Das bedeutet, dass Eingabe- und Scheme-Variablen frei vermischt
+werden können.  Im nächsten Beispiel wird ein Notenfragment in
+der Variable @code{traLaLa} gespeichert und mithilfe von Schme
+dupliziert.  Das Ergebnis wird in eine @code{\score}-Umgebung
+mit der zweiten Variable @code{twice} integriert:
+
+@lilypond[verbatim]
+traLaLa = { c'4 d'4 }
+
+%% dummy action to deal with parser lookahead
+#(display "this needs to be here, sorry!")
+
+#(define newLa (map ly:music-deep-copy
+  (list traLaLa traLaLa)))
+#(define twice
+  (make-sequential-music newLa))
+
+{ \twice }
+@end lilypond
+
+In diesem Beispiel geschieht die Zuweisung, nachdem der Parser
+festgestellt hat, dass nichts interessantes mehr nach
+@code{traLaLa = @{ ... @}} vorkommt.  Ohne die Pseudovariable
+in dem Beispiel würde die @code{newLa}-Devinition ausgeführt
+werden, bevor @code{traLaLa} definiert ist, was zu einem
+Syntax-Fehler führen würde.
+
+Das obige Beispiel zeigt, wie man musikalische Ausdrücke
+von der Eingabe in den Scheme-Interpretierer @qq{exportieren}
+kann.  Es geht auch in die andere Richtung.  Indem man einen
+Scheme-Wert in die Funktion @code{ly:export} einpackt, wird
+der Scheme-Wert interpretiert als ob er in LilyPond-Syntax
+notiert worden wäre.  Anstatt @code{\twice} zu definieren,
+hätte man also auch schreiben können:
+
+@example
+...
+@{ #(ly:export (make-sequential-music (list newLa))) @}
+@end example
+
+Scheme-Code wird sofort ausgewertet, wenn der Parser darauf
+stößt.  Um Scheme-Code in einem Makro zu definieren (das dann
+erst später aufgerufen werden soll), müssen leere Funktionen
+benutzt werden (siehe @ref{Leere Funktionen}) oder das Folgende:
+
+@example
+#(define (nopc)
+  (ly:set-option 'point-and-click #f))
+
+...
+#(nopc)
+@{ c'4 @}
+@end example
+
+@knownissues
+
+Scheme- und LilyPond-Variablen können im LilyPond-Modus mit der
+@code{--safe}-Option nicht vermischt werden.
+
+
+@node Interne Repräsentation der Musik
+@subsection Interne Repräsentation der Musik
+@translationof Internal music representation
+
+Wenn ein musikalischer Ausdruck ausgewertet wird, wird er in eine
+Anzahl von musikalischen Scheme-Objekten konvertiert.  Die Eigenschaft, die ein
+musikalisches Objekt definiert, ist, dass es Zeit einnimmt.  Zeit ist
+eine rationale Zahl, die die Länge eines Stückes in ganzen Noten
+misst.
+
+Ein musikalisches Objekt hat drei Typusarten:
+@itemize
+@item
+musikalische Bezeichnung: Jeder musikalische Ausdruck hat eine Bezeichnung.
+Eine Note beispielsweise führt zu einem @rinternals{NoteEvent} und
+@code{\simultaneous} führt zu @rinternals{SimultaneousMusic}.  Eine Liste
+aller möglichen Ausdrücke findet sich in der Referenz der Interna, unter
+@rinternals{Music expressions}.
+
+@item
+@q{Typ} oder Schnittstelle:  Jede musikalische Bezeichnung hat mehrere
+@qq{Typen} oder Schnittstellten, beispielsweise ist eine Note ein
+@code{event}, ober sie ist auch ein @code{note-event}, ein
+@code{rhythmic-event} und ein @code{melodic-event}.  Alle diese
+Notationsklassen finden sich in der Referenz der Interna unter
+@rinternals{Music classes}.
+
+@item
+C++-Objekt:  Jedes musikalische Objekt wird von einem Objekt der
+C++-Klasse @code{Music} repräsentiert.
+@end itemize
+
+Die eigentlich Information eines musikalischen Ausdrucks ist in
+Eigenschaften gespeichert.  Ein @rinternals{NoteEvent} hat zum
+Beispiel @code{pitch}- und @code{duration}-Eigenschaften, die
+die Tonhöhe und die Dauer dieser Note speichern.  Eine Liste aller
+verfügbaren Eigenschaften findet sich in der Referenz der Interna unter
+@rinternals{Music properties}.
+
+Ein zusammengesetzter musikalischer Ausdruck ist ein musikalisches
+Objekt, das andere Objekte in seinen Eigenschaften enthält.  Eine Liste
+der Objekte kann in der @code{elements}-Eigenschaft eines
+musikalischen Objektes gespeichert werden, oder ein einziges
+@qq{Kind}-Objekt in der @code{element}-Eigenschaft.  Sa hat etwa
+@rinternals{SequentialMusic} seine @qq{Kinder} in @code{elements},
+und @rinternals{GraceMusic} hat sein einziges Argument in
+@code{element}.  Der Hauptteil einer Wiederholung wird in der
+@code{element}-Eigenschaft von @rinternals{RepeatedMusic} gespeichert,
+und die Alternativen in @code{elements}.
+
+
+
+@node Komplizierte Funktionen erstellen
+@section Komplizierte Funktionen erstellen
+@translationof Building complicated functions
+
+Dieser Abschnitt zeigt, wie man Information zusammensucht,
+um komplizierte musikalische Funktionen  zu erstellen.
+
+@menu
+* Musikalische Funktionen darstellen::
+* Eigenschaften von Musikobjekten::
+* Verdoppelung einer Note mit Bindebögen (Beispiel)::
+* Artikulationszeichen zu Noten hinzufügen (Beispiel)::
+@end menu
+
+
+@node Musikalische Funktionen darstellen
+@subsection Musikalische Funktionen darstellen
+@translationof Displaying music expressions
+
+@cindex interne Speicherung
+@cindex Musikausdrücke anzeigen
+@cindex Anzeigen von Musikausdrücken
+
+@funindex displayMusic
+@funindex \displayMusic
+
+Wenn man eine musikalische Funktion erstellt, ist es oft
+hilfreich sich anzuschauen, wie musikalische Funktionen
+intern gespeichert werden.  Das kann mit der Funktion
+@code{\displayMusic} erreicht werden:
+
+@example
+@{
+  \displayMusic @{ c'4\f @}
+@}
+@end example
+
+@noindent
+zeigt:
+
+@example
+(make-music
+  'SequentialMusic
+  'elements
+  (list (make-music
+          'EventChord
+          'elements
+          (list (make-music
+                  'NoteEvent
+                  'duration
+                  (ly:make-duration 2 0 1 1)
+                  'pitch
+                  (ly:make-pitch 0 0 0))
+                (make-music
+                  'AbsoluteDynamicEvent
+                  'text
+                  "f")))))
+@end example
+
+Normalerweise gibt LilyPond diese Ausgabe auf der Konsole mit
+allen anderen Nachrichten aus.  Um die wichtigen Nachrichten
+in einer Datei zu speichern, kann die Ausgabe in eine Datei
+umgeleitet werden:
+
+@example
+lilypond file.ly >display.txt
+@end example
+
+Mit etwas Umformatierung ist die gleiche Information sehr viel
+einfacher zu lesen:
+
+@example
+(make-music 'SequentialMusic
+  'elements (list (make-music 'EventChord
+                    'elements (list (make-music 'NoteEvent
+                                      'duration (ly:make-duration 2 0 1 1)
+                                      'pitch (ly:make-pitch 0 0 0))
+                                    (make-music 'AbsoluteDynamicEvent
+                                      'text "f")))))
+@end example
+
+Eine musikalische @code{@{ ... @}}-Sequenz hat die Bezeichnung
+@code{SequentialMusic} und ihre inneren Ausdrücke werden als
+Liste in seiner @code{'elements}-Eigenschaft gespeichert.  Eine
+Note ist als als ein @code{EventChord}-Ausdruck dargestellt,
+der ein @code{NoteEvent}-Objekt (welches Dauer und
+Tonhöhe speichert) und zusätzliche Information enthält (in
+diesem Fall ein @code{AbsoluteDynamicEvent} mit einer
+@code{"f"}-Text-Eigenschaft.
+
+
+@node Eigenschaften von Musikobjekten
+@subsection Eigenschaften von Musikobjekten
+@translationof Music properties
+
+Das @code{NoteEvent}-Objekt ist das erste Objekt der
+@code{'elements}-Eigenschaft von @code{someNote}.
+
+@example
+someNote = c'
+\displayMusic \someNote
+===>
+(make-music
+  'EventChord
+  'elements
+  (list (make-music
+          'NoteEvent
+          'duration
+          (ly:make-duration 2 0 1 1)
+          'pitch
+          (ly:make-pitch 0 0 0))))
+@end example
+
+Die @code{display-scheme-music}-Funktion ist die Funktion, die von
+@code{\displayMusic} eingesetzt wird, um die Scheme-Repräsentation
+eines musikalischen Ausdrucks anzuzeigen.
+
+@example
+#(display-scheme-music (first (ly:music-property someNote 'elements)))
+===>
+(make-music
+  'NoteEvent
+  'duration
+  (ly:make-duration 2 0 1 1)
+  'pitch
+  (ly:make-pitch 0 0 0))
+@end example
+
+Danach wird die Tonhöhe der Note von der @code{'pitch}-Eigenschaft
+des @code{NoteEvent}-Objektes gelesen:
+
+@example
+#(display-scheme-music
+   (ly:music-property (first (ly:music-property someNote 'elements))
+                      'pitch))
+===>
+(ly:make-pitch 0 0 0)
+@end example
+
+Die Tonhöhe einer Note kann geändert werden, indem man diese
+@code{'pitch}-Eigenschaft umdefiniert:
+
+@funindex \displayLilyMusic
+@funindex displayLilyMusic
+
+@example
+#(set! (ly:music-property (first (ly:music-property someNote 'elements))
+                          'pitch)
+       (ly:make-pitch 0 1 0)) ;; Die Tonhöhen auf d' verändern.
+\displayLilyMusic \someNote
+===>
+d'
+@end example
+
+
+@node Verdoppelung einer Note mit Bindebögen (Beispiel)
+@subsection Verdoppelung einer Note mit Bindebögen (Beispiel)
+@translationof Doubling a note with slurs (example)
+
+In diesem Abschnitt soll gezeigt, werden, wie man eine
+Funktion erstellt, die eine Eingabe wie @code{a}
+nach @code{a( a)} umdefiniert.  Dazu wird zuerst die
+interne Repräsentation der Musik betrachtet, die
+das Endergebnis darstellt:
+
+@example
+\displayMusic@{ a'( a') @}
+===>
+(make-music
+  'SequentialMusic
+  'elements
+  (list (make-music
+          'EventChord
+          'elements
+          (list (make-music
+                  'NoteEvent
+                  'duration
+                  (ly:make-duration 2 0 1 1)
+                  'pitch
+                  (ly:make-pitch 0 5 0))
+                (make-music
+                  'SlurEvent
+                  'span-direction
+                  -1)))
+        (make-music
+          'EventChord
+          'elements
+          (list (make-music
+                  'NoteEvent
+                  'duration
+                  (ly:make-duration 2 0 1 1)
+                  'pitch
+                  (ly:make-pitch 0 5 0))
+                (make-music
+                  'SlurEvent
+                  'span-direction
+                  1)))))
+@end example
+
+Eine schlechte Nachricht ist, dass die
+@code{SlurEvent}-Ausdrücke @qq{innerhalb}
+der Noten (bzw. innerhalb der
+@code{EventChord}-Ausdrücke) hinzugefügt werden müssen.
+
+Jetzt folgt eine Betrachtung der Eingabe:
+
+@example
+(make-music
+  'SequentialMusic
+  'elements
+  (list (make-music
+          'EventChord
+          'elements
+          (list (make-music
+                  'NoteEvent
+                  'duration
+                  (ly:make-duration 2 0 1 1)
+                  'pitch
+                  (ly:make-pitch 0 5 0))))))
+@end example
+
+In der gewünschten Funktion muss also dieser Ausdruck
+kopiert werden (sodass zwei Noten vorhanden sind, die
+eine Sequenz bilden), dann müssen @code{SlurEvent}
+zu der @code{'elements}-Eigenschaft jeder Noten hinzugefügt
+werden, und schließlich muss eine @code{SequentialMusic}
+mit den beiden @code{EventChords} erstellt werden.
+
+@example
+doubleSlur = #(define-music-function (parser location note) (ly:music?)
+         "Return: @{ note ( note ) @}.
+         `note' is supposed to be an EventChord."
+         (let ((note2 (ly:music-deep-copy note)))
+           (set! (ly:music-property note 'elements)
+                 (cons (make-music 'SlurEvent 'span-direction -1)
+                       (ly:music-property note 'elements)))
+           (set! (ly:music-property note2 'elements)
+                 (cons (make-music 'SlurEvent 'span-direction 1)
+                       (ly:music-property note2 'elements)))
+           (make-music 'SequentialMusic 'elements (list note note2))))
+@end example
+
+
+@node Artikulationszeichen zu Noten hinzufügen (Beispiel)
+@subsection Artikulationszeichen zu Noten hinzufügen (Beispiel)
+@translationof Adding articulation to notes (example)
+
+Am einfachsten können Artikulationszeichen zu Noten
+hinzugefügt werden, indem man zwei musikalische Funktionen
+in einen Kontext einfügt, wie erklärt in
+@ref{Kontexte erstellen}.  Hier soll jetzt eine musikalische
+Funktion entwickelt werden, die das vornimmt.
+
+Eine @code{$variable} innerhalb von @code{#@{...#@}} ist das
+gleiche wie die normale Befehlsform @code{\variable} in
+üblicher LilyPond-Notation.  Es ist bekannt dass
+
+@example
+@{ \music -. -> @}
+@end example
+
+@noindent
+in LilyPond nicht funktioniert.  Das Problem könnte vermieden
+werden, indem das Artikulationszeichen an eine Pseudonote
+gehängtwird:
+
+@example
+@{ << \music s1*0-.-> @}
+@end example
+
+@noindent
+aber in diesem Beispiel soll gezeigt werden, wie man das in
+Scheme vornimmt.  Zunächst wird die Eingabe und die gewünschte
+Ausgabe examiniert:
+
+@example
+%  Eingabe
+\displayMusic c4
+===>
+(make-music
+  'EventChord
+  'elements
+  (list (make-music
+          'NoteEvent
+          'duration
+          (ly:make-duration 2 0 1 1)
+          'pitch
+          (ly:make-pitch -1 0 0))))
+=====
+%  gewünschte Ausgabe
+\displayMusic c4->
+===>
+(make-music
+  'EventChord
+  'elements
+  (list (make-music
+          'NoteEvent
+          'duration
+          (ly:make-duration 2 0 1 1)
+          'pitch
+          (ly:make-pitch -1 0 0))
+        (make-music
+          'ArticulationEvent
+          'articulation-type
+          "marcato")))
+@end example
+
+Dabei ist zu sehen, dass eine Note (@code{c4}) als @code{EventChord}
+repräsentiert ist, mit einem @code{NoteEvent}-Ausdruck in ihrer
+Elementenliste.  Um eine Marcato-Artikulation hinzuzufügen, muss
+ein @code{ArticulationEvent}-Ausdrcuk zu der Elementeigenschaft
+des @code{EventChord}-Ausdrucks hinzugefügt werden.
+
+Um diese Funktion zu bauen, wird folgerndermaßen begonnen:
+
+@example
+(define (add-marcato event-chord)
+  "Add a marcato ArticulationEvent to the elements of `event-chord',
+  which is supposed to be an EventChord expression."
+  (let ((result-event-chord (ly:music-deep-copy event-chord)))
+    (set! (ly:music-property result-event-chord 'elements)
+          (cons (make-music 'ArticulationEvent
+                  'articulation-type "marcato")
+                (ly:music-property result-event-chord 'elements)))
+    result-event-chord))
+@end example
+
+Die erste Zeile definiert eine Funktion in Scheme: Die Bezeichnung
+der Funktion ist @code{add-marcato} und sie hat eine Variable
+mit der Bezeichnung @code{event-chord}.  In Scheme geht der Typ
+einer Variable oft direkt aus der Bezeichnung hervor (das ist auch
+eine gute Methode für andere Programmiersprachen).
+
+@example
+"Add a marcato..."
+@end example
+
+@noindent
+ist eine (englische) Beschreibung, was diese Funktion tut.  Sie ist
+nicht unbedingt notwendig, aber genauso wie klare Variablen-Bezeichnungen
+ist auch das eine gute Methode.
+
+@example
+(let ((result-event-chord (ly:music-deep-copy event-chord)))
+@end example
+
+@code{let} wird benutzt, um die lokalen Variablen zu definieren.  Hier
+wird eine lokale Variable benutzt: @code{result-event-chord}.  Sie erhält
+den Wert @code{(ly:music-deep-copy event-chord)}.  @code{ly:music-deep-copy}
+ist eine LilyPond-spezifische Funktion, die wie alle Funktionen mit dem
+Präfix @code{ly:} versehen ist.  Sie wird benutzt, um eine Kopie eines
+musikalischen Ausdrucks anzufertigen.  Hier wird @code{event-chord}
+(der Parameter der Funktion) kopiert.  Die Funktion soll ja nur ein
+Artikulationszeichen an einen @code{EventChord} gehängt werden, deshalb ist es besser,
+den @code{EventChord}, der als Argument gegeben wurde, nicht zu
+verändern, weil er woanders benutzt werden könnte.
+
+Jetzt gibt es @code{result-event-chord}, wobei es sich um einen
+@code{NoteEventChord}-Ausdruck handelt, welcher gleichzeigt eine Kopie
+von @code{event-chord} ist.  Das Makro wird seiner Eigenschaftsliste
+hinzugefügt:
+
+@example
+(set! place new-value)
+@end example
+
+Was in diesem Fall @qq{gesetzt} werden soll (@qq{place}) ist die
+@q{elements}-Eigenschaft des @code{result-event-chord}-Ausdrucks.
+
+@example
+(ly:music-property result-event-chord 'elements)
+@end example
+
+@code{ly:music-property} ist die Funktion, mit der musikalische
+Eigenschaften erreicht werden können (die @code{'elements},
+@code{'duration}, @code{'pitch} usw., die in der Ausgabe von
+@code{\displayMusic} weiter oben angezeigt werden).  Der neue
+Wert ist, was ehemals die Elemtneigenschaft war, mit einem
+zusätzlichen Element: dem @code{ArticulationEvent}-Ausdruck,
+der aus der Ausgabe von
+@code{\displayMusic} kopiert werden kann:
+
+@example
+(cons (make-music 'ArticulationEvent
+        'articulation-type "marcato")
+      (ly:music-property result-event-chord 'elements))
+@end example
+
+@code{cons} wird benutzt, um ein Element zu einer Liste hinzuzufügen,
+ohne dass die originale Liste verändert wird.  Das ist es, was die
+Funktion tun soll:  die gleiche Liste, aber mit dem neuen
+@code{ArticulationEvent}-Ausdruck.  Die Reihenfolge innerhalb
+der Elementeeigenschaft ist hier nicht relevant.
+
+Wenn schließlich die Marcato-Artikulation zu der entsprechenden
+@code{elements}-Eigenschaft hinzuzugefügt ist, kann
+@code{result-event-chord} ausgegeben werden, darum die letzte Zeile
+der Funktion.
+
+Jetzt wird die @code{add-marcato}-Funktion in eine musikalische
+Funktion umgewandelt:
+
+@example
+addMarcato = #(define-music-function (parser location event-chord)
+                                     (ly:music?)
+    "Add a marcato ArticulationEvent to the elements of `event-chord',
+    which is supposed to be an EventChord expression."
+    (let ((result-event-chord (ly:music-deep-copy event-chord)))
+      (set! (ly:music-property result-event-chord 'elements)
+            (cons (make-music 'ArticulationEvent
+                    'articulation-type "marcato")
+                  (ly:music-property result-event-chord 'elements)))
+      result-event-chord))
+@end example
+
+Eine Überprüfung, dass die Funktion richtig arbeitet, geschieht
+folgendermaßen:
+
+@example
+\displayMusic \addMarcato c4
+@end example
+
+
+@node Programmierungsschnittstelle für Textbeschriftungen
+@section Programmierungsschnittstelle für Textbeschriftungen
+@translationof Markup programmer interface
+
+Textbeschriftungselemente sind als besondere Scheme-Funktionen
+definiert, die ein Stencil-Objekt erstellen, dem eine Anzahl
+an Argumenten übergeben wird.
+
+@menu
+* Beschriftungskonstruktionen in Scheme::
+* Wie Beschriftungen intern funktionieren::
+* Neue Definitionen von Beschriftungsbefehlen::
+* Neue Definitionen von Beschriftungsbefehlen für Listen::
+@end menu
+
+
+@node Beschriftungskonstruktionen in Scheme
+@subsection Beschriftungskonstruktionen in Scheme
+@translationof Markup construction in Scheme
+
+@cindex Textbeschriftungsbefehle, definieren
+@cindex Textbeschriftung, eigene Befehle
+@cindex eigene Befehle, Textbeschriftung
+@cindex markup, eigene Befehle
+@cindex Befehle definieren, Textbeschriftung
+
+Das @code{markup}-(Textbeschriftungs)Makro erstellt Textbeschriftungs-Ausdrücke
+in Scheme, wobei eine LilyPond-artige Syntax benutzt wird.  Beispielsweise
+ist
+
+@example
+(markup #:column (#:line (#:bold #:italic "hello" #:raise 0.4 "world")
+                  #:larger #:line ("foo" "bar" "baz")))
+@end example
+
+@noindent
+identisch mit
+
+@example
+\markup \column @{ \line @{ \bold \italic "hello" \raise #0.4 "world" @}
+                  \larger \line @{ foo bar baz @} @}
+@end example
+
+@noindent
+Dieses Beispiel zeigt die hauptsächlichen Übersetzungsregeln
+zwischen normaler Textbeschriftungssyntax von LilyPond und der
+Textbeschriftungssyntax in Scheme.
+
+@quotation
+@multitable @columnfractions .3 .3
+@item @b{LilyPond} @tab @b{Scheme}
+@item @code{\markup Text1} @tab @code{(markup Text1)}
+@item @code{\markup @{ Text1 Text2 ... @}} @tab
+        @code{(markup Text1 Text2 ... )}
+@item @code{\Befehl} @tab @code{#:Befehl}
+@item @code{\Variable} @tab @code{Variable}
+@item @code{\center-column @{ ... @}} @tab @code{#:center-column ( ... )}
+@item @code{Zeichenkette} @tab @code{"Zeichenkette"}
+@item @code{#scheme-arg} @tab @code{scheme-arg}
+@end multitable
+@end quotation
+
+Die gesamte Scheme-Sprache ist innerhalb des @code{markup}-Makros
+zugänglich.  Man kann also beispielsweise Funktionen innerhalb
+eines @code{markup} aufrufen, um Zeichenketten zu manipulieren.
+Das ist nützlich, wenn neue Beschriftungsbefehle definiert werden
+sollen (siehe auch
+@ref{Neue Definitionen von Beschriftungsbefehlen}).
+
+
+@knownissues
+
+Das Beschriftungslistenargument von Befehlen wie @code{#:line},
+@code{#:center} und @code{#:column} kann keine Variable oder
+das Resultat eines Funktionsaufrufen sein.
+
+@lisp
+(markup #:line (Funktion-die-Textbeschriftung-ausgibt))
+@end lisp
+
+@noindent
+ist ungültig.  Man sollte anstatt dessen die Funktionen
+@code{make-line-markup}, @code{make-center-markup} oder
+@code{make-column-markup} benutzen:
+
+@lisp
+(markup (make-line-markup (Funktion-die-Textbeschriftung-ausgibt)))
+@end lisp
+
+
+@node Wie Beschriftungen intern funktionieren
+@subsection Wie Beschriftungen intern funktionieren
+@translationof How markups work internally
+
+In einer Textbeschriftung wie
+
+@example
+\raise #0.5 "Textbeispiel"
+@end example
+
+@noindent
+ist @code{\raise} unter der Haube durch die @code{raise-markup}-Funktion
+repräsentiert.  Der Beschriftungsausdruck wird gespeichert als
+
+@example
+(list raise-markup 0.5 (list simple-markup "Textbeispiel"))
+@end example
+
+Wenn die Beschriftung in druckbare Objekte (Stencils) umgewandelt ist,
+wir die @code{raise-markup}-Funktion folgendermaßen aufgerufen:
+
+@example
+(apply raise-markup
+       @var{\layout object}
+       @var{Liste der Eigenschafts-alists}
+       0.5
+       @var{die "Textbeispiel"-Beschriftung})
+@end example
+
+Die @code{raise-markup}-Funktion erstellt zunächt den Stencil für die
+@code{Textbeispiel}-Beschriftung und verschiebt dann diesen Stencil
+um 0.5 Notenlinienzwischenräume nach oben.  Das ist ein einfaches
+Beispiel.  Weitere, kompliziertere Beispiele finden sich nachfolgend
+in diesem Abschnitt und in der Datei
+@file{scm/@/define@/-markup@/-commands@/.scm}.
+
+
+@node Neue Definitionen von Beschriftungsbefehlen
+@subsection Neue Definitionen von Beschriftungsbefehlen
+@translationof New markup command definition
+
+Neue Textbeschriftungsbefehle können mit dem
+@code{define-markup-command}-Scheme-Makro definiert werden.
+
+@lisp
+(define-markup-command (@var{befehl-bezeichnung} @var{layout} @var{props} @var{arg1} @var{arg2} ...)
+            (@var{arg1-type?} @var{arg2-type?} ...)
+  ..Befehlkörper..)
+@end lisp
+
+Die Argumente sind:
+
+@table @var
+@item argi
+@var{i}te Befehlsargument
+@item argi-type?
+eine Eigenschaft für das @var{i}te Argument
+@item layout
+die @q{layout}-Definition
+@item props
+eine Liste an alists, in der alle aktiven Eigenschaften enthalten sind
+@end table
+
+Als einfaches Beispiel soll gezeigt werden, wie man einen
+@code{\smallcaps}-Befehl hinzufügen kann, der die Kapitälchen
+für die Schriftzeichen auswählt.  Normalerweise würde man Kapitälchen
+folgendermaßen auswählen:
+
+@example
+\markup @{ \override #'(font-shape . caps) Text-in-Kapitälchen @}
+@end example
+
+@noindent
+Damit wird die Kapitälchenschriftart ausgewählt, indem die
+@code{font-shape}-Eigesnchaft auf @code{#'caps} gesetzt wird,
+während @code{Text-in-caps} interpretiert wird.
+
+Damit diese Funkion als @code{\smallcaps}-Befehl zur Verfügung
+gestellt werden kann, muss eine Funktion mit @code{define-markup-command}
+definiert werden.  Der Befehl braucht ein Argument vom Typ @code{markup}.
+Darum sollte der Beginn der Funktion lauten:
+
+@example
+(define-markup-command (smallcaps layout props argument) (markup?)
+@end example
+
+@noindent
+
+Was jetzt folgt, ist der eigentliche Inhalt des Befehls: das
+@code{argument} soll als Beschriftung (markup) interpretiert werden,
+also:
+
+@example
+(interpret-markup layout @dots{} argument)
+@end example
+
+@noindent
+Diese Interpretation sollte @code{'(font-shape . caps)} zu den
+aktiven Eigenschaften hinzufügen, weshalb wir das Folgende anstelle
+der @dots{} in dem Beispiel einfügen:
+
+@example
+(cons (list '(font-shape . caps) ) props)
+@end example
+
+@noindent
+Die Variable @code{props} ist eine Liste an alists, und mit @code{cons}
+wird ihr eine zusätzliche Einstellung hinzugefügt.
+
+Man könnte sich auch vorstellen, dass ein Rezitativ einer Oper
+gesetzt werden soll, und ein Befehl wäre sehr bequem, mit dem
+man die Namen der Charaktere auf eine eigene Art darstellen könnte.
+Namen sollen in Kapitälchen gesetzt werden und etwas nach links und
+oben verschoben werden.  Man kann also einen @code{\character}-Befehl
+definieren, der die nötige Verschiebung berücksichtigt und
+den neuen @code{\smallcaps}-Befehl einsetzt:
+
+@example
+#(define-markup-command (character layout props name) (string?)
+  "Print the character name in small caps, translated to the left and
+  top.  Syntax: \\character #\"name\""
+  (interpret-markup layout props
+   (markup #:hspace 0 #:translate (cons -3 1) #:smallcaps name)))
+@end example
+
+Hier ist eine Komplikation, die erklärt werden muss: Text über oder
+unter dem Notensystem wird vertikal verschoben um in einem bestimmten
+Abstand von dem System und den Noten zu sein (das wird als @qq{padding}
+bezeichnet).  Um sicherzugehen, dass dieser Mechanismus nicht die
+vertikale Verschiebung von @code{#:translate} annulliert, wird
+die leere Zeichenkette (@code{#:hspace 0}) vor den zu verschiebenden
+Text gesetzt.  Das @code{#:hspace 0} wird jetzt also über die Noten
+gesetzt und @code{name} dann relativ zu der leeren Zeichenkette
+verschoben.  Im Endeffekt wird der Text nach links oben verschoben.
+
+Das Resultat sieht folgendermaßen aus:
+
+@example
+@{
+  c''^\markup \character #"Cleopatra"
+  e'^\markup \character #"Giulio Cesare"
+@}
+@end example
+
+@lilypond[quote,ragged-right]
+#(define-markup-command (smallcaps layout props str) (string?)
+  "Print the string argument in small caps.  Syntax: \\smallcaps #\"string\""
+  (interpret-markup layout props
+   (make-line-markup
+    (map (lambda (s)
+          (if (= (string-length s) 0)
+              s
+              (markup #:large (string-upcase (substring s 0 1))
+                      #:translate (cons -0.6 0)
+                      #:tiny (string-upcase (substring s 1)))))
+         (string-split str #\Space)))))
+
+#(define-markup-command (character layout props name) (string?)
+  "Print the character name in small caps, translated to the left and
+  top.  Syntax: \\character #\"name\""
+  (interpret-markup layout props
+   (markup #:hspace 0 #:translate (cons -3 1) #:smallcaps name)))
+
+{
+  c''^\markup \character #"Cleopatra" c'' c'' c''
+  e'^\markup \character #"Giulio Cesare" e' e' e'
+}
+@end lilypond
+
+In diesen Befehlen wurden Kapitälchen eingesetzt, aber es kann
+vorkommen, dass die Schriftart keine Kapitälchen zur Verfügung
+stellt.  In diesem Fall können die Kapitälchen nachempfunden
+werden, indem man Großbuchstaben setzt, deren Anfangsbuchstabe
+etwas größer gesetzt wird:
+
+@example
+#(define-markup-command (smallcaps layout props str) (string?)
+  "Print the string argument in small caps."
+  (interpret-markup layout props
+   (make-line-markup
+    (map (lambda (s)
+          (if (= (string-length s) 0)
+              s
+              (markup #:large (string-upcase (substring s 0 1))
+                      #:translate (cons -0.6 0)
+                      #:tiny (string-upcase (substring s 1)))))
+         (string-split str #\Space)))))
+@end example
+
+Der @code{smallcaps}-Befehl spaltet die Argumente zuerst in
+Einzelstücke auf, die von Leerzeichen getrennt sind
+(@code{(string-split str #\Space)}); für jedes Einzelstück
+wird dann eine Beschriftung aufgebaut, deren erster Buchstabe
+vergrößert wird und als Versalbuchstabe gesetzt wird
+(@code{#:large (string-upcase (substring s 0 1))}), und eine
+zweite Versalbuchstaben gesetzt werden
+(@code{#:tiny (string-upcase (substring s 1))}).  Wenn
+LilyPond ein Leerzeichen zwischen Beschriftungen einer Zeile
+entdeckt, wird die zweite Beschriftung nach links verschoben
+(@code{#:translate (cons -0.6 0) ...}).  Dann werden die
+Beschriftungen für jedes Einzelstück in eine Zeile gesetzt
+@code{(make-line-markup ...)}.  Schließlich wird die resultierende
+Beschriftung an die @code{interpret-markup}-Funktion zusammen
+mit den Argumenten @code{layout} und @code{props} weitergereicht.
+
+Achtung: ist gibt keinen internen Befehl @code{\smallCaps}, der
+benutzt werden kann, um Text in Kapitälchen zu setzen.  Siehe auch
+@ref{Text markup commands}.
+
+@knownissues
+
+Im Moment sind die möglichen Kombinationen von Argumenten (nach den
+Standardargumenten @var{layout} und @var{props}), die mit
+@code{define-markup-command} definiert werden, wie folgt
+limitiert:
+
+@table @asis
+@item (kein Argument)
+@itemx @var{list}
+@itemx @var{markup}
+@itemx @var{markup markup}
+@itemx @var{scm}
+@itemx @var{scm markup}
+@itemx @var{scm scm}
+@itemx @var{scm scm markup}
+@itemx @var{scm scm markup markup}
+@itemx @var{scm markup markup}
+@itemx @var{scm scm scm}
+@end table
+
+@noindent
+Hier stellt @var{scm} native Scheme-Datentypen dar wie
+@q{number} oder @q{string}.
+
+Es ist beispielsweise nicht möglich, einen Beschriftungsbefehl
+@code{foo} mit vier Argumenten in folgender Weise zu nutzen:
+
+@example
+#(define-markup-command (foo layout props
+                         num1    str1    num2    str2)
+                        (number? string? number? string?)
+  ...)
+@end example
+
+@noindent
+Wenn es folgendermaßen eingesetzt wird:
+
+@example
+\markup \foo #1 #"bar" #2 #"baz"
+@end example
+
+@cindex Scheme signature
+@cindex Signatur, Scheme
+@noindent
+beschwert sich @command{lilypond}, dass @code{foo} wegen einer ungekannten
+Scheme Signatur nicht analysiert werden kann.
+
+
+@node Neue Definitionen von Beschriftungsbefehlen für Listen
+@subsection Neue Definitionen von Beschriftungsbefehlen für Listen
+@translationof New markup list command definition
+
+Beschriftungslistenbefehle können mit dem Scheme-Makro
+@code{define-markup-list-command} definiert werden, welches
+sich ähnlich verhält wie das
+@code{define-markup-command}-Makro, das schon beschrieben
+wurde in @ref{Neue Definitionen von Beschriftungsbefehlen}.  Ein Unterschied
+ist, dass bei diesem Listen-Makro eine ganze Liste an
+Stecils ausgegeben wird.
+
+Im folgenden Beispiel wird ein @code{\paragraph}-Beschriftungslistenbefehl
+definiert, welcher eine Liste von Zeilen im Blocksatz ausgibt, von
+denen die erste Zeile eingerückt ist.  Der Einzug wird aus dem
+@code{props}-Argument entnommen.
+
+@example
+#(define-markup-list-command (paragraph layout props args) (markup-list?)
+   (let ((indent (chain-assoc-get 'par-indent props 2)))
+     (interpret-markup-list layout props
+       (make-justified-lines-markup-list (cons (make-hspace-markup indent)
+                                               args)))))
+@end example
+
+Neben den üblichen @code{layout} und @code{props}-Argumenten, nimmt der
+@code{paragraph}-Beschriftungslistenbefehl als Argument eine Beschriftungsliste,
+die @code{args} genannt wird.  Das Prädikat für Beschriftungslisten ist
+@code{markup-list?}.
+
+Zuerst errechnet die Funktion die Breite des Einzugs, eine Eigenschaft
+mit der Bezeichnung @code{par-indent} anhand der Eigenschaftsliste
+@code{props}.  Wenn die Eigenschaft nicht gefunden wird, ist der
+Standardwert @code{2}.  Danach wird eine Liste von Zeilen im Blocksatz
+erstellt, wobei die @code{make-justified-lines-markup-list}-Funktion
+eingesetzt wird, die verwandt ist mit dem eingebauten
+@code{\justified-lines}-Beschriftungslistenbefehl.  Horizontaler
+Platz wird zu Beginn eingefügt mit der @code{make-hspace-markup}-Funktion.
+Zuletzt wird die Beschriftungsliste ausgewertet durch die
+@code{interpret-markup-list}-Funktion.
+
+Dieser neue Beschriftungslistenbefehl kann wie folgt benutzt werden:
+
+@example
+\markuplines @{
+  \paragraph @{
+    Die Kunst des Notensatzes wird auch als \italic @{Notenstich@} bezeichnet. Dieser
+    Begriff stammt aus dem traditionellen Notendruck. Noch bis vor etwa
+    20 Jahren wurden Noten erstellt, indem man sie in eine Zink- oder
+    Zinnplatte schnitt oder mit Stempeln schlug.
+  @}
+  \override-lines #'(par-indent . 4) \paragraph @{
+    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.
+  @}
+@}
+@end example
+
+
+
+@node Kontexte für Programmierer
+@section Kontexte für Programmierer
+@translationof Contexts for programmers
+
+@menu
+* Kontextauswertung::
+* Eine Funktion auf alle Layout-Objekte anwenden::
+@end menu
+
+@node Kontextauswertung
+@subsection Kontextauswertung
+@translationof Context evaluation
+
+@cindex Aufrufen von Code während der Interpretation
+@cindex On-the-fly Code ausführen
+
+@funindex \applyContext
+
+Kontexte können während ihrer Interpretation mit Scheme-Code
+modifiziert werden.  Die Syntax hierfür ist
+
+@example
+\applyContext @var{function}
+@end example
+
+@var{function} sollte eine Scheme-Funktion sein, die ein
+einziges Argument braucht, welches der Kontext ist, auf den
+sie ausgeführt werden soll.  Der folgende Code schreibt
+die aktuelle Taktzahlshould in die Standardausgabe
+während der Kompilation.
+
+@example
+\applyContext
+  #(lambda (x)
+    (format #t "\nWe were called in barnumber ~a.\n"
+     (ly:context-property x 'currentBarNumber)))
+@end example
+
+
+
+@node Eine Funktion auf alle Layout-Objekte anwenden
+@subsection Eine Funktion auf alle Layout-Objekte anwenden
+@translationof Running a function on all layout objects
+
+
+@cindex Aufruf von Code für Layoutobjekte
+
+@funindex \applyOutput
+
+Der vielfältigste Weg, ein Objekt zu beeinflussen, ist
+@code{\applyOutput}.  Die Syntax lautet:
+
+@example
+\applyOutput @var{Kontext} @var{proc}
+@end example
+
+@noindent
+wobei @var{proc} eine Scheme-Funktion ist, die drei Argumente
+benötigt.
+
+Während der Interpretation wird die Funktion @var{proc} für
+jedes Layoutobjekt aufgerufen, dass im Kontext @var{Kontext}
+vorgefunden wird, und zwar mit folgenden Argumenten:
+
+@itemize
+@item dem Layoutobjekt
+@item dem Kontext, in dem das Objekt erstellt wurde
+@item dem Kontext, in welchem @code{\applyOutput} bearbeitet wird.
+@end itemize
+
+Zusätzlich findet sich der Grund für das Layoutobjekt, etwa
+der musikalische Ausdruck oder das Objekt, das für seine Erstellung
+verantwortlich war, in der Objekteigenschaft @code{cause}.
+Für einen Notenkopf beispielsweise ist das ein
+@rinternals{NoteHead}-Ereignis, und für einen Notenhals
+(ein @rinternals{Stem}-Objekt) ist es ein @rinternals{NoteHead}-Objekt.
+
+Hier ist eine Funktion, die mit @code{\applyOutput} benutzt
+werden kann; sie macht Notenköpfe auf der Mittellinie unsichtbar:
+
+@lilypond[quote,verbatim,ragged-right]
+#(define (blanker grob grob-origin context)
+   (if (and (memq 'note-head-interface (ly:grob-interfaces grob))
+            (eq? (ly:grob-property grob 'staff-position) 0))
+       (set! (ly:grob-property grob 'transparent) #t)))
+
+\relative {
+  e4 g8 \applyOutput #'Voice #blanker b d2
+}
+@end lilypond
+
+
+@node Scheme-Vorgänge als Eigenschaften
+@section Scheme-Vorgänge als Eigenschaften
+@translationof Scheme procedures as properties
+
+Eigenschaften (wie Dicke, Richtung usw.) können mit
+@code{\override} auf feste Werte gesetzt werden, etwa:
+
+@example
+\override Stem #'thickness = #2.0
+@end example
+
+Eigenschaften können auch auf eine Scheme-Prozedur gesetzt werden:
+
+@lilypond[fragment,verbatim,quote,relative=2]
+\override Stem #'thickness = #(lambda (grob)
+    (if (= UP (ly:grob-property grob 'direction))
+        2.0
+        7.0))
+c b a g b a g b
+@end lilypond
+
+@noindent
+In diesem Fall wird die Prozedur ausgeführt, sobal der Wert der
+Eigenschaft während das Formatierungsprozesses angefordert wird.
+
+Der größte Teil der Satzmaschinierie funtioniert mit derartigen
+Callbacks.  Eigenschaften, die üblicherweise Callbacks
+benutzen, sind u. A.:
+
+@table @code
+@item stencil
+  Die Druckfunktion, die eine Ausgabe des Symbols ervorruft
+@item X-offset
+  Die Funktion, die die horizontale Position setzt
+@item X-extent
+  Die Funktion, die die Breite eines Objekts errechnet
+@end table
+
+Die Funktionen brauchen immer ein einziges Argument, das der
+Grob ist.
+
+Wenn Funktionen mit mehreren Argumenten aufgerufen werden müssen,
+kann der aktuelle Grob mit einer Grob-Einschließung
+eingefügt werden.  Hier eine Einstellung aus
+@code{AccidentalSuggestion}:
+
+@example
+(X-offset .
+  ,(ly:make-simple-closure
+    `(,+
+        ,(ly:make-simple-closure
+           (list ly:self-alignment-interface::centered-on-x-parent))
+      ,(ly:make-simple-closure
+           (list ly:self-alignment-interface::x-aligned-on-self)))))
+@end example
+
+@noindent
+In diesem Beispiel werden sowohl @code{ly:self-alignment-interface::x-aligned-on-self}
+als auch @code{ly:self-alignment-interface::centered-on-x-parent}
+mit dem Grob als Argument aufgerufen.  Die Resultate werden mit der
+@code{+}-Funktion addiert.  Um sicherzugehen, dass die Addition
+richtig ausgeführt wird, wird das ganze Konstrukt in
+@code{ly:make-simple-closure} eingeschlossen.
+
+In der Tat ist die Benutzung einer einzelnen Funktion als
+Eigenschaftswert äquivalent zu
+
+@example
+(ly:make-simple-closure (ly:make-simple-closure (list @var{proc})))
+@end example
+
+@noindent
+Das innere @code{ly:make-simple-closure} stellt den Grob als Argument
+für @var{proc} zur Verfügung, das äußere stellt sicher, dass das
+Resultat der Funktion ausgegeben wird und nicht das
+@code{simple-closure}-Objekt.
+
+
+@node Scheme-Code anstelle von \tweak verwenden
+@section Scheme-Code anstelle von @code{       weak} verwenden
+@translationof Using Scheme code instead of \tweak
+
+Der hauptsächliche Nachteil von @code{\tweak} ist seine
+syntaktische Inflexibilität.  Folgender Code beispielsweise
+ergibt einen Syntaxfehler:
+
+@example
+F = \tweak #'font-size #-3 -\flageolet
+
+\relative c'' @{
+  c4^\F c4_\F
+@}
+@end example
+
+@noindent
+Anders gesagt verhält sich @code{\tweak} nicht wie eine Artikulation
+und kann auch nicht deren Syntax verwenden: man kann es nicht
+mit @code{^} oder @code{_} anfügen.
+
+Durch die Verwendung von Scheme kann dieses Problem umgangen werden.
+Der Weg zum Resultat wird gezeigt in
+@ref{Artikulationszeichen zu Noten hinzufügen (Beispiel)}, insbesondere
+wie @code{\displayMusic} benutzt wird, hilft hier weiter.
+
+@example
+F = #(let ((m (make-music 'ArticulationEvent
+                          'articulation-type "flageolet")))
+       (set! (ly:music-property m 'tweaks)
+             (acons 'font-size -3
+                    (ly:music-property m 'tweaks)))
+       m)
+
+\relative c'' @{
+  c4^\F c4_\F
+@}
+@end example
+
+@noindent
+In diesem Beispiel werden die @code{tweaks}-Eigenschaften
+des Flageolet-Objekts @code{m} (mit @code{make-music} erstellt)
+werden mit @code{ly:music-property} ausgelesen, ein neues
+Schlüssel-Wert-Paar, um die Schriftgröße zu ändern, wird
+der Eigenschaftenliste mithilfe der @code{acons}-Schemefunktion
+vorangestellt, und das Resultat wird schließlich mit
+@code{set!} zurückgeschrieben.  Das letzte Element des
+@code{let}-Blocks ist der Wiedergabewert, @code{m}.
+
+
+
+@node Schwierige Korrekturen
+@section Schwierige Korrekturen
+@translationof Difficult tweaks
+
+Hier finden sich einige Klassen an schwierigeren Anpassungen.
+
+@itemize
+
+@item
+Ein Typ der schwierigen Anpassungen ist die Erscheinung von
+Strecker-Objekten wie Binde- oder Legatobögen.  Zunächst wird
+nur eins dieser Objekte erstellt, und sie können mit dem
+normalen Mechanismus verändert werden.  In einigen Fällen
+reichen die Strecker jedoch über Zeilenumbrüche.  Wenn das
+geschieht, werden diese Objekte geklont.  Ein eigenes
+Objekt wird für jedes System erstellt, in dem es sich befindet.
+Sie sind Klone des originalen Objektes und erben alle
+Eigenschaften, auch @code{\override}-Befehle.
+
+Anders gesagt wirkt sich ein @code{\override} immer auf alle
+Stücke eines geteilten Streckers aus.  Um nur einen Teil eines
+Streckers bei einem Zeilenumbruch zu verändern, ist es notwendig,
+in den Formatierungsprozess einzugreifen.  Das Callback
+@code{after-line-breaking} enthält die Schemefunktion, die
+aufgerufen wird, nachdem Zeilenumbrüche errechnet worden sind
+und die Layout-Objekte über die unterschiedlichen Systeme verteilt
+wurden.
+
+Im folgenden Beispiel wird die Funktion
+@code{my-callback} definiert.  Diese Funktion
+
+@itemize
+@item
+bestimmt, ob das Objekt durch Zeilenumbrüche geteilt ist,
+@item
+wenn ja, ruft sie alle geteilten Objekte auf,
+@item
+testet, ob es sich um das letzte der geteilten Objekte handelt,
+@item
+wenn ja, wird @code{extra-offset} gesetzt.
+@end itemize
+
+Diese Funktion muss in @rinternals{Tie} (Bindebogen) installiert
+werden, und der letzte Teil eines gebrochenen Bindebogens wird
+nach oben verschoben.
+
+@lilypond[quote,verbatim,ragged-right]
+#(define (my-callback grob)
+  (let* (
+         ; have we been split?
+         (orig (ly:grob-original grob))
+
+         ; if yes, get the split pieces (our siblings)
+         (siblings (if (ly:grob? orig)
+                     (ly:spanner-broken-into orig) '() )))
+
+   (if (and (>= (length siblings) 2)
+             (eq? (car (last-pair siblings)) grob))
+     (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
+
+\relative c'' {
+  \override Tie #'after-line-breaking =
+  #my-callback
+  c1 ~ \break c2 ~ c
+}
+@end lilypond
+
+@noindent
+Wenn man diesen Trick anwendet, sollte das neue @code{after-line-breaking}
+auch das alte @code{after-line-breaking}-Callback aufrufen,
+wenn es vorhanden ist.  Wenn diese Funktion etwa mit
+@code{Hairpin} (Crescendo-Klammer) eingesetzt wird, sollte auch
+@code{ly:hairpin::after-line-breaking} aufgerufen werden.
+
+
+@item
+Manche Objekte können aus technischen Gründen nicht mit @code{\override}
+verändert werden.  Beispiele hiervon sind @code{NonMusicalPaperColumn}
+und @code{PaperColumn}.  Sie können mit der
+@code{\overrideProperty}-Funktion geändert werden, die ähnlich wie
+@code{\once \override} funktioniert, aber eine andere Syntax einsetzt.
+
+@example
+\overrideProperty
+#"Score.NonMusicalPaperColumn"  % Grob-Bezeichnung
+#'line-break-system-details     % Eigenschaftsbezeichnung
+#'((next-padding . 20))         % Wert
+@end example
+
+Es sollte angemerkt werden, dass @code{\override}, wenn man es auf
+@code{NonMusicalPaperColumn} und @code{PaperColumn} anwendet, immernoch
+innerhalb der @code{\context}-Umgebung funktioniert.
+
+@end itemize
diff --git a/Documentation/de/extending/scheme-tutorial.itely b/Documentation/de/extending/scheme-tutorial.itely
new file mode 100644 (file)
index 0000000..ba1599f
--- /dev/null
@@ -0,0 +1,350 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
+
+@ignore
+    Translation of GIT committish: 5cf864d550e7148412d594cf336841791bff6f76
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  For details, see the Contributors'
+    Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.12.0"
+
+@node Scheme-Übung
+@appendix Scheme-Übung
+@translationof Scheme tutorial
+
+@funindex #
+@cindex Scheme
+@cindex GUILE
+@cindex Scheme, in einer LilyPond-Datei
+@cindex LISP
+
+LilyPond verwendet die Scheme-Programmiersprache sowohl als Teil 
+der Eingabesyntax als auch als internen Mechanismus, um Programmmodule 
+zusammenzufügen.  Dieser Abschnitt ist ein sehr kurzer Überblick über 
+die Dateneingabe mit Scheme.  Wenn Sie mehr über Scheme wissen wollen,
+gehen Sie zu @uref{http://@/www@/.schemers@/.org}.
+
+LilyPond benutzt die GNU Guile-Implementation von Scheme, die auf dem
+@qq{R5RS}-Standard von Scheme basiert.  Wenn Sie Scheme lernen wollen,
+um es innerhalb von LilyPond zu benutzen, wird es nicht empfohlen,
+mit einer anderen Implementation (die sich auf einen anderen
+Standard bezieht) zu arbeiten.  Information zu Guile findet sich
+unter @uref{http://www.gnu.org/software/guile/}.  Der
+@qq{R5RS}-Standard von Scheme befindet sich unter der Adresse
+@uref{http://www.schemers.org/Documents/Standards/R5RS/}.
+
+Die LilyPond-Installation enthält gleichzeitig auch die
+Guile-Implemenation von Scheme.  Auf den meisten Systemen kann
+man in einer Scheme-sandbox experimentieren, indem man ein
+Kommandozeilen-Fenster öffnet und @code{guile} auffruft.  Unter
+einigen Systemen, insbesondere unter Windows, muss man evtl.
+die Umgebungsvariable @code{GUILE_LOAD_PATH} auf das Verzeichnis
+@code{../usr/shr/guile/1.8} innerhalb des LilyPond-Installationsverzeichnisses
+setzen (der vollständige Pfad ist erklärt in @ref{Other sources of information}).
+Alternativ können Windows-Benutzer auch einfach @qq{Ausführen} im
+Startmenü wählen und @code{guile} schreiben.
+
+Das Grundlegendste an einer Sprache sind Daten: Zahlen, Zeichen, 
+Zeichenketten, Listen usw.  Hier ist eine Liste der Datentypen, die für
+LilyPond-Eingabedateien relevant sind.
+
+@table @asis
+@item Boolesche Variablen
+Werte einer Booleschen Variable sind Wahr oder Falsch. Die Scheme-Entsprechung
+für Wahr ist @code{#t} und für Falsch @code{#f}.
+@funindex ##t
+@funindex ##f
+
+@item Zahlen
+Zahlen werden wie üblich eingegeben, @code{1} ist die (ganze) 
+Zahl Eins, während @code{-1.5} ist eine Gleitkommazahl (also 
+eine nicht-ganze).
+
+@item Zeichenketten
+Zeichenketten werden in doppelte Anführungszeichen gesetzt:
+
+@example
+"Das ist eine Zeichenkette"
+@end example
+
+Zeichenketten können über mehrere Zeilen reichen:
+
+@example
+"Das
+ist
+eine Zeichenkette"
+@end example
+
+Anführungszeichen und neue Zeilen können auch mit sogenannten 
+Fluchtsequenzen eingefügt werden. Die Zeichenkette
+@code{a sagt "b"} wird wie folgt eingegeben:
+
+@example
+"a sagt \"b\""
+@end example
+
+Neue Zeilen und Backslashe werden mit @code{\n} bzw. @code{\\}
+eingegeben.
+@end table
+
+In einer Notationsdatei werden kleine Scheme-Abschnitte mit der 
+Raute (@code{#}) eingeleitet. Die vorigen Beispiele heißen also in 
+LilyPond:
+
+@example
+##t ##f
+#1 #-1.5
+#"Das ist eine Zeichenkette"
+#"Das
+ist
+eine Zeichenkette"
+@end example
+
+LilyPond-Kommentare (@code{%} oder @code{%@{ %@}}) können innerhalb
+von Scheme-Code nicht benutzt werden.  Kommentare in Guile Scheme
+werden wie folgt notiert:
+
+@example
+; Einzeiliges Kommentar
+
+#!
+  Guile-Stil Blockkommentar (nicht schachtelbar)
+  Diese Kommentare werden von Scheme-Programmierern
+  selten benutzt und nie im Quellcode
+  von LilyPond
+!#
++@end example
+
+Merere aufeinander folgende Scheme-Ausdrücke in einer Notationsdatei
+können kombiniert werden, wenn man @code{begin} einsetzt.  Das
+erlaubt es, die Anzahl an Rauten auf eins zu begrenzen.
+
+@example
+#(begin
+  (define foo 0)
+  (define bar 1))
+@end example
+
+Wenn @code{#} von einer öffnenden Klammer, @code{(}, gefolgt wird, wie
+in dem Beispiel oben, bleibt der Parser im Scheme-Modus bis eine
+passende schließende Klammer, @code{)}, gefunden wird, sodass keine
+weiteren @code{#}-Zeichen benötigt werden, um einen Scheme-Abschnitt
+anzuzeigen.
+
+Für den Rest dieses Abschnitts nehmen wir an, dass die Daten immer in 
+einer LilyPond-Datei stehen, darum wird immer die Raute verwendet.
+
+Scheme kann verwendet werden, um Berechnungen durchzuführen. Es 
+verwendet eine @emph{Präfix}-Syntax. Um 1 und@tie{}2 zu addieren, muss 
+man @code{(+ 1 2)} schreiben, und nicht @math{1+2}, wie in traditioneller
+Mathematik.
+
+@lisp
+#(+ 1 2)
+  @result{} #3
+@end lisp
+
+Der Pfeil @result{} zeigt an, dass das Ergebnis der Auswertung von 
+@code{(+ 1 2)} @code{3}@tie{}ist. Berechnungen können geschachtelt 
+werden und das Ergebnis einer Berechnung kann für eine neue 
+Berechnung eingesetzt werden.
+
+@lisp
+#(+ 1 (* 3 4))
+  @result{} #(+ 1 12)
+  @result{} #13
+@end lisp
+
+Diese Berechnungen sind Beispiele von Auswertungen. Ein Ausdruck 
+wie @code{(* 3 4)} wird durch seinen Wert @code{12} ersetzt. Ähnlich 
+verhält es sich mit Variablen. Nachdem eine Variable definiert ist:
+
+@example
+zwoefl = #12
+@end example
+
+@noindent
+kann man sie in Ausdrücken weiterverwenden:
+
+@example
+vierundzwanzig = #(* 2 zwoelf)
+@end example
+
+@noindent
+Die 24 wird in der Variablen @code{vierundzwanzig} gespeichert.
+Die gleiche Zuweisung kann auch vollständig in Scheme geschrieben 
+werden:
+
+@example
+#(define vierundzwanzig (* 2 zwoelf))
+@end example
+
+Der @emph{Name} einer Variable ist auch ein Ausdruck, genauso wie 
+eine Zahl oder eine Zeichenkette. Er wird wie folgt eingegeben:
+
+@example
+#'vierundzwanzig
+@end example
+
+@funindex #'symbol
+@cindex Zitieren in Scheme
+
+Das Apostroph @code{'} verhindert, dass bei der Scheme-Auswertung
+ @code{vierundzwanzig} durch @code{24} ersetzt wird. Anstatt dessen erhalten 
+ wir die Bezeichnung @code{vierundzwanzig}.
+
+Diese Syntax wird sehr oft verwendet, weil es manche
+Einstellungsveränderungen erfordern, dass Scheme-Werte einer 
+internen Variable zugewiesen werden, wie etwa
+
+@example
+\override Stem #'thickness = #2.6
+@end example
+
+Diese Anweisung verändert die Erscheinung der Notenhälse. Der Wert 
+@code{2.6} wird der Variable @code{thickness} (Dicke) eines 
+@code{Stem}-(Hals)-Objektes gleichgesetzt. 
+@code{thickness} wird relativ zu den Notenlinien errechnet, in diesem 
+Fall sind die Hälse also 2,6 mal so dick wie die Notenlinien.  Dadurch 
+werden Hälse fast zweimal so dick dargestellt, wie sie normalerweise sind. 
+Um zwischen Variablen zu unterscheiden, die in den Quelldateien direkt 
+definiert werden (wie @code{vierundzwanzig} weiter oben), und zwischen denen, 
+die für interne Objekte zuständig sind, werden hier die ersteren 
+@qq{Bezeichner} genannt, die letzteren dagegen @qq{Eigenschaften}.
+Das Hals-Objekt hat also eine @code{thickness}-Eigenschaft, während 
+@code{vierundzwanzig} ein Bezeichner ist.
+
+@cindex Eigenschaften versus Bezeichner
+@cindex Bezeichner versus Eigenschaften
+
+Sowohl zweidimensionale Abstände (X- und Y-Koordinaten) als auch 
+Größen von Objekten (Intervalle mit linker und rechter Begrenzung) werden 
+als @code{pairs} (Paare) eingegeben. Ein Paar@footnote{In der 
+Scheme-Terminologie wird ein Paar @code{cons} genannt und seine 
+zwei Elemente @code{car} und @code{cdr}.} wird als @code{(erster . zweiter)}
+eingegeben und sie müssen mit dem Apostroph eingeleitet werden, genauso 
+wie Symbole:
+
+@example
+\override TextScript #'extra-offset = #'(1 . 2)
+@end example
+
+Hierdurch wird das Paar (1, 2) mit der Eigenschaft @code{extra-offset}
+des TextScript-Objektes verknüpft. Diese Zahlen werden in 
+Systembreiten  gemessen, so dass der Befehl das Objekt eine Systembreite 
+nach rechts verschiebt und zwei Breiten nach oben.
+
+Die zwei Elemente eines Paares können von beliebigem Inhalt sein, etwa
+
+@example
+#'(1 . 2)
+#'(#t . #f)
+#'("blah-blah" . 3.14159265)
+@end example
+
+Eine Liste wird eingegeben, indem die Elemente der Liste in Klammern 
+geschrieben werden, mit einem Apostroph davor. Beispielsweise:
+
+@example
+#'(1 2 3)
+#'(1 2 "string" #f)
+@end example
+
+Die ganze Zeit wurde hier schon Listen benutzt. Eine Berechnung, 
+wie @code{(+ 1 2)}, ist auch eine Liste (welche das Symbol @code{+} 
+und die Nummern 1 und@tie{}2 enthält. Normalerweise werden Listen 
+als Berechnungen interpretiert und der Scheme-Interpreter ersetzt 
+die Liste mit dem Ergebnis der Berechnung. Um eine Liste an sich 
+einzugeben, muss die Auswertung angehalten werden. Das geschieht, 
+indem der Liste ein Apostroph vorangestellt wird. Für Berechnungen 
+kann man also den Apostroph nicht verwenden.
+
+Innerhalb einer zitierten Liste (also mit Apostroph) muss man keine 
+Anführungszeichen mehr setzen. Im Folgenden ein Symbolpaar, eine 
+Symbolliste und eine Liste von Listen:
+
+@example
+#'(stem . head)
+#'(staff clef key-signature)
+#'((1) (2))
+@end example
+
+
+
+@menu
+* Optimierungen mit Scheme::
+@end menu
+
+@node Optimierungen mit Scheme
+@appendixsec Optimierungen mit Scheme
+@translationof Tweaking with Scheme
+
+Wir haben gesehen wie LilyPond-Eingabe massiv beeinflusst
+werden kann, indem Befehle wie etwa
+@code{\override TextScript #'extra-offset = ( 1 . -1)}
+benutzt werden.  Aber es wurde gezeigt, dass Scheme noch
+mächtiger ist.  Eine bessere Erklärung findet sich in der@ref{Scheme-Übung} und in
+@ruser{Schnittstellen für Programmierer}.
+
+Scheme kann auch in einfachen @code{\override}-Befehlen
+benutzt werden:
+
+TODO Find a simple example
+@c This isn't a valid example with skylining
+@c It works fine without padText  -td
+
+@ignore
+@lilypond[quote,verbatim,ragged-right]
+padText = #(define-music-function (parser location padding) (number?)
+#{
+  \once \override TextScript #'padding = #$padding
+#})
+
+\relative c''' {
+  c4^"piu mosso" b a b
+  \padText #1.8
+  c4^"piu mosso" d e f
+  \padText #2.6
+  c4^"piu mosso" fis a g
+}
+@end lilypond
+@end ignore
+
+Es kann auch benutzt werden, um Befehle zu erstellen:
+
+@c Check this is a valid example with skylining
+@c It is - 'padding still works
+
+@lilypond[quote,verbatim,ragged-right]
+tempoPadded = #(define-music-function (parser location padding tempotext)
+  (number? string?)
+#{
+  \once \override Score.MetronomeMark #'padding = $padding
+  \tempo \markup { \bold $tempotext }
+#})
+
+\relative c'' {
+  \tempo \markup { "Low tempo" }
+  c4 d e f g1
+  \tempoPadded #4.0 #"High tempo"
+  g4 f e d c1
+}
+@end lilypond
+
+Sogar ganze Musikausdrücke können eingefügt werden:
+
+@lilypond[quote,verbatim,ragged-right]
+pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
+#{
+  $x e8 a b $y b a e
+#})
+
+\relative c''{
+  \pattern c8 c8\f
+  \pattern {d16 dis} { ais16-> b\p }
+}
+@end lilypond
+
+
index 45d83e9fa9b51847c9e421ea94d11271201f7c3b..0e64d693ceb37249efefe5196d0ee5ac7983ffca 100644 (file)
@@ -1,6 +1,6 @@
 \input texinfo @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
 @ignore
-    Translation of GIT committish: 4582b7b24d22b2041bfcba49e716a714effcce92
+    Translation of GIT committish: 83c1d1a6ee4e89f7f913fab904816e6c033b6b04
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -9,11 +9,23 @@
 @documentencoding UTF-8
 @documentlanguage de
 @setfilename lilypond-learning.info
-@settitle GNU LilyPond Handbuch zum Lernen
+@settitle LilyPond Handbuch zum Lernen
+@afourpaper
 
+@macro manualIntro
+Diese Datei stellt eine Einleitung für LilyPond Version
+@version{} zur Verfügung.
+@end macro
+
+@c `Learning Manual' was born 1999-10-10 with git commit b9abaac...
+@macro copyrightDeclare
+Copyright @copyright{} 1999--2009 bei den Autoren.
+@end macro
+@set FDL
 @include macros.itexi
 
-@afourpaper
+
 
 @c don't remove this comment.
 @ignore
 
 @c Translators: Till Rettig
 
-@ifnottex
-@node Top
-@top GNU LilyPond -- Handbuch zum Lernen
-@translationof Top
-@end ifnottex
+@lilyTitlePage{Learning Manual}
+
+@c TOC -- non-tex
 
+
+@ignore
 @ifhtml
 @ifclear bigpage
 Dieses Dokument ist auch als
@@ -48,115 +60,6 @@ verfügbar.
 @end ifhtml
 
 
-@c  This produces the unified index
-@syncodeindex fn cp
-@syncodeindex vr cp
-
-
-@finalout
-
-@titlepage
-@title LilyPond
-@subtitle Das Notensatzprogramm
-@titlefont{Handbuch zum Lernen}
-@author Das LilyPond-Entwicklerteam
-
-
-Copyright @copyright{} 1999--2010 bei den Autoren
-
-@emph{The translation of the following copyright notice is provided
-for courtesy to non-English speakers, but only the notice in English
-legally counts.}
-
-@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung
-für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber
-nur die englische Version gültig.}
-
-@quotation
-Es ist erlaubt, dieses Dokument unter den Bedingungen der
-GNU Free Documentation Lizenz (Version 1.1 oder
-spätere, von der Free Software Foundation publizierte Versionen, ohne Invariante Abschnitte),
-zu kopieren, zu verbreiten und/oder
-zu verändern. Eine Kopie der Lizenz ist im Abschnitt ``GNU
-Free Documentation License'' angefügt.
-@end quotation
-
-@quotation
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1
-or any later version published by the Free Software Foundation;
-with no Invariant Sections.
-A copy of the license is included in the section entitled ``GNU
-Free Documentation License''.
-@end quotation
-
-@vskip 20pt
-
-Für LilyPond Version @version{}
-@end titlepage
-
-@copying
-Copyright @copyright{} 1999--2010 bei den Autoren
-
-@emph{The translation of the following copyright notice is provided
-for courtesy to non-English speakers, but only the notice in English
-legally counts.}
-
-@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung
-für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber
-nur die englische Version gültig.}
-
-@quotation
-Es ist erlaubt, dieses Dokument unter den Bedingungen der
-GNU Free Documentation Lizenz (Version 1.1 oder
-spätere, von der Free Software Foundation publizierte Versionen, ohne Invariante Abschnitte),
-zu kopieren, zu verbreiten und/oder
-zu verändern. Eine Kopie der Lizenz ist im Abschnitt ``GNU
-Free Documentation License'' angefügt.
-@end quotation
-
-@quotation
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1
-or any later version published by the Free Software Foundation;
-with no Invariant Sections.
-A copy of the license is included in the section entitled ``GNU
-Free Documentation License''.
-@end quotation
-@end copying
-
-@ifnottex
-Diese Datei dokumentiert die Erlernung des Programmes GNU LilyPond.
-
-Copyright @copyright{} 1999--2010 bei den Autoren
-
-@emph{The translation of the following copyright notice is provided
-for courtesy to non-English speakers, but only the notice in English
-legally counts.}
-
-@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung
-für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber
-nur die englische Version gültig.}
-
-@quotation
-Es ist erlaubt, dieses Dokument unter den Bedingungen der
-GNU Free Documentation Lizenz (Version 1.1 oder
-spätere, von der Free Software Foundation publizierte Versionen, ohne Invariante Abschnitte),
-zu kopieren, zu verbreiten und/oder
-zu verändern. Eine Kopie der Lizenz ist im Abschnitt ``GNU
-Free Documentation License'' angefügt.
-@end quotation
-
-@quotation
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.1
-or any later version published by the Free Software Foundation;
-with no Invariant Sections.
-A copy of the license is included in the section entitled ``GNU
-Free Documentation License''.
-@end quotation
-@end ifnottex
-
 @ifnottex
 Das ist des Handbuch zum Erlernen von GNU LilyPond Version @version{}.
 Für einen Überblick über die gesamte Dokumentation von LilyPond und die Intention
@@ -168,11 +71,14 @@ dieses Handbuchs siehe @ref{Über die Dokumentation}.
 Mehr Information unter
 @uref{http://@/www@/.lilypond@/.org/}. Auf der Internetseite
 finden sich Kopien dieser und anderer Dokumentationsdateien.
+@end ignore
+
 
+@ifnottex
 @menu
-* Vorwort::                        Vorwort.
-* Einleitung::                   Was, warum und wie.
-* Übung::                       Eine Übung zur Einführung.
+@c * Vorwort::                        Vorwort.
+* Übung::                   Eine Übung zur Einführung.
+* Übliche Notation::        Die häufigsten Notationsfälle.              
 * Grundbegriffe::           Grundlegende Konzepte, die benötigt werden, um den Rest dieses Handbuchs zu lesen.
 * Die Ausgabe verändern::                Einleitung in die Beeinflussung des Notenbilds.
 * An LilyPond-Projekten arbeiten::   Benutzung des Programms im wirklichen Leben.
@@ -181,17 +87,20 @@ finden sich Kopien dieser und anderer Dokumentationsdateien.
 Anhänge
 
 * Vorlagen::                      Funktionierende Vorlagen.
-* Scheme-Übung::                Programmierung innerhalb von LilyPond.
 * GNU Free Documentation License:: Lizenz dieses Handbuchs.
 * LilyPond-Index::
 @end menu
+
+@docMain
 @end ifnottex
 
+@c TOC - tex
 @contents
 
+@c INCLUDES
 
-@include learning/preface.itely
-@include learning/introduction.itely
+@c @include learning/preface.itely
+@include learning/tutorial.itely
 @include learning/common-notation.itely
 @include learning/fundamental.itely
 @include learning/tweaks.itely
@@ -199,7 +108,8 @@ Anhänge
 @c moved to application.tely
 
 @include learning/templates.itely
-@include learning/scheme-tutorial.itely
+@c @include learning/scheme-tutorial.itely
+@c moved to extending.tely
 @include fdl.itexi
 
 @node LilyPond-Index
index fe70053b97f5e09f7866d5a67f7fa3501a9ebdf5..37a490807a6cef9db89589854aa6436ce7722e62 100644 (file)
@@ -1,7 +1,7 @@
 @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
 
 @ignore
-    Translation of GIT committish: 4582b7b24d22b2041bfcba49e716a714effcce92
+    Translation of GIT committish: 354f8ea159bb5216202e5815685fca8bd7e6919c
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
@@ -32,7 +32,7 @@ Tutorial guidelines:
 
 Dieser Abschnitt erklärt, wie wunderschöner Notensatz erstellt
 werden kann, der die am häufigsten vorkommenden Notationssymbole
-enthält.  Der Abschnitt baut auf der @ref{Einleitung} auf.
+enthält.  Der Abschnitt baut auf der @ref{Übung} auf.
 
 
 @menu
@@ -1203,7 +1203,6 @@ Gleichzeitig dient es als Einleitung zum Rest des Handbuches.
 
 @menu
 * Stücke durch Bezeichner organisieren::
-* Versionsnummer::
 * Titel hinzufügen::
 * Absolute Notenbezeichnungen::
 * Nach der Übung::
@@ -1306,36 +1305,6 @@ Benutzung der eben definierten Bezeichner:
 @end example
 
 
-@node Versionsnummer
-@subsection Versionsnummer
-@translationof Version number
-
-@cindex Update
-@cindex Neue Version
-@cindex Dateien aktualisieren
-@cindex Aktualisieren von Dateien
-@cindex Versionsnummern
-
-@funindex \version
-@funindex version
-@funindex convert-ly
-
-Der @code{\version}-Befehl zeigt an, welche LilyPond-Version
-für eine bestimmte Quelldatei benutzt worden ist:
-
-@example
-\version @w{"@version{}"}
-@end example
-
-@noindent
-Üblicherweise wird dieser Befehl am Anfang der Textdatei eingefügt.
-
-Durch diese Versionsmarkierung werden zukünftige Aktualisierungen
-des LilyPond-Programmes einfacher gemacht. Syntax-Änderungen
-zwischen den Programmversionen werden von einem speziellen
-Programm, @command{convert-ly}, vorgenommen. Dieses Programm braucht
-@code{\version}, um zu entscheiden, welche Regeln angewandt werden
-müssen. Für Einzelheiten, siehe @rprogram{Dateien mit convert-ly aktualisieren}.
 
 @node Titel hinzufügen
 @subsection Titel hinzufügen
@@ -1484,9 +1453,7 @@ haben, können Sie bei Bedarf diesen Verweisen folgen, um ein
 Thema zu vertiefen.
 
 Bitte lesen Sie jetzt 
-@c @ref{Über die Dokumentation}, 
-FIXME
-wenn Sie
+@ref{Überblick über die Handbücher}, wenn Sie
 es bisher noch nicht getan haben. Es gibt ungeheuer viel 
 Information über LilyPond, so dass Neulinge sich nicht sofort
 zurecht finden. Wenn Sie auch nur ein paar Minuten in diesem
diff --git a/Documentation/de/learning/introduction.itely b/Documentation/de/learning/introduction.itely
deleted file mode 100644 (file)
index d07d204..0000000
+++ /dev/null
@@ -1,820 +0,0 @@
-@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
-
-@ignore
-    Translation of GIT committish: 4582b7b24d22b2041bfcba49e716a714effcce92
-
-    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.13.4"
-@c Translators: Till Rettig, Reinhold Kainhofer
-@c Translation checkers: Hajo Bäß
-
-@node Einleitung
-@chapter Einleitung
-@translationof Introduction
-
-Dieses Kapitel stellt dem Leser das grundlegende Arbeiten mit LilyPond
-vor.
-
-@menu
-* Eine Quelldatei übersetzen::
-* Einfache Notation::
-* Arbeiten an Eingabe-Dateien::
-* Wie soll das Handbuch gelesen werden::
-@end menu
-
-
-@node Eine Quelldatei übersetzen
-@subsection Eine Quelldatei übersetzen
-@translationof Compiling a file
-
-FIXME: Text hier
-
-@menu
-* Noten eingeben::              
-* MacOS X::                     
-* Windows::                     
-* Kommandozeile::                
-@end menu
-
-@node Noten eingeben
-@subsection Noten eingeben
-@translationof Entering input
-
-@cindex Kompilieren
-@cindex erstes Beispiel
-@cindex Beispiel, erstes
-@cindex Übersetzen von Quelltext
-@cindex Groß- und Kleinschreibung
-@cindex Quelltext, übersetzen
-@cindex Großbuchstaben
-@cindex Kleinbuchstaben
-
-@qq{Kompilation} ist der Begriff, der benutzt wird, um eine
-Lilypond-Eingabedatei mit dem Programm LilyPond in eine
-Notenausgabe umzuwandeln, die ausgedruckt werden kann. 
-Zusätzlich besteht die Option, eine MIDI-Datei zu produzieren,
-die abgespielt werden kann. Das erste Beispiel zeigt, wie
-solch eine einfache Eingabedatei ausschauen kann.
-
-Um Notensatz zu erstellen, muss die Notation in der Eingabedatei
-beschrieben werden. Wenn man z.@w{}B. schreibt:
-
-@example
-@{
-  c' e' g' e'
-@}
-@end example
-
-@noindent
-so erhält man folgendes Resultat:
-
-@c  in this case we don't want verbatim
-@lilypond[quote]
-{
-  c' e' g' e'
-}
-@end lilypond
-
-@warning{In jeder LilyPond-Datei müssen
-@strong{@{ geschweifte Klammern @}} um die Noten
-oder Gesangstext
-gesetzt werden. Vor und hinter den Klammern sollten
-Leerzeichen eingegeben werden, damit keine Unklarheiten
-in Verbindung mit den eigentlichen Notensymbolen entstehen.
-An Anfang und Ende der Zeile können diese Leerzeichen auch
-weggelassen werden. Es kann sein, dass in diesem Handbuch
-die Klammern in manchen Beispielen fehlen, aber man sollte
-immer daran denken, sie in den eigenen Dateien zu benutzen!
-Mehr Informationen zu der Darstellung der Beispiele in diesem
-Handbuch gibt der Abschnitt @ref{Wie soll das Handbuch gelesen werden}.}
-
-Zusätzlich unterscheidet LilyPond @strong{Groß- und Kleinschreibung}.
-@w{@code{ @{ c d e @}}} ist zulässiger Code,
-@w{@code{ @{ C D E @}}} dagegen resultiert in einer Fehlermeldung.
-
-@smallspace
-
-@subheading Ansicht des Ergebnisses
-
-@cindex PDF-Datei
-@cindex Noten anzeigen
-@cindex Anzeigen der Noten
-@cindex Ansicht von Noten
-@cindex Editoren
-@cindex Texteditoren
-@cindex LilyPond unter MacOS X
-@cindex Windows, LilyPond starten
-@cindex MacOS X, LilyPond starten
-@cindex Unix, LilyPond starten
-@cindex Starten von LilyPond
-
-Das Erstellen der Notenausgabe hängt davon ab, welches Betriebssystem
-und welche Programme Sie benutzen.
-
-@itemize
-
-@item
-@ref{MacOS X, @sourceimage{logo-macosx,,,}}
-@ref{MacOS X, MacOS X} (graphisch)
-
-@item
-@ref{Windows, @sourceimage{logo-windows,,,}}
-@ref{Windows, Microsoft Windows} (graphisch)
-
-@item
-@ref{Kommandozeile, @sourceimage{logo-linux,,,}
-@sourceimage{logo-freebsd,,,}
-@sourceimage{logo-macosx,,,}
-@sourceimage{logo-windows,,,}
-}
-@ref{Kommandozeile, Alle Betriebssysteme} (Kommandozeile)
-
-@end itemize
-
-Beachten Sie, dass es eine Reihe an Texteditoren mit besserer 
-Unterstützung für LilyPond gibt. Mehr dazu im Abschnitt
-@rprogram{Unterstützung von Texteditoren}.
-@c FIXME: link to @rweb{Alternate input}
-
-@warning{Das erste Mal, wenn Sie LilyPond benutzen, kann es eine 
-Minute oder länger dauern, weil das Programm zuerst alle Schriftarten,
-die auf dem System zur Verfügung stehen, untersucht. Aber nach 
-diesem ersten Mal läuft LilyPond sehr viel schneller.}
-
-@node MacOS X
-@subsection MacOS X
-@translationof MacOS X
-
-@warning{Diese Anweisungen gehen davon aus, dass Sie den installierten
-LilyPad-Editor benutzen.  Wenn Sie eins der Programme benutzen, die in @rweb{Alternate input} beschrieben sind, schauen
-Sie bitte in der Dokumentation nach, wenn Sie Probleme damit haben,
-eine Datei zu kompilieren.}
-
-
-Wenn Sie das @command{LilyPond.app}-Symbol doppelt klicken, öffnet
-sich eine Beispiel-Datei. Speichern Sie sie etwa als
- @file{test.ly} auf dem Desktop und übersetzen Sie sie
-mit dem Menü-Befehl  @w{@qq{Compile > Typeset File}}.
-Die PDF-Datei mit dem fertigen Notensatz wird automatisch
-geöffnet.
-
-Das nächste Mal, wenn Sie LilyPond benutzen, sollten Sie
- @qq{New} oder @qq{Open} wählen.  Sie müssen die Datei
-speichern, bevor Sie sie übersetzen können. Wenn es Fehler gibt,
-lesen Sie die Meldungen im Log-Fenster.
-
-@node Windows
-@subsection Windows
-@translationof Windows
-
-@warning{Diese Anweisungen gehen davon aus, dass Sie den installierten
-LilyPad-Editor benutzen.  Wenn Sie eins der Programme benutzen, die in @rweb{Alternate input} beschrieben sind, schauen
-Sie bitte in der Dokumentation nach, wenn Sie Probleme damit haben,
-eine Datei zu kompilieren.}
-
-Wenn sie auf das LilyPond-Symbol auf dem Desktop doppelklicken,
-öffnet sich ein einfacher Texteditor mit einer Beispieldatei. Speichern
-Sie sie z. B. als @file{test.ly} auf dem Desktop und klicken Sie dann
-doppelt auf die Datei, um die Übersetzung zu beginnen (das Dateisymbol 
-ist eine Note). Nach einigen
-Sekunden wird eine Datei @file{test.pdf} auf dem Desktop erscheinen.
-Mit einem Doppelklick kann das fertige Notenbild in 
-der PDF-Datei angezeigt werden.
-Eine Alternative ist es, die @file{test.ly}-Datei mit der Maus auf das
-LilyPond-Symbol zu ziehen.
-
-Um eine schon existierende Datei zu bearbeiten, klicken Sie mit der rechten 
-Maustaste auf die Datei und wählen Sie @qq{Edit source}. Um eine leere 
-Datei zu erhalten, mit der Sie ein neues Stück beginnen können, öffnen Sie 
-den Texteditor durch Doppelklick auf das LilyPond-Symbol und benutzen Sie 
-@qq{New} im @qq{File}-Menü, oder klicken Sie mit der rechten
-Maustaste auf den Desktop und wählen Sie @qq{Neu...Textdatei},
-ändern Sie dann den Namen so wie Sie möchten und ändern Sie 
-die Dateiendung in @code{.ly}. Doppelklicken Sie auf die Datei,
-um Ihren LilyPond-Eingabecode einzugeben.
-
-Mit dem Doppelklick wird nicht nur die PDF-Datei erstellt, sondern
-auch eine @file{.log}-Datei. Hier wird gespeichert, was LilyPond aus
-der Quelldatei gelesen hat. Sollten Fehler auftreten, hilft oft ein 
-Blick in diese Datei.
-
-@node Kommandozeile
-@subsection Kommandozeile
-@translationof Command-line
-
-@warning{Diese Anweisungen gehen davon aus, dass Sie den installierten
-LilyPad-Editor benutzen.  Wenn Sie eins der Programme benutzen, die in @rweb{Alternate input} beschrieben sind, schauen
-Sie bitte in der Dokumentation nach, wenn Sie Probleme damit haben,
-eine Datei zu kompilieren.}
-
-
-Erstellen Sie eine Text-Datei mit dem Namen @file{test.ly} und 
-geben Sie folgenden Text ein:
-
-@example
-@{
-  c' e' g' e'
-@}
-@end example
-
-Um die Datei zu bearbeiten, geben sie an der Konsole
-
-@example
-lilypond test.ly
-@end example
-
-@noindent
-ein.
-Sie werden ungefähr folgende Meldungen sehen:
-
-
-@example
-lilypond test.ly
-GNU LilyPond @version{}
-»test.ly« wird verarbeitet
-Analysieren...
-Interpretation der Musik...
-Vorverarbeitung der grafischen Elemente...
-Ideale Seitenanzahl wird gefunden...
-Musik wird auf eine Seite angepasst...
-Systeme erstellen...
-Layout nach »test.ps« ausgeben...
-Konvertierung nach »test.pdf«...
-@end example
-
-Als Ergebnis erhalten Sie ein @file{test.pdf}, das Sie mit den
-Standardprogrammen Ihres Betriebssystemes anschauen können.
-
-
-
-@node How to write input files
-@section How to write input files
-
-FIXME: Text hier
-
-@menu
-* Einfache Notation::             
-* Arbeiten an Eingabe-Dateien::      
-@end menu
-
-
-
-@node Einfache Notation
-@subsection Einfache Notation
-@translationof Simple notation
-
-@cindex einfache Notation
-@cindex Notation, einfach
-
-LilyPond fügt einige Bestandteile des Notenbildes automatisch hinzu. Im
-nächsten Beispiel sind nur vier Tonhöhen angegeben, aber LilyPond setzt
-trotzdem einen Schlüssel, eine Taktangabe und Notendauern.
-
-@lilypond[verbatim,quote]
-{
-  c' e' g' e'
-}
-@end lilypond
-
-@noindent
-Diese Einstellungen können verändert werden, aber in den meisten Fällen
-sind die automatischen Werte durchaus brauchbar.
-
-@subheading Tonhöhen
-
-@cindex Tonhöhen
-@cindex relativer Modus
-@cindex Apostroph
-@cindex Komma
-@cindex Versetzungszeichen und relativer Modus
-@cindex relativer Modus und Versetzungszeichen
-
-@funindex \relative
-@funindex relative
-@funindex '
-@funindex ,
-
-
-Glossar: @rglos{pitch}, @rglos{interval},
-@rglos{scale}, @rglos{middle C}, @rglos{octave},
-@rglos{accidental}.
-
-@c Addition for German users about pitch naming conventions
-Die Tonhöhen werden mit Kleinbuchstaben eingegeben, die den Notennamen
-entsprechen. Es ist jedoch wichtig zu wissen, dass LilyPond in seiner
-Standardeinstellung die englischen Notennamen verwendet. Bis auf eine
-Ausnahme entsprechen sie den deutschen, deshalb wird die Voreinstellung
-von LilyPond für diese Übung beibehalten. Die @emph{Ausnahme} ist das h -- in 
-LilyPond muss man anstelle dessen b schreiben! Das deutsche b dagegen
-wird als bes notiert, ein his dagegen würde bis geschrieben. Siehe auch
-@ruser{Versetzungszeichen} und @ruser{Notenbezeichnungen in anderen Sprachen}, hier
-wird beschrieben,
-wie sich die deutschen Notennamen benutzen lassen.
-@c end addition
-
-Am einfachsten können Noten im @code{\relative}-Modus
-eingegeben werden. In diesem Modus wird die Oktave der Note automatisch
-gewählt, indem angenommen wird, dass die folgende Note immer so nah 
-wie möglich in Bezug auf die vorhergehende gesetzt wird, d. h. sie 
-wird höchstens drei Notenzeilen höher oder tiefer als die vorhergehende 
-Note gesetzt. Fangen
-wir unser erstes Notationsbeispiel mit einer @notation{scale} an, wo also
-die nächste Note immer nur eine Notenlinie über der vorherigen steht.
-
-@c KEEP LY
-@lilypond[verbatim,quote]
-% Beginnpunkt auf das mittlere C setzen
-\relative c' {
-  c d e f
-  g a b c
-}
-@end lilypond
-
-Die erste Note ist ein @notation{eingestrichenes C}. Jede folgende Note
-befindet sich so nah wie möglich bei der vorherigen -- das erste 
-@q{C} ist also das nächste C vom
-eingestrichenen C aus gerechnet. Darauf folgt das nächstmögliche
-D in Bezug auf die vorhergehende Note. Mit diesen Regeln können
-auch Melodien mit größeren Intervallen im @code{\relative}-Modus
-gebildet werden:
-
-@lilypond[verbatim,quote]
-\relative c' {
-  d f a g
-  c b f d
-}
-@end lilypond
-
-@noindent
-Es ist nicht notwendig, dass die erste Note der Melodie mit der 
-Note beginnt, die die erste Tonhöhe angibt.
-Die erste Note (das @q{D}) des vorigen Beispiels ist das nächste D 
-vom eingestrichenen C aus gerechnet.
-
-Indem man Apostrophe @code{'} (Taste Shift+#) oder Kommata @code{,} 
-zu dem @w{@code{\relative c' @{}} hinzufügt oder entfernt, kann die 
-Oktave der ersten Tonhöhe verändert werden:
-
-@c KEEP LY
-@lilypond[verbatim,quote]
-% zweigestrichenes C
-\relative c'' {
-  e c a c
-}
-@end lilypond
-
-Der relative Modus kann zunächst verwirrend erscheinen, aber es ist die 
-einfachste Art, die meisten Melodien zu notieren. Schauen wir uns an, 
-wie diese relative Berechnung in der Praxis funktioniert. Wenn wir mit 
-einem H beginnen (@code{b} in der LilyPond-Syntax), welches sich auf der 
-mittleren Linie im Violinschlüssel befindet, können wir C, D und E 
-aufwärts notieren, und A, G und F unter dem H. Wenn also die Note, die 
-auf das H folgt, ein C, D oder E ist, setzt LilyPond es oberhalb des 
-Hs, wenn es ein A, G oder F ist, wird es darunter gesetzt.
-
-@c KEEP LY
-@lilypond[verbatim,quote]
-\relative c'' {
-  b c  % c ist 1 Zeile aufwärts, also c über dem b
-  b d  % d ist 2 Zeilen aufwärts, oder 5 runter, also d über dem b
-  b e  % e ist 3 aufwärts oder 4 runter, also e über dem b
-  b a  % a ist 6 aufwärts oder 1 runter, also a unter dem b
-  b g  % g ist 5 aufwärts oder 2 runter, also g unter dem b
-  b f  % f ist 4 aufwärts oder 3 runter, also f unter dem b
-}
-@end lilypond
-
-Die gleiche Berechnung findet auch statt, wenn eine der Noten erhöht 
-oder erniedrigt ist. @notation{Versetzungszeichen} werden 
-@strong{vollständig ignoriert} bei der Berechnung. Genau die 
-gleiche Berechnung wird analog von jeder folgenden Tonhöhe aus 
-für die nächste Tonhöhe neu ausgeführt.
-
-Um Intervalle zu notieren, die größer als drei Notenzeilen sind, kann man die Oktave verändern. Mit einem Apostroph @code{'} (Taste Shift+#)
-direkt hinter dem Notennamen wird die Oktave um eins erhöht, mit einem Komma @code{,} um eins erniedrigt.
-
-@lilypond[verbatim,quote]
-\relative c'' {
-  a a, c' f,
-  g g'' a,, f'
-}
-@end lilypond
-
-@noindent
-Um eine Notenhöhe um zwei (oder mehr!) Oktaven zu verändern,
-werden sukzessive @code{''} oder @code{,,} benutzt -- es muss
-sich dabei wirklich um zwei einzelne Apostrophen und nicht um das
-Anführungszeichen @code{"}@tie{} (Taste Shift+2) handeln! Auch
-die Anfangsoktave für einen @w{@code{\relative c'}}-Abschnitt kann so
-verändert werden.
-
-@subheading Tondauern (Rhythmen)
-
-@cindex Notendauern
-@cindex Dauern
-@cindex Rhythmus
-@cindex Ganze Noten
-@cindex Halbe Noten
-@cindex Viertelnoten
-@cindex punktierte Noten
-
-Glossar: @rglos{beam}, @rglos{duration},
-@rglos{whole note}, @rglos{half note}, @rglos{quarter note},
-@rglos{dotted note}.
-
-Die @notation{Dauer} einer Note wird durch eine Zahl bezeichnet,
-die direkt auf den Notennamen folgend eingegeben wird.
-@code{1} für eine @notation{ganze Note}, @code{2} für eine 
-@notation{halbe Note}, @code{4} für eine @notation{Viertelnote} 
-und so weiter. @notation{Notenhälse} und @notation{Balken} werden
-automatisch hinzugefügt.
-
-Wenn keine Dauer bezeichnet wird, wird die der vorhergehenden Note
-verwendet. Für die erste Note ist eine Viertel als Standard definiert.
-
-@lilypond[verbatim,quote]
-\relative c'' {
-  a1
-  a2 a4 a8 a
-  a16 a a a a32 a a a a64 a a a a a a a a2
-}
-@end lilypond
-
-Um @notation{punktierte Noten} zu erzeugen, wird einfach ein Punkt 
-@code{.} hinter die Notendauer geschrieben. Die Dauer einer 
-punktierten Note muss explizit, also inklusive der Nummer, 
-angegeben werden.
-
-@lilypond[verbatim,quote]
-\relative c'' {
-  a a a4. a8
-  a8. a16 a a8. a8 a4.
-}
-@end lilypond
-
-
-@subheading Pausen
-
-@cindex Pausen
-@cindex schreiben von Pausen
-@cindex notieren von Pausen
-
-Eine @notation{Pause} wird genauso wie eine Noten eingegeben; ihre
-Bezeichnung ist @code{r}@tie{}:
-
-@lilypond[verbatim,quote]
-\relative c'' {
-  a r r2
-  r8 a r4 r4. r8
-}
-@end lilypond
-
-
-@subheading Taktangabe
-
-@cindex Taktart
-
-@funindex \time
-@funindex time
-
-Glossar: @rglos{time signature}.
-
-Die @notation{Taktart} kann mit dem 
-@code{\time}-Befehl definiert werden:
-
-@lilypond[verbatim,quote]
-\relative c'' {
-  \time 3/4
-  a4 a a
-  \time 6/8
-  a4. a
-  \time 4/4
-  a4 a a a
-}
-@end lilypond
-
-
-@subheading Notenschlüssel
-
-@cindex Schlüssel
-@cindex Alt
-@cindex Sopran
-@cindex Tenor
-@cindex Bass
-
-@funindex \clef
-@funindex clef
-
-Glossar: @rglos{time signature}.
-
-Der @notation{Notenschlüssel} kann mit dem @code{\clef}-Befehl 
-gesetzt werden:
-
-@lilypond[verbatim,quote]
-\relative c' {
-  \clef treble
-  c1
-  \clef alto
-  c1
-  \clef tenor
-  c1
-  \clef bass
-  c1
-}
-@end lilypond
-
-
-@subheading Alles zusammen
-
-Hier ist ein kleines Beispiel, dass all diese Definitionen beinhaltet:
-
-@lilypond[verbatim,quote]
-\relative c, {
-  \time 3/4
-  \clef bass
-  c2 e8 c' g'2.
-  f4 e d c4 c, r4
-}
-@end lilypond
-
-
-@seealso
-Notationsreferenz: @ruser{Tonhöhen setzen},
-@ruser{Rhythmen eingeben}, @ruser{Pausen eingeben},
-@ruser{Taktangabe}, @ruser{Notenschlüssel}.
-
-
-@node Arbeiten an Eingabe-Dateien
-@subsection Arbeiten an Eingabe-Dateien
-@translationof Working on input files
-
-@cindex geschweifte Klammern
-@cindex Klammern, geschweift
-@cindex Kommentare
-@cindex Zeilenkommentare
-@cindex Block-Kommentare
-@cindex Groß- und Kleinschreibung
-@cindex Ausdrücke
-@cindex Großbuchstaben
-@cindex Kleinbuchstaben
-
-@funindex { ... }
-@funindex %
-@funindex %@{ ... %@}
-
-
-LilyPonds Quelldateien ähneln Dateien in den meisten
-Programmiersprachen: Es ist auf Groß- und Kleinschreibung
-zu achten und Leerzeichen werden ignoriert. Ausdrücke werden 
-mit geschweiften Klammern @{ @} eingeklammert und Kommentare 
-mit dem Prozentzeichen @code{%} auskommentiert
-oder mit @code{%@{ ... %@}} umgeben.
-
-Wenn das jetzt unverständlich erscheint, sind hier die  Erklärungen:
-
-@itemize
-
-@item
-@strong{Groß- und Kleinschreibung:}
-Die Bedeutung eines Zeichens verändert sich, je
-nachdem, ob es groß (@w{@code{A, B, S, T}}) oder klein
- (@w{@code{a, b, s, t}}) geschrieben wird. Noten müssen
-immer klein geschrieben werden,  @w{@code{@{ c d e @}}} funktioniert,
-während @w{@code{@{ C D E @}}} einen Fehler produziert.
-
-@item @strong{Leerzeichen:}
-Es spielt keine Rolle, wie viele Leerzeichen oder Tabulatoren oder
-leere Zeilen sich zwischen den Zeichen der Quelldatei befinden.
-@w{@code{@{ c d e @}}} bedeutet das Gleiche wie
-@w{@code{@{ c @ @ @ @ @  d e @}}} oder
-@example
-          @{
-c                        d
-  e @}
-@end example
-
-@noindent
-Natürlich ist das letzte Beispiel etwas schwer zu lesen. Eine gute Daumenregel
-ist es, Code-Blöcke mit der Tab-Taste oder zwei Leerzeichen einzurücken:
-@example
-@{
-  c d e
-@}
-@end example
-
-Leerzeichen @emph{sind} jedoch nötig, um viele syntaktische Elemente
-voneinander zu trennen.  Leerzeichen können also immer @emph{hinzugefügt}
-werden, aber sie dürfen nicht @emph{entfernt} werden.  Da fehlende
-Leerzeichen sehr seltsame Fehlermeldungen hervorrrufen können, wird
-es nahe gelegt, immer ein Leerzeichen vor und nach jedem syntaktischen
-Element, etwa vor und nach geschweiften Kklammern, einzufügen.
-
-@item @strong{Ausdrücke:}
-Auch der kleinste Abschnitt an LilyPond-Code muss in
-@strong{@{ geschweifte Klammern @}} eingeschlossen werden. Diese
-Klammern zeigen LilyPond an, dass es sich um einen zusammengehörenden
-musikalischen Ausdruck handelt, genauso wie Klammern @q{()} in der Mathematik.
-Die Klammern sollten von jeweils einem Leerzeichen umgeben sein, um
-Zweideutigkeiten auszuschließen, es sei denn, sie
-befinden sich am Anfang oder Ende einer Zeile.
-Ein LilyPond-Befehl gefolgt von einem einfachen Ausdruck
-in Klammern (wie etwa @code{\relative @{ @}}) 
-wird auch als ein einzelner Musikausdruck gewertet.
-
-@cindex Kommentare
-@cindex Zeilenkommentare
-@cindex Blockkommentare
-
-@item 
-@strong{Kommentare:}
-Ein Kommentar ist eine Bemerkung für den menschlichen Leser
-einer Quelldatei, es wird bei der Dateianalyse durch das Programm
-ignoriert, so dass es also keine Auswirkung auf die Druckausgabe der
-Noten hat. Es gibt zwei verschiedene Typen von Kommentaren. Das
-Prozentzeichen @q{%} geht einem Zeilen-Kommentar voraus: Alles
-nach diesem Zeichen wird in dieser Zeile ignoriert. 
-Üblicherweise wird ein Kommentar @emph{über} dem Code gesetzt,
-auf den es sich bezieht.
-
-@example
-a4 a a a
-% Dieser Kommentar bezieht sich auf das H
-b2 b
-@end example
-
-
-Ein Block-Kommentar ist ein ganzer Abschnitt mit einem
-Kommentar. Alles, was von @code{%@{}
-und @code{%@}} umgeben ist, wird ignoriert. Das heißt,
-dass sich ein Block-Kommentar nicht ein einem anderen
-Blockkommentar befinden kann. Wenn Sie das versuchen sollten,
-beendet schon das erste @code{%@}} @emph{beide} 
-Block-Kommentare. Das folgende Beispiel zeigt eine
-mögliche Anwendung von Kommentaren:
-
-@example
-% Noten für twinkle twinkle hier
-  c4 c g' g a a g2
-
-%@{
-    Diese Zeilen, und die Noten unten werden
-    ignoriert, weil sie sich in einem Block-Kommentar
-    befinden.
-
-    f f e e d d c2
-%@}
-@end example
-
-@end itemize
-
-
-
-@node How to read the manuals
-@section How to read the manuals
-
-FIXME: fluff here
-
-@menu
-* Klammern weglassen::             
-* Anklickbare Beispiele::          
-* Navigation mit der Tastatur::         
-* Überblick über die Handbücher::         
-@end menu
-
-
-@node Wie soll das Handbuch gelesen werden
-@subsection Wie soll das Handbuch gelesen werden
-@translationof How to read the manual
-
-@node Klammern weglassen
-@subsection Klammern weglassen
-@translationof Omitting braces
-
-@cindex Handbuch, Lesen
-@cindex Wie soll das Handbuch gelesen werden
-@cindex Lesen des Handbuchs
-@cindex Beispiele, klickbar
-@cindex klickbare Beispiele
-@cindex Vorlagen
-@cindex Templates
-@cindex Dateien konstruieren, Hinweise
-@cindex Konstruieren von Dateien, Hinweise
-@cindex Hinweise zur Konstruktion von Dateien
-
-LilyPond-Code muss immer von  @{ @} Zeichen oder einem 
-@code{@w{\relative c'' @{ ... @}}} umgeben sein, wie
-gezeigt in @ref{Arbeiten an Eingabe-Dateien}.
-Im Rest dieses Handbuchs werden die meisten Beispiel allerdings darauf
-verzichten. Um sie zu reproduzieren, können Sie den entsprechenden 
-Quellcode kopieren und in eine Textdatei einfügen, aber Sie 
-@strong{müssen} dabei
-@code{@w{\relative c'' @{ @}}} einfügen, wie hier gezeigt:
-
-@example
-\relative c'' @{
-  ... hier das Beispiel ...
-@}
-@end example
-
-Warum werden die Klammern hier meist weggelassen?  Die meisten
-der Beispiele können in ein längeres Musikstück hineinkopiert
-werden, und dann ist es natürlich nicht sinnvoll, wenn auch noch
-@code{@w{\relative c'' @{ @}}} dazukommt; ein @code{\relative} darf
-nicht innerhalb eines anderen @code{\relative} gesetzt werden,
-deshalb wird es hier weggelassen, damit die Beispiele auch innerhalb
-eines anderen Kontextes funktionieren.  Wenn bei jedem 
-Beispiel @code{@w{\relative c'' @{ @}}} eingesetzt würde,
-könnten Sie die kleinen Beispiele der Dokumentation
-nicht einfach zu Ihrem eigenen Notentext hinzufügen. 
-Die meisten Benutzer wollen 
-Noten zu einer schon bestehenden Datei irgendwo in der Mitte
-hinzufügen, deshalb wurde der relative Modus für die Beispiele
-im Handbuch weggelassen.
-
-
-@node Anklickbare Beispiele
-@subsection Anklickbare Beispiele
-@translationof Clickable examples
-
-@warning{Diese Eigenschaft gibt es nur in der HTML-Dokumentation.}
-
-Viele Leute lernen Programme, indem sie einfach herumprobieren. Das
-geht auch mit LilyPond. Wenn Sie in der HTML-Version dieses Handbuchs
-eine Abbildung in der HTML-Version dieses Handbuches anklicken,
-erhalten sie exakt den LilyPond-Code, der
-zum Satz der Abbildung benutzt wurde. Versuchen Sie es mit dieser
-Abbildung:
-
-@c no verbatim here
-@c KEEP LY
-@lilypond[quote]
-\relative c'' {
-  c-\markup { \bold \huge { Hier klicken!  } }
-}
-@end lilypond
-
-Wenn Sie einfach alles kopieren, was im
- @qq{ly snippet}-Abschnitt steht, und in eine Text-Datei
-einfügen, haben Sie schon eine fertige Vorlage für weitere
-Experimente. Damit Sie genau das gleiche Erscheinungsbild wie 
-bei dem Beispiel selber erreichen, müssen Sie alles kopieren ab der 
-Zeile @qq{Start
-cut-&-pastable section} bis ganz zum Ende der Datei.
-
-
-@node Navigation mit der Tastatur
-@subsection Navigation mit der Tastatur
-@translationof Keyboard navigation
-
-@warning{Diese Funktion gibt es nur für die HTML-Version der Handbücher.}
-
-@c TODO: once this is figured out, insert it here.
-
-Es wird gegenwärtig an dieser Funktion gearbeitet.
-
-
-
-@node Überblick über die Handbücher
-@subsection Überblick über die Handbücher
-@translationof Overview of manuals
-
-
-Es gibt sehr viele Dokumentation für LilyPond. Neue Benutzer sind
-oft verwirrt, welche Teile davon sie lesen sollen, und so kommt
-es vor, dass machnmal wichtige Abschnitte nicht gelesen werden.
-
-@warning{Bitte überspringen Sie keine wichtigen Teile der
-Dokumentation.  Sonst wird es Ihnen später sehr viel schwerer
-fallen, spätere Abschnitte zu verstehen.}
-
-@itemize
-
-@item
-@strong{Bevor Sie @emph{irgendetwas} ausprobieren}: Lesen Sie die
-Abschnitte @ref{Einleitung} und @ref{Übliche Notation}.  Wenn
-Sie auf musikalische Fachbegriffen stoßen, die Sie nicht kennen,
-schauen Sie diese im @rglosnamed{Top, Glossar} nach.
-
-@item
-@strong{Bevor Sie ein vollständiges Stück notieren}:  Lesen
-Sie den Abschnitt @ref{Grundbegriffe} im Handbuch zum Lernen.
-Danach können Sie sich die für Ihr Projekt wichtigen Abschnitte
-in der
-@rusernamed{Top, Notationsreferenz} anschauen.
-
-@item
-@strong{Bevor Sie versuchen, die Standardnotation zu verändern}:
-Lesen Sie @ref{Die Ausgabe verändern} im Handbuch zum Lernen.
-
-@item
-@strong{Bevor Sie sich an ein größeres Projekt machen}: Lesen
-Sie den Abschnitt
-@rprogram{Suggestions for writing files}
-in der Programmbenutzung.
-
-@end itemize
-
diff --git a/Documentation/de/learning/scheme-tutorial.itely b/Documentation/de/learning/scheme-tutorial.itely
deleted file mode 100644 (file)
index ba1599f..0000000
+++ /dev/null
@@ -1,350 +0,0 @@
-@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
-
-@ignore
-    Translation of GIT committish: 5cf864d550e7148412d594cf336841791bff6f76
-
-    When revising a translation, copy the HEAD committish of the
-    version that you are working on.  For details, see the Contributors'
-    Guide, node Updating translation committishes..
-@end ignore
-
-@c \version "2.12.0"
-
-@node Scheme-Übung
-@appendix Scheme-Übung
-@translationof Scheme tutorial
-
-@funindex #
-@cindex Scheme
-@cindex GUILE
-@cindex Scheme, in einer LilyPond-Datei
-@cindex LISP
-
-LilyPond verwendet die Scheme-Programmiersprache sowohl als Teil 
-der Eingabesyntax als auch als internen Mechanismus, um Programmmodule 
-zusammenzufügen.  Dieser Abschnitt ist ein sehr kurzer Überblick über 
-die Dateneingabe mit Scheme.  Wenn Sie mehr über Scheme wissen wollen,
-gehen Sie zu @uref{http://@/www@/.schemers@/.org}.
-
-LilyPond benutzt die GNU Guile-Implementation von Scheme, die auf dem
-@qq{R5RS}-Standard von Scheme basiert.  Wenn Sie Scheme lernen wollen,
-um es innerhalb von LilyPond zu benutzen, wird es nicht empfohlen,
-mit einer anderen Implementation (die sich auf einen anderen
-Standard bezieht) zu arbeiten.  Information zu Guile findet sich
-unter @uref{http://www.gnu.org/software/guile/}.  Der
-@qq{R5RS}-Standard von Scheme befindet sich unter der Adresse
-@uref{http://www.schemers.org/Documents/Standards/R5RS/}.
-
-Die LilyPond-Installation enthält gleichzeitig auch die
-Guile-Implemenation von Scheme.  Auf den meisten Systemen kann
-man in einer Scheme-sandbox experimentieren, indem man ein
-Kommandozeilen-Fenster öffnet und @code{guile} auffruft.  Unter
-einigen Systemen, insbesondere unter Windows, muss man evtl.
-die Umgebungsvariable @code{GUILE_LOAD_PATH} auf das Verzeichnis
-@code{../usr/shr/guile/1.8} innerhalb des LilyPond-Installationsverzeichnisses
-setzen (der vollständige Pfad ist erklärt in @ref{Other sources of information}).
-Alternativ können Windows-Benutzer auch einfach @qq{Ausführen} im
-Startmenü wählen und @code{guile} schreiben.
-
-Das Grundlegendste an einer Sprache sind Daten: Zahlen, Zeichen, 
-Zeichenketten, Listen usw.  Hier ist eine Liste der Datentypen, die für
-LilyPond-Eingabedateien relevant sind.
-
-@table @asis
-@item Boolesche Variablen
-Werte einer Booleschen Variable sind Wahr oder Falsch. Die Scheme-Entsprechung
-für Wahr ist @code{#t} und für Falsch @code{#f}.
-@funindex ##t
-@funindex ##f
-
-@item Zahlen
-Zahlen werden wie üblich eingegeben, @code{1} ist die (ganze) 
-Zahl Eins, während @code{-1.5} ist eine Gleitkommazahl (also 
-eine nicht-ganze).
-
-@item Zeichenketten
-Zeichenketten werden in doppelte Anführungszeichen gesetzt:
-
-@example
-"Das ist eine Zeichenkette"
-@end example
-
-Zeichenketten können über mehrere Zeilen reichen:
-
-@example
-"Das
-ist
-eine Zeichenkette"
-@end example
-
-Anführungszeichen und neue Zeilen können auch mit sogenannten 
-Fluchtsequenzen eingefügt werden. Die Zeichenkette
-@code{a sagt "b"} wird wie folgt eingegeben:
-
-@example
-"a sagt \"b\""
-@end example
-
-Neue Zeilen und Backslashe werden mit @code{\n} bzw. @code{\\}
-eingegeben.
-@end table
-
-In einer Notationsdatei werden kleine Scheme-Abschnitte mit der 
-Raute (@code{#}) eingeleitet. Die vorigen Beispiele heißen also in 
-LilyPond:
-
-@example
-##t ##f
-#1 #-1.5
-#"Das ist eine Zeichenkette"
-#"Das
-ist
-eine Zeichenkette"
-@end example
-
-LilyPond-Kommentare (@code{%} oder @code{%@{ %@}}) können innerhalb
-von Scheme-Code nicht benutzt werden.  Kommentare in Guile Scheme
-werden wie folgt notiert:
-
-@example
-; Einzeiliges Kommentar
-
-#!
-  Guile-Stil Blockkommentar (nicht schachtelbar)
-  Diese Kommentare werden von Scheme-Programmierern
-  selten benutzt und nie im Quellcode
-  von LilyPond
-!#
-+@end example
-
-Merere aufeinander folgende Scheme-Ausdrücke in einer Notationsdatei
-können kombiniert werden, wenn man @code{begin} einsetzt.  Das
-erlaubt es, die Anzahl an Rauten auf eins zu begrenzen.
-
-@example
-#(begin
-  (define foo 0)
-  (define bar 1))
-@end example
-
-Wenn @code{#} von einer öffnenden Klammer, @code{(}, gefolgt wird, wie
-in dem Beispiel oben, bleibt der Parser im Scheme-Modus bis eine
-passende schließende Klammer, @code{)}, gefunden wird, sodass keine
-weiteren @code{#}-Zeichen benötigt werden, um einen Scheme-Abschnitt
-anzuzeigen.
-
-Für den Rest dieses Abschnitts nehmen wir an, dass die Daten immer in 
-einer LilyPond-Datei stehen, darum wird immer die Raute verwendet.
-
-Scheme kann verwendet werden, um Berechnungen durchzuführen. Es 
-verwendet eine @emph{Präfix}-Syntax. Um 1 und@tie{}2 zu addieren, muss 
-man @code{(+ 1 2)} schreiben, und nicht @math{1+2}, wie in traditioneller
-Mathematik.
-
-@lisp
-#(+ 1 2)
-  @result{} #3
-@end lisp
-
-Der Pfeil @result{} zeigt an, dass das Ergebnis der Auswertung von 
-@code{(+ 1 2)} @code{3}@tie{}ist. Berechnungen können geschachtelt 
-werden und das Ergebnis einer Berechnung kann für eine neue 
-Berechnung eingesetzt werden.
-
-@lisp
-#(+ 1 (* 3 4))
-  @result{} #(+ 1 12)
-  @result{} #13
-@end lisp
-
-Diese Berechnungen sind Beispiele von Auswertungen. Ein Ausdruck 
-wie @code{(* 3 4)} wird durch seinen Wert @code{12} ersetzt. Ähnlich 
-verhält es sich mit Variablen. Nachdem eine Variable definiert ist:
-
-@example
-zwoefl = #12
-@end example
-
-@noindent
-kann man sie in Ausdrücken weiterverwenden:
-
-@example
-vierundzwanzig = #(* 2 zwoelf)
-@end example
-
-@noindent
-Die 24 wird in der Variablen @code{vierundzwanzig} gespeichert.
-Die gleiche Zuweisung kann auch vollständig in Scheme geschrieben 
-werden:
-
-@example
-#(define vierundzwanzig (* 2 zwoelf))
-@end example
-
-Der @emph{Name} einer Variable ist auch ein Ausdruck, genauso wie 
-eine Zahl oder eine Zeichenkette. Er wird wie folgt eingegeben:
-
-@example
-#'vierundzwanzig
-@end example
-
-@funindex #'symbol
-@cindex Zitieren in Scheme
-
-Das Apostroph @code{'} verhindert, dass bei der Scheme-Auswertung
- @code{vierundzwanzig} durch @code{24} ersetzt wird. Anstatt dessen erhalten 
- wir die Bezeichnung @code{vierundzwanzig}.
-
-Diese Syntax wird sehr oft verwendet, weil es manche
-Einstellungsveränderungen erfordern, dass Scheme-Werte einer 
-internen Variable zugewiesen werden, wie etwa
-
-@example
-\override Stem #'thickness = #2.6
-@end example
-
-Diese Anweisung verändert die Erscheinung der Notenhälse. Der Wert 
-@code{2.6} wird der Variable @code{thickness} (Dicke) eines 
-@code{Stem}-(Hals)-Objektes gleichgesetzt. 
-@code{thickness} wird relativ zu den Notenlinien errechnet, in diesem 
-Fall sind die Hälse also 2,6 mal so dick wie die Notenlinien.  Dadurch 
-werden Hälse fast zweimal so dick dargestellt, wie sie normalerweise sind. 
-Um zwischen Variablen zu unterscheiden, die in den Quelldateien direkt 
-definiert werden (wie @code{vierundzwanzig} weiter oben), und zwischen denen, 
-die für interne Objekte zuständig sind, werden hier die ersteren 
-@qq{Bezeichner} genannt, die letzteren dagegen @qq{Eigenschaften}.
-Das Hals-Objekt hat also eine @code{thickness}-Eigenschaft, während 
-@code{vierundzwanzig} ein Bezeichner ist.
-
-@cindex Eigenschaften versus Bezeichner
-@cindex Bezeichner versus Eigenschaften
-
-Sowohl zweidimensionale Abstände (X- und Y-Koordinaten) als auch 
-Größen von Objekten (Intervalle mit linker und rechter Begrenzung) werden 
-als @code{pairs} (Paare) eingegeben. Ein Paar@footnote{In der 
-Scheme-Terminologie wird ein Paar @code{cons} genannt und seine 
-zwei Elemente @code{car} und @code{cdr}.} wird als @code{(erster . zweiter)}
-eingegeben und sie müssen mit dem Apostroph eingeleitet werden, genauso 
-wie Symbole:
-
-@example
-\override TextScript #'extra-offset = #'(1 . 2)
-@end example
-
-Hierdurch wird das Paar (1, 2) mit der Eigenschaft @code{extra-offset}
-des TextScript-Objektes verknüpft. Diese Zahlen werden in 
-Systembreiten  gemessen, so dass der Befehl das Objekt eine Systembreite 
-nach rechts verschiebt und zwei Breiten nach oben.
-
-Die zwei Elemente eines Paares können von beliebigem Inhalt sein, etwa
-
-@example
-#'(1 . 2)
-#'(#t . #f)
-#'("blah-blah" . 3.14159265)
-@end example
-
-Eine Liste wird eingegeben, indem die Elemente der Liste in Klammern 
-geschrieben werden, mit einem Apostroph davor. Beispielsweise:
-
-@example
-#'(1 2 3)
-#'(1 2 "string" #f)
-@end example
-
-Die ganze Zeit wurde hier schon Listen benutzt. Eine Berechnung, 
-wie @code{(+ 1 2)}, ist auch eine Liste (welche das Symbol @code{+} 
-und die Nummern 1 und@tie{}2 enthält. Normalerweise werden Listen 
-als Berechnungen interpretiert und der Scheme-Interpreter ersetzt 
-die Liste mit dem Ergebnis der Berechnung. Um eine Liste an sich 
-einzugeben, muss die Auswertung angehalten werden. Das geschieht, 
-indem der Liste ein Apostroph vorangestellt wird. Für Berechnungen 
-kann man also den Apostroph nicht verwenden.
-
-Innerhalb einer zitierten Liste (also mit Apostroph) muss man keine 
-Anführungszeichen mehr setzen. Im Folgenden ein Symbolpaar, eine 
-Symbolliste und eine Liste von Listen:
-
-@example
-#'(stem . head)
-#'(staff clef key-signature)
-#'((1) (2))
-@end example
-
-
-
-@menu
-* Optimierungen mit Scheme::
-@end menu
-
-@node Optimierungen mit Scheme
-@appendixsec Optimierungen mit Scheme
-@translationof Tweaking with Scheme
-
-Wir haben gesehen wie LilyPond-Eingabe massiv beeinflusst
-werden kann, indem Befehle wie etwa
-@code{\override TextScript #'extra-offset = ( 1 . -1)}
-benutzt werden.  Aber es wurde gezeigt, dass Scheme noch
-mächtiger ist.  Eine bessere Erklärung findet sich in der@ref{Scheme-Übung} und in
-@ruser{Schnittstellen für Programmierer}.
-
-Scheme kann auch in einfachen @code{\override}-Befehlen
-benutzt werden:
-
-TODO Find a simple example
-@c This isn't a valid example with skylining
-@c It works fine without padText  -td
-
-@ignore
-@lilypond[quote,verbatim,ragged-right]
-padText = #(define-music-function (parser location padding) (number?)
-#{
-  \once \override TextScript #'padding = #$padding
-#})
-
-\relative c''' {
-  c4^"piu mosso" b a b
-  \padText #1.8
-  c4^"piu mosso" d e f
-  \padText #2.6
-  c4^"piu mosso" fis a g
-}
-@end lilypond
-@end ignore
-
-Es kann auch benutzt werden, um Befehle zu erstellen:
-
-@c Check this is a valid example with skylining
-@c It is - 'padding still works
-
-@lilypond[quote,verbatim,ragged-right]
-tempoPadded = #(define-music-function (parser location padding tempotext)
-  (number? string?)
-#{
-  \once \override Score.MetronomeMark #'padding = $padding
-  \tempo \markup { \bold $tempotext }
-#})
-
-\relative c'' {
-  \tempo \markup { "Low tempo" }
-  c4 d e f g1
-  \tempoPadded #4.0 #"High tempo"
-  g4 f e d c1
-}
-@end lilypond
-
-Sogar ganze Musikausdrücke können eingefügt werden:
-
-@lilypond[quote,verbatim,ragged-right]
-pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
-#{
-  $x e8 a b $y b a e
-#})
-
-\relative c''{
-  \pattern c8 c8\f
-  \pattern {d16 dis} { ais16-> b\p }
-}
-@end lilypond
-
-
diff --git a/Documentation/de/learning/tutorial.itely b/Documentation/de/learning/tutorial.itely
new file mode 100644 (file)
index 0000000..37c5029
--- /dev/null
@@ -0,0 +1,963 @@
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
+
+@ignore
+    Translation of GIT committish: 354f8ea159bb5216202e5815685fca8bd7e6919c
+
+    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.13.4"
+@c Translators: Till Paala, Reinhold Kainhofer
+@c Translation checkers: Hajo Bäß
+
+@node Übung
+@chapter Übung
+@translationof Tutorial
+
+Dieses Kapitel stellt dem Leser das grundlegende Arbeiten mit LilyPond
+vor.
+
+@menu
+* Eine Quelldatei übersetzen::
+* Arbeiten an Eingabe-Dateien::
+* Wie soll das Handbuch gelesen werden::
+@end menu
+
+
+@node Eine Quelldatei übersetzen
+@subsection Eine Quelldatei übersetzen
+@translationof Compiling a file
+
+Dieser Abschnitt führt in die @qq{Kompilation} ein -- den
+Bearbeitungsprozess von LilyPond-Eingabedateien (die Sie geschrieben
+haben) um eine Ausgabedatei zu erstellen.
+
+@menu
+* Noten eingeben::              
+* MacOS X::                     
+* Windows::                     
+* Kommandozeile::                
+@end menu
+
+@node Noten eingeben
+@subsection Noten eingeben
+@translationof Entering input
+
+@cindex Kompilieren
+@cindex erstes Beispiel
+@cindex Beispiel, erstes
+@cindex Übersetzen von Quelltext
+@cindex Groß- und Kleinschreibung
+@cindex Quelltext, übersetzen
+@cindex Großbuchstaben
+@cindex Kleinbuchstaben
+
+@qq{Kompilation} ist der Begriff, der benutzt wird, um eine
+Lilypond-Eingabedatei mit dem Programm LilyPond in eine
+Notenausgabe umzuwandeln.  Ausgabedateien sind in erster Linie
+PDF-Dateien (zum Anschauen und Drucken), MIDI (zum Abspielen)
+und PNG (für die Benutzung auf Internetseiten).  Die Eingabedateien
+von LilyPond sind einfache Textdateien.
+
+Das erste Beispiel zeigt, wie
+solch eine einfache Eingabedatei ausschauen kann.
+
+@example
+@{
+  c' e' g' e'
+@}
+@end example
+
+Die graphische Ausgabe ist:
+
+@c  in this case we don't want verbatim
+@lilypond[quote]
+{
+  c' e' g' e'
+}
+@end lilypond
+
+@warning{In jeder LilyPond-Datei müssen
+@strong{@{ geschweifte Klammern @}} um die Noten
+oder Gesangstext
+gesetzt werden. Vor und hinter den Klammern sollten
+Leerzeichen eingegeben werden, damit keine Unklarheiten
+in Verbindung mit den eigentlichen Notensymbolen entstehen.
+An Anfang und Ende der Zeile können diese Leerzeichen auch
+weggelassen werden. Es kann sein, dass in diesem Handbuch
+die Klammern in manchen Beispielen fehlen, aber man sollte
+immer daran denken, sie in den eigenen Dateien zu benutzen!
+Mehr Informationen zu der Darstellung der Beispiele in diesem
+Handbuch gibt der Abschnitt @ref{Wie soll das Handbuch gelesen werden}.}
+
+Zusätzlich unterscheidet LilyPond @strong{Groß- und Kleinschreibung}.
+@w{@code{ @{ c d e @}}} ist zulässiger Code,
+@w{@code{ @{ C D E @}}} dagegen resultiert in einer Fehlermeldung.
+
+@smallspace
+
+@subheading Ansicht des Ergebnisses
+
+@cindex PDF-Datei
+@cindex Noten anzeigen
+@cindex Anzeigen der Noten
+@cindex Ansicht von Noten
+@cindex Editoren
+@cindex Texteditoren
+@cindex LilyPond unter MacOS X
+@cindex MacOS X, LilyPond starten
+@cindex Starten von LilyPond
+
+Das Erstellen der Notenausgabe hängt davon ab, welches Betriebssystem
+und welche Programme Sie benutzen.
+
+@itemize
+
+@item
+@ref{MacOS X, @sourceimage{logo-macosx,,,}}
+@ref{MacOS X, MacOS X} (graphisch)
+
+@item
+@ref{Windows, @sourceimage{logo-windows,,,}}
+@ref{Windows, Microsoft Windows} (graphisch)
+
+@item
+@ref{Kommandozeile, @sourceimage{logo-linux,,,}
+@sourceimage{logo-freebsd,,,}
+@sourceimage{logo-macosx,,,}
+@sourceimage{logo-windows,,,}
+}
+@ref{Kommandozeile, Alle Betriebssysteme} (Kommandozeile)
+
+@end itemize
+
+Beachten Sie, dass es eine Reihe an Texteditoren mit besserer 
+Unterstützung für LilyPond gibt. Mehr dazu im Abschnitt
+@rprogram{Unterstützung von Texteditoren}.
+@c FIXME: link to @rweb{Alternate input}
+
+@warning{Das erste Mal, wenn Sie LilyPond benutzen, kann es eine 
+Minute oder länger dauern, weil das Programm zuerst alle Schriftarten,
+die auf dem System zur Verfügung stehen, untersucht. Aber nach 
+diesem ersten Mal läuft LilyPond sehr viel schneller.}
+
+@node MacOS X
+@subsection MacOS X
+@translationof MacOS X
+
+@warning{Diese Anweisungen gehen davon aus, dass Sie die
+LilyPond-Application benutzen.  Wenn Sie eins der Programme benutzen, die in @rweb{Leichteres Editieren} beschrieben sind, schauen
+Sie bitte in der Dokumentation nach, wenn Sie Probleme damit haben,
+eine Datei zu kompilieren.}
+
+
+@subsubheading 1. Schritt: Erstellen Sie eine @file{.ly}-Datei
+
+Wenn Sie das @command{LilyPond.app}-Symbol doppelt klicken, öffnet
+sich eine Beispiel-Datei.
+
+@sourceimage{Learning_Macos_welcome,,,}
+
+Wählen Sie aus den Menüs oben links auf Ihrem Bildschirm
+@w{@code{File > Save}}.
+
+@sourceimage{Learning_Macos_Save_menu,,,}
+
+Wählen Sie einen Namen für die Datei, etwa @file{test.ly}.
+
+@sourceimage{Learning_Macos_Save_file_with_name,,,}
+
+
+@subsubheading 2. Schritt: Kompilieren (mit LilyPad)
+
+Aus den selben Menüs wählen Sie jetzt @w{@code{Compile > Tyepset}}.
+
+@sourceimage{Learning_Macos_Typeset_menu,,,}
+
+Ein neues Fenster öffnet sich, in dem ein Forschrittslog der
+Kompilation der von ihnen gerade gespeicherten Datei gezeigt
+wird.
+
+@sourceimage{Learning_Macos_Compiling_log,,,}
+
+@subsubheading 3. Schritt: Ausgabe anschauen
+
+Wenn die Kompilation fertig ist, wird ein PDF mit dem gleichen
+Namen wie das Original erstellt und automatisch mit dem
+Standard-PDF-Programm geöffnet und angezeigt.
+
+@sourceimage{Learning_Macos_pdf_output,,,}
+
+
+@subsubheading Andere Befehle
+
+Um neue LilyPond-Dateien zu erstellen beginnen sie mit
+@w{@code{File > New}}
+
+@sourceimage{Learning_Macos_New_menu,,,}
+
+@noindent
+oder @w{@code{File > Open}} um eine schon existierende Datei zu
+öffnen und zu editieren.
+
+@sourceimage{Learning_Macos_Open_menu,,,}
+
+Sie müssen alle Änderungen an der Datei zuerst speichern, bevor Sie
+wieder @w{@code{Compile > Tyepset}} wählen.  Wenn das PDF nicht
+erscheint, schauen Sie im Fortschrittslog nach Fehlern.
+
+Wenn Sie nicht das Standard-PDF-Programm benutzen, das automatisch
+bei Mac OS X dabei ist, und Sie die PDF-Datei noch von einer vorigen
+Kompilation geöffnet haben, können weitere Kompilationen fehlschlagen,
+bis Sie das Original-PDF schließen.
+
+
+@cindex Windows, LilyPond starten
+
+@node Windows
+@subsection Windows
+@translationof Windows
+
+@warning{Diese Anweisungen gehen davon aus, dass Sie den installierten
+LilyPad-Editor benutzen.  Wenn Sie eins der Programme benutzen, die in @rweb{Alternate input} beschrieben sind, schauen
+Sie bitte in der Dokumentation nach, wenn Sie Probleme damit haben,
+eine Datei zu kompilieren.}
+
+@subsubheading 1. Schritt: Erstellen Sie eine @file{.ly}-Datei
+
+Wenn sie auf das LilyPond-Symbol auf dem Desktop doppelklicken,
+öffnet sich ein einfacher Texteditor mit einer Beispieldatei.
+
+@sourceimage{Learning_Win7_Welcome_File_Whole,,,}
+
+Aus dem Menü über der Beispieldatei wählen Sie @w{@code{File > Save as}}.
+Benutzen Sie nicht @w{@code{File > Save}} für die Beispieldatei,
+weil die Datei nicht funktioniert, bis Sie sie mit einem eigenen
+Namen gespeichert haben.
+
+@sourceimage{Learning_Win7_Save_Menu,,,}
+
+Wählen Sie einen Namen für Ihre Datei, etwa @file{test.ly}.
+
+@sourceimage{Learning_Win7_Save_File_With_Name,,,}
+
+
+@subsubheading Schritt 2a: Kompilieren (mit drag-and-drop)
+
+Sie können nach Belieben die Kompilation starten, indem Sie
+entweder:
+
+Die Datei auf das LilyPond-Symbol ziehen.
+
+@sourceimage{Learning_Win7_Open_Dragndrop,,,}
+
+Klicken Sie mit der rechten Maustaste auf die Datei und wählen
+Sie aus dem Menü @w{@code{Open with > LilyPond}}.
+
+@sourceimage{Learning_Win7_Open_Context_Menu,,,}
+
+
+@subsubheading Schritt 2b: Kompilieren (mit Doppelklick)
+
+Oder klicken Sie einfach die Datei @file{test.ly} doppelt an.
+
+
+@subsubheading 3. Schritt: Ausgabe anschauen
+
+Während der Kompilation von @file{test.ly} öffnet sich ein
+Kommandofenster sehr schnell und schließt sich wieder.  Drei
+zusätzliche Dateien werden in diesem Schritt erstellt.
+
+@sourceimage{Learning_Win7_All_Files_Created,,,}
+
+Das PDF enthält den Notensatz aus der Datei @file{test.ly}.
+
+@sourceimage{Learning_Win7_Pdf_Output,,,}
+
+
+@subsubheading Andere Befehle
+
+Um eine neue Datei zu erstellen, wählen Sie @w{@code{File > New}}
+aus irgendeiner schon erstellten Datei.
+
+@sourceimage{Learning_Win7_New_Menu,,,}
+
+@noindent
+oder @w{@code{File > Open}}, um eine Datei zu öffnen und zu
+bearbeiten, die Sie schon vorher gespeichert hatten.
+
+@sourceimage{Learning_Win7_Open_Menu,,,}
+
+Sie müssen jede neue Änderung erst speichern, bevor Sie die Datei
+kompilieren.  Wenn kein PDF erstellt wird, öffnen Sie die Log-Datei
+und schauen Sie nach Fehlern.
+
+@sourceimage{Learning_Win7_Log_File,,,}
+
+Die Log-Datei wird jedes Mal überschrieben, wenn Sie Ihre
+LilyPond-Datei kompilieren.
+
+Die PS-Datei wird intern von LilyPond benutzt um das PDF zu erstellen
+und kann ignoriert werden.  Sie wird auch jedes Mal neu überschrieben.
+
+Wenn Sie das PDF in einem PDF-Programm anschauen, müssen Sie es
+zuerst schließen, bevor Sie eine neue Kompilation durchführen
+können, denn es kann einen Fehler bei der Erstellung des neuen
+PDFs geben, wenn das alte noch geöffnet ist.
+
+
+@cindex Unix, LilyPond starten
+
+@node Kommandozeile
+@subsection Kommandozeile
+@translationof Command-line
+
+@warning{Diese Anweisungen gehen davon aus, dass Sie den installierten
+LilyPad-Editor benutzen.  Wenn Sie eins der Programme benutzen, die in @rweb{Alternate input} beschrieben sind, schauen
+Sie bitte in der Dokumentation nach, wenn Sie Probleme damit haben,
+eine Datei zu kompilieren.}
+
+@subsubheading Schritt 1: Erstellen Sie eine @file{.ly}-Datei
+
+
+Erstellen Sie eine Text-Datei mit dem Namen @file{test.ly} und 
+geben Sie folgenden Text ein:
+
+@example
+@{
+  c' e' g' e'
+@}
+@end example
+
+@subsubheading Schritt 2: Kompilieren (auf der Kommandozeile)
+
+Um die Datei zu kompilieren, geben sie an der Konsole bzw. Kommandozeile
+
+@example
+lilypond test.ly
+@end example
+
+@noindent
+ein.
+Sie werden ungefähr folgende Meldungen sehen:
+
+
+@example
+lilypond test.ly
+GNU LilyPond @version{}
+»test.ly« wird verarbeitet
+Analysieren...
+Interpretation der Musik...
+Vorverarbeitung der grafischen Elemente...
+Ideale Seitenanzahl wird gefunden...
+Musik wird auf eine Seite angepasst...
+Systeme erstellen...
+Layout nach »test.ps« ausgeben...
+Konvertierung nach »test.pdf«...
+@end example
+
+@subsubheading 3. Schritt: Ausgabe anschauen
+
+Als Ergebnis erhalten Sie ein @file{test.pdf}, das Sie mit den
+Standardprogrammen Ihres Betriebssystemes anschauen können.
+
+
+
+@node Wie werden Eingabe-Dateien geschrieben
+@section Wie werden Eingabe-Dateien geschrieben
+@translationof How to write input files
+
+Dieser Abschnitt erklärt die grundlegende LilyPond-Syntax und hilft
+bei den ersten Anfängen, eine LilyPond-Eingabedatei zu schreiben.
+
+@menu
+* Einfache Notation::             
+* Arbeiten an Eingabe-Dateien::      
+@end menu
+
+
+
+@node Einfache Notation
+@subsection Einfache Notation
+@translationof Simple notation
+
+@cindex einfache Notation
+@cindex Notation, einfach
+
+LilyPond fügt einige Bestandteile des Notenbildes automatisch hinzu. Im
+nächsten Beispiel sind nur vier Tonhöhen angegeben, aber LilyPond setzt
+trotzdem einen Schlüssel, eine Taktangabe und Notendauern.
+
+@lilypond[verbatim,quote]
+{
+  c' e' g' e'
+}
+@end lilypond
+
+@noindent
+Diese Einstellungen können verändert werden, aber in den meisten Fällen
+sind die automatischen Werte durchaus brauchbar.
+
+@subheading Tonhöhen
+
+@cindex Tonhöhen
+@cindex relativer Modus
+@cindex Apostroph
+@cindex Komma
+@cindex Versetzungszeichen und relativer Modus
+@cindex relativer Modus und Versetzungszeichen
+
+@funindex \relative
+@funindex relative
+@funindex '
+@funindex ,
+
+
+Glossar: @rglos{pitch}, @rglos{interval},
+@rglos{scale}, @rglos{middle C}, @rglos{octave},
+@rglos{accidental}.
+
+@c Addition for German users about pitch naming conventions
+Die Tonhöhen werden mit Kleinbuchstaben eingegeben, die den Notennamen
+entsprechen. Es ist jedoch wichtig zu wissen, dass LilyPond in seiner
+Standardeinstellung die englischen Notennamen verwendet. Bis auf eine
+Ausnahme entsprechen sie den deutschen, deshalb wird die Voreinstellung
+von LilyPond für diese Übung beibehalten. Die @emph{Ausnahme} ist das h -- in 
+LilyPond muss man anstelle dessen b schreiben! Das deutsche b dagegen
+wird als bes notiert, ein his dagegen würde bis geschrieben. Siehe auch
+@ruser{Versetzungszeichen} und @ruser{Notenbezeichnungen in anderen Sprachen}, hier
+wird beschrieben,
+wie sich die deutschen Notennamen benutzen lassen.
+@c end addition
+
+Am einfachsten können Noten im @code{\relative}-Modus
+eingegeben werden. In diesem Modus wird die Oktave der Note automatisch
+gewählt, indem angenommen wird, dass die folgende Note immer so nah 
+wie möglich in Bezug auf die vorhergehende gesetzt wird, d. h. sie 
+wird höchstens drei Notenzeilen höher oder tiefer als die vorhergehende 
+Note gesetzt. Fangen
+wir unser erstes Notationsbeispiel mit einer @notation{Tonleiter} an, wo also
+die nächste Note immer nur eine Notenlinie über der vorherigen steht.
+
+@c KEEP LY
+@lilypond[verbatim,quote]
+% Beginnpunkt auf das mittlere C setzen
+\relative c' {
+  c d e f
+  g a b c
+}
+@end lilypond
+
+Die erste Note ist ein @notation{eingestrichenes C}. Jede folgende Note
+befindet sich so nah wie möglich bei der vorherigen -- das erste 
+@q{C} ist also das nächste C vom
+eingestrichenen C aus gerechnet. Darauf folgt das nächstmögliche
+D in Bezug auf die vorhergehende Note. Mit diesen Regeln können
+auch Melodien mit größeren Intervallen im @code{\relative}-Modus
+gebildet werden:
+
+@lilypond[verbatim,quote]
+\relative c' {
+  d f a g
+  c b f d
+}
+@end lilypond
+
+@noindent
+Es ist nicht notwendig, dass die erste Note der Melodie mit der 
+Note beginnt, die die erste Tonhöhe angibt.
+Die erste Note (das @q{D}) des vorigen Beispiels ist das nächste D 
+vom eingestrichenen C aus gerechnet.
+
+Indem man Apostrophe @code{'} (Taste Shift+#) oder Kommata @code{,} 
+zu dem @w{@code{\relative c' @{}} hinzufügt oder entfernt, kann die 
+Oktave der ersten Tonhöhe verändert werden:
+
+@c KEEP LY
+@lilypond[verbatim,quote]
+% zweigestrichenes C
+\relative c'' {
+  e c a c
+}
+@end lilypond
+
+Der relative Modus kann zunächst verwirrend erscheinen, aber es ist die 
+einfachste Art, die meisten Melodien zu notieren. Schauen wir uns an, 
+wie diese relative Berechnung in der Praxis funktioniert. Wenn wir mit 
+einem H beginnen (@code{b} in der LilyPond-Syntax), welches sich auf der 
+mittleren Linie im Violinschlüssel befindet, können wir C, D und E 
+aufwärts notieren, und A, G und F unter dem H. Wenn also die Note, die 
+auf das H folgt, ein C, D oder E ist, setzt LilyPond es oberhalb des 
+Hs, wenn es ein A, G oder F ist, wird es darunter gesetzt.
+
+@c KEEP LY
+@lilypond[verbatim,quote]
+\relative c'' {
+  b c  % c ist 1 Zeile aufwärts, also c über dem b
+  b d  % d ist 2 Zeilen aufwärts, oder 5 runter, also d über dem b
+  b e  % e ist 3 aufwärts oder 4 runter, also e über dem b
+  b a  % a ist 6 aufwärts oder 1 runter, also a unter dem b
+  b g  % g ist 5 aufwärts oder 2 runter, also g unter dem b
+  b f  % f ist 4 aufwärts oder 3 runter, also f unter dem b
+}
+@end lilypond
+
+Die gleiche Berechnung findet auch statt, wenn eine der Noten erhöht 
+oder erniedrigt ist. @notation{Versetzungszeichen} werden 
+@strong{vollständig ignoriert} bei der Berechnung. Genau die 
+gleiche Berechnung wird analog von jeder folgenden Tonhöhe aus 
+für die nächste Tonhöhe neu ausgeführt.
+
+Um Intervalle zu notieren, die größer als drei Notenzeilen sind, kann man die Oktave verändern. Mit einem Apostroph @code{'} (Taste Shift+#)
+direkt hinter dem Notennamen wird die Oktave um eins erhöht, mit einem Komma @code{,} um eins erniedrigt.
+
+@lilypond[verbatim,quote]
+\relative c'' {
+  a a, c' f,
+  g g'' a,, f'
+}
+@end lilypond
+
+@noindent
+Um eine Notenhöhe um zwei (oder mehr!) Oktaven zu verändern,
+werden sukzessive @code{''} oder @code{,,} benutzt -- es muss
+sich dabei wirklich um zwei einzelne Apostrophen und nicht um das
+Anführungszeichen @code{"}@tie{} (Taste Shift+2) handeln! Auch
+die Anfangsoktave für einen @code{@w{\relative c'}}-Abschnitt kann so
+verändert werden.
+
+
+@subheading Tondauern (Rhythmen)
+
+@cindex Notendauern
+@cindex Dauern
+@cindex Rhythmus
+@cindex Ganze Noten
+@cindex Halbe Noten
+@cindex Viertelnoten
+@cindex punktierte Noten
+
+Glossar: @rglos{beam}, @rglos{duration},
+@rglos{whole note}, @rglos{half note}, @rglos{quarter note},
+@rglos{dotted note}.
+
+Die @notation{Dauer} einer Note wird durch eine Zahl bezeichnet,
+die direkt auf den Notennamen folgend eingegeben wird.
+@code{1} für eine @notation{ganze Note}, @code{2} für eine 
+@notation{halbe Note}, @code{4} für eine @notation{Viertelnote} 
+und so weiter. @notation{Notenhälse} und @notation{Balken} werden
+automatisch hinzugefügt.
+
+Wenn keine Dauer bezeichnet wird, wird die der vorhergehenden Note
+verwendet. Für die erste Note ist eine Viertel als Standard definiert.
+
+@lilypond[verbatim,quote]
+\relative c'' {
+  a1
+  a2 a4 a8 a
+  a16 a a a a32 a a a a64 a a a a a a a a2
+}
+@end lilypond
+
+Um @notation{punktierte Noten} zu erzeugen, wird einfach ein Punkt 
+@code{.} hinter die Notendauer geschrieben. Die Dauer einer 
+punktierten Note muss explizit, also inklusive der Nummer, 
+angegeben werden.
+
+@lilypond[verbatim,quote]
+\relative c'' {
+  a a a4. a8
+  a8. a16 a a8. a8 a4.
+}
+@end lilypond
+
+
+@subheading Pausen
+
+@cindex Pausen
+@cindex schreiben von Pausen
+@cindex notieren von Pausen
+
+Eine @notation{Pause} wird genauso wie eine Noten eingegeben; ihre
+Bezeichnung ist @code{r}@tie{}:
+
+@lilypond[verbatim,quote]
+\relative c'' {
+  a r r2
+  r8 a r4 r4. r8
+}
+@end lilypond
+
+
+@subheading Taktangabe
+
+@cindex Taktart
+
+@funindex \time
+@funindex time
+
+Glossar: @rglos{time signature}.
+
+Die @notation{Taktart} kann mit dem 
+@code{\time}-Befehl definiert werden:
+
+@lilypond[verbatim,quote]
+\relative c'' {
+  \time 3/4
+  a4 a a
+  \time 6/8
+  a4. a
+  \time 4/4
+  a4 a a a
+}
+@end lilypond
+
+
+@subheading Notenschlüssel
+
+@cindex Schlüssel
+@cindex Alt
+@cindex Sopran
+@cindex Tenor
+@cindex Bass
+
+@funindex \clef
+@funindex clef
+
+Glossar: @rglos{clef}.
+
+Der @notation{Notenschlüssel} kann mit dem @code{\clef}-Befehl 
+gesetzt werden:
+
+@lilypond[verbatim,quote]
+\relative c' {
+  \clef treble
+  c1
+  \clef alto
+  c1
+  \clef tenor
+  c1
+  \clef bass
+  c1
+}
+@end lilypond
+
+
+@subheading Alles zusammen
+
+Hier ist ein kleines Beispiel, dass all diese Definitionen beinhaltet:
+
+@lilypond[verbatim,quote]
+\relative c, {
+  \time 3/4
+  \clef bass
+  c2 e8 c' g'2.
+  f4 e d c4 c, r4
+}
+@end lilypond
+
+
+@seealso
+Notationsreferenz: @ruser{Tonhöhen setzen},
+@ruser{Rhythmen eingeben}, @ruser{Pausen eingeben},
+@ruser{Taktangabe}, @ruser{Notenschlüssel}.
+
+
+@node Arbeiten an Eingabe-Dateien
+@subsection Arbeiten an Eingabe-Dateien
+@translationof Working on input files
+
+@cindex geschweifte Klammern
+@cindex Klammern, geschweift
+@cindex Kommentare
+@cindex Zeilenkommentare
+@cindex Block-Kommentare
+@cindex Groß- und Kleinschreibung
+@cindex Ausdrücke
+@cindex Großbuchstaben
+@cindex Kleinbuchstaben
+
+@funindex { ... }
+@funindex %
+@funindex %@{ ... %@}
+
+
+LilyPonds Quelldateien ähneln Dateien in den meisten
+Programmiersprachen: Sie enthalten eine Versionsbezeichnung,
+es ist auf Groß- und Kleinschreibung
+zu achten und Leerzeichen werden ignoriert. Ausdrücke werden 
+mit geschweiften Klammern @{ @} eingeklammert und Kommentare 
+mit dem Prozentzeichen @code{%} auskommentiert
+oder mit @code{%@{ ... %@}} umgeben.
+
+Wenn das jetzt unverständlich erscheint, sind hier die  Erklärungen:
+
+@itemize
+@item
+@strong{Versionsbezeichnung}:
+Jede LilyPond-Datei soll eine Versionsbezeichnung enthalten. Eine
+Versionsbezeichnung ist eine Zeile, die die Version von LilyPond
+deklariert, für die die Datei geschrieben wurde, wie in dem
+Beispiel:
+
+@example
+\version "@w{@version{}}"
+@end example
+
+Üblicherweise wird die Versionsbezeichnung oben in die Datei
+geschrieben.
+
+Die Versionsbezeichnung ist aus zwei Gründen sehr wichtig: 1. kann
+man mit ihrer Hilfe automatische Aktualisierungen der Eingabedateien
+vornehmen, wenn sich die LilyPond-Syntax ändern sollte. 2. wird
+hier die Version von LilyPond beschrieben, die nötig ist, um die
+Datei zu kompilieren.
+
+Wenn die Versionsbezeichnung in einer Datei fehlt, gibt LilyPond
+eine Warnung während der Kompilation der Datei aus.
+
+@item
+@strong{Groß- und Kleinschreibung:}
+Die Bedeutung eines Zeichens verändert sich, je
+nachdem, ob es groß (@w{@code{A, B, S, T}}) oder klein
+ (@w{@code{a, b, s, t}}) geschrieben wird. Noten müssen
+immer klein geschrieben werden,  @w{@code{@{ c d e @}}} funktioniert,
+während @w{@code{@{ C D E @}}} einen Fehler produziert.
+
+@item @strong{Leerzeichen:}
+Es spielt keine Rolle, wie viele Leerzeichen oder Tabulatoren oder
+leere Zeilen sich zwischen den Zeichen der Quelldatei befinden.
+@w{@code{@{ c d e @}}} bedeutet das Gleiche wie
+@w{@code{@{ c @ @ @ @ @  d e @}}} oder
+@example
+@{ c                        d
+                     e @}
+@end example
+
+@noindent
+Natürlich ist das letzte Beispiel etwas schwer zu lesen. Eine gute Daumenregel
+ist es, Code-Blöcke mit der Tab-Taste oder zwei Leerzeichen einzurücken:
+@example
+@{
+  c d e
+@}
+@end example
+
+Leerzeichen @emph{sind} jedoch nötig, um viele syntaktische Elemente
+voneinander zu trennen.  Leerzeichen können also immer @emph{hinzugefügt}
+werden, aber sie dürfen nicht @emph{entfernt} werden.  Da fehlende
+Leerzeichen sehr seltsame Fehlermeldungen hervorrrufen können, wird
+es nahe gelegt, immer ein Leerzeichen vor und nach jedem syntaktischen
+Element, etwa vor und nach geschweiften Kklammern, einzufügen.
+
+@item @strong{Ausdrücke:}
+Auch der kleinste Abschnitt an LilyPond-Code muss in
+@strong{@{ geschweifte Klammern @}} eingeschlossen werden. Diese
+Klammern zeigen LilyPond an, dass es sich um einen zusammengehörenden
+musikalischen Ausdruck handelt, genauso wie Klammern @q{()} in der Mathematik.
+Die Klammern sollten von jeweils einem Leerzeichen umgeben sein, um
+Zweideutigkeiten auszuschließen, es sei denn, sie
+befinden sich am Anfang oder Ende einer Zeile.
+Ein LilyPond-Befehl gefolgt von einem einfachen Ausdruck
+in Klammern (wie etwa @code{\relative @{ @}}) 
+wird auch als ein einzelner Musikausdruck gewertet.
+
+@cindex Kommentare
+@cindex Zeilenkommentare
+@cindex Blockkommentare
+
+@item 
+@strong{Kommentare:}
+Ein Kommentar ist eine Bemerkung für den menschlichen Leser
+einer Quelldatei, es wird bei der Dateianalyse durch das Programm
+ignoriert, so dass es also keine Auswirkung auf die Druckausgabe der
+Noten hat. Es gibt zwei verschiedene Typen von Kommentaren. Das
+Prozentzeichen @q{%} geht einem Zeilen-Kommentar voraus: Alles
+nach diesem Zeichen wird in dieser Zeile ignoriert. 
+Üblicherweise wird ein Kommentar @emph{über} dem Code gesetzt,
+auf den es sich bezieht.
+
+@example
+a4 a a a
+% Dieser Kommentar bezieht sich auf das H
+b2 b
+@end example
+
+
+Ein Block-Kommentar ist ein ganzer Abschnitt mit einem
+Kommentar. Alles, was von @code{%@{}
+und @code{%@}} umgeben ist, wird ignoriert. Das heißt,
+dass sich ein Block-Kommentar nicht ein einem anderen
+Blockkommentar befinden kann. Wenn Sie das versuchen sollten,
+beendet schon das erste @code{%@}} @emph{beide} 
+Block-Kommentare. Das folgende Beispiel zeigt eine
+mögliche Anwendung von Kommentaren:
+
+@example
+% Noten für twinkle twinkle hier
+  c4 c g' g a a g2
+
+%@{
+    Diese Zeilen, und die Noten unten werden
+    ignoriert, weil sie sich in einem Block-Kommentar
+    befinden.
+
+    f f e e d d c2
+%@}
+@end example
+
+@end itemize
+
+
+
+@node Wie die Handbücher gelesen werden sollen
+@section Wie die Handbücher gelesen werden sollen
+@translationof How to read the manuals
+
+Dieser Abschnitt zeigt, wie die Dokumenation effizient gelesen
+werden kann und erklärt auch einige nützliche Interaktionseigenschaften
+der Online-Version.
+
+@menu
+* Ausgelassenes Material::             
+* Anklickbare Beispiele::          
+* Navigation mit der Tastatur::         
+* Überblick über die Handbücher::         
+@end menu
+
+
+@node Ausgelassenes Material
+@subsection Ausgelassenes Material
+@translationof Omitted material
+
+@cindex Handbuch, Lesen
+@cindex Wie soll das Handbuch gelesen werden
+@cindex Lesen des Handbuchs
+@cindex Beispiele, klickbar
+@cindex klickbare Beispiele
+@cindex Vorlagen
+@cindex Templates
+@cindex Dateien konstruieren, Hinweise
+@cindex Konstruieren von Dateien, Hinweise
+@cindex Hinweise zur Konstruktion von Dateien
+
+LilyPond-Code muss immer von  @{ @} Zeichen oder einem 
+@code{@w{\relative c'' @{ ... @}}} umgeben sein, wie
+gezeigt in @ref{Arbeiten an Eingabe-Dateien}.
+Im Rest dieses Handbuchs werden die meisten Beispiel allerdings darauf
+verzichten. Um sie zu reproduzieren, können Sie den entsprechenden 
+Quellcode kopieren und in eine Textdatei einfügen, aber Sie 
+@strong{müssen} dabei
+@code{@w{\relative c'' @{ @}}} einfügen, wie hier gezeigt:
+
+@example
+\relative c'' @{
+  ... hier das Beispiel ...
+@}
+@end example
+
+Warum werden die Klammern hier meist weggelassen?  Die meisten
+der Beispiele können in ein längeres Musikstück hineinkopiert
+werden, und dann ist es natürlich nicht sinnvoll, wenn auch noch
+@code{@w{\relative c'' @{ @}}} dazukommt; ein @code{\relative} darf
+nicht innerhalb eines anderen @code{\relative} gesetzt werden,
+deshalb wird es hier weggelassen, damit die Beispiele auch innerhalb
+eines anderen Kontextes funktionieren.  Wenn bei jedem 
+Beispiel @code{@w{\relative c'' @{ @}}} eingesetzt würde,
+könnten Sie die kleinen Beispiele der Dokumentation
+nicht einfach zu Ihrem eigenen Notentext hinzufügen. 
+Die meisten Benutzer wollen 
+Noten zu einer schon bestehenden Datei irgendwo in der Mitte
+hinzufügen, deshalb wurde der relative Modus für die Beispiele
+im Handbuch weggelassen.
+
+Denken Sie auch daran, dass jede LilyPond-Datei eine Versionsbezeichnung
+haben sollte.  Weil die Beispiele in den Handbüchern Schnipsel
+und keine vollständigen Dateien sind, fehlt hier die Versionsbezeichnung.
+Sie sollten sie aber immer in Ihre eigenen Dateien einfügen.
+
+
+@node Anklickbare Beispiele
+@subsection Anklickbare Beispiele
+@translationof Clickable examples
+
+@warning{Diese Eigenschaft gibt es nur in der HTML-Dokumentation.}
+
+Viele Leute lernen Programme, indem sie einfach herumprobieren. Das
+geht auch mit LilyPond. Wenn Sie in der HTML-Version dieses Handbuchs
+eine Abbildung in der HTML-Version dieses Handbuches anklicken,
+erhalten sie exakt den LilyPond-Code, der
+zum Satz der Abbildung benutzt wurde. Versuchen Sie es mit dieser
+Abbildung:
+
+@c no verbatim here
+@c KEEP LY
+@lilypond[quote]
+\relative c'' {
+  c-\markup { \bold \huge { Hier klicken!  } }
+}
+@end lilypond
+
+Wenn Sie einfach alles kopieren, was im
+ @qq{ly snippet}-Abschnitt steht, und in eine Text-Datei
+einfügen, haben Sie schon eine fertige Vorlage für weitere
+Experimente. Damit Sie genau das gleiche Erscheinungsbild wie 
+bei dem Beispiel selber erreichen, müssen Sie alles kopieren ab der 
+Zeile @qq{Start
+cut-&-pastable section} bis ganz zum Ende der Datei.
+
+
+@node Navigation mit der Tastatur
+@subsection Navigation mit der Tastatur
+@translationof Keyboard navigation
+
+@warning{Diese Funktion gibt es nur für die HTML-Version der Handbücher.}
+
+@c TODO: once this is figured out, insert it here.
+
+Es wird gegenwärtig an dieser Funktion gearbeitet.
+
+
+
+@node Überblick über die Handbücher
+@subsection Überblick über die Handbücher
+@translationof Overview of manuals
+
+
+Es gibt sehr viele Dokumentation für LilyPond. Neue Benutzer sind
+oft verwirrt, welche Teile davon sie lesen sollen, und so kommt
+es vor, dass machnmal wichtige Abschnitte nicht gelesen werden.
+
+@warning{Bitte überspringen Sie keine wichtigen Teile der
+Dokumentation.  Sonst wird es Ihnen später sehr viel schwerer
+fallen, spätere Abschnitte zu verstehen.}
+
+@itemize
+
+@item
+@strong{Bevor Sie @emph{irgendetwas} ausprobieren}: Lesen Sie die
+Abschnitte @ref{Übung} und @ref{Übliche Notation}.  Wenn
+Sie auf musikalische Fachbegriffen stoßen, die Sie nicht kennen,
+schauen Sie diese im @rglosnamed{Top, Glossar} nach.
+
+@item
+@strong{Bevor Sie ein vollständiges Stück notieren}:  Lesen
+Sie den Abschnitt @ref{Grundbegriffe} im Handbuch zum Lernen.
+Danach können Sie sich die für Ihr Projekt wichtigen Abschnitte
+in der
+@rusernamed{Top, Notationsreferenz} anschauen.
+
+@item
+@strong{Bevor Sie versuchen, die Standardnotation zu verändern}:
+Lesen Sie @ref{Die Ausgabe verändern} im Handbuch zum Lernen.
+
+@item
+@strong{Bevor Sie sich an ein größeres Projekt machen}: Lesen
+Sie den Abschnitt
+@rprogram{Vorschläge, wie man Dateien schreibt}
+in der Programmbenutzung.
+
+@end itemize
+
index 9b52c439619f874a2362c32cecb7cd04f0f76a4e..b0f151ddd279da2abc9fddc4851d3d8aa67f92a6 100644 (file)
@@ -1,6 +1,6 @@
 @c -*- coding: utf-8; mode: texinfo; -*-
 @ignore
-    Translation of GIT committish:  82a821b7fb55935bc71ef8cc4716b9661f806ab3
+    Translation of GIT committish:  83c1d1a6ee4e89f7f913fab904816e6c033b6b04
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  For details, see the Contributors'
 @end ifnothtml
 
 
+@macro docMain
+@cartouche
+Zu mehr Information, wie dieses Handbuch unter den anderen Handbüchern
+positioniert, oder um dieses Handbuch in einem anderen Format
+zu lesen, besuchen Sie bitte @rweb{Manuals}.
+
+Wenn Ihnen Handbücher fehlen, finden Sie die gesamte Dokumentation
+unter @w{@uref{http://@/www@/.lilypond@/.org/}}.
+@end cartouche
+@end macro
+
+
+@macro lilyTitlePage{TITLE}
+@c  This produces the unified index
+@syncodeindex fn cp
+@syncodeindex vr cp
+
+
+@c   ***** Copyright stuff *****
+@ifset FDL
+@copying
+@copyrightDeclare
+
+@emph{The translation of the following copyright notice is provided
+for courtesy to non-English speakers, but only the notice in English
+legally counts.}
+
+@emph{Die Übersetzung der folgenden Lizenzanmerkung ist zur Orientierung
+für Leser, die nicht Englisch sprechen. Im rechtlichen Sinne ist aber
+nur die englische Version gültig.}
+
+@quotation
+Es ist erlaubt, dieses Dokument unter den Bedingungen der
+GNU Free Documentation Lizenz (Version 1.1 oder
+spätere, von der Free Software Foundation publizierte Versionen, ohne
+invariante Abschnitte),
+zu kopieren, zu verbreiten und/oder
+zu verändern. Eine Kopie der Lizenz ist im Abschnitt ``GNU
+Free Documentation License'' angefügt.
+@end quotation
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1
+or any later version published by the Free Software Foundation;
+with no Invariant Sections.
+A copy of the license is included in the section entitled ``GNU
+Free Documentation License''.
+@end quotation
+@end copying
+@end ifset
+
+@ifclear FDL
+@copying
+This document has been placed in the public domain.
+@end copying
+@end ifclear
+
+
+@c   ***** Title page *****
+@ifnottex
+@node Top
+@top LilyPond -- \TITLE\
+
+@cartouche
+@manualIntro{}
+@end cartouche
+@end ifnottex
+
+@finalout
+
+@titlepage
+@title LilyPond
+@subtitle Das Notensatzprogramm
+@titlefont{\TITLE\}
+@author Das LilyPond-Entwicklerteam
+
+@vskip 60pt
+
+@cartouche
+@manualIntro{}
+@end cartouche
+
+@vskip 40pt
+
+@docMain{}
+
+@vskip 0pt plus 1filll
+
+@insertcopying
+
+Für LilyPond Version @version{}
+@end titlepage
+
+@end macro
+
+
+
 @c   ***** Headings in a doc subsection *****
 
 @c Don't insert an empty line after @predefined!  Right now
 
 @c  Definitions for references:
 @c
+@c     @rweb
+@c     @ressay
 @c     @rglos
+@c     @rinternals
 @c     @rlearning
+@c     @rlsr
 @c     @ruser
-@c     @ressay
 @c     @rprogram
-@c     @rlsr
-@c     @rinternals
+@c     @rchanges
+@c     @rextend
+@c     @rcontrib
 @c
 @c  All these also have a @...named version which allows to specify the
 @c  displayed text for the reference as second argument.
 @ref{\TEXT\,,\DISPLAY\,notation-big-page,Notationsreferenz}
 @end macro
 
+@macro rextend{TEXT}
+@vindex \TEXT\
+@ref{\TEXT\,,,extending-big-page,Extending}
+@end macro
+
+@macro rextendnamed{TEXT,DISPLAY}
+@vindex \TEXT\
+@ref{\TEXT\,,\DISPLAY\,extending-big-page,Extending}
+@end macro
+
 @macro rchanges{TEXT}
 @vindex \TEXT\
 @ref{\TEXT\,,,changes-big-page,Changes}
 @ref{\TEXT\,,\DISPLAY\,changes-big-page,Changes}
 @end macro
 
+@macro rcontrib{TEXT}
+@vindex \TEXT\
+@ref{\TEXT\,,,contributor-big-page,Contributor's Guide}
+@end macro
+
+@macro rcontribnamed{TEXT,DISPLAY}
+@vindex \TEXT\
+@ref{\TEXT\,,\DISPLAY\,contributor-big-page,Contributor's Guide}
+@end macro
+
 @macro rweb{TEXT}
 @vindex \TEXT\
-@ref{\TEXT\,,,web-big-page,General Information}
+@ref{\TEXT\,,,web-big-page,Allgemeine Information}
 @end macro
 
 @macro rwebnamed{TEXT,DISPLAY}
 @vindex \TEXT\
-@ref{\TEXT\,,\DISPLAY\,web-big-page,General Information}
+@ref{\TEXT\,,\DISPLAY\,web-big-page,Allgemeine Information}
 @end macro
 
 @macro ressay{TEXT}
 
 @ifclear bigpage
 
+@ifnotinfo
+
 @macro rglos{TEXT}
 @vindex \TEXT\
 @ref{\TEXT\,,,music-glossary,Glossar}
 @ref{\TEXT\,,\DISPLAY\,lilypond-changes,Changes}
 @end macro
 
+@macro rextend{TEXT}
+@vindex \TEXT\
+@ref{\TEXT\,,,extending,Extending}
+@end macro
+
+@macro rextendnamed{TEXT,DISPLAY}
+@vindex \TEXT\
+@ref{\TEXT\,,\DISPLAY\,extending,Extending}
+@end macro
+
+@macro rcontrib{TEXT}
+@vindex \TEXT\
+@ref{\TEXT\,,,contributor,Contributor's Guide}
+@end macro
+
+@macro rcontribnamed{TEXT,DISPLAY}
+@vindex \TEXT\
+@ref{\TEXT\,,\DISPLAY\,contributor,Contributor's Guide}
+@end macro
+
 @macro rweb{TEXT}
 @vindex \TEXT\
-@ref{\TEXT\,,,lilypond-web,General Information}
+@ref{\TEXT\,,,lilypond-web,Allgemeine Information}
 @end macro
 
 @macro rwebnamed{TEXT,DISPLAY}
 @vindex \TEXT\
-@ref{\TEXT\,,\DISPLAY\,lilypond-web, General Information}
+@ref{\TEXT\,,\DISPLAY\,lilypond-web,Allgemeine Information}
 @end macro
 
 @macro ressay{TEXT}
 @ref{\TEXT\,,\DISPLAY\,internals,Referenz der Interna}
 @end macro
 
+@end ifnotinfo
+
+@ifinfo
+
+@macro rglos{TEXT}
+@vindex \TEXT\
+@ref{\TEXT\,,,music-glossary,Glossar}
+@end macro
+
+@macro rglosnamed{TEXT,DISPLAY}
+@vindex \TEXT\
+@ref{\TEXT\,,\DISPLAY\,music-glossary,Glossar}
+@end macro
+
+@macro rlearning{TEXT}
+@vindex \TEXT\
+@ref{\TEXT\,,,lilypond-learning,Handbuch zum Lernen}
+@end macro
+
+@macro rlearningnamed{TEXT,DISPLAY}
+@vindex \TEXT\
+@ref{\TEXT\,,,lilypond-learning,Handbuch zum Lernen}
+@end macro
+
+@macro ruser{TEXT}
+@vindex \TEXT\
+@ref{\TEXT\,,,lilypond-notation,Notationsreferenz}
+@end macro
+
+@macro rusernamed{TEXT,DISPLAY}
+@vindex \TEXT\
+@ref{\TEXT\,,\DISPLAY\,lilypond-notation,Notationsreferenz}
+@end macro
+
+@macro rchanges{TEXT}
+@vindex \TEXT\
+@ref{\TEXT\,,,lilypond-changes,Changes}
+@end macro
+
+@macro rchangesnamed{TEXT,DISPLAY}
+@vindex \TEXT\
+@ref{\TEXT\,,\DISPLAY\,lilypond-changes,Changes}
+@end macro
+
+@macro rextend{TEXT}
+@vindex \TEXT\
+@ref{\TEXT\,,,lilypond-extending,Extending}
+@end macro
+
+@macro rextendnamed{TEXT,DISPLAY}
+@vindex \TEXT\
+@ref{\TEXT\,,\DISPLAY\,lilypond-extending,Extending}
+@end macro
+
+@macro rcontrib{TEXT}
+@vindex \TEXT\
+@ref{\TEXT\,,,lilypond-contributor,Contributor's Guide}
+@end macro
+
+@macro rcontribnamed{TEXT,DISPLAY}
+@vindex \TEXT\
+@ref{\TEXT\,,\DISPLAY\,lilypond-contributor,Contributor's Guide}
+@end macro
+
+@macro rweb{TEXT}
+@vindex \TEXT\
+@ref{\TEXT\,,,lilypond-web,Allgemeine Information}
+@end macro
+
+@macro rwebnamed{TEXT,DISPLAY}
+@vindex \TEXT\
+@ref{\TEXT\,,\DISPLAY\,lilypond-web, Allgemeine Information}
+@end macro
+
+@macro ressay{TEXT}
+@vindex \TEXT\
+@ref{\TEXT\,,,lilypond-essay,Aufsatz}
+@end macro
+
+@macro ressaynamed{TEXT,DISPLAY}
+@vindex \TEXT\
+@ref{\TEXT\,,\DISPLAY\,lilypond-essay,Aufsatz}
+@end macro
+
+@macro rprogram{TEXT}
+@vindex \TEXT\
+@ref{\TEXT\,,,lilypond-usage,Anwendungsbenutzung}
+@end macro
+
+@macro rprogramnamed{TEXT,DISPLAY}
+@vindex \TEXT\
+@ref{\TEXT\,,\DISPLAY\,lilypond-usage,Anwendungsbenutzung}
+@end macro
+
+@macro rlsr{TEXT}
+@ref{\TEXT\,,,lilypond-snippets,Schnipsel}
+@end macro
+
+@macro rlsrnamed{TEXT,DISPLAY}
+@ref{\TEXT\,,\DISPLAY\,lilypond-snippets,Schnipsel}
+@end macro
+
+@macro rinternals{TEXT}
+@vindex \TEXT\
+@ref{\TEXT\,,,lilypond-internals,Referenz der Interna}
+@end macro
+
+@macro rinternalsnamed{TEXT,DISPLAY}
+@vindex \TEXT\
+@ref{\TEXT\,,\DISPLAY\,lilypond-internals,Referenz der Interna}
+@end macro
+
+@end ifinfo
+
 @end ifclear
 
 @end ifnottex
 @ref{\TEXT\,,\DISPLAY\,changes,Changes}
 @end macro
 
+@macro rextend{TEXT}
+@lilyvindex{\TEXT\}
+@ref{\TEXT\,,,extending,Extending}
+@end macro
+
+@macro rextendnamed{TEXT,DISPLAY}
+@lilyvindex{\TEXT\}
+@ref{\TEXT\,,\DISPLAY\,extending,Extending}
+@end macro
+
+@macro rcontrib{TEXT}
+@lilyvindex{\TEXT\}
+@ref{\TEXT\,,,contributor,Contributor's Guide}
+@end macro
+
+@macro rcontribnamed{TEXT,DISPLAY}
+@lilyvindex{\TEXT\}
+@ref{\TEXT\,,\DISPLAY\,contributor,Contributor's Guide}
+@end macro
+
 @macro rweb{TEXT}
 @lilyvindex{\TEXT\}
-@ref{\TEXT\,,,web,General Information}
+@ref{\TEXT\,,,web.de,Allgemeine Information}
 @end macro
 
 @macro rwebnamed{TEXT,DISPLAY}
 @lilyvindex{\TEXT\}
-@ref{\TEXT\,,\DISPLAY\,web,General Information}
+@ref{\TEXT\,,\DISPLAY\,web.de,Allgemeine Information}
 @end macro
 
 @macro ressay{TEXT}
 @vindex \TEXT\
-@ref{\TEXT\,,,essay-big-page,Aufsatz}
+@ref{\TEXT\,,,essay.de,Aufsatz}
 @end macro
 
 @macro ressaynamed{TEXT,DISPLAY}
 @vindex \TEXT\
-@ref{\TEXT\,,\DISPLAY\,essay-big-page,Aufsatz}
+@ref{\TEXT\,,\DISPLAY\,essay.de,Aufsatz}
 @end macro
 
 @macro rprogram{TEXT}
index 29c29f5ac1fdc778aa227bad4272faa8b2c472b6..e78ec02d1781bfe1e6dbf334415ef86bf92dbad3 100644 (file)
@@ -241,7 +241,8 @@ Anhänge
 @include notation/spacing.itely
 
 @include notation/changing-defaults.itely
-@include notation/programming-interface.itely
+@c @include notation/programming-interface.itely
+@c moved to extending.tely
 
 
 @include notation/notation-appendices.itely
diff --git a/Documentation/de/notation/programming-interface.itely b/Documentation/de/notation/programming-interface.itely
deleted file mode 100644 (file)
index a2cc768..0000000
+++ /dev/null
@@ -1,1633 +0,0 @@
-@c -*- coding: utf-8; mode: texinfo; -*-
-
-@ignore
-    Translation of GIT committish: 7b70644b95f383b4281e9ffa146d315d2ada11d3
-
-    When revising a translation, copy the HEAD committish of the
-    version that you are working on.  For details, see the Contributors'
-    Guide, node Updating translation committishes..
-@end ignore
-
-@c \version "2.12.0"
-
-@c Translators: Till Paala
-
-@node Schnittstellen für Programmierer
-@chapter Schnittstellen für Programmierer
-@translationof Interfaces for programmers
-
-Fortgeschrittene Anpassungen können mithilfe der Programmiersprache
-Scheme vorgenommen werden.  Wenn Sie Scheme nicht kennen, gibt
-es eine grundlegende Einleitung in LilyPonds
-@rlearning{Scheme-Übung}.
-
-@menu
-* Musikalische Funktionen::
-* Schnittstelle für Programmierer::
-* Komplizierte Funktionen erstellen::
-* Programmierungsschnittstelle für Textbeschriftungen::
-* Kontexte für Programmierer::
-* Scheme-Vorgänge als Eigenschaften::
-* Scheme-Code anstelle von \tweak verwenden::
-* Schwierige Korrekturen::
-@end menu
-
-
-@node Musikalische Funktionen
-@section Musikalische Funktionen
-@translationof Music functions
-
-Dieser Abschnitt behandelt die Erstellung von musikalischen Funktionen
-innerhalb von LilyPond.
-
-@menu
-* Überblick über musikalische Funktionen::
-* Einfache Ersetzungsfunktionen::
-* Paarige Ersetzungsfunktionen::
-* Mathematik in Funktionen::
-* Leere Funktionen::
-* Funktionen ohne Argumente::
-* Überblick über vorhandene musikalische Funktionen::
-@end menu
-
-@node Überblick über musikalische Funktionen
-@subsection Überblick über musikalische Funktionen
-@translationof Overview of music functions
-
-Es ist einfach, eine Funktion zu erstellen, die Variablen
-im LilyPond-Code ersetzt.  Die allgemeine Form derartiger
-Funktionen ist
-
-@example
-function =
-#(define-music-function (parser location @var{var1} @var{var2}...@var{vari}... )
-                        (@var{var1-type?} @var{var2-type?}...@var{vari-type?}...)
-  #@{
-    @emph{...Noten...}
-  #@})
-@end example
-
-@noindent
-wobei
-
-@multitable @columnfractions .33 .66
-@item @var{vari}         @tab die @var{i}te Variable
-@item @var{vari-type?}   @tab die Art der @var{i}ten Variable
-@item @var{...Noten...}  @tab normaler LilyPond-Code, in dem Variablen 
-wie @code{#$var1} usw. benutzt werden.
-@end multitable
-
-Die folgenden Eingabetypen können als Variablen in einer musikalischen
-Funktion benutzt werden.  Diese Liste ist nicht vollständig -- siehe
-auch andere Dokumentationen überScheme für weitere Variablenarten.
-
-@multitable @columnfractions .33 .66
-@headitem Eingabetyp           @tab @var{vari-type?}-Notation
-@item Ganzzahl                 @tab @code{integer?}
-@item Float (Dezimalzahl)      @tab @code{number?}
-@item Zeichenkette             @tab @code{string?}
-@item Textbeschriftung         @tab @code{markup?}
-@item Musikalischer Ausdruck   @tab @code{ly:music?}
-@item Ein Variablenpaar        @tab @code{pair?}
-@end multitable
-
-Die Argumente @code{parser} und @code{location} sind zwingend erforderlich
-und werden in einigen fortgeschrittenen Situationen eingesetzt.  Das
-Argument @code{parser} wird benutzt, um auf den Wert einer weiteren
-LilyPond-Variable zuzugreifen.  Das Argument @code{location} wird
-benutzt, um den @qq{Ursprung} des musikalischen Ausdrucks zu definieren, der von
-der musikalischen Funktion erzeugt wird.  Das hilft, wenn ein
-Syntaxfehler auftaucht: in solchen Fällen kann LilyPond mitteilen,
-an welcher Stelle in der Eingabedatei sich der Fehler befindet.
-
-
-@node Einfache Ersetzungsfunktionen
-@subsection Einfache Ersetzungsfunktionen
-@translationof Simple substitution functions
-
-Hier ist ein einfaches Beispiel:
-
-@lilypond[quote,verbatim,ragged-right]
-padText = #(define-music-function (parser location padding) (number?)
-  #{
-    \once \override TextScript #'padding = #$padding
-  #})
-
-\relative c''' {
-  c4^"piu mosso" b a b
-  \padText #1.8
-  c4^"piu mosso" d e f
-  \padText #2.6
-  c4^"piu mosso" fis a g
-}
-@end lilypond
-
-Musikalische Ausdrücke können auch ersetzt werden:
-
-@lilypond[quote,verbatim,ragged-right]
-custosNote = #(define-music-function (parser location note)
-                                     (ly:music?)
-  #{
-    \once \override Voice.NoteHead #'stencil =
-      #ly:text-interface::print
-    \once \override Voice.NoteHead #'text =
-      \markup \musicglyph #"custodes.mensural.u0"
-    \once \override Voice.Stem #'stencil = ##f
-    $note
-  #})
-
-{ c' d' e' f' \custosNote g' }
-@end lilypond
-
-Mehrere Variablen können benutzt werden:
-
-@lilypond[quote,verbatim,ragged-right]
-tempoPadded = #(define-music-function (parser location padding tempotext)
-  (number? string?)
-#{
-  \once \override Score.MetronomeMark #'padding = $padding
-  \tempo \markup { \bold $tempotext }
-#})
-
-\relative c'' {
-  \tempo \markup { "Low tempo" }
-  c4 d e f g1
-  \tempoPadded #4.0 #"High tempo"
-  g4 f e d c1
-}
-@end lilypond
-
-
-@node Paarige Ersetzungsfunktionen
-@subsection Paarige Ersetzungsfunktionen
-@translationof Paired substitution functions
-
-Einige @code{\override}-Befehle benötigen ein Zahlenpaar
-(als @code{cons}-Zelle in Scheme bezeichnet).  Um beide Zahlen
-einer Funktion zuzuweisen, kann entweder die Variable @code{pair?}
-benutzt werden oder die @code{cons} in die musikalische Funktion
-eingefügt werden.
-
-@quotation
-@example
-manualBeam =
-#(define-music-function (parser location beg-end)
-                        (pair?)
-#@{
-  \once \override Beam #'positions = #$beg-end
-#@})
-
-\relative @{
-  \manualBeam #'(3 . 6) c8 d e f
-@}
-@end example
-@end quotation
-
-@noindent
-oder
-
-@lilypond[quote,verbatim,ragged-right]
-manualBeam =
-#(define-music-function (parser location beg end)
-                        (number? number?)
-#{
-  \once \override Beam #'positions = #(cons $beg $end)
-#})
-
-\relative {
-  \manualBeam #3 #6 c8 d e f
-}
-@end lilypond
-
-
-@node Mathematik in Funktionen
-@subsection Mathematik in Funktionen
-@translationof Mathematics in functions
-
-Musikalische Funktionen können neben einfachen Ersetzungen
-auch Scheme-Programmcode enthalten:
-
-@lilypond[quote,verbatim,ragged-right]
-AltOn = #(define-music-function (parser location mag) (number?)
-  #{ \override Stem #'length = #$(* 7.0 mag)
-     \override NoteHead #'font-size =
-       #$(inexact->exact (* (/ 6.0 (log 2.0)) (log mag))) #})
-
-AltOff = {
-  \revert Stem #'length
-  \revert NoteHead #'font-size
-}
-
-{ c'2 \AltOn #0.5 c'4 c'
-  \AltOn #1.5 c' c' \AltOff c'2 }
-@end lilypond
-
-@noindent
-Dieses Beispiel kann auch umformuliert werden, um musikalische Ausdrücke
-zu integrieren:
-
-@lilypond[quote,verbatim,ragged-right]
-withAlt = #(define-music-function (parser location mag music) (number? ly:music?)
-  #{ \override Stem #'length = #$(* 7.0 mag)
-     \override NoteHead #'font-size =
-       #$(inexact->exact (* (/ 6.0 (log 2.0)) (log mag)))
-     $music
-     \revert Stem #'length
-     \revert NoteHead #'font-size #})
-
-{ c'2 \withAlt #0.5 {c'4 c'}
-  \withAlt #1.5 {c' c'} c'2 }
-@end lilypond
-
-
-@node Leere Funktionen
-@subsection Leere Funktionen
-@translationof Void functions
-
-Eine musikalische Funktion muss einen musikalischen Ausdruck
-ausgeben, aber in manchen Fällen müssen Funktionen erstellt werden,
-die keine Notation enthalten (wie etwa eine Funktion, mit der
-man @qq{Point and Click} ausschalten kann).  Um das vornehmen zu
-können, wird ein @code{leere}r musikalischer Ausdruck ausgegeben.
-
-Das ist der Grund, warum die Form, die ausgegeben wird,
-@code{(make-music ...)} heißt.  Wird die Eigenschaft
-@code{'void} (engl. für @qq{leer}) auf @code{#t} gesetzt, wird der
-Parser angewiesen, den ausgegebenen musikalischen Ausdruck zu ignorieren.
-Der maßgebliche Teil der @code{'void}-Funktion ist also die Verarbeitung,
-die die Funktion vornimmt, nicht der musikalische Ausdruck, der ausgegeben
-wird.
-
-@example
-noPointAndClick =
-#(define-music-function (parser location) ()
-   (ly:set-option 'point-and-click #f)
-   (make-music 'SequentialMusic 'void #t))
-...
-\noPointAndClick   % disable point and click
-@end example
-
-
-@node Funktionen ohne Argumente
-@subsection Funktionen ohne Argumente
-@translationof Functions without arguments
-
-In den meisten Fällen sollten Funktionen ohne Argumente mit einer
-Variable notiert werden:
-
-@example
-dolce = \markup@{ \italic \bold dolce @}
-@end example
-
-In einigen wenigen Fällen kann es aber auch sinnvoll sein, eine
-musikalische Funktion ohne Argumente zu erstellen:
-
-@example
-displayBarNum =
-#(define-music-function (parser location) ()
-   (if (eq? #t (ly:get-option 'display-bar-numbers))
-       #@{ \once \override Score.BarNumber #'break-visibility = ##f #@}
-       #@{#@}))
-@end example
-
-Damit auch wirklich Taktzahlen angezeigt werden, wo die
-Funktion eingesetzt wurde, muss @command{lilypond} mit
-der Option
-
-@example
-lilypond -d display-bar-numbers Dateiname.ly
-@end example
-
-@noindent
-aufgerufen werden.
-
-
-@node Überblick über vorhandene musikalische Funktionen
-@subsection Überblick über vorhandene musikalische Funktionen
-@translationof Overview of available music functions
-
-@c fixme ; this should be move somewhere else?
-Die folgenden Befehle sind musikalische Funktionen:
-
-@include identifiers.tely
-
-
-
-@node Schnittstelle für Programmierer
-@section Schnittstelle für Programmierer
-@translationof Programmer interfaces
-
-Dieser Abschnitt zeigt, wie LilyPond und
-Scheme gemischt werden können.
-
-@menu
-* Eingabevariablen und Scheme::
-* Interne Repräsentation der Musik::
-@end menu
-
-
-@node Eingabevariablen und Scheme
-@subsection Eingabevariablen und Scheme
-@translationof Input variables and Scheme
-
-Das Eingabeformat unterstützt die Notation von Variablen: im
-folgenden Beispiel wird ein musikalischer Ausdruck einer Variable
-mit der Bezeichnung @code{traLaLa} zugewiesen:
-
-@example
-traLaLa = @{ c'4 d'4 @}
-@end example
-
-Der Geltungsbereich von Variablen ist beschränkt: im folgenden
-Beispiel enthält die @code{\layout}-Umgebung auch eine
-@code{traLaLa}-vVariable, die unabhängig von der äußeren
-@code{\traLaLa}-Variable ist:
-
-@example
-traLaLa = @{ c'4 d'4 @}
-\layout @{ traLaLa = 1.0 @}
-@end example
-
-Grundsätzlich ist jede Eingabedatei ein Geltungsbereich, und
-alle @code{\header}-, @code{\midi}- und @code{\layout}-Umgebungen
-sind Geltungsbereiche, die unterhalb des globalen Geltungsbereiches
-angeordnet sind.
-
-Sowohl Variablen als auch Geltungsbereiche sind in Form des
-GUILE-Modulsystems implementiert.  Ein anonymes Scheme-Modul
-wird an jeden Geltunsbereich angehängt.  Eine Zuweisung der form
-
-@example
-traLaLa = @{ c'4 d'4 @}
-@end example
-
-@noindent
-wird intern in die Scheme-Definition
-
-@example
-(define traLaLa @var{Scheme-Wert von `@code{... }'})
-@end example
-
-@noindent
-umgewandelt.
-
-Das bedeutet, dass Eingabe- und Scheme-Variablen frei vermischt
-werden können.  Im nächsten Beispiel wird ein Notenfragment in
-der Variable @code{traLaLa} gespeichert und mithilfe von Schme
-dupliziert.  Das Ergebnis wird in eine @code{\score}-Umgebung
-mit der zweiten Variable @code{twice} integriert:
-
-@lilypond[verbatim]
-traLaLa = { c'4 d'4 }
-
-%% dummy action to deal with parser lookahead
-#(display "this needs to be here, sorry!")
-
-#(define newLa (map ly:music-deep-copy
-  (list traLaLa traLaLa)))
-#(define twice
-  (make-sequential-music newLa))
-
-{ \twice }
-@end lilypond
-
-In diesem Beispiel geschieht die Zuweisung, nachdem der Parser
-festgestellt hat, dass nichts interessantes mehr nach
-@code{traLaLa = @{ ... @}} vorkommt.  Ohne die Pseudovariable
-in dem Beispiel würde die @code{newLa}-Devinition ausgeführt
-werden, bevor @code{traLaLa} definiert ist, was zu einem
-Syntax-Fehler führen würde.
-
-Das obige Beispiel zeigt, wie man musikalische Ausdrücke
-von der Eingabe in den Scheme-Interpretierer @qq{exportieren}
-kann.  Es geht auch in die andere Richtung.  Indem man einen
-Scheme-Wert in die Funktion @code{ly:export} einpackt, wird
-der Scheme-Wert interpretiert als ob er in LilyPond-Syntax
-notiert worden wäre.  Anstatt @code{\twice} zu definieren,
-hätte man also auch schreiben können:
-
-@example
-...
-@{ #(ly:export (make-sequential-music (list newLa))) @}
-@end example
-
-Scheme-Code wird sofort ausgewertet, wenn der Parser darauf
-stößt.  Um Scheme-Code in einem Makro zu definieren (das dann
-erst später aufgerufen werden soll), müssen leere Funktionen
-benutzt werden (siehe @ref{Leere Funktionen}) oder das Folgende:
-
-@example
-#(define (nopc)
-  (ly:set-option 'point-and-click #f))
-
-...
-#(nopc)
-@{ c'4 @}
-@end example
-
-@knownissues
-
-Scheme- und LilyPond-Variablen können im LilyPond-Modus mit der
-@code{--safe}-Option nicht vermischt werden.
-
-
-@node Interne Repräsentation der Musik
-@subsection Interne Repräsentation der Musik
-@translationof Internal music representation
-
-Wenn ein musikalischer Ausdruck ausgewertet wird, wird er in eine
-Anzahl von musikalischen Scheme-Objekten konvertiert.  Die Eigenschaft, die ein
-musikalisches Objekt definiert, ist, dass es Zeit einnimmt.  Zeit ist
-eine rationale Zahl, die die Länge eines Stückes in ganzen Noten
-misst.
-
-Ein musikalisches Objekt hat drei Typusarten:
-@itemize
-@item
-musikalische Bezeichnung: Jeder musikalische Ausdruck hat eine Bezeichnung.
-Eine Note beispielsweise führt zu einem @rinternals{NoteEvent} und
-@code{\simultaneous} führt zu @rinternals{SimultaneousMusic}.  Eine Liste
-aller möglichen Ausdrücke findet sich in der Referenz der Interna, unter
-@rinternals{Music expressions}.
-
-@item
-@q{Typ} oder Schnittstelle:  Jede musikalische Bezeichnung hat mehrere
-@qq{Typen} oder Schnittstellten, beispielsweise ist eine Note ein
-@code{event}, ober sie ist auch ein @code{note-event}, ein
-@code{rhythmic-event} und ein @code{melodic-event}.  Alle diese
-Notationsklassen finden sich in der Referenz der Interna unter
-@rinternals{Music classes}.
-
-@item
-C++-Objekt:  Jedes musikalische Objekt wird von einem Objekt der
-C++-Klasse @code{Music} repräsentiert.
-@end itemize
-
-Die eigentlich Information eines musikalischen Ausdrucks ist in
-Eigenschaften gespeichert.  Ein @rinternals{NoteEvent} hat zum
-Beispiel @code{pitch}- und @code{duration}-Eigenschaften, die
-die Tonhöhe und die Dauer dieser Note speichern.  Eine Liste aller
-verfügbaren Eigenschaften findet sich in der Referenz der Interna unter
-@rinternals{Music properties}.
-
-Ein zusammengesetzter musikalischer Ausdruck ist ein musikalisches
-Objekt, das andere Objekte in seinen Eigenschaften enthält.  Eine Liste
-der Objekte kann in der @code{elements}-Eigenschaft eines
-musikalischen Objektes gespeichert werden, oder ein einziges
-@qq{Kind}-Objekt in der @code{element}-Eigenschaft.  Sa hat etwa
-@rinternals{SequentialMusic} seine @qq{Kinder} in @code{elements},
-und @rinternals{GraceMusic} hat sein einziges Argument in
-@code{element}.  Der Hauptteil einer Wiederholung wird in der
-@code{element}-Eigenschaft von @rinternals{RepeatedMusic} gespeichert,
-und die Alternativen in @code{elements}.
-
-
-
-@node Komplizierte Funktionen erstellen
-@section Komplizierte Funktionen erstellen
-@translationof Building complicated functions
-
-Dieser Abschnitt zeigt, wie man Information zusammensucht,
-um komplizierte musikalische Funktionen  zu erstellen.
-
-@menu
-* Musikalische Funktionen darstellen::
-* Eigenschaften von Musikobjekten::
-* Verdoppelung einer Note mit Bindebögen (Beispiel)::
-* Artikulationszeichen zu Noten hinzufügen (Beispiel)::
-@end menu
-
-
-@node Musikalische Funktionen darstellen
-@subsection Musikalische Funktionen darstellen
-@translationof Displaying music expressions
-
-@cindex interne Speicherung
-@cindex Musikausdrücke anzeigen
-@cindex Anzeigen von Musikausdrücken
-
-@funindex displayMusic
-@funindex \displayMusic
-
-Wenn man eine musikalische Funktion erstellt, ist es oft
-hilfreich sich anzuschauen, wie musikalische Funktionen
-intern gespeichert werden.  Das kann mit der Funktion
-@code{\displayMusic} erreicht werden:
-
-@example
-@{
-  \displayMusic @{ c'4\f @}
-@}
-@end example
-
-@noindent
-zeigt:
-
-@example
-(make-music
-  'SequentialMusic
-  'elements
-  (list (make-music
-          'EventChord
-          'elements
-          (list (make-music
-                  'NoteEvent
-                  'duration
-                  (ly:make-duration 2 0 1 1)
-                  'pitch
-                  (ly:make-pitch 0 0 0))
-                (make-music
-                  'AbsoluteDynamicEvent
-                  'text
-                  "f")))))
-@end example
-
-Normalerweise gibt LilyPond diese Ausgabe auf der Konsole mit
-allen anderen Nachrichten aus.  Um die wichtigen Nachrichten
-in einer Datei zu speichern, kann die Ausgabe in eine Datei
-umgeleitet werden:
-
-@example
-lilypond file.ly >display.txt
-@end example
-
-Mit etwas Umformatierung ist die gleiche Information sehr viel
-einfacher zu lesen:
-
-@example
-(make-music 'SequentialMusic
-  'elements (list (make-music 'EventChord
-                    'elements (list (make-music 'NoteEvent
-                                      'duration (ly:make-duration 2 0 1 1)
-                                      'pitch (ly:make-pitch 0 0 0))
-                                    (make-music 'AbsoluteDynamicEvent
-                                      'text "f")))))
-@end example
-
-Eine musikalische @code{@{ ... @}}-Sequenz hat die Bezeichnung
-@code{SequentialMusic} und ihre inneren Ausdrücke werden als
-Liste in seiner @code{'elements}-Eigenschaft gespeichert.  Eine
-Note ist als als ein @code{EventChord}-Ausdruck dargestellt,
-der ein @code{NoteEvent}-Objekt (welches Dauer und
-Tonhöhe speichert) und zusätzliche Information enthält (in
-diesem Fall ein @code{AbsoluteDynamicEvent} mit einer
-@code{"f"}-Text-Eigenschaft.
-
-
-@node Eigenschaften von Musikobjekten
-@subsection Eigenschaften von Musikobjekten
-@translationof Music properties
-
-Das @code{NoteEvent}-Objekt ist das erste Objekt der
-@code{'elements}-Eigenschaft von @code{someNote}.
-
-@example
-someNote = c'
-\displayMusic \someNote
-===>
-(make-music
-  'EventChord
-  'elements
-  (list (make-music
-          'NoteEvent
-          'duration
-          (ly:make-duration 2 0 1 1)
-          'pitch
-          (ly:make-pitch 0 0 0))))
-@end example
-
-Die @code{display-scheme-music}-Funktion ist die Funktion, die von
-@code{\displayMusic} eingesetzt wird, um die Scheme-Repräsentation
-eines musikalischen Ausdrucks anzuzeigen.
-
-@example
-#(display-scheme-music (first (ly:music-property someNote 'elements)))
-===>
-(make-music
-  'NoteEvent
-  'duration
-  (ly:make-duration 2 0 1 1)
-  'pitch
-  (ly:make-pitch 0 0 0))
-@end example
-
-Danach wird die Tonhöhe der Note von der @code{'pitch}-Eigenschaft
-des @code{NoteEvent}-Objektes gelesen:
-
-@example
-#(display-scheme-music
-   (ly:music-property (first (ly:music-property someNote 'elements))
-                      'pitch))
-===>
-(ly:make-pitch 0 0 0)
-@end example
-
-Die Tonhöhe einer Note kann geändert werden, indem man diese
-@code{'pitch}-Eigenschaft umdefiniert:
-
-@funindex \displayLilyMusic
-@funindex displayLilyMusic
-
-@example
-#(set! (ly:music-property (first (ly:music-property someNote 'elements))
-                          'pitch)
-       (ly:make-pitch 0 1 0)) ;; Die Tonhöhen auf d' verändern.
-\displayLilyMusic \someNote
-===>
-d'
-@end example
-
-
-@node Verdoppelung einer Note mit Bindebögen (Beispiel)
-@subsection Verdoppelung einer Note mit Bindebögen (Beispiel)
-@translationof Doubling a note with slurs (example)
-
-In diesem Abschnitt soll gezeigt, werden, wie man eine
-Funktion erstellt, die eine Eingabe wie @code{a}
-nach @code{a( a)} umdefiniert.  Dazu wird zuerst die
-interne Repräsentation der Musik betrachtet, die
-das Endergebnis darstellt:
-
-@example
-\displayMusic@{ a'( a') @}
-===>
-(make-music
-  'SequentialMusic
-  'elements
-  (list (make-music
-          'EventChord
-          'elements
-          (list (make-music
-                  'NoteEvent
-                  'duration
-                  (ly:make-duration 2 0 1 1)
-                  'pitch
-                  (ly:make-pitch 0 5 0))
-                (make-music
-                  'SlurEvent
-                  'span-direction
-                  -1)))
-        (make-music
-          'EventChord
-          'elements
-          (list (make-music
-                  'NoteEvent
-                  'duration
-                  (ly:make-duration 2 0 1 1)
-                  'pitch
-                  (ly:make-pitch 0 5 0))
-                (make-music
-                  'SlurEvent
-                  'span-direction
-                  1)))))
-@end example
-
-Eine schlechte Nachricht ist, dass die
-@code{SlurEvent}-Ausdrücke @qq{innerhalb}
-der Noten (bzw. innerhalb der
-@code{EventChord}-Ausdrücke) hinzugefügt werden müssen.
-
-Jetzt folgt eine Betrachtung der Eingabe:
-
-@example
-(make-music
-  'SequentialMusic
-  'elements
-  (list (make-music
-          'EventChord
-          'elements
-          (list (make-music
-                  'NoteEvent
-                  'duration
-                  (ly:make-duration 2 0 1 1)
-                  'pitch
-                  (ly:make-pitch 0 5 0))))))
-@end example
-
-In der gewünschten Funktion muss also dieser Ausdruck
-kopiert werden (sodass zwei Noten vorhanden sind, die
-eine Sequenz bilden), dann müssen @code{SlurEvent}
-zu der @code{'elements}-Eigenschaft jeder Noten hinzugefügt
-werden, und schließlich muss eine @code{SequentialMusic}
-mit den beiden @code{EventChords} erstellt werden.
-
-@example
-doubleSlur = #(define-music-function (parser location note) (ly:music?)
-         "Return: @{ note ( note ) @}.
-         `note' is supposed to be an EventChord."
-         (let ((note2 (ly:music-deep-copy note)))
-           (set! (ly:music-property note 'elements)
-                 (cons (make-music 'SlurEvent 'span-direction -1)
-                       (ly:music-property note 'elements)))
-           (set! (ly:music-property note2 'elements)
-                 (cons (make-music 'SlurEvent 'span-direction 1)
-                       (ly:music-property note2 'elements)))
-           (make-music 'SequentialMusic 'elements (list note note2))))
-@end example
-
-
-@node Artikulationszeichen zu Noten hinzufügen (Beispiel)
-@subsection Artikulationszeichen zu Noten hinzufügen (Beispiel)
-@translationof Adding articulation to notes (example)
-
-Am einfachsten können Artikulationszeichen zu Noten
-hinzugefügt werden, indem man zwei musikalische Funktionen
-in einen Kontext einfügt, wie erklärt in
-@ref{Kontexte erstellen}.  Hier soll jetzt eine musikalische
-Funktion entwickelt werden, die das vornimmt.
-
-Eine @code{$variable} innerhalb von @code{#@{...#@}} ist das
-gleiche wie die normale Befehlsform @code{\variable} in
-üblicher LilyPond-Notation.  Es ist bekannt dass
-
-@example
-@{ \music -. -> @}
-@end example
-
-@noindent
-in LilyPond nicht funktioniert.  Das Problem könnte vermieden
-werden, indem das Artikulationszeichen an eine Pseudonote
-gehängtwird:
-
-@example
-@{ << \music s1*0-.-> @}
-@end example
-
-@noindent
-aber in diesem Beispiel soll gezeigt werden, wie man das in
-Scheme vornimmt.  Zunächst wird die Eingabe und die gewünschte
-Ausgabe examiniert:
-
-@example
-%  Eingabe
-\displayMusic c4
-===>
-(make-music
-  'EventChord
-  'elements
-  (list (make-music
-          'NoteEvent
-          'duration
-          (ly:make-duration 2 0 1 1)
-          'pitch
-          (ly:make-pitch -1 0 0))))
-=====
-%  gewünschte Ausgabe
-\displayMusic c4->
-===>
-(make-music
-  'EventChord
-  'elements
-  (list (make-music
-          'NoteEvent
-          'duration
-          (ly:make-duration 2 0 1 1)
-          'pitch
-          (ly:make-pitch -1 0 0))
-        (make-music
-          'ArticulationEvent
-          'articulation-type
-          "marcato")))
-@end example
-
-Dabei ist zu sehen, dass eine Note (@code{c4}) als @code{EventChord}
-repräsentiert ist, mit einem @code{NoteEvent}-Ausdruck in ihrer
-Elementenliste.  Um eine Marcato-Artikulation hinzuzufügen, muss
-ein @code{ArticulationEvent}-Ausdrcuk zu der Elementeigenschaft
-des @code{EventChord}-Ausdrucks hinzugefügt werden.
-
-Um diese Funktion zu bauen, wird folgerndermaßen begonnen:
-
-@example
-(define (add-marcato event-chord)
-  "Add a marcato ArticulationEvent to the elements of `event-chord',
-  which is supposed to be an EventChord expression."
-  (let ((result-event-chord (ly:music-deep-copy event-chord)))
-    (set! (ly:music-property result-event-chord 'elements)
-          (cons (make-music 'ArticulationEvent
-                  'articulation-type "marcato")
-                (ly:music-property result-event-chord 'elements)))
-    result-event-chord))
-@end example
-
-Die erste Zeile definiert eine Funktion in Scheme: Die Bezeichnung
-der Funktion ist @code{add-marcato} und sie hat eine Variable
-mit der Bezeichnung @code{event-chord}.  In Scheme geht der Typ
-einer Variable oft direkt aus der Bezeichnung hervor (das ist auch
-eine gute Methode für andere Programmiersprachen).
-
-@example
-"Add a marcato..."
-@end example
-
-@noindent
-ist eine (englische) Beschreibung, was diese Funktion tut.  Sie ist
-nicht unbedingt notwendig, aber genauso wie klare Variablen-Bezeichnungen
-ist auch das eine gute Methode.
-
-@example
-(let ((result-event-chord (ly:music-deep-copy event-chord)))
-@end example
-
-@code{let} wird benutzt, um die lokalen Variablen zu definieren.  Hier
-wird eine lokale Variable benutzt: @code{result-event-chord}.  Sie erhält
-den Wert @code{(ly:music-deep-copy event-chord)}.  @code{ly:music-deep-copy}
-ist eine LilyPond-spezifische Funktion, die wie alle Funktionen mit dem
-Präfix @code{ly:} versehen ist.  Sie wird benutzt, um eine Kopie eines
-musikalischen Ausdrucks anzufertigen.  Hier wird @code{event-chord}
-(der Parameter der Funktion) kopiert.  Die Funktion soll ja nur ein
-Artikulationszeichen an einen @code{EventChord} gehängt werden, deshalb ist es besser,
-den @code{EventChord}, der als Argument gegeben wurde, nicht zu
-verändern, weil er woanders benutzt werden könnte.
-
-Jetzt gibt es @code{result-event-chord}, wobei es sich um einen
-@code{NoteEventChord}-Ausdruck handelt, welcher gleichzeigt eine Kopie
-von @code{event-chord} ist.  Das Makro wird seiner Eigenschaftsliste
-hinzugefügt:
-
-@example
-(set! place new-value)
-@end example
-
-Was in diesem Fall @qq{gesetzt} werden soll (@qq{place}) ist die
-@q{elements}-Eigenschaft des @code{result-event-chord}-Ausdrucks.
-
-@example
-(ly:music-property result-event-chord 'elements)
-@end example
-
-@code{ly:music-property} ist die Funktion, mit der musikalische
-Eigenschaften erreicht werden können (die @code{'elements},
-@code{'duration}, @code{'pitch} usw., die in der Ausgabe von
-@code{\displayMusic} weiter oben angezeigt werden).  Der neue
-Wert ist, was ehemals die Elemtneigenschaft war, mit einem
-zusätzlichen Element: dem @code{ArticulationEvent}-Ausdruck,
-der aus der Ausgabe von
-@code{\displayMusic} kopiert werden kann:
-
-@example
-(cons (make-music 'ArticulationEvent
-        'articulation-type "marcato")
-      (ly:music-property result-event-chord 'elements))
-@end example
-
-@code{cons} wird benutzt, um ein Element zu einer Liste hinzuzufügen,
-ohne dass die originale Liste verändert wird.  Das ist es, was die
-Funktion tun soll:  die gleiche Liste, aber mit dem neuen
-@code{ArticulationEvent}-Ausdruck.  Die Reihenfolge innerhalb
-der Elementeeigenschaft ist hier nicht relevant.
-
-Wenn schließlich die Marcato-Artikulation zu der entsprechenden
-@code{elements}-Eigenschaft hinzuzugefügt ist, kann
-@code{result-event-chord} ausgegeben werden, darum die letzte Zeile
-der Funktion.
-
-Jetzt wird die @code{add-marcato}-Funktion in eine musikalische
-Funktion umgewandelt:
-
-@example
-addMarcato = #(define-music-function (parser location event-chord)
-                                     (ly:music?)
-    "Add a marcato ArticulationEvent to the elements of `event-chord',
-    which is supposed to be an EventChord expression."
-    (let ((result-event-chord (ly:music-deep-copy event-chord)))
-      (set! (ly:music-property result-event-chord 'elements)
-            (cons (make-music 'ArticulationEvent
-                    'articulation-type "marcato")
-                  (ly:music-property result-event-chord 'elements)))
-      result-event-chord))
-@end example
-
-Eine Überprüfung, dass die Funktion richtig arbeitet, geschieht
-folgendermaßen:
-
-@example
-\displayMusic \addMarcato c4
-@end example
-
-
-@node Programmierungsschnittstelle für Textbeschriftungen
-@section Programmierungsschnittstelle für Textbeschriftungen
-@translationof Markup programmer interface
-
-Textbeschriftungselemente sind als besondere Scheme-Funktionen
-definiert, die ein Stencil-Objekt erstellen, dem eine Anzahl
-an Argumenten übergeben wird.
-
-@menu
-* Beschriftungskonstruktionen in Scheme::
-* Wie Beschriftungen intern funktionieren::
-* Neue Definitionen von Beschriftungsbefehlen::
-* Neue Definitionen von Beschriftungsbefehlen für Listen::
-@end menu
-
-
-@node Beschriftungskonstruktionen in Scheme
-@subsection Beschriftungskonstruktionen in Scheme
-@translationof Markup construction in Scheme
-
-@cindex Textbeschriftungsbefehle, definieren
-@cindex Textbeschriftung, eigene Befehle
-@cindex eigene Befehle, Textbeschriftung
-@cindex markup, eigene Befehle
-@cindex Befehle definieren, Textbeschriftung
-
-Das @code{markup}-(Textbeschriftungs)Makro erstellt Textbeschriftungs-Ausdrücke
-in Scheme, wobei eine LilyPond-artige Syntax benutzt wird.  Beispielsweise
-ist
-
-@example
-(markup #:column (#:line (#:bold #:italic "hello" #:raise 0.4 "world")
-                  #:larger #:line ("foo" "bar" "baz")))
-@end example
-
-@noindent
-identisch mit
-
-@example
-\markup \column @{ \line @{ \bold \italic "hello" \raise #0.4 "world" @}
-                  \larger \line @{ foo bar baz @} @}
-@end example
-
-@noindent
-Dieses Beispiel zeigt die hauptsächlichen Übersetzungsregeln
-zwischen normaler Textbeschriftungssyntax von LilyPond und der
-Textbeschriftungssyntax in Scheme.
-
-@quotation
-@multitable @columnfractions .3 .3
-@item @b{LilyPond} @tab @b{Scheme}
-@item @code{\markup Text1} @tab @code{(markup Text1)}
-@item @code{\markup @{ Text1 Text2 ... @}} @tab
-        @code{(markup Text1 Text2 ... )}
-@item @code{\Befehl} @tab @code{#:Befehl}
-@item @code{\Variable} @tab @code{Variable}
-@item @code{\center-column @{ ... @}} @tab @code{#:center-column ( ... )}
-@item @code{Zeichenkette} @tab @code{"Zeichenkette"}
-@item @code{#scheme-arg} @tab @code{scheme-arg}
-@end multitable
-@end quotation
-
-Die gesamte Scheme-Sprache ist innerhalb des @code{markup}-Makros
-zugänglich.  Man kann also beispielsweise Funktionen innerhalb
-eines @code{markup} aufrufen, um Zeichenketten zu manipulieren.
-Das ist nützlich, wenn neue Beschriftungsbefehle definiert werden
-sollen (siehe auch
-@ref{Neue Definitionen von Beschriftungsbefehlen}).
-
-
-@knownissues
-
-Das Beschriftungslistenargument von Befehlen wie @code{#:line},
-@code{#:center} und @code{#:column} kann keine Variable oder
-das Resultat eines Funktionsaufrufen sein.
-
-@lisp
-(markup #:line (Funktion-die-Textbeschriftung-ausgibt))
-@end lisp
-
-@noindent
-ist ungültig.  Man sollte anstatt dessen die Funktionen
-@code{make-line-markup}, @code{make-center-markup} oder
-@code{make-column-markup} benutzen:
-
-@lisp
-(markup (make-line-markup (Funktion-die-Textbeschriftung-ausgibt)))
-@end lisp
-
-
-@node Wie Beschriftungen intern funktionieren
-@subsection Wie Beschriftungen intern funktionieren
-@translationof How markups work internally
-
-In einer Textbeschriftung wie
-
-@example
-\raise #0.5 "Textbeispiel"
-@end example
-
-@noindent
-ist @code{\raise} unter der Haube durch die @code{raise-markup}-Funktion
-repräsentiert.  Der Beschriftungsausdruck wird gespeichert als
-
-@example
-(list raise-markup 0.5 (list simple-markup "Textbeispiel"))
-@end example
-
-Wenn die Beschriftung in druckbare Objekte (Stencils) umgewandelt ist,
-wir die @code{raise-markup}-Funktion folgendermaßen aufgerufen:
-
-@example
-(apply raise-markup
-       @var{\layout object}
-       @var{Liste der Eigenschafts-alists}
-       0.5
-       @var{die "Textbeispiel"-Beschriftung})
-@end example
-
-Die @code{raise-markup}-Funktion erstellt zunächt den Stencil für die
-@code{Textbeispiel}-Beschriftung und verschiebt dann diesen Stencil
-um 0.5 Notenlinienzwischenräume nach oben.  Das ist ein einfaches
-Beispiel.  Weitere, kompliziertere Beispiele finden sich nachfolgend
-in diesem Abschnitt und in der Datei
-@file{scm/@/define@/-markup@/-commands@/.scm}.
-
-
-@node Neue Definitionen von Beschriftungsbefehlen
-@subsection Neue Definitionen von Beschriftungsbefehlen
-@translationof New markup command definition
-
-Neue Textbeschriftungsbefehle können mit dem
-@code{define-markup-command}-Scheme-Makro definiert werden.
-
-@lisp
-(define-markup-command (@var{befehl-bezeichnung} @var{layout} @var{props} @var{arg1} @var{arg2} ...)
-            (@var{arg1-type?} @var{arg2-type?} ...)
-  ..Befehlkörper..)
-@end lisp
-
-Die Argumente sind:
-
-@table @var
-@item argi
-@var{i}te Befehlsargument
-@item argi-type?
-eine Eigenschaft für das @var{i}te Argument
-@item layout
-die @q{layout}-Definition
-@item props
-eine Liste an alists, in der alle aktiven Eigenschaften enthalten sind
-@end table
-
-Als einfaches Beispiel soll gezeigt werden, wie man einen
-@code{\smallcaps}-Befehl hinzufügen kann, der die Kapitälchen
-für die Schriftzeichen auswählt.  Normalerweise würde man Kapitälchen
-folgendermaßen auswählen:
-
-@example
-\markup @{ \override #'(font-shape . caps) Text-in-Kapitälchen @}
-@end example
-
-@noindent
-Damit wird die Kapitälchenschriftart ausgewählt, indem die
-@code{font-shape}-Eigesnchaft auf @code{#'caps} gesetzt wird,
-während @code{Text-in-caps} interpretiert wird.
-
-Damit diese Funkion als @code{\smallcaps}-Befehl zur Verfügung
-gestellt werden kann, muss eine Funktion mit @code{define-markup-command}
-definiert werden.  Der Befehl braucht ein Argument vom Typ @code{markup}.
-Darum sollte der Beginn der Funktion lauten:
-
-@example
-(define-markup-command (smallcaps layout props argument) (markup?)
-@end example
-
-@noindent
-
-Was jetzt folgt, ist der eigentliche Inhalt des Befehls: das
-@code{argument} soll als Beschriftung (markup) interpretiert werden,
-also:
-
-@example
-(interpret-markup layout @dots{} argument)
-@end example
-
-@noindent
-Diese Interpretation sollte @code{'(font-shape . caps)} zu den
-aktiven Eigenschaften hinzufügen, weshalb wir das Folgende anstelle
-der @dots{} in dem Beispiel einfügen:
-
-@example
-(cons (list '(font-shape . caps) ) props)
-@end example
-
-@noindent
-Die Variable @code{props} ist eine Liste an alists, und mit @code{cons}
-wird ihr eine zusätzliche Einstellung hinzugefügt.
-
-Man könnte sich auch vorstellen, dass ein Rezitativ einer Oper
-gesetzt werden soll, und ein Befehl wäre sehr bequem, mit dem
-man die Namen der Charaktere auf eine eigene Art darstellen könnte.
-Namen sollen in Kapitälchen gesetzt werden und etwas nach links und
-oben verschoben werden.  Man kann also einen @code{\character}-Befehl
-definieren, der die nötige Verschiebung berücksichtigt und
-den neuen @code{\smallcaps}-Befehl einsetzt:
-
-@example
-#(define-markup-command (character layout props name) (string?)
-  "Print the character name in small caps, translated to the left and
-  top.  Syntax: \\character #\"name\""
-  (interpret-markup layout props
-   (markup #:hspace 0 #:translate (cons -3 1) #:smallcaps name)))
-@end example
-
-Hier ist eine Komplikation, die erklärt werden muss: Text über oder
-unter dem Notensystem wird vertikal verschoben um in einem bestimmten
-Abstand von dem System und den Noten zu sein (das wird als @qq{padding}
-bezeichnet).  Um sicherzugehen, dass dieser Mechanismus nicht die
-vertikale Verschiebung von @code{#:translate} annulliert, wird
-die leere Zeichenkette (@code{#:hspace 0}) vor den zu verschiebenden
-Text gesetzt.  Das @code{#:hspace 0} wird jetzt also über die Noten
-gesetzt und @code{name} dann relativ zu der leeren Zeichenkette
-verschoben.  Im Endeffekt wird der Text nach links oben verschoben.
-
-Das Resultat sieht folgendermaßen aus:
-
-@example
-@{
-  c''^\markup \character #"Cleopatra"
-  e'^\markup \character #"Giulio Cesare"
-@}
-@end example
-
-@lilypond[quote,ragged-right]
-#(define-markup-command (smallcaps layout props str) (string?)
-  "Print the string argument in small caps.  Syntax: \\smallcaps #\"string\""
-  (interpret-markup layout props
-   (make-line-markup
-    (map (lambda (s)
-          (if (= (string-length s) 0)
-              s
-              (markup #:large (string-upcase (substring s 0 1))
-                      #:translate (cons -0.6 0)
-                      #:tiny (string-upcase (substring s 1)))))
-         (string-split str #\Space)))))
-
-#(define-markup-command (character layout props name) (string?)
-  "Print the character name in small caps, translated to the left and
-  top.  Syntax: \\character #\"name\""
-  (interpret-markup layout props
-   (markup #:hspace 0 #:translate (cons -3 1) #:smallcaps name)))
-
-{
-  c''^\markup \character #"Cleopatra" c'' c'' c''
-  e'^\markup \character #"Giulio Cesare" e' e' e'
-}
-@end lilypond
-
-In diesen Befehlen wurden Kapitälchen eingesetzt, aber es kann
-vorkommen, dass die Schriftart keine Kapitälchen zur Verfügung
-stellt.  In diesem Fall können die Kapitälchen nachempfunden
-werden, indem man Großbuchstaben setzt, deren Anfangsbuchstabe
-etwas größer gesetzt wird:
-
-@example
-#(define-markup-command (smallcaps layout props str) (string?)
-  "Print the string argument in small caps."
-  (interpret-markup layout props
-   (make-line-markup
-    (map (lambda (s)
-          (if (= (string-length s) 0)
-              s
-              (markup #:large (string-upcase (substring s 0 1))
-                      #:translate (cons -0.6 0)
-                      #:tiny (string-upcase (substring s 1)))))
-         (string-split str #\Space)))))
-@end example
-
-Der @code{smallcaps}-Befehl spaltet die Argumente zuerst in
-Einzelstücke auf, die von Leerzeichen getrennt sind
-(@code{(string-split str #\Space)}); für jedes Einzelstück
-wird dann eine Beschriftung aufgebaut, deren erster Buchstabe
-vergrößert wird und als Versalbuchstabe gesetzt wird
-(@code{#:large (string-upcase (substring s 0 1))}), und eine
-zweite Versalbuchstaben gesetzt werden
-(@code{#:tiny (string-upcase (substring s 1))}).  Wenn
-LilyPond ein Leerzeichen zwischen Beschriftungen einer Zeile
-entdeckt, wird die zweite Beschriftung nach links verschoben
-(@code{#:translate (cons -0.6 0) ...}).  Dann werden die
-Beschriftungen für jedes Einzelstück in eine Zeile gesetzt
-@code{(make-line-markup ...)}.  Schließlich wird die resultierende
-Beschriftung an die @code{interpret-markup}-Funktion zusammen
-mit den Argumenten @code{layout} und @code{props} weitergereicht.
-
-Achtung: ist gibt keinen internen Befehl @code{\smallCaps}, der
-benutzt werden kann, um Text in Kapitälchen zu setzen.  Siehe auch
-@ref{Text markup commands}.
-
-@knownissues
-
-Im Moment sind die möglichen Kombinationen von Argumenten (nach den
-Standardargumenten @var{layout} und @var{props}), die mit
-@code{define-markup-command} definiert werden, wie folgt
-limitiert:
-
-@table @asis
-@item (kein Argument)
-@itemx @var{list}
-@itemx @var{markup}
-@itemx @var{markup markup}
-@itemx @var{scm}
-@itemx @var{scm markup}
-@itemx @var{scm scm}
-@itemx @var{scm scm markup}
-@itemx @var{scm scm markup markup}
-@itemx @var{scm markup markup}
-@itemx @var{scm scm scm}
-@end table
-
-@noindent
-Hier stellt @var{scm} native Scheme-Datentypen dar wie
-@q{number} oder @q{string}.
-
-Es ist beispielsweise nicht möglich, einen Beschriftungsbefehl
-@code{foo} mit vier Argumenten in folgender Weise zu nutzen:
-
-@example
-#(define-markup-command (foo layout props
-                         num1    str1    num2    str2)
-                        (number? string? number? string?)
-  ...)
-@end example
-
-@noindent
-Wenn es folgendermaßen eingesetzt wird:
-
-@example
-\markup \foo #1 #"bar" #2 #"baz"
-@end example
-
-@cindex Scheme signature
-@cindex Signatur, Scheme
-@noindent
-beschwert sich @command{lilypond}, dass @code{foo} wegen einer ungekannten
-Scheme Signatur nicht analysiert werden kann.
-
-
-@node Neue Definitionen von Beschriftungsbefehlen für Listen
-@subsection Neue Definitionen von Beschriftungsbefehlen für Listen
-@translationof New markup list command definition
-
-Beschriftungslistenbefehle können mit dem Scheme-Makro
-@code{define-markup-list-command} definiert werden, welches
-sich ähnlich verhält wie das
-@code{define-markup-command}-Makro, das schon beschrieben
-wurde in @ref{Neue Definitionen von Beschriftungsbefehlen}.  Ein Unterschied
-ist, dass bei diesem Listen-Makro eine ganze Liste an
-Stecils ausgegeben wird.
-
-Im folgenden Beispiel wird ein @code{\paragraph}-Beschriftungslistenbefehl
-definiert, welcher eine Liste von Zeilen im Blocksatz ausgibt, von
-denen die erste Zeile eingerückt ist.  Der Einzug wird aus dem
-@code{props}-Argument entnommen.
-
-@example
-#(define-markup-list-command (paragraph layout props args) (markup-list?)
-   (let ((indent (chain-assoc-get 'par-indent props 2)))
-     (interpret-markup-list layout props
-       (make-justified-lines-markup-list (cons (make-hspace-markup indent)
-                                               args)))))
-@end example
-
-Neben den üblichen @code{layout} und @code{props}-Argumenten, nimmt der
-@code{paragraph}-Beschriftungslistenbefehl als Argument eine Beschriftungsliste,
-die @code{args} genannt wird.  Das Prädikat für Beschriftungslisten ist
-@code{markup-list?}.
-
-Zuerst errechnet die Funktion die Breite des Einzugs, eine Eigenschaft
-mit der Bezeichnung @code{par-indent} anhand der Eigenschaftsliste
-@code{props}.  Wenn die Eigenschaft nicht gefunden wird, ist der
-Standardwert @code{2}.  Danach wird eine Liste von Zeilen im Blocksatz
-erstellt, wobei die @code{make-justified-lines-markup-list}-Funktion
-eingesetzt wird, die verwandt ist mit dem eingebauten
-@code{\justified-lines}-Beschriftungslistenbefehl.  Horizontaler
-Platz wird zu Beginn eingefügt mit der @code{make-hspace-markup}-Funktion.
-Zuletzt wird die Beschriftungsliste ausgewertet durch die
-@code{interpret-markup-list}-Funktion.
-
-Dieser neue Beschriftungslistenbefehl kann wie folgt benutzt werden:
-
-@example
-\markuplines @{
-  \paragraph @{
-    Die Kunst des Notensatzes wird auch als \italic @{Notenstich@} bezeichnet. Dieser
-    Begriff stammt aus dem traditionellen Notendruck. Noch bis vor etwa
-    20 Jahren wurden Noten erstellt, indem man sie in eine Zink- oder
-    Zinnplatte schnitt oder mit Stempeln schlug.
-  @}
-  \override-lines #'(par-indent . 4) \paragraph @{
-    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.
-  @}
-@}
-@end example
-
-
-
-@node Kontexte für Programmierer
-@section Kontexte für Programmierer
-@translationof Contexts for programmers
-
-@menu
-* Kontextauswertung::
-* Eine Funktion auf alle Layout-Objekte anwenden::
-@end menu
-
-@node Kontextauswertung
-@subsection Kontextauswertung
-@translationof Context evaluation
-
-@cindex Aufrufen von Code während der Interpretation
-@cindex On-the-fly Code ausführen
-
-@funindex \applyContext
-
-Kontexte können während ihrer Interpretation mit Scheme-Code
-modifiziert werden.  Die Syntax hierfür ist
-
-@example
-\applyContext @var{function}
-@end example
-
-@var{function} sollte eine Scheme-Funktion sein, die ein
-einziges Argument braucht, welches der Kontext ist, auf den
-sie ausgeführt werden soll.  Der folgende Code schreibt
-die aktuelle Taktzahlshould in die Standardausgabe
-während der Kompilation.
-
-@example
-\applyContext
-  #(lambda (x)
-    (format #t "\nWe were called in barnumber ~a.\n"
-     (ly:context-property x 'currentBarNumber)))
-@end example
-
-
-
-@node Eine Funktion auf alle Layout-Objekte anwenden
-@subsection Eine Funktion auf alle Layout-Objekte anwenden
-@translationof Running a function on all layout objects
-
-
-@cindex Aufruf von Code für Layoutobjekte
-
-@funindex \applyOutput
-
-Der vielfältigste Weg, ein Objekt zu beeinflussen, ist
-@code{\applyOutput}.  Die Syntax lautet:
-
-@example
-\applyOutput @var{Kontext} @var{proc}
-@end example
-
-@noindent
-wobei @var{proc} eine Scheme-Funktion ist, die drei Argumente
-benötigt.
-
-Während der Interpretation wird die Funktion @var{proc} für
-jedes Layoutobjekt aufgerufen, dass im Kontext @var{Kontext}
-vorgefunden wird, und zwar mit folgenden Argumenten:
-
-@itemize
-@item dem Layoutobjekt
-@item dem Kontext, in dem das Objekt erstellt wurde
-@item dem Kontext, in welchem @code{\applyOutput} bearbeitet wird.
-@end itemize
-
-Zusätzlich findet sich der Grund für das Layoutobjekt, etwa
-der musikalische Ausdruck oder das Objekt, das für seine Erstellung
-verantwortlich war, in der Objekteigenschaft @code{cause}.
-Für einen Notenkopf beispielsweise ist das ein
-@rinternals{NoteHead}-Ereignis, und für einen Notenhals
-(ein @rinternals{Stem}-Objekt) ist es ein @rinternals{NoteHead}-Objekt.
-
-Hier ist eine Funktion, die mit @code{\applyOutput} benutzt
-werden kann; sie macht Notenköpfe auf der Mittellinie unsichtbar:
-
-@lilypond[quote,verbatim,ragged-right]
-#(define (blanker grob grob-origin context)
-   (if (and (memq 'note-head-interface (ly:grob-interfaces grob))
-            (eq? (ly:grob-property grob 'staff-position) 0))
-       (set! (ly:grob-property grob 'transparent) #t)))
-
-\relative {
-  e4 g8 \applyOutput #'Voice #blanker b d2
-}
-@end lilypond
-
-
-@node Scheme-Vorgänge als Eigenschaften
-@section Scheme-Vorgänge als Eigenschaften
-@translationof Scheme procedures as properties
-
-Eigenschaften (wie Dicke, Richtung usw.) können mit
-@code{\override} auf feste Werte gesetzt werden, etwa:
-
-@example
-\override Stem #'thickness = #2.0
-@end example
-
-Eigenschaften können auch auf eine Scheme-Prozedur gesetzt werden:
-
-@lilypond[fragment,verbatim,quote,relative=2]
-\override Stem #'thickness = #(lambda (grob)
-    (if (= UP (ly:grob-property grob 'direction))
-        2.0
-        7.0))
-c b a g b a g b
-@end lilypond
-
-@noindent
-In diesem Fall wird die Prozedur ausgeführt, sobal der Wert der
-Eigenschaft während das Formatierungsprozesses angefordert wird.
-
-Der größte Teil der Satzmaschinierie funtioniert mit derartigen
-Callbacks.  Eigenschaften, die üblicherweise Callbacks
-benutzen, sind u. A.:
-
-@table @code
-@item stencil
-  Die Druckfunktion, die eine Ausgabe des Symbols ervorruft
-@item X-offset
-  Die Funktion, die die horizontale Position setzt
-@item X-extent
-  Die Funktion, die die Breite eines Objekts errechnet
-@end table
-
-Die Funktionen brauchen immer ein einziges Argument, das der
-Grob ist.
-
-Wenn Funktionen mit mehreren Argumenten aufgerufen werden müssen,
-kann der aktuelle Grob mit einer Grob-Einschließung
-eingefügt werden.  Hier eine Einstellung aus
-@code{AccidentalSuggestion}:
-
-@example
-(X-offset .
-  ,(ly:make-simple-closure
-    `(,+
-        ,(ly:make-simple-closure
-           (list ly:self-alignment-interface::centered-on-x-parent))
-      ,(ly:make-simple-closure
-           (list ly:self-alignment-interface::x-aligned-on-self)))))
-@end example
-
-@noindent
-In diesem Beispiel werden sowohl @code{ly:self-alignment-interface::x-aligned-on-self}
-als auch @code{ly:self-alignment-interface::centered-on-x-parent}
-mit dem Grob als Argument aufgerufen.  Die Resultate werden mit der
-@code{+}-Funktion addiert.  Um sicherzugehen, dass die Addition
-richtig ausgeführt wird, wird das ganze Konstrukt in
-@code{ly:make-simple-closure} eingeschlossen.
-
-In der Tat ist die Benutzung einer einzelnen Funktion als
-Eigenschaftswert äquivalent zu
-
-@example
-(ly:make-simple-closure (ly:make-simple-closure (list @var{proc})))
-@end example
-
-@noindent
-Das innere @code{ly:make-simple-closure} stellt den Grob als Argument
-für @var{proc} zur Verfügung, das äußere stellt sicher, dass das
-Resultat der Funktion ausgegeben wird und nicht das
-@code{simple-closure}-Objekt.
-
-
-@node Scheme-Code anstelle von \tweak verwenden
-@section Scheme-Code anstelle von @code{       weak} verwenden
-@translationof Using Scheme code instead of \tweak
-
-Der hauptsächliche Nachteil von @code{\tweak} ist seine
-syntaktische Inflexibilität.  Folgender Code beispielsweise
-ergibt einen Syntaxfehler:
-
-@example
-F = \tweak #'font-size #-3 -\flageolet
-
-\relative c'' @{
-  c4^\F c4_\F
-@}
-@end example
-
-@noindent
-Anders gesagt verhält sich @code{\tweak} nicht wie eine Artikulation
-und kann auch nicht deren Syntax verwenden: man kann es nicht
-mit @code{^} oder @code{_} anfügen.
-
-Durch die Verwendung von Scheme kann dieses Problem umgangen werden.
-Der Weg zum Resultat wird gezeigt in
-@ref{Artikulationszeichen zu Noten hinzufügen (Beispiel)}, insbesondere
-wie @code{\displayMusic} benutzt wird, hilft hier weiter.
-
-@example
-F = #(let ((m (make-music 'ArticulationEvent
-                          'articulation-type "flageolet")))
-       (set! (ly:music-property m 'tweaks)
-             (acons 'font-size -3
-                    (ly:music-property m 'tweaks)))
-       m)
-
-\relative c'' @{
-  c4^\F c4_\F
-@}
-@end example
-
-@noindent
-In diesem Beispiel werden die @code{tweaks}-Eigenschaften
-des Flageolet-Objekts @code{m} (mit @code{make-music} erstellt)
-werden mit @code{ly:music-property} ausgelesen, ein neues
-Schlüssel-Wert-Paar, um die Schriftgröße zu ändern, wird
-der Eigenschaftenliste mithilfe der @code{acons}-Schemefunktion
-vorangestellt, und das Resultat wird schließlich mit
-@code{set!} zurückgeschrieben.  Das letzte Element des
-@code{let}-Blocks ist der Wiedergabewert, @code{m}.
-
-
-
-@node Schwierige Korrekturen
-@section Schwierige Korrekturen
-@translationof Difficult tweaks
-
-Hier finden sich einige Klassen an schwierigeren Anpassungen.
-
-@itemize
-
-@item
-Ein Typ der schwierigen Anpassungen ist die Erscheinung von
-Strecker-Objekten wie Binde- oder Legatobögen.  Zunächst wird
-nur eins dieser Objekte erstellt, und sie können mit dem
-normalen Mechanismus verändert werden.  In einigen Fällen
-reichen die Strecker jedoch über Zeilenumbrüche.  Wenn das
-geschieht, werden diese Objekte geklont.  Ein eigenes
-Objekt wird für jedes System erstellt, in dem es sich befindet.
-Sie sind Klone des originalen Objektes und erben alle
-Eigenschaften, auch @code{\override}-Befehle.
-
-Anders gesagt wirkt sich ein @code{\override} immer auf alle
-Stücke eines geteilten Streckers aus.  Um nur einen Teil eines
-Streckers bei einem Zeilenumbruch zu verändern, ist es notwendig,
-in den Formatierungsprozess einzugreifen.  Das Callback
-@code{after-line-breaking} enthält die Schemefunktion, die
-aufgerufen wird, nachdem Zeilenumbrüche errechnet worden sind
-und die Layout-Objekte über die unterschiedlichen Systeme verteilt
-wurden.
-
-Im folgenden Beispiel wird die Funktion
-@code{my-callback} definiert.  Diese Funktion
-
-@itemize
-@item
-bestimmt, ob das Objekt durch Zeilenumbrüche geteilt ist,
-@item
-wenn ja, ruft sie alle geteilten Objekte auf,
-@item
-testet, ob es sich um das letzte der geteilten Objekte handelt,
-@item
-wenn ja, wird @code{extra-offset} gesetzt.
-@end itemize
-
-Diese Funktion muss in @rinternals{Tie} (Bindebogen) installiert
-werden, und der letzte Teil eines gebrochenen Bindebogens wird
-nach oben verschoben.
-
-@lilypond[quote,verbatim,ragged-right]
-#(define (my-callback grob)
-  (let* (
-         ; have we been split?
-         (orig (ly:grob-original grob))
-
-         ; if yes, get the split pieces (our siblings)
-         (siblings (if (ly:grob? orig)
-                     (ly:spanner-broken-into orig) '() )))
-
-   (if (and (>= (length siblings) 2)
-             (eq? (car (last-pair siblings)) grob))
-     (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
-
-\relative c'' {
-  \override Tie #'after-line-breaking =
-  #my-callback
-  c1 ~ \break c2 ~ c
-}
-@end lilypond
-
-@noindent
-Wenn man diesen Trick anwendet, sollte das neue @code{after-line-breaking}
-auch das alte @code{after-line-breaking}-Callback aufrufen,
-wenn es vorhanden ist.  Wenn diese Funktion etwa mit
-@code{Hairpin} (Crescendo-Klammer) eingesetzt wird, sollte auch
-@code{ly:hairpin::after-line-breaking} aufgerufen werden.
-
-
-@item
-Manche Objekte können aus technischen Gründen nicht mit @code{\override}
-verändert werden.  Beispiele hiervon sind @code{NonMusicalPaperColumn}
-und @code{PaperColumn}.  Sie können mit der
-@code{\overrideProperty}-Funktion geändert werden, die ähnlich wie
-@code{\once \override} funktioniert, aber eine andere Syntax einsetzt.
-
-@example
-\overrideProperty
-#"Score.NonMusicalPaperColumn"  % Grob-Bezeichnung
-#'line-break-system-details     % Eigenschaftsbezeichnung
-#'((next-padding . 20))         % Wert
-@end example
-
-Es sollte angemerkt werden, dass @code{\override}, wenn man es auf
-@code{NonMusicalPaperColumn} und @code{PaperColumn} anwendet, immernoch
-innerhalb der @code{\context}-Umgebung funktioniert.
-
-@end itemize
index 3c99991a5ae007382fa30f44f96bdd3f980b2433..38dbd242cd25aec3f80b5f81b6ceb0e68dae420a 100644 (file)
@@ -200,7 +200,7 @@ Anhänge
 @include usage/lilypond-book.itely
 @include usage/converters.itely
 @include usage/working.itely
-@c @include usage/suggestions.itely
+@include usage/suggestions.itely
 
 @include fdl.itexi
 
diff --git a/Documentation/de/usage/suggestions.itely b/Documentation/de/usage/suggestions.itely
new file mode 100644 (file)
index 0000000..67948fa
--- /dev/null
@@ -0,0 +1,55 @@
+@c -*- coding: utf-8; mode: texinfo; -*-
+
+@ignore
+    Translation of GIT committish: FILL-IN-HEAD-COMMITTISH
+
+    When revising a translation, copy the HEAD committish of the
+    version that you are working on.  For details, see the Contributors'
+    Guide, node Updating translation committishes..
+@end ignore
+
+@c \version "2.12.0"
+
+@node Vorschläge, wie man Dateien schreibt
+@chapter Vorschläge, wie man Dateien schreibt
+@translationof Suggestions for writing files
+
+@untranslated
+
+@menu
+* General suggestions::
+* Typesetting existing music::
+* Large projects::
+* Troubleshooting::
+* Make and Makefiles::
+@end menu
+
+
+@node General suggestions
+@section General suggestions
+
+@untranslated
+
+
+@node Typesetting existing music
+@section Typesetting existing music
+
+@untranslated
+
+
+@node Large projects
+@section Large projects
+
+@untranslated
+
+
+@node Troubleshooting
+@section Troubleshooting
+
+@untranslated
+
+
+@node Make and Makefiles
+@section Make and Makefiles
+
+@untranslated