Der Umzug des Forum ist sehr schnell gegangen. Jetzt sollte (hoffentlich) wieder alles funktionieren.
Danke, dass ihr so lange gewartet habt. Dann wünsche ich euch weiterhin viel Spass mit diesem Forum.

Hauptmenü

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