Deutschsprachiges LilyPond-Forum

Allgemeine Fragen und Probleme => Fragen und Probleme aller Art => Thema gestartet von: ingmar am Sonntag, 15. Juli 2018, 00:02

Titel: Strings und \markup zusammenmontieren [GELÖST]
Beitrag von: ingmar am Sonntag, 15. Juli 2018, 00:02
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
Titel: Antw:Strings und \markup zusammenmontierten
Beitrag von: Malte am Sonntag, 15. Juli 2018, 08:55
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
Titel: re: Strings und \markup zusammenmontieren
Beitrag von: ingmar am Sonntag, 15. Juli 2018, 11:37
ZitatMalte: die Scheme-Funktion string-append kann nur, wie der Name sagt, mit Strings umgehen... \markup \concat

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