Strings und \markup zusammenmontieren [GELÖST]

Begonnen von ingmar, Sonntag, 15. Juli 2018, 00:02

« vorheriges - nächstes »

ingmar

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

Malte

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

ingmar

#2
ZitatMalte: die Scheme-Funktion string-append kann nur, wie der Name sagt, mit Strings umgehen... \markup \concat

Ja, das ist allerdings nachvollziehbar! Danke!
--ingmar