A.2.8 El modelo de caja de LilyPond (Extender LilyPond)

#### A.2.8 El modelo de caja de LilyPond

El modelo caja ‘clásico’ para el texto (como el que se utiliza, por ejemplo, en TeX), incluye las tres dimensiones ancho, alto, and profundo: los glifos se ubican sobre una línea de base horizontal; la altura de un glifo es el tamaño vertical por encima de esta línea, la profundidad es el tamaño por debajo de esta línea, y el ancho comprende el tamaño horizontal del glifo. LilyPond añade una cuarta dimensión, el breapth,1 para extender el tamaño horizonal por la parte izquierda del ‘punto de referencia’ del glifo, denotado con ‘(0, 0)’ en la imagen que aparece a continuación. La principal razón de ser de esta extensión es que muchos glifos como los calderones son horizontalmente simétricos (y también están unidos de forma simétrica centrados sobre una cabeza de nota), y el mejor punto de referencia para tales glifos es, por tanto, el punto medio horizontal. Otros glifos como la alteración accidental de un cuarto de tono, que se muestra a la izquierda en la imagen, pueden tener también una cantidad considerable de ‘breapth’.

Como se muestra en el glifo de ‘custos’ a la derecha de la imagen, la caja que se define para un glifo puede ser muy distinta de lo que realmente se imprime: LilyPond coloca el lado derecho del glifo del custos al final del pentagrama, haciendo que la larga línea de extensión se salga por el lado derecho, metiéndose dentro del margen.

Este modelo de caja no se usa solo para los glifos musicales de LilyPond sino también para los elementos de marcado de cualquier tipo. Tanto las dimensiones horizontales como las verticales se especifican con un ‘extent’ o ámbito; usando la notación de Scheme, el glifo de la izquierda en la imagen anterior tiene unas dimensiones horizontales de `#'(-9 . 26)` y unas dimensiones verticales de `#'(-10 . 29)`.

LilyPond también utiliza algunas extensiones sobre el modelo de caja para cubrir casos especiales.

- Si no queremos que una caja tome parte en el algoritmo de espaciado musical de LilyPond a lo largo de un determinado eje, tenemos que establecer las dimensiones de este eje al valor (que en otro contexto no tiene ningún sentido) `#'(+inf.0 . -inf.0)` (desde infinito positivo hasta infinito negativo), también disponible como el símbolo `empty-interval`.
- Dentro de los elementos de marcado, el espaciado (que normalmente causa algún movimiento horizontal o vertical del siguiente objeto del marcado) también está configurado internamente como una caja: las dimensiones a lo largo del eje ortogonal están fijadas al valor `empty-interval` como un marcador, y un valor de espaciado s está representado como las dimensiones `#'(0 . s)`. A diferencia de las cajas ‘normales’, el espaciado también puede ser negativo: por ejemplo, las dimensiones horizontales de la instrucción de marcado `\hspace #-4` son `#'(0 . -4)`.

#### Footnotes

##### (1)

Este nombre artificial se derivó de la palaba inglesa ‘breadth’, que siginifica aproximadamente lo mismo que ‘width’ (ancho).

#### Extender LilyPond v2.26.0 (stable-branch).

- Appendix A Tutorial de Scheme
  - A.1 Introducción a Scheme
    - A.1.1 Cajón de arena de Scheme
    - A.1.2 Variables de Scheme
    - A.1.3 Tipos de datos simples de Scheme
    - A.1.4 Tipos de datos compuestos de Scheme
      - Parejas
      - Listas
      - Listas asociativas (listas-A)
      - Tablas de hash
    - A.1.5 Cálculos en Scheme
    - A.1.6 Procedimientos de Scheme
      - Definir procedimientos
      - Predicados
      - Valores de retorno
    - A.1.7 Condicionales de Scheme
      - if
      - cond
  - A.2 Scheme dentro de LilyPond
    - A.2.1 Sintaxis del Scheme de LilyPond
    - A.2.2 Variables de LilyPond
    - A.2.3 Depuración del código de Scheme
    - A.2.4 Variables de entrada y Scheme
    - A.2.5 Importación de Scheme dentro de LilyPond
    - A.2.6 Propiedades de los objetos
    - A.2.7 Variables de LilyPond compuestas
      - Desplazamientos
      - Fracciones
      - Dimensiones
      - Listas-A de propiedades
      - Cadenas de listas-A
    - A.2.8 El modelo de caja de LilyPond
    - A.2.9 Representación interna de la música
  - A.3 Construir funciones complicadas
    - A.3.1 Una primera aproximación (ejemplo)
    - A.3.2 Presentación de las expresiones musicales
    - A.3.3 Propiedades musicales
    - A.3.4 Duplicar una nota con ligaduras (ejemplo)
    - A.3.5 Añadir articulaciones a las notas (ejemplo)
- B Interfaces para programadores
  - B.1 Bloques de código de LilyPond
  - B.2 Funciones de Scheme
    - B.2.1 Definición de funciones de Scheme
    - B.2.2 Uso de las funciones de Scheme
    - B.2.3 Funciones de Scheme vacías
  - B.3 Funciones musicales
    - B.3.1 Definiciones de funciones musicales
    - B.3.2 Uso de las funciones musicales
    - B.3.3 Funciones de sustitución sencillas
    - B.3.4 Funciones de sustitución intermedias
    - B.3.5 Matemáticas dentro de las funciones
    - B.3.6 Funciones sin argumentos
    - B.3.7 Funciones musicales vacías
  - B.4 Funciones de eventos
  - B.5 Funciones de marcado
    - B.5.1 Construcción de elementos de marcado en Scheme
    - B.5.2 Cómo funcionan internamente los elementos de marcado
    - B.5.3 Definición de una instrucción de marcado nueva
      - Sintaxis de la definición de instrucciones de marcado
      - Acerca de las propiedades
      - Un ejemplo completo
      - Adaptación de instrucciones incorporadas
      - Convertir elementos de marcado en cadenas
    - B.5.4 Definición de nuevas instrucciones de lista de marcado
  - B.6 Contextos para programadores
    - B.6.1 Evaluación de contextos
    - B.6.2 Ejecutar una función sobre todos los objetos de la presentación
  - B.7 Funciones de callback
  - B.8 Contenedores Unpure-pure
  - B.9 Trucos difíciles
- C Interfaces de Scheme de LilyPond
- Appendix D GNU Free Documentation License
- Appendix E Índice