B.5.1 Construcción de elementos de marcado en Scheme

El macro markup construye expresiones de marcado en Scheme, proporcionando una sintaxis similar a la de LilyPond. Por ejemplo:

(markup #:column (#:line (#:bold #:italic "hola" #:raise 0.4 "mundo")
                  #:larger #:line ("fulano" "fulanito" "menganito")))

equivale a:

#{ \markup \column { \line { \bold \italic "hola" \raise #0.4 "mundo" }
                  \larger \line { fulano fulanito menganito } } #}

Este ejemplo muestra las principales reglas de traducción entre la sintaxis del marcado normal de LilyPond y la sintaxis del marcado de Scheme. La utilización de #{ … #} para escribir en la sintaxis de LilyPond será con frecuencia lo más conveniente, pero explicamos cómo usar la macro markup para obtener una solución sólo con Scheme.

LilyPond

Scheme

\markup marcado1

(markup marcado1)

\markup { marcado1 marcado2 ... }

(markup marcado1 marcado2 ... )

\instruccion

#:instruccion

\variable

variable

\center-column { ... }

#:center-column ( ... )

cadena

"cadena"

#argumento-de-scheme

argumento-de-scheme

Todo el lenguaje Scheme está accesible dentro del macro markup. Por ejemplo, podemos usar llamadas a funciones dentro de markup para así manipular cadenas de caracteres. Esto es útil si se están definiendo instrucciones de marcado nuevas (véase Definición de una instrucción de marcado nueva).

Advertencias y problemas conocidos

El argumento markup-list de instrucciones como #:line, #:center y #:column no puede ser una variable ni el resultado de la llamada a una función.

 
(markup #:line (funcion-que-devuelve-marcados))

no es válido. Hay que usar las funciones make-line-markup, make-center-markup o make-column-markup en su lugar:

 
(markup (make-line-markup (funcion-que-devuelve-marcados)))

Otros idiomas: English, deutsch, français.
Acerca de la selección automática del idioma.

LilyPond — Extender