]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/de/user/scheme-tutorial.itely
673d78837b3ceea628ba47044991c6f01810cf09
[lilypond.git] / Documentation / de / user / scheme-tutorial.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: de -*-
2 @c This file is part of lilypond.tely
3 @ignore
4     Translation of GIT committish: 5131c3292d30cabdf08839daa02a006e4d3c96c5
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.12.0"
11
12 @node Scheme tutorial
13 @appendix Scheme tutorial
14
15 @funindex #
16 @cindex Scheme
17 @cindex GUILE
18 @cindex Scheme, in einer LilyPond-Datei
19 @cindex LISP
20
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}.
26
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.
30
31 @table @asis
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}.
35 @funindex ##t
36 @funindex ##f
37
38 @item Zahlen
39 Zahlen werden wie üblich eingegeben, @code{1} ist die (ganze) 
40 Zahl Eins, während @code{-1.5} ist eine Gleitkommazahl (also 
41 eine nicht-ganze).
42
43 @item Zeichenketten
44 Zeichenketten werden in doppelte Anführungszeichen gesetzt:
45
46 @example
47 "Das ist eine Zeichenkette"
48 @end example
49
50 Zeichenketten können über mehrere Zeilen reichen:
51
52 @example
53 "Das
54 ist
55 eine Zeichenkette"
56 @end example
57
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:
61
62 @example
63 "a sagt \"b\""
64 @end example
65
66 Neue Zeilen und Backslashe werden mit @code{\n} bzw. @code{\\}
67 eingegeben.
68 @end table
69
70 In einer Notationsdatei werden kleine Scheme-Abschnitte mit der 
71 Raute (@code{#}) eingeleitet. Die vorigen Beispiele heißen also in 
72 LilyPond:
73
74 @example
75 ##t ##f
76 #1 #-1.5
77 #"Das ist eine Zeichenkette"
78 #"Das
79 ist
80 eine Zeichenkette"
81 @end example
82
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.
85
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
89 Mathematik.
90
91 @lisp
92 #(+ 1 2)
93   @result{} #3
94 @end lisp
95
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.
100
101 @lisp
102 #(+ 1 (* 3 4))
103   @result{} #(+ 1 12)
104   @result{} #13
105 @end lisp
106
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:
110
111 @example
112 zwoefl = #12
113 @end example
114
115 @noindent
116 kann man sie in Ausdrücken weiterverwenden:
117
118 @example
119 vierundzwanzig = #(* 2 zwoelf)
120 @end example
121
122 @noindent
123 Die 24 wird in der Variablen @code{vierundzwanzig} gespeichert.
124 Die gleiche Zuweisung kann auch vollständig in Scheme geschrieben 
125 werden:
126
127 @example
128 #(define vierundzwanzig (* 2 zwoelf))
129 @end example
130
131 Der @emph{Name} einer Variable ist auch ein Ausdruck, genauso wie 
132 eine Zahl oder eine Zeichenkette. Er wird wie folgt eingegeben:
133
134 @example
135 #'vierundzwanzig
136 @end example
137
138 @funindex #'symbol
139 @cindex Zitieren in Scheme
140
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}.
144
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
148
149 @example
150 \override Stem #'thickness = #2.6
151 @end example
152
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.
165
166 @cindex Eigenschaften versus Bezeichner
167 @cindex Bezeichner versus Eigenschaften
168
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 
175 wie Symbole:
176
177 @example
178 \override TextScript #'extra-offset = #'(1 . 2)
179 @end example
180
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.
185
186 Die zwei Elemente eines Paares können von beliebigem Inhalt sein, etwa
187
188 @example
189 #'(1 . 2)
190 #'(#t . #f)
191 #'("blah-blah" . 3.14159265)
192 @end example
193
194 Eine Liste wird eingegeben, indem die Elemente der Liste in Klammern 
195 geschrieben werden, mit einem Apostroph davor. Beispielsweise:
196
197 @example
198 #'(1 2 3)
199 #'(1 2 "string" #f)
200 @end example
201
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.
210
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:
214
215 @example
216 #'(stem . head)
217 #'(staff clef key-signature)
218 #'((1) (2))
219 @end example
220
221
222
223 @menu
224 * Tweaking with Scheme::
225 @end menu
226
227 @node Tweaking with Scheme
228 @appendixsec Tweaking with Scheme
229
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}.
236
237 Scheme kann auch in einfachen @code{\override}-Befehlen
238 benutzt werden:
239
240 TODO Find a simple example
241 @c This isn't a valid example with skylining
242 @c It works fine without padText  -td
243
244 @ignore
245 @lilypond[quote,verbatim,ragged-right]
246 padText = #(define-music-function (parser location padding) (number?)
247 #{
248   \once \override TextScript #'padding = #$padding
249 #})
250
251 \relative c''' {
252   c4^"piu mosso" b a b
253   \padText #1.8
254   c4^"piu mosso" d e f
255   \padText #2.6
256   c4^"piu mosso" fis a g
257 }
258 @end lilypond
259 @end ignore
260
261 Es kann auch benutzt werden, um Befehle zu erstellen:
262
263 @c Check this is a valid example with skylining
264 @c It is - 'padding still works
265
266 @lilypond[quote,verbatim,ragged-right]
267 tempoPadded = #(define-music-function (parser location padding tempotext)
268   (number? string?)
269 #{
270   \once \override Score.MetronomeMark #'padding = $padding
271   \tempo \markup { \bold $tempotext }
272 #})
273
274 \relative c'' {
275   \tempo \markup { "Low tempo" }
276   c4 d e f g1
277   \tempoPadded #4.0 #"High tempo"
278   g4 f e d c1
279 }
280 @end lilypond
281
282 Sogar ganze Musikausdrücke können eingefügt werden:
283
284 @lilypond[quote,verbatim,ragged-right]
285 pattern = #(define-music-function (parser location x y) (ly:music? ly:music?)
286 #{
287   $x e8 a b $y b a e
288 #})
289
290 \relative c''{
291   \pattern c8 c8\f
292   \pattern {d16 dis} { ais16-> b\p }
293 }
294 @end lilypond
295
296