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 } >>
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 } >>
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.