Extender LilyPond: B.5.1 Construcción de elementos de marcado en Scheme

### 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)))

#### LilyPond — Extender v2.24.4 (rama estable).