B.5.1 Construcción de elementos de marcado en Scheme
Las expresiones de marcado se representan internamente en Scheme
usando el macro markup
:
(markup expr)
Para ver una expresión de marcado en su forma de Scheme, utilice
la instrucción \displayScheme
:
\displayScheme \markup { \column { \line { \bold \italic "hola" \raise #0.4 "mundo" } \larger \line { fulano fulanito menganito } } }
La compilación del código anterior envía a la consola lo siguiente:
(markup #:line (#:column (#:line (#:bold (#:italic "hola") #:raise 0.4 "mundo") #:larger (#:line (#:simple "fulano" #:simple "fulanito" #:simple "menganito")))))
Para evitar que el marcado se imprima en la página, use
‘\void \displayScheme marcado’. Asimismo, como
ocurre con la instrucción \displayMusic
, la salida de
\displayScheme
se puede guardar en un archivo externo.
Véase Presentación de las expresiones musicales.
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))) |