5.3.7 Modificación de las listas-A

Ciertas propiedades configurables por parte del usuario se representan internamente como listas-A (listas asociativas), que almacenan duplas de claves y valores. La estructura de una lista-A es la siguiente:

'((clave1 . valor1)
  (clave2 . valor2)
  (clave3 . valor3)
  …)

Si una lista-A es una propiedad de un grob o una variable de \paper, sus claves se pueden modificar individualmente sin que afecte a las otras claves.

Por ejemplo, para reducir el espacio entre pentagramas adyacentes dentro de un grupo, use la propiedad staff-staff-spacing del grob StaffGrouper. La propiedad es una lista-A con cuatro claves: basic-distance (distancia básica), minimum-distance (distancia mínima), padding (relleno) y stretchability (ampliabilidad). Los ajustes estándar para esta propiedad se relacionan en la sección “Backend” de la Referencia de Funcionamiento Interno (véase StaffGrouper):

'((basic-distance . 9)
  (minimum-distance . 7)
  (padding . 1)
  (stretchability . 5))

Una forma de acercar los pentagramas entre sí es reducir el valor de la clave basic-distance (9) para que se corresponda con el valor de minimum-distance (7). Para modificar una única clave de forma individual, utilice una declaración anidada:

% default space between staves
\new PianoStaff <<
  \new Staff { \clef treble c''1 }
  \new Staff { \clef bass   c1   }
>>

% reduced space between staves
\new PianoStaff \with {
  % this is the nested declaration
  \override StaffGrouper.staff-staff-spacing.basic-distance = #7
} <<
  \new Staff { \clef treble c''1 }
  \new Staff { \clef bass   c1   }
>>

[image of music]

La utilización de una declaración anidada actualiza la clave especificada (como basic-distance en el ejemplo anterior) sin alterar ninguna de las otras claves que ya se habían establecido para la misma propiedad.

Ahora, supongamos que deseamos que los pentagramas estén tan próximos como sea posible sin que se superpongan. La manera más sencilla de hacerlo es establecer las cuatro claves de la lista-A a cero. Sin embargo, no es necesario escribir cuatro declaraciones anidadas, una por cada clave. En lugar de eso, se puede redefinir completamente la propiedad con una sola declaración, como una lista-A:

\new PianoStaff \with {
  \override StaffGrouper.staff-staff-spacing =
    #'((basic-distance . 0)
       (minimum-distance . 0)
       (padding . 0)
       (stretchability . 0))
} <<
  \new Staff { \clef treble c''1 }
  \new Staff { \clef bass   c1   }
>>

[image of music]

Observe que cualquier clave que no haya sido relacionada explícitamente en la definición de la lista-A, será reiniciada a sus valores predeterminados si no se han fijado. En el caso de staff-staff-spacing, el valor de cualquier clave no fijada se reiniciaría a cero (excepto stretchability, que toma el valor de basic-distance si no se fija). Así, las dos declaraciones siguientes son equivalentes:

\override StaffGrouper.staff-staff-spacing =
  #'((basic-distance . 7))

\override StaffGrouper.staff-staff-spacing =
  #'((basic-distance . 7)
     (minimum-distance . 0)
     (padding . 0)
     (stretchability . 7))

Una consecuencia de esto (posiblemente no intencionada) es la eliminación de cualquier valor estándar que se establezca en un archivo de inicio y que se carga cada vez que se compila un archivo de entrada. En el ejemplo anterior, los ajustes estándar para padding y minimum-distance (definidos en scm/define-grobs.scm) se reinician a sus valores predeterminados si no se han fijado (cero para las dos claves). La definición de una propiedad o variable como una lista-A (de cualquier tamaño) siempre reinicia todos los valores de clave no establecidos a sus valores predeterminados si no se han fijado. Ano ser que este sea el resultado deseado, es más seguro actualizar los valores de clave individualmente con una declaración anidada.

Nota: Las declaraciones anidadas no funcionan para las listas-A de propiedades de contexto (como beamExceptions, keyAlterations, timeSignatureSettings, etc.). Estas propiedades sólo se pueden modificar redefiniéndolas completamente como listas-A.


Referencia de la notación de GNU LilyPond v2.25.22 (development-branch).