Font-Definition in einer Variablen?

Begonnen von ingmar, Mittwoch, 4. Juli 2018, 16:14

« vorheriges - nächstes »

ingmar

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

Malte

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"

ingmar

#2
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

harm6

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