Hallo kilgore,
Zum spacing-problem:Ich habe mein string->string-list noch mal überarbeitet. Geht wahrscheinlich besser und eleganter, aber es scheint mit Umlauten und Sonderzeichen zu funktionieren. Falls nicht wirst Du Dich schon melden.

\version "2.14.2"
#(define default-strg "éèêëáàâäíìîïóòôöúùûüçæ°§´œ")
#(define (string->string-list strg)
(define (helper-1 strg ls)
"
Converts a string into a list of strings,
every string of the list has string-length 1
e.g "1234" -> '("1" "2" "3" "4")
Works with special characters and german umlaute, too.
"
(if (= (string-length strg) 0)
(begin
(set! ls '(""))
ls)
(begin
(let* ((substrings (if (and (>= (string-length strg) 1)(string-contains default-strg (string-take strg 1)))
(substring strg 0 2)
(substring strg 0 1)))
(string-drop-number (if (and (>= (string-length strg) 1)
(string-contains default-strg (string-take strg 1)))
2
1)))
(set! ls (cons substrings ls))
(if (>= (string-length (string-drop strg string-drop-number)) 1)
(helper-1 (string-drop strg string-drop-number) ls)
(reverse ls))))))
(helper-1 strg '()))
#(define (proc l1 l2)
"
l1 is supposed to be a list of strings.
proc will return a new list l2, build of the
elements of l1.
Every string of l2 has string-length 1
e.g '("12" "34") -> '("1" "2" "3" "4")
"
(if (null? l1)
l2
(begin
(set! l2 (append l2 (string->string-list (car l1))))
(proc (cdr l1) l2))))
#(define (stack-chars stencil stils kern)
(set! stencil (ly:stencil-combine-at-edge stencil X RIGHT (car stils) kern))
(if (null? (cdr stils))
stencil
(stack-chars stencil (cdr stils) kern)))
#(define-markup-command (char-space layout props nmbr args)(number? markup-list?)
(let* ((new-args (list-join args " "))
(argls (proc new-args '()))
(stils (map (lambda (x)(interpret-markup layout props x)) argls)))
(stack-chars (car stils) (cdr stils) nmbr)))
\markup \column {
"Test"
\char-space #2.2 {
éèêëáàâäíìîïóòôöúùûüçæœ»
}
\char-space #1 {
"^°!$%&/()=?{[]}`*+~#'-.,;:_<>^§´œ|~¹²³"
}
\char-space #1 {
le garçon
}
\char-space #2 {
ma sœur
}
\vspace #2
}
\markup \wordwrap {
Dies ist ein langer Text bei dem
\with-color #'(1 0.5 0) \bold \char-space #1 { einige }
Worte
\with-color #'(1 0.5 0) \fontsize #3 \char-space #1 { sehr breit }
geschrieben sind,
\with-color #'(0 0.5 0) \char-space #-0.2 { andere } werden jedoch
\with-color #'(0 0.5 0) \char-space #-0.2 { enger geschrieben. }
Das ganze klappt auch mit Zahlen:
\char-space #1 { 234 } -
\char-space #-0.2 { 35 = 199 }.
}
\markup \wordwrap {
\override #'(font-name . "Purisa") {
Dies ist ein langer Text bei dem
\with-color #'(1 0.5 0) \bold \char-space #1 { einige }
Worte
\with-color #'(1 0.5 0) \fontsize #3 \char-space #1 { sehr breit }
geschrieben sind,
\with-color #'(0 0.5 0) \char-space #-0.35 { andere } werden jedoch
\with-color #'(0 0.5 0) \char-space #-0.35 { enger geschrieben. }
Das ganze klappt auch mit Zahlen:
\char-space #1 { 234 } -
\char-space #-0.2 { 35 = 199 }.
}
}
\markup \wordwrap {
\override #'(font-name . "Comic Sans MS") {
Dies ist ein langer Text bei dem
\with-color #'(1 0.5 0) \bold \char-space #1 { einige }
Worte
\with-color #'(1 0.5 0) \fontsize #3 \char-space #1 { sehr breit }
geschrieben sind,
\with-color #'(0 0.5 0) \char-space #-0.2 { andere } werden jedoch
\with-color #'(0 0.5 0) \char-space #-0.2 { enger geschrieben. }
Das ganze klappt auch mit Zahlen:
\char-space #1 { 234 } -
\char-space #-0.2 { 35 = 199 }.
}
} Zu scheme/guile:Vokabular/Syntax/Grammatik ist recht schnell erlernbar.
Die Hauptprobleme die ich erlebt habe waren:
(1) Mit scheme ist natürlich ein äußerst hoher Grad an Abstraktion erreichbar. Man muß also sehr klar denken, um schreiben zu können was man halt gerade haben will.
Allerdings dürfte die Möglichkeit zur hohen Abstraktionsfähigkeit auf jede Computersprache zutreffen.
(2) In LilyPond ist sehr vieles natürlich bereits vordefiniert, aber, zumindest in diesem Bereich, schlecht oder gar nicht dokumentiert. Man muß also immer wieder in die Installationsdateien schauen und diese studieren, um zu verstehen was wie gemacht wird. Das ist schwierig und zeitaufwendig.
Hilfreich beim lernen war neben dem eigentlichen guile-manual (hat Arnold ja schon verlinkt) auch folgendes manual:
http://www.math.grin.edu/~stone/scheme-web/table-of-contents.htmlDas geht ein bißchen in Richtung "scheme for dummies", hat mir aber sehr geholfen.
Ich habe schon mit "structures and interpretation of computer programs" angefangen, aber es hackt immer bei den Conditionals...
Wenn Du fragen hast, so werde ich mich bemühen eine Antwort zu finden.

HTH,
Harm