Hallo allerseits,
ich möchte folgendes erreichen. Unter einem Lied soll ein kleiner Hinweis gedruckt werden mit Verweis auf den Originaltitel oder Interpreten usw.. Da es sich am Ende um ein Songbook handeln soll und daher die Formatierungen zentral festgelegt werden sollen, habe ich einen neuen Markup-Befehl erstellt, der folgendes macht:
Er testet, ob der angegebene Hinweis länger als eine ganze Zeile ist, dann nämlich wir er im Blocksatz gesetzt. Wenn das nicht der Fall ist, soll er rechtsbündig gesetzt werden. Meine Befehle lauten wie folgt:
\version "2.14.2"
#(define-markup-command (hint layout props arg)
(markup-list?)
(let* (
(single-line (markup (make-line-markup arg)))
(markp-width (interval-length (ly:stencil-extent (interpret-markup layout props single-line) X)))
(markp
(if (> markp-width (ly:output-def-lookup layout 'line-width))
(markup
;; Eigentlich sollte hier folgendes stehen:
;; #:justify (arg)
;; das funktioniert aber nicht wie erwartet und produziert immer
;; Fehlermeldungen, warum, weiß ich nicht, denn ein zusätzlicher Test
;; mit (markup-list? arg) produziert immer #t, eigentlich sollte
;; es also keine Schwierigkeiten geben! Auch an der Klammersetzung
;; liegt es nicht.
;; Workaround: #:justify-string (markup->string arg)
#:justify-string (markup->string arg)
)
(markup #:fill-line (#:null (make-line-markup arg)))
)
)
)
(interpret-markup layout props markp)
)
)
\markup \hint {
Das ist ein \italic kurzer Text, der \bold rechtsbündig steht.
}
\markup \hint {
Das ist ein etwas \italic längerer Text, der eigentlich im \bold Blocksatz stehen sollte. Im Workaround funktioniert das auch, dafür gehen erwartungsgemäß alle Formatierungen verloren.
}
Das Problem ist, dass sich #:justify nicht wie erwartet verhält. Es produziert nämlich immer folgende Fehlermeldung.
Fehler: make-justify-markup: Ungültiges Argument an Position 1. markup list erwartet, (("Das" "ist" [...] "verloren.")) gefunden
Ich weiß leider nicht mehr weiter. Ich habe alles abgesucht und komme nicht weiter. arg ist eine markup-list, sollte zumindest eine sein, aber es haut irgendwie nicht hin. Auch Versuche mit (list arg) oder ((arg)) haben mich nicht weitergebracht. Google und dieses Forum brachten auch keine Ergebnisse.
Kann mir jemand einen Tipp geben?