Markup als DynamicText

Zur Navigation springen Zur Suche springen
Text als DynamicText

Im Context Dynamics kann man normalen Text nicht verwenden. Diese Funktion ermöglicht es, beliebigen Text in DynamicText umzuwandeln und außerdem alle Formatierung, die für Markup möglich sind, zu verwenden.

Folgende Zeile muss eingefügt werden, sonst ist die Funktion string-match nicht bekannt:

#(use-modules (ice-9 regex))

Die charakteristische Fehlermeldung lautet: Unbound variable: string-match |txt3=Anwendungsbeispiel mit verschiedenen Formatierungen des Textes.

Die bekannten Dynamikzeichen wie f, p etc. werden nicht verändert.

Score

dynamictext =
#(define-event-function (text) (markup?)
   (if (string? text)
       (let* ((underscores-replaced
               (string-map
                (lambda (x) (if (eq? x #\_) #\space x))
                text))
              (split-text (string-split underscores-replaced #\space))
              (formatted (map
                          (lambda (word)
                            (if (string-match "^[mrzfps]*$" word)
                                (markup #:dynamic word)
                                (markup #:normal-text #:italic word)))
                          split-text)))
         #{
           #(make-dynamic-script (make-line-markup formatted))
         #})
       ;; user provided a full-blown markup, so we don't mess with it:
       #{
         #(make-dynamic-script (markup #:normal-text text))
       #}))

Anwendungsbeispiel

Dieses Beispiel zeigt, wie Dynamiczeichen eingebunden werden können.

{
  c''4\dynamictext
  \markup {
    \fontsize #4 \dynamic "p" \italic \fontsize #2 "dolce"
    \bold "poco a poco diminuendo"
    \italic "a tempo" \typewriter "brilliante"
  }
}

Graphische Ausgabe