A.3.3 Duplicació una nota amb lligadures (exemple) (Extender LilyPond)

#### A.3.3 Duplicació una nota amb lligadures (exemple)

Suposem que volem crear una funció que converteix una entrada com `a` a `{ a( a) }`. Comencem examinant la representació interna de la música amb la que volem terminar.

    \displayMusic{ a'( a') }
    ===>
    (make-music
      'SequentialMusic
      'elements
      (list (make-music
              'NoteEvent
              'articulations
              (list (make-music
                      'SlurEvent
                      'span-direction
                      -1))
              'duration
              (ly:make-duration 2 0 1/1)
              'pitch
              (ly:make-pitch 0 5 0))
            (make-music
              'NoteEvent
              'articulations
              (list (make-music
                      'SlurEvent
                      'span-direction
                      1))
              'duration
              (ly:make-duration 2 0 1/1)
              'pitch
              (ly:make-pitch 0 5 0))))

La mala notícia és que les expressions `SlurEvent` s’han d’afegir ‘dins’ de la nota (dins de la propietat `articulations`).

Ara examinem l’entrada.

    \displayMusic a'
    ===>
    (make-music
      'NoteEvent
      'duration
      (ly:make-duration 2 0 1/1)
      'pitch
      (ly:make-pitch 0 5 0))))

Així doncs, en la nostra funció, hem de clonar aquesta expressió (de forma que tinguem dues notes per construir la seqüència), afegir `SlurEvent` a la propietat `'articulations` de cada una d’elles, i per últim fer una seqüència `SequentialMusic` amb els dos elements `NoteEvent`. Per afegir a una propietat, és útil saber que una propietat no establerta es llegeix com a `'()`, la llista buida, així que no es requereix cap comprovació especial abans que posem un altre element endavant de la propietat `articulations`.

    doubleSlur = #(define-music-function (note) (ly:music?)
             "Return: { note ( note ) }.
             `note' se suposa que és un nota única."
             (let ((note2 (ly:music-deep-copy note)))
               (set! (ly:music-property note 'articulations)
                     (cons (make-music 'SlurEvent 'span-direction -1)
                           (ly:music-property note 'articulations)))
               (set! (ly:music-property note2 'articulations)
                     (cons (make-music 'SlurEvent 'span-direction 1)
                           (ly:music-property note2 'articulations)))
               (make-music 'SequentialMusic 'elements (list note note2))))

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