]> git.donarmstrong.com Git - lilypond.git/blobdiff - Documentation/de/user/scheme-tutorial.itely
Doc-de: update macros.itely and nitpicks
[lilypond.git] / Documentation / de / user / scheme-tutorial.itely
index 880bfcd3005a5b3fd12d1981bec3bae4d725f973..97310447738dba2ddd08772b5bb44e4ac872a614 100644 (file)
@@ -1,31 +1,51 @@
-@c -*- coding: utf-8; mode: texinfo; -*-
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
 @c This file is part of lilypond.tely
 @ignore
-    Translation of GIT committish: 79583ed701a443510826b8f22f20fd6e7d5eccbe
+    Translation of GIT committish: 5cf864d550e7148412d594cf336841791bff6f76
 
     When revising a translation, copy the HEAD committish of the
     version that you are working on.  See TRANSLATION for details.
 @end ignore
 
+@c \version "2.12.0"
+
 @node Scheme tutorial
 @appendix Scheme tutorial
 
 @funindex #
 @cindex Scheme
 @cindex GUILE
-@cindex Scheme, in-line code
-@c @cindex accessing Scheme
-@c @cindex evaluating Scheme
+@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,
+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 
+Zeichenketten, Listen usw.  Hier ist eine Liste der Datentypen, die für
 LilyPond-Eingabedateien relevant sind.
 
 @table @asis
@@ -36,9 +56,9 @@ für Wahr ist @code{#t} und für Falsch @code{#f}.
 @funindex ##f
 
 @item Zahlen
-Zahlen werden wie üblich eingegeben, @code{1} ist die (integre) 
+Zahlen werden wie üblich eingegeben, @code{1} ist die (ganze) 
 Zahl Eins, während @code{-1.5} ist eine Gleitkommazahl (also 
-eine nicht-integre).
+eine nicht-ganze).
 
 @item Zeichenketten
 Zeichenketten werden in doppelte Anführungszeichen gesetzt:
@@ -80,12 +100,43 @@ 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 tranditioneller
+man @code{(+ 1 2)} schreiben, und nicht @math{1+2}, wie in traditioneller
 Mathematik.
 
 @lisp
@@ -109,38 +160,38 @@ wie @code{(* 3 4)} wird durch seinen Wert @code{12} ersetzt. Ähnlich
 verhält es sich mit Variablen. Nachdem eine Variable definiert ist:
 
 @example
-twelve = #12
+zwoefl = #12
 @end example
 
 @noindent
 kann man sie in Ausdrücken weiterverwenden:
 
 @example
-twentyFour = #(* 2 twelve)
+vierundzwanzig = #(* 2 zwoelf)
 @end example
 
 @noindent
-Die 24 wird in der Variablen @code{twentyFour} gespeichert.
+Die 24 wird in der Variablen @code{vierundzwanzig} gespeichert.
 Die gleiche Zuweisung kann auch vollständig in Scheme geschrieben 
 werden:
 
 @example
-#(define twentyFour (* 2 twelve))
+#(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
-#'twentyFour
+#'vierundzwanzig
 @end example
 
 @funindex #'symbol
 @cindex Zitieren in Scheme
 
 Das Apostroph @code{'} verhindert, dass bei der Scheme-Auswertung
- @code{twentyFour} durch @code{24} ersetzt wird. Anstatt dessen erhalten 
- wir die Bezeichnung @code{twentyFour}.
+ @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 
@@ -152,16 +203,16 @@ internen Variable zugewiesen werden, wie etwa
 
 Diese Anweisung verändert die Erscheinung der Notenhälse. Der Wert 
 @code{2.6} wird der Variable @code{thickness} (Dicke) eines 
-@code{Stem}-(Hals)-Ojektes gleichgesetzt. 
-@code{thickness} wird realtiv zu den Notenlinien errechnet, in diesem 
-Fall sind die Hälse also 2,6 mal so dick wie die Notenlinien. Dadurch 
+@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{twentyFour} weiter oben), und zwischen denen, 
+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{twentyFour} ein Bezeichner ist.
+@code{vierundzwanzig} ein Bezeichner ist.
 
 @cindex Eigenschaften versus Bezeichner
 @cindex Bezeichner versus Eigenschaften
@@ -183,7 +234,7 @@ 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 arbiträrem Inhalt sein, etwa
+Die zwei Elemente eines Paares können von beliebigem Inhalt sein, etwa
 
 @example
 #'(1 . 2)
@@ -220,3 +271,77 @@ Symbolliste und eine Liste von Listen:
 
 
 
+@menu
+* Tweaking with Scheme::
+@end menu
+
+@node Tweaking with Scheme
+@appendixsec 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 tutorial} und in
+@ruser{Interfaces for programmers}.
+
+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
+
+