2.5.1 Beschriftungskonstruktionen in Scheme
Das markup
-(Textbeschriftungs)Makro erstellt Textbeschriftungs-Ausdrücke
in Scheme, wobei eine LilyPond-artige Syntax benutzt wird. Beispielsweise
ist
(markup #:column (#:line (#:bold #:italic "hello" #:raise 0.4 "world") #:larger #:line ("foo" "bar" "baz")))
identisch mit
#{ \markup \column { \line { \bold \italic "hello" \raise #0.4 "world" } \larger \line { foo bar baz } } #}
Dieses Beispiel zeigt die hauptsächlichen Übersetzungsregeln
zwischen normaler Textbeschriftungssyntax von LilyPond und der
Textbeschriftungssyntax in Scheme. Es ist meistens der beste
Weg, #{ … #}
zur Eingabe von LilyPond-Syntax zu
benützen, aber es soll auch erklärt werden, wie man das
markup
-Makro einsetzt, um eine Lösung nur in Scheme zu bekommen.
LilyPond
Scheme
\markup Text1
(markup Text1)
\markup { Text1 Text2 ... }
(markup Text1 Text2 ... )
\Beschriftungsbefehl
#:Beschriftungsbefehl
\Variable
Variable
\center-column { ... }
#:center-column ( ... )
Zeichenkette
"Zeichenkette"
#scheme-Arg
scheme-Arg
Die gesamte Scheme-Sprache ist innerhalb des markup
-Makros
zugänglich. Man kann also beispielsweise Funktionen innerhalb
eines markup
aufrufen, um Zeichenketten zu manipulieren.
Das ist nützlich, wenn neue Beschriftungsbefehle definiert werden
sollen (siehe auch
Neue Definitionen von Beschriftungsbefehlen).
Bekannte Probleme und Warnungen
Das Beschriftungslistenargument von Befehlen wie #:line
,
#:center
und #:column
kann keine Variable oder
das Resultat eines Funktionsaufrufen sein.
(markup #:line (Funktion-die-Textbeschriftung-ausgibt)) |
ist ungültig. Man sollte anstatt dessen die Funktionen
make-line-markup
, make-center-markup
oder
make-column-markup
benutzen:
(markup (make-line-markup (Funktion-die-Textbeschriftung-ausgibt))) |