Hallo,
ich habe einige Schwierigkeiten beim Versuch, ein \markup-Statement zusammenzusetzen aus Gliedern, die entweder Strings sind oder selber \markup-Statements. – Beispiel:
\version "2.19.64"
A = "Geld"
B = "Leben"
unterstreiche = "" % replace "" by "a" or "b"
mystring = \markup #(string-append
(if (string= "a" unterstreiche)
#{ \markup { \underline \A } #}
A)
" oder "
(if (string= "b" unterstreiche)
#{ \markup { \underline \B } #}
B)
".")
\markup \mystring
Das kompiliert einwandfrei. Wenn ich aber nun den Leerstring (unterstreiche = "") durch einen der Vergleichswerte (siehe Kommentar) ersetze, gibts die Fehlermeldung "Keine Textbeschriftung", was mir leider nicht weiterhilft. Was mach ich falsch?
Danke, Gruß,
--ingmar
Hallo Ingmar,
die Scheme-Funktion string-append kann nur, wie der Name sagt, mit Strings umgehen. Von LilyPonds Markups hat sie keine Ahnung. Stattdessen wäre hier wohl ein \markup \concat angebracht, alle markup-Funktionen können nämlich auch mit Strings umgehen:\version "2.19.82"
A = "Geld"
B = "Leben"
unterstreiche = "a"
mystring = \markup \concat {
#(if (string= "a" unterstreiche)
#{ \markup \underline \A #}
A)
" oder "
#(if (string= "b" unterstreiche)
#{ \markup \underline \B #}
B)
"."
}
\mystring
Der Name mystring ist dann irreführend, weil es sich hier um ein markup handelt.
Alternativ kannst du auch Markups in Scheme-Syntax zusammenbauen:\version "2.19.82"
A = "Geld"
B = "Leben"
unterstreiche = "b"
mystring =
#(markup
#:concat
((if (string= "a" unterstreiche)
(markup #:underline A)
A)
" oder "
(if (string= "b" unterstreiche)
(markup #:underline B)
B)
"."))
\mystring
ZitatMalte: die Scheme-Funktion string-append kann nur, wie der Name sagt, mit Strings umgehen... \markup \concat
Ja, das ist allerdings nachvollziehbar! Danke!
--ingmar