Hi...
folgende beiden Stücke Code müssten IMHO gleichwertig sein:
Erstens: \paper mit Font-Definition:
\version "2.19.64"
\paper {
#(define fonts
(make-pango-font-tree
"Arial"
"LilyPond Sans Serif"
"LilyPond Monospace"
(/ staff-height pt 20)))
}
Zweitens: Eine Scheme Funktion, die \paper in einer Variablen definiert, dann Aufruf dieser Variablen:
my-paper = #(define-scheme-function () () #{
\paper {
#(define fonts
(make-pango-font-tree
"Arial"
"LilyPond Sans Serif"
"LilyPond Monospace"
(/ staff-height pt 20)))
}
#})
\my-paper
Hier kommt die Fehlermeldung "Missing body expression". Ich verstehe sie so, dass Scheme die Font-Definition nicht ganz für voll nimmt und sich noch weitere Direktiven innerhalb von \paper wünscht.
Aber auch damit geht es nicht..
Weiß jemand mehr als ich?
Danke!
--ingmar
Nicht so kompliziert denken ;)\version "2.19.82"
mypaper = \paper {
#(define fonts
(make-pango-font-tree
"Arial"
"LilyPond Sans Serif"
"LilyPond Monospace"
(/ staff-height pt 20)))
}
\mypaper
\markup "foo"
Jetzt war ich im ersten Moment selber etwas verwirrt... : - )
Erstmal Danke! – Aber ich denke, ich brauche die Scheme-Funktion schon, weil ich andere Dinge darin dynamisch halten möchte, d.h. erst zum Zeitpunkt des Funktionsaufrufs berechnen lassen möchte.
Gruß,
--ingmar
Ich bin mir da nicht ganz sicher, aber es hat wohl nichts mit der scheme-function an sich oder der fonts-Definition im speziellen zu tun, sondern damit was innerhalb #{ ... #} erlaubt/möglich ist und was nicht.
$#{ #(define foo "xy") #}
gibt ja z.B. denselben Fehler aus.
Vielleicht wäre es möglich auf die scheme-defintion zu verzichten und ly-Syntax zu verwenden.
Allerdings sind die nötigen Parameter wie staff-height und pt auch (noch?) nicht präsent, man muß sie sich erst holen.
Aber nach meinen oberflächlichen Tests scheint folgendes zu funktionieren:
\version "2.19.82"
my-paper = #(define-scheme-function () ()
#{
\paper {
fonts =
#(let* ((pap $defaultpaper)
(staff-height (ly:output-def-lookup pap 'staff-height))
(pt (ly:output-def-lookup pap 'pt)))
(make-pango-font-tree
"Arial"
"LilyPond Sans Serif"
"LilyPond Monospace"
(/ staff-height pt 20)))
}
#})
\my-paper
Gruß,
Harm