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.