B.5.4 Definició de noves ordres de llista de marcatge (Extender LilyPond)

#### B.5.4 Definició de noves ordres de llista de marcatge

Les ordres de llistes de marcatge es defineixen amb el macro de l’Scheme `define-markup-list-command`, que és semblant al macro `define-markup-command` descrit a Definició d’una ordre nova de marcatge, excepte que on aquest últim retorna un segell únic, el primer retorna una llista de segells.

A l’exemple següent es defineix una ordre de llista de marcatge `\paragraph`, que retorna una llista de línies justificades, estant la primera d’elles sagnades. L’amplada del sagnat s’agafa de l’argument `props`.

    #(define-markup-list-command (paragraph layout props args) (markup-list?)
       #:properties ((par-indent 2))
       (interpret-markup-list layout props
         #{\markuplist \justified-lines { \hspace #par-indent #args } #}))

La versió que usa solament Scheme és més complexa:

    #(define-markup-list-command (paragraph layout props args) (markup-list?)
       #:properties ((par-indent 2))
       (interpret-markup-list layout props
         (make-justified-lines-markup-list (cons (make-hspace-markup par-indent)
                                                 args))))

A part dels arguments usuals `layout` i `props`, l’ordre de llista de marcatge `paragraph` agafa un argument de llista de marcatges, cridant `args`. El predicat per a llistes de marcatges és `markup-list?`.

En primer lloc, la funció agafa l’amplada del sagnat, una propietat anomenada aquí `par-indent`, de la llista de propietats `props`. Si no es troba la propietat, el valor predeterminat és `2`. Després, es fa una llista de línies justificades usant l’ordre incorporada de llista de marcatges `\justified-lines`, que està relacionada amb la funció `make-justified-lines-markup-list`. S’afegeix un espai horitzontal al principi usant `\hspace` (o la funció `make-hspace-markup`). Finalment, la llista de marcatges s’interpreta usant la funció `interpret-markup-list`.

Aquest nova ordre de llista de marcatges es pot usar com segueix:

    \markuplist {
      \paragraph {
        L'art de la tipografia musical s'anomena \italic {gravat (en planxa).}
        El terme deriva del procés tradicional d'impressió de música.
        Fa sols algunes dècades, les partitures es feien retallant i estampant
        la música en una planxa de zinc o llauna en una imatge invertida.
      }
      \override-lines #'(par-indent . 4) \paragraph {
        La planxa s'havia d'entintar, i les depressions causades pels talls
        i estampats retenien la tina.  Es formava una imatge pressionant el paper
        contra la planxa.  L'estampat i tallat es feia completament
        a mà.
      }
    }

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