B.5.1 Construcció d’elements de marcatge a l’Scheme

Les expressions de marcatge es representen internament a l’Scheme usant el macro markup:

(markup expr)

Per veure una expressió de marcatge en la seva forma de l’Scheme, utilitzeu l’ordre \displayScheme:

\displayScheme
\markup {
  \column {
    \line { \bold \italic "hola" \raise #0.4 "món" }
    \larger \line { pep pepet pepepet }
  }
}

La compilació del codi anterior envia a la consola el següent:

(markup
  #:line
  (#:column
   (#:line
    (#:bold (#:italic "hola") #:raise 0.4 "món")
    #:larger
    (#:line ("pep" "pepet" "pepepet")))))

Per evitar que el marcatge s’imprimeixi en la pàgina, useu ‘\void \displayScheme marcatge. També, com passa amb l’ordre \displayMusic, la sortida de \displayScheme es pot desar en un fitxer extern. Vegeu Presentación de las expresiones musicales.

Aquest exemple mostra les principals regles de traducció entre la sintaxi del marcatge normal del LilyPond i la sintaxi del marcatge de l’Scheme. La utilització de #{ … #} per escriure en la sintaxi del Lilypond serà amb freqüència el més convenient, però explicarem com fer servir la macro markup per obtenir una solució sols amb l’Scheme.

LilyPondScheme
\markup marcatge1(markup marcatge1)
\markup { marcatge1 marcatge2 … }(markup marcatge1 marcatge2 … )
\ordre#:ordre
\variablevariable
\center-column { … }#:center-column ( … )
cadena"cadena"
#argument-de-schemeargument-de-scheme

Tot el llenguatge de l’Scheme està accessible dins del macro markup. Per exemple, podem usar crides a funcions dins de markup per així manipular cadenes de caràcters. Això és útil si s’estan definint ordres de marcatge noves (vegeu Definició d’una ordre nova de marcatge).

Advertiments i problemes coneguts

L’argument markup-list que dóna ordres com #:line, #:center i #:column no pot ser una variable ni el resultat d’una crida a una funció.

(markup #:line (funció-que-retorna-marcatges))

no és vàlid. Cal fer servir les funcions make-line-markup, make-center-markup o make-column-markup en el seu lloc:

(markup (make-line-markup (funció-que-retorna-marcatges)))

Extender LilyPond v2.25.27 (development-branch).