5.3.7 Modificació de les llistes-A
Certes propietats configurables per part de l’usuari es representen internament com llistes-A (llistes associatives), que emmagatzemen duples de claves i valors. L’estructura d’una llista-A és la següent:
'((clave1 . valor1) (clave2 . valor2) (clave3 . valor3) …)
Si una llista-A és una propietat d’un grob o una variable de
\paper, les seves claus es poden modificar individualment
sense que afecti a les altres claus.
Per exemple, per reduir l’espai entre pentagrames adjacents dins
d’un grup, useu la propietat staff-staff-spacing del grob
StaffGrouper. La propietat és una llista-A amb quatre
claus: basic-distance (distància bàsica),
minimum-distance (distància mínima), padding
(farcit) i stretchability (ampliabilitat). Els ajustaments
estàndard per a aquesta propietat es relacionen a la secció
“Backend” de la Referència de Funcionament Intern (vegeu
StaffGrouper):
'((basic-distance . 9) (minimum-distance . 7) (padding . 1) (stretchability . 5))
Una forma d’apropar els pentagrames entre sí és reduir el valor de
la clau basic-distance (9) perquè es correspongui
amb el valor de minimum-distance (7). Per modificar
una única clau de forma individual, utilitzeu una
declaració niuada:
% espai predeterminat entre pentagrames
\new PianoStaff <<
\new Staff { \clef treble c''1 }
\new Staff { \clef bass c1 }
>>
% espai reduït entre pentagrames
\new PianoStaff \with {
% aquesta és la declaració niuada
\override StaffGrouper.staff-staff-spacing.basic-distance = #7
} <<
\new Staff { \clef treble c''1 }
\new Staff { \clef bass c1 }
>>
La utilització d’una declaració niuada actualitza la clau
especificada (com basic-distance a l’exemple anterior)
sense alterar cap de les altres claus que ja s’havien establert
per a la mateixa propietat.
Ara suposem que desitgem que els pentagrames estiguin tan propers com sigui possible sense que es superposin. La manera més senzilla de fer-lo és establir les quatre claus de la llista-A a zero. Malgrat això, no cal escriure quatre declaracions niuades, una per cada clau. En lloc d’això, es pot redefinir completament la propietat amb una sola declaració, com una llista-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 }
>>
Observeu que qualsevol clau que no hagi estat relacionada
explícitament a la definició de la llista-A, serà reiniciada als
seus valors predeterminats si no s’han fixat. En el cas de
staff-staff-spacing, el valor de qualsevol clau no fixada
es reiniciaria a zero (excepte stretchability, que agafa el
valor de basic-distance si no es fixa). Aixi, les dues
declaracions següents són equivalents:
\override StaffGrouper.staff-staff-spacing =
#'((basic-distance . 7))
\override StaffGrouper.staff-staff-spacing =
#'((basic-distance . 7)
(minimum-distance . 0)
(padding . 0)
(stretchability . 7))
Una conseqüència d’això (possiblement no intencionada) és
l’eliminació de qualsevol valor estàndard que s’estableixi en un
fitxer d’inici i que es carrega cada cop que es compila un fitxer
d’entrada. A l’exemple anterior, els ajustaments estàndard per a
padding i minimum-distance (definits a
‘scm/define-grobs.scm’) es reinicien al seus valors
predeterminats si no s’han fixat (zero per a les dues claus). La
definició d’una propietat o variable com una llista-A (de
qualsevol mida) sempre reinicia tots els valors de clau no
establertes als seus valors predeterminats si no s’han fixat. A
no ser que aquest sigui el resultat desitjat, és més segur
actualitzar els valors de clau individualment amb una declaració
niuada.
Nota: Les declaracions niuades no funcionen per a les llists-A
de propietats de context (com beamExceptions,
keyAlterations, timeSignatureSettings, etc.).
Aquestes propietats sols es poden modificar redefinint-les
completament com a llistes-A.