]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/de/user/scheme-tutorial.itely
Merge master into nested-bookparts
[lilypond.git] / Documentation / de / user / scheme-tutorial.itely
1 @c -*- coding: utf-8; mode: texinfo; -*-
2 @c This file is part of lilypond.tely
3 @ignore
4     Translation of GIT committish: 550152ed5d5015d13abf2af83b2e040f996a66a4
5
6     When revising a translation, copy the HEAD committish of the
7     version that you are working on.  See TRANSLATION for details.
8 @end ignore
9
10 @c \version "2.11.61"
11
12 @node Scheme tutorial
13 @appendix Scheme tutorial
14
15 @funindex #
16 @cindex Scheme
17 @cindex GUILE
18 @cindex Scheme, in-line code
19 @c @cindex accessing Scheme
20 @c @cindex evaluating Scheme
21 @cindex LISP
22
23 LilyPond verwendet die Scheme-Programmiersprache sowohl als Teil 
24 der Eingabesyntax als auch als internen Mechanismus, um Programmmodule 
25 zusammenzufügen.  Dieser Abschnitt ist ein sehr kurzer Überblick über 
26 die Dateneingabe mit Scheme.  Wenn Sie mehr über Scheme wissen wollen,
27 gehen Sie zu @uref{http://@/www@/.schemers@/.org}.
28
29 Das Grundlegendste an einer Sprache sind Daten: Zahlen, Zeichen, 
30 Zeichenketten, Listen usw.  Hier ist eine Liste der Datentypen, die für 
31 LilyPond-Eingabedateien relevant sind.
32
33 @table @asis
34 @item Boolesche Variablen
35 Werte einer Booleschen Variable sind Wahr oder Falsch. Die Scheme-Entsprechung
36 für Wahr ist @code{#t} und für Falsch @code{#f}.
37 @funindex ##t
38 @funindex ##f
39
40 @item Zahlen
41 Zahlen werden wie üblich eingegeben, @code{1} ist die (ganze) 
42 Zahl Eins, während @code{-1.5} ist eine Gleitkommazahl (also 
43 eine nicht-ganze).
44
45 @item Zeichenketten
46 Zeichenketten werden in doppelte Anführungszeichen gesetzt:
47
48 @example
49 "Das ist eine Zeichenkette"
50 @end example
51
52 Zeichenketten können über mehrere Zeilen reichen:
53
54 @example
55 "Das
56 ist
57 eine Zeichenkette"
58 @end example
59
60 Anführungszeichen und neue Zeilen können auch mit sogenannten 
61 Fluchtsequenzen eingefügt werden. Die Zeichenkette
62 @code{a sagt "b"} wird wie folgt eingegeben:
63
64 @example
65 "a sagt \"b\""
66 @end example
67
68 Neue Zeilen und Backslashe werden mit @code{\n} bzw. @code{\\}
69 eingegeben.
70 @end table
71
72 In einer Notationsdatei werden kleine Scheme-Abschnitte mit der 
73 Raute (@code{#}) eingeleitet. Die vorigen Beispiele heißen also in 
74 LilyPond:
75
76 @example
77 ##t ##f
78 #1 #-1.5
79 #"Das ist eine Zeichenkette"
80 #"Das
81 ist
82 eine Zeichenkette"
83 @end example
84
85 Für den Rest dieses Abschnitts nehmen wir an, dass die Daten immer in 
86 einer LilyPond-Datei stehen, darum wird immer die Raute verwendet.
87
88 Scheme kann verwendet werden, um Berechnungen durchzuführen. Es 
89 verwendet eine @emph{Präfix}-Syntax. Um 1 und@tie{}2 zu addieren, muss 
90 man @code{(+ 1 2)} schreiben, und nicht @math{1+2}, wie in traditioneller
91 Mathematik.
92
93 @lisp
94 #(+ 1 2)
95   @result{} #3
96 @end lisp
97
98 Der Pfeil @result{} zeigt an, dass das Ergebnis der Auswertung von 
99 @code{(+ 1 2)} @code{3}@tie{}ist. Berechnungen können geschachtelt 
100 werden und das Ergebnis einer Berechnung kann für eine neue 
101 Berechnung eingesetzt werden.
102
103 @lisp
104 #(+ 1 (* 3 4))
105   @result{} #(+ 1 12)
106   @result{} #13
107 @end lisp
108
109 Diese Berechnungen sind Beispiele von Auswertungen. Ein Ausdruck 
110 wie @code{(* 3 4)} wird durch seinen Wert @code{12} ersetzt. Ähnlich 
111 verhält es sich mit Variablen. Nachdem eine Variable definiert ist:
112
113 @example
114 zwoefl = #12
115 @end example
116
117 @noindent
118 kann man sie in Ausdrücken weiterverwenden:
119
120 @example
121 vierundzwanzig = #(* 2 zwoelf)
122 @end example
123
124 @noindent
125 Die 24 wird in der Variablen @code{vierundzwanzig} gespeichert.
126 Die gleiche Zuweisung kann auch vollständig in Scheme geschrieben 
127 werden:
128
129 @example
130 #(define vierundzwanzig (* 2 zwoelf))
131 @end example
132
133 Der @emph{Name} einer Variable ist auch ein Ausdruck, genauso wie 
134 eine Zahl oder eine Zeichenkette. Er wird wie folgt eingegeben:
135
136 @example
137 #'vierundzwanzig
138 @end example
139
140 @funindex #'symbol
141 @cindex Zitieren in Scheme
142
143 Das Apostroph @code{'} verhindert, dass bei der Scheme-Auswertung
144  @code{vierundzwanzig} durch @code{24} ersetzt wird. Anstatt dessen erhalten 
145  wir die Bezeichnung @code{vierundzwanzig}.
146
147 Diese Syntax wird sehr oft verwendet, weil es manche
148 Einstellungsveränderungen erfordern, dass Scheme-Werte einer 
149 internen Variable zugewiesen werden, wie etwa
150
151 @example
152 \override Stem #'thickness = #2.6
153 @end example
154
155 Diese Anweisung verändert die Erscheinung der Notenhälse. Der Wert 
156 @code{2.6} wird der Variable @code{thickness} (Dicke) eines 
157 @code{Stem}-(Hals)-Objektes gleichgesetzt. 
158 @code{thickness} wird relativ zu den Notenlinien errechnet, in diesem 
159 Fall sind die Hälse also 2,6 mal so dick wie die Notenlinien.  Dadurch 
160 werden Hälse fast zweimal so dick dargestellt, wie sie normalerweise sind. 
161 Um zwischen Variablen zu unterscheiden, die in den Quelldateien direkt 
162 definiert werden (wie @code{vierundzwanzig} weiter oben), und zwischen denen, 
163 die für interne Objekte zuständig sind, werden hier die ersteren 
164 @qq{Bezeichner} genannt, die letzteren dagegen @qq{Eigenschaften}.
165 Das Hals-Objekt hat also eine @code{thickness}-Eigenschaft, während 
166 @code{vierundzwanzig} ein Bezeichner ist.
167
168 @cindex Eigenschaften versus Bezeichner
169 @cindex Bezeichner versus Eigenschaften
170
171 Sowohl zweidimensionale Abstände (X- und Y-Koordinaten) als auch 
172 Größen von Objekten (Intervalle mit linker und rechter Begrenzung) werden 
173 als @code{pairs} (Paare) eingegeben. Ein Paar@footnote{In der 
174 Scheme-Terminologie wird ein Paar @code{cons} genannt und seine 
175 zwei Elemente @code{car} und @code{cdr}.} wird als @code{(erster . zweiter)}
176 eingegeben und sie müssen mit dem Apostroph eingeleitet werden, genauso 
177 wie Symbole:
178
179 @example
180 \override TextScript #'extra-offset = #'(1 . 2)
181 @end example
182
183 Hierdurch wird das Paar (1, 2) mit der Eigenschaft @code{extra-offset}
184 des TextScript-Objektes verknüpft. Diese Zahlen werden in 
185 Systembreiten  gemessen, so dass der Befehl das Objekt eine Systembreite 
186 nach rechts verschiebt und zwei Breiten nach oben.
187
188 Die zwei Elemente eines Paares können von beliebigem Inhalt sein, etwa
189
190 @example
191 #'(1 . 2)
192 #'(#t . #f)
193 #'("blah-blah" . 3.14159265)
194 @end example
195
196 Eine Liste wird eingegeben, indem die Elemente der Liste in Klammern 
197 geschrieben werden, mit einem Apostroph davor. Beispielsweise:
198
199 @example
200 #'(1 2 3)
201 #'(1 2 "string" #f)
202 @end example
203
204 Die ganze Zeit wurde hier schon Listen benutzt. Eine Berechnung, 
205 wie @code{(+ 1 2)}, ist auch eine Liste (welche das Symbol @code{+} 
206 und die Nummern 1 und@tie{}2 enthält. Normalerweise werden Listen 
207 als Berechnungen interpretiert und der Scheme-Interpreter ersetzt 
208 die Liste mit dem Ergebnis der Berechnung. Um eine Liste an sich 
209 einzugeben, muss die Auswertung angehalten werden. Das geschieht, 
210 indem der Liste ein Apostroph vorangestellt wird. Für Berechnungen 
211 kann man also den Apostroph nicht verwenden.
212
213 Innerhalb einer zitierten Liste (also mit Apostroph) muss man keine 
214 Anführungszeichen mehr setzen. Im Folgenden ein Symbolpaar, eine 
215 Symbolliste und eine Liste von Listen:
216
217 @example
218 #'(stem . head)
219 #'(staff clef key-signature)
220 #'((1) (2))
221 @end example
222
223
224
225 @menu
226 * Tweaking with Scheme::        
227 @end menu
228
229 @node Tweaking with Scheme
230 @appendixsec Tweaking with Scheme
231
232 Wir haben gesehen wie LilyPond-Eingabe massiv beeinflusst
233 werden kann, indem Befehle wie etwa
234 @code{\override TextScript #'extra-offset = ( 1 . -1)}
235 benutzt werden.  Aber es wurde gezeigt, dass Scheme noch
236 mächtiger ist.  Eine bessere Erklärung findet sich in der@ref{Scheme tutorial} und in
237 @ruser{Interfaces for programmers}.
238
239 Scheme kann auch in einfachen @code{\override}-Befehlen
240 benutzt werden:
241
242 TODO Find a simple example
243 @c This isn't a valid example with skylining
244 @c It works fine without padText  -td
245
246 @ignore
247 @lilypond[quote,verbatim,ragged-right]
248 padText = #(define-music-function (parser location padding) (number?)
249 #{
250   \once \override TextScript #'padding = #$padding
251 #})
252
253 \relative c''' {
254   c4^"piu mosso" b a b
255   \padText #1.8
256   c4^"piu mosso" d e f
257   \padText #2.6
258   c4^"piu mosso" fis a g
259 }
260 @end lilypond
261 @end ignore
262
263 Es kann auch benutzt werden, um Befehle zu erstellen:
264
265 @c Check this is a valid example with skylining
266 @c It is - 'padding still works
267
268 @lilypond[quote,verbatim,ragged-right]
269 tempoMark = #(define-music-function (parser location padding marktext)
270                                     (number? string?)
271 #{
272   \once \override Score . RehearsalMark #'padding = $padding
273   \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
274   \mark \markup { \bold $marktext }
275 #})
276
277 \relative c'' {
278   c2 e
279   \tempoMark #3.0 #"Allegro"
280   g c
281 }
282 @end lilypond
283
284 Sogar ganze Musikausdrücke können eingefügt werden:
285
286 @lilypond[quote,verbatim,ragged-right]
287 pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
288 #{
289   $x e8 a b $y b a e
290 #})
291
292 \relative c''{
293   \pattern c8 c8\f
294   \pattern {d16 dis} { ais16-> b\p }
295 }
296 @end lilypond
297
298