B.5.1 Construcció d’elements de marcatge a l’Scheme (Extender LilyPond)

#### 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ó de les expressions musicals.

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.

> LilyPond | Scheme
> `\markup marcatge1` | `(markup marcatge1)`
> `\markup { marcatge1 marcatge2 … }` | `(markup marcatge1 marcatge2 … )`
> `\ordre` | `#:ordre`
> `\variable` | `variable`
> `\center-column { … }` | `#:center-column ( … )`
> `cadena` | `"cadena"`
> `#argument-de-scheme` | `argument-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.26.0 (stable-branch).

- Appendix A Tutorial de l’Scheme
  - A.1 Introducció a l’Scheme
    - A.1.1 Banc de sorra de l’Scheme
    - A.1.2 Variables de l’Scheme
    - A.1.3 Tipus de dades simples de l’Scheme
    - A.1.4 Tipus de dades compostes de l’Scheme
      - Parelles
      - Llistes
      - Llistes associatives (llistes-A)
      - Taules de hash
    - A.1.5 Càlculs a l’Scheme
    - A.1.6 Procediments de l’Scheme
      - Definició de procediments
      - Predicats
      - Valors de retorn
    - A.1.7 Condicionals de l’Scheme
      - if
      - cond
  - A.2 Scheme dins del LilyPond
    - A.2.1 Sintaxi de l’Scheme del LilyPond
    - A.2.2 Variables del LilyPond
    - A.2.3 Variables d’entrada i l’Scheme
    - A.2.4 Importació de l’Scheme dins del LilyPond
    - A.2.5 Propietats dels objectes
    - A.2.6 Variables del LilyPond compostes
      - Desplaçaments
      - Fraccions
      - Dimensions
      - Llistes-A de propietats
      - Cadenes de llistes-A
    - A.2.7 Representació interna de la música
  - A.3 Construcció de funcions complicades
    - A.3.1 Presentació de les expressions musicals
    - A.3.2 Propietats musicals
    - A.3.3 Duplicació una nota amb lligadures (exemple)
    - A.3.4 Afegir articulacions a les notes (exemple)
- B Interfícies per a programadors
  - B.1 Blocs de codi del LilyPond
  - B.2 Funcions de l’Scheme
    - B.2.1 Definició de funcions de l’Scheme
    - B.2.2 Ús de les funcions de l’Scheme
    - B.2.3 Funcions de l’Scheme buides
  - B.3 Funcions musicals
    - B.3.1 Definicions de funcions musicals
    - B.3.2 Ús de les funcions musicals
    - B.3.3 Funcions de substitució senzilles
    - B.3.4 Funcions de substitució intermèdies
    - B.3.5 Matemàtiques dins de les funcions
    - B.3.6 Funcions sense arguments
    - B.3.7 Funcions musicals buides
  - B.4 Funcions d’esdeveniments
  - B.5 Funcions de marcatge
    - B.5.1 Construcció d’elements de marcatge a l’Scheme
    - B.5.2 Com funcionen internament els elements de marcatge
    - B.5.3 Definició d’una ordre nova de marcatge
      - Sintaxi de la definició d’ordre de marcatge
      - Quant a les propietats
      - Un exemple complet
      - Adaptació d’ordres incorporades
    - B.5.4 Definició de noves ordres de llista de marcatge
  - B.6 Contextos per a programadors
    - B.6.1 Avaluació de contextos
    - B.6.2 Execució d’una funció sobre tots els objectes de la presentació
  - B.7 Funcions de callback
  - B.8 Ajustaments difícils
- C Interfícies de l’Scheme del LilyPond
- Appendix D GNU Free Documentation License
- Appendix E Índex del LilyPond