1 @c -*- coding: utf-8; mode: texinfo; -*-
2 @c This file is part of lilypond.tely
4 Translation of GIT committish: 5131c3292d30cabdf08839daa02a006e4d3c96c5
6 When revising a translation, copy the HEAD committish of the
7 version that you are working on. See TRANSLATION for details.
13 @appendix Scheme tutorial
18 @cindex Scheme, in einer LilyPond-Datei
21 LilyPond verwendet die Scheme-Programmiersprache sowohl als Teil
22 der Eingabesyntax als auch als internen Mechanismus, um Programmmodule
23 zusammenzufügen. Dieser Abschnitt ist ein sehr kurzer Überblick über
24 die Dateneingabe mit Scheme. Wenn Sie mehr über Scheme wissen wollen,
25 gehen Sie zu @uref{http://@/www@/.schemers@/.org}.
27 Das Grundlegendste an einer Sprache sind Daten: Zahlen, Zeichen,
28 Zeichenketten, Listen usw. Hier ist eine Liste der Datentypen, die für
29 LilyPond-Eingabedateien relevant sind.
32 @item Boolesche Variablen
33 Werte einer Booleschen Variable sind Wahr oder Falsch. Die Scheme-Entsprechung
34 für Wahr ist @code{#t} und für Falsch @code{#f}.
39 Zahlen werden wie üblich eingegeben, @code{1} ist die (ganze)
40 Zahl Eins, während @code{-1.5} ist eine Gleitkommazahl (also
44 Zeichenketten werden in doppelte Anführungszeichen gesetzt:
47 "Das ist eine Zeichenkette"
50 Zeichenketten können über mehrere Zeilen reichen:
58 Anführungszeichen und neue Zeilen können auch mit sogenannten
59 Fluchtsequenzen eingefügt werden. Die Zeichenkette
60 @code{a sagt "b"} wird wie folgt eingegeben:
66 Neue Zeilen und Backslashe werden mit @code{\n} bzw. @code{\\}
70 In einer Notationsdatei werden kleine Scheme-Abschnitte mit der
71 Raute (@code{#}) eingeleitet. Die vorigen Beispiele heißen also in
77 #"Das ist eine Zeichenkette"
83 Für den Rest dieses Abschnitts nehmen wir an, dass die Daten immer in
84 einer LilyPond-Datei stehen, darum wird immer die Raute verwendet.
86 Scheme kann verwendet werden, um Berechnungen durchzuführen. Es
87 verwendet eine @emph{Präfix}-Syntax. Um 1 und@tie{}2 zu addieren, muss
88 man @code{(+ 1 2)} schreiben, und nicht @math{1+2}, wie in traditioneller
96 Der Pfeil @result{} zeigt an, dass das Ergebnis der Auswertung von
97 @code{(+ 1 2)} @code{3}@tie{}ist. Berechnungen können geschachtelt
98 werden und das Ergebnis einer Berechnung kann für eine neue
99 Berechnung eingesetzt werden.
107 Diese Berechnungen sind Beispiele von Auswertungen. Ein Ausdruck
108 wie @code{(* 3 4)} wird durch seinen Wert @code{12} ersetzt. Ähnlich
109 verhält es sich mit Variablen. Nachdem eine Variable definiert ist:
116 kann man sie in Ausdrücken weiterverwenden:
119 vierundzwanzig = #(* 2 zwoelf)
123 Die 24 wird in der Variablen @code{vierundzwanzig} gespeichert.
124 Die gleiche Zuweisung kann auch vollständig in Scheme geschrieben
128 #(define vierundzwanzig (* 2 zwoelf))
131 Der @emph{Name} einer Variable ist auch ein Ausdruck, genauso wie
132 eine Zahl oder eine Zeichenkette. Er wird wie folgt eingegeben:
139 @cindex Zitieren in Scheme
141 Das Apostroph @code{'} verhindert, dass bei der Scheme-Auswertung
142 @code{vierundzwanzig} durch @code{24} ersetzt wird. Anstatt dessen erhalten
143 wir die Bezeichnung @code{vierundzwanzig}.
145 Diese Syntax wird sehr oft verwendet, weil es manche
146 Einstellungsveränderungen erfordern, dass Scheme-Werte einer
147 internen Variable zugewiesen werden, wie etwa
150 \override Stem #'thickness = #2.6
153 Diese Anweisung verändert die Erscheinung der Notenhälse. Der Wert
154 @code{2.6} wird der Variable @code{thickness} (Dicke) eines
155 @code{Stem}-(Hals)-Objektes gleichgesetzt.
156 @code{thickness} wird relativ zu den Notenlinien errechnet, in diesem
157 Fall sind die Hälse also 2,6 mal so dick wie die Notenlinien. Dadurch
158 werden Hälse fast zweimal so dick dargestellt, wie sie normalerweise sind.
159 Um zwischen Variablen zu unterscheiden, die in den Quelldateien direkt
160 definiert werden (wie @code{vierundzwanzig} weiter oben), und zwischen denen,
161 die für interne Objekte zuständig sind, werden hier die ersteren
162 @qq{Bezeichner} genannt, die letzteren dagegen @qq{Eigenschaften}.
163 Das Hals-Objekt hat also eine @code{thickness}-Eigenschaft, während
164 @code{vierundzwanzig} ein Bezeichner ist.
166 @cindex Eigenschaften versus Bezeichner
167 @cindex Bezeichner versus Eigenschaften
169 Sowohl zweidimensionale Abstände (X- und Y-Koordinaten) als auch
170 Größen von Objekten (Intervalle mit linker und rechter Begrenzung) werden
171 als @code{pairs} (Paare) eingegeben. Ein Paar@footnote{In der
172 Scheme-Terminologie wird ein Paar @code{cons} genannt und seine
173 zwei Elemente @code{car} und @code{cdr}.} wird als @code{(erster . zweiter)}
174 eingegeben und sie müssen mit dem Apostroph eingeleitet werden, genauso
178 \override TextScript #'extra-offset = #'(1 . 2)
181 Hierdurch wird das Paar (1, 2) mit der Eigenschaft @code{extra-offset}
182 des TextScript-Objektes verknüpft. Diese Zahlen werden in
183 Systembreiten gemessen, so dass der Befehl das Objekt eine Systembreite
184 nach rechts verschiebt und zwei Breiten nach oben.
186 Die zwei Elemente eines Paares können von beliebigem Inhalt sein, etwa
191 #'("blah-blah" . 3.14159265)
194 Eine Liste wird eingegeben, indem die Elemente der Liste in Klammern
195 geschrieben werden, mit einem Apostroph davor. Beispielsweise:
202 Die ganze Zeit wurde hier schon Listen benutzt. Eine Berechnung,
203 wie @code{(+ 1 2)}, ist auch eine Liste (welche das Symbol @code{+}
204 und die Nummern 1 und@tie{}2 enthält. Normalerweise werden Listen
205 als Berechnungen interpretiert und der Scheme-Interpreter ersetzt
206 die Liste mit dem Ergebnis der Berechnung. Um eine Liste an sich
207 einzugeben, muss die Auswertung angehalten werden. Das geschieht,
208 indem der Liste ein Apostroph vorangestellt wird. Für Berechnungen
209 kann man also den Apostroph nicht verwenden.
211 Innerhalb einer zitierten Liste (also mit Apostroph) muss man keine
212 Anführungszeichen mehr setzen. Im Folgenden ein Symbolpaar, eine
213 Symbolliste und eine Liste von Listen:
217 #'(staff clef key-signature)
224 * Tweaking with Scheme::
227 @node Tweaking with Scheme
228 @appendixsec Tweaking with Scheme
230 Wir haben gesehen wie LilyPond-Eingabe massiv beeinflusst
231 werden kann, indem Befehle wie etwa
232 @code{\override TextScript #'extra-offset = ( 1 . -1)}
233 benutzt werden. Aber es wurde gezeigt, dass Scheme noch
234 mächtiger ist. Eine bessere Erklärung findet sich in der@ref{Scheme tutorial} und in
235 @ruser{Interfaces for programmers}.
237 Scheme kann auch in einfachen @code{\override}-Befehlen
240 TODO Find a simple example
241 @c This isn't a valid example with skylining
242 @c It works fine without padText -td
245 @lilypond[quote,verbatim,ragged-right]
246 padText = #(define-music-function (parser location padding) (number?)
248 \once \override TextScript #'padding = #$padding
256 c4^"piu mosso" fis a g
261 Es kann auch benutzt werden, um Befehle zu erstellen:
263 @c Check this is a valid example with skylining
264 @c It is - 'padding still works
266 @lilypond[quote,verbatim,ragged-right]
267 tempoPadded = #(define-music-function (parser location padding tempotext)
270 \once \override Score.MetronomeMark #'padding = $padding
271 \tempo \markup { \bold $tempotext }
275 \tempo \markup { "Low tempo" }
277 \tempoPadded #4.0 #"High tempo"
282 Sogar ganze Musikausdrücke können eingefügt werden:
284 @lilypond[quote,verbatim,ragged-right]
285 pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
292 \pattern {d16 dis} { ais16-> b\p }