Referència de la notació del GNU LilyPond: 5.3.7 Modificació de les llistes-A

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

#### LilyPond — Referència de la notació v2.22.2 (branca estable).