Manual d'aprenentatge del GNU LilyPond: 4.3.4 Modificar les propietats dels contextos

### 4.3.4 Modificar les propietats dels contextos

Els contextos es responsabilitzen de mantenir els valors d’un cert nombre de properties de context. Moltes d’elles es poden canviar per influir en la interpretació del codi d’entrada i canviar així l’aparença de la sortida impresa. Es modifiquen mitjançant la instrucció `\set`. Aquesta instrucció pren la forma següent:

>     \set NomDelContext.nomDeLaPropietat = #valor

On el NomDelContext és normalment `Score`, `Staff` o `Voice`. Es pot ometre, i en aquest cas se suposa que és el context en curs (normalment `Voice`).

Els noms de les propietats de context consisteixen en paraules unides sense cap guió o barra fixa, i on totes les paraules excepte la primera comencen en majúscula. A continuació podem veure alguns exemples de noms de propietats utilitzades amb freqüència. Hi ha moltes més que les que es mostren aquí.

nomDeLaPropietat | Tipus | Funció | Valor d’exemple
--- | --- | --- | ---
extraNatural | Booleà | Si és vertader, posa becaires addicionals abans de les alteracions | `#t`, `#f`
currentBarNumber | Enter | Ajustar el número del compàs actual | `50`
doubleSlurs | Booleà | Si és vertader, imprimir lligadures d’expressió per sobre i per sota de les notes | `#t`, `#f`
instrumentName | Text | Establir el nom del pentagrama, situat a l’esquerra | `"Cello I"`
fontSize | Real | Augmentar o disminuir la mida de la font tipogràfica | `2.4`
stanza | Text | Establir el text que s’imprimeix abans del començament d’una estrofa | `"2"`

on un valor Booleà es vertader (`#t`, True) o fals (`#f`, False), un Enter és un nombre enter positiu, un nombre real és un nombre decimal positiu o negatiu, i el text es tanca entre cometes dobles. Observeu l’aparició de signes de coixinet (`#`), en dos llocs diferents: com a part del valor Booleà abans de la `t` o la `f`, i abans del valor dins de la instrucció `\set`. Així doncs, quan s’està escrivint un valor Booleà, s’han d’escriure dos signes de coixinet, per exemple: `##t`.

Abans de poder establir qualsevol d’aquestes propietats, hem de saber en quin context operen. A vegades és quelcom obvi, però en ocasions pot ser quelcom complicat. Si especifiquem un context equivocat, no es produeix cap missatge d’error, però el funcionament esperat no tindrà lloc. Per exemple, la propietat `instrumentName` (nom de l’instrument) viu clarament dins del context de `Staff`, ja que és el pentagrama el que ha de ser anomenat. En aquest exemple, el primer pentagrama resulta etiquetat, però no el segon, perquè hem omès el nom del context.

>     <<
>       \new Staff \relative {
>         \set Staff.instrumentName = "Soprano"
>         c''2 c
>       }
>       \new Staff \relative {
>         \set instrumentName = "Alto"  % Incorrecte!
>         d'2 d
>       }
>     >>

Recordeu que el nom del context predeterminat és `Voice`, així que la segona instrucció `\set` estableix la propietat `instrumentName` del context `Voice` a “Alto”, pero com el LilyPond no busca aquesta propietat al context `Voice`, no es realitza cap acció. Això no és un error, i no es registra cap missatge al fitxer Log del registre d’errors.

De forma semblant, si el nom de la propietat s’escriu amb alguna falta, no es produeix cap missatge d’error, i clarament l’acció esperada no pot tenir lloc. De fet, es pot establir qualsevol ‘property’ (fictícia) usant qualsevol nom que volem en qualsevol context que existeixi, mitjançant l’ús de la instrucció `\set`. Però si el nom no és conegut per al LilyPond, no produirà cap acció. Alguns editors de text que donen suport als fitxers d’entrada del LilyPond de manera especial, documenten els noms de propietats amb vinyetes quan passem sobre ells el punter del ratolí, com ara JEdit amb l’extensió LilyPondTool, o destaquen els noms de propietats desconegudes de manera diferent, com ara ConTEXT. Si no s’utilitza un editor amb aquesta possibilitats, es recomana comprovar la correcció del nom de la propietat al manual de Referència de funcionament intern: vegeu Tunable context properties o Contexts.

La propietat `instrumentName` tindrà efecte solament si s’estableix dins del context `Staff`, però algunes propietats es poden establir a més d’un context. Per exemple, la propietat `extraNatural` està establerta de forma predeterminada al valor `##t` (vertader) per a tots els pentagrames. Si s’estableix a `##f` (fals) en un context de `Staff` determinat s’aplicarà solament a les alteracions d’aquest pentagrama. Si s’estableix a fals en el context de la partitura, `Score`, s’aplicarà a tots els pentagrames.

Així, això desactivarà els bequadres addicionals a un pentagrama:

>     <<
>       \new Staff \relative {
>         aeses'2 aes
>       }
>       \new Staff \relative {
>         \set Staff.extraNatural = ##f
>         aeses'2 aes
>       }
>     >>

i això els desactivarà a tots els pentagrames:

>     <<
>       \new Staff \relative {
>         aeses'2 aes
>       }
>       \new Staff \relative {
>         \set Score.extraNatural = ##f
>         aeses'2 aes
>       }
>     >>

Com un exemple més, si s’estableix `clefTransposition` dins del context de `Score`, aquesta instrucció canvia immediatament el valor de la transposició en tots els pentagrames en curs i estableix un nou valor predeterminat que s’aplicarà a tots els pentagrames.

La instrucció oposada, `\unset`, té l’efecte de suprimir la propietat del context, el que ocasiona que la major part de les propietats tornin al seu valor predeterminat. Normalment no és necessari l’ús de `\unset`, atès que una nova instrucció `\set` farà l’ajust desitjat.

Les instruccions `\set` i `\unset` poden aparèixer en qualsevol lloc del fitxer d’entrada i tindran un efecte a partir del temps on es troben i fins al final de la partitura o fins que la propietat es torni a establir mitjançant `\set` o `\unset`. Provem a modificar la mida de la font tipogràfica, el que afecta la mida dels caps de les notes (entre altres coses) diverses vegades. El canvi s’agafa a partir del valor predeterminat, no el valor en curs.

>     c4 d
>     % fes que els caps de nota siguin més petits
>     \set fontSize = #-4
>     e4 f |
>     % fes que els caps de nota siguin més grans
>     \set fontSize = #2.5
>     g4 a
>     % torna a la mida predeterminada
>     \unset fontSize
>     b4 c |

Hem pogut veure com establir els valors de diversos tipus de propietat diferents. Observeu que els nombres enters i reals van sempre precedits d’un símbol de coixinet, `#`, mentre que un valor booleà vertader o fals s’especifica mitjançant `##t` i `##f`, amb dos coixinets. Una propietat de test s’ha de tancar entre cometes dobles, com abans, tot i que veurem més endavant que el text realment es pot especificar d’una forma molt més general utilitzant la molt potent instrucció `markup`.

#### Canviar les propietats d’un context amb `\with`

El valor predeterminat de les propietats de context es pot establir en el moment que es crea el context. A vegades aquesta forma d’establir el valor d’una propietat és molt més clara, si ha de quedar fix durant tot el temps que duri el context. Quan es crea un context amb una instrucció `\new` pot anar immediatament seguit d’un bloc `\with { … }` en el que s’estableix els valors predeterminats de les propietats. Per exemple, si volem suprimir la impressió de bequadres addicionals per a tota la duració d’un pentagrama, podem escriure:

>     \new Staff \with { extraNatural = ##f }

de la forma següent:

>     <<
>       \new Staff {
>         \relative {
>           gisis'4 gis aeses aes
>         }
>       }
>       \new Staff \with { extraNatural = ##f } {
>         \relative {
>           gisis'4 gis aeses aes
>         }
>       }
>     >>

Les propietats ajustades d’aquesta manera encara poden canviar-se dinàmicament utilitzant `\set` i tornar-se al valor predeterminat que es va establir al bloc `\with` mitjançant `\unset`.

Així doncs, si la propietat `fontSize` s’ajusta dins d’una instrucció `\with`, té l’efecte de reiniciar el valor predeterminat de la mida de la font tipogràfica. Si més tard es modifica amb `\set`, aquest nou valor predeterminat pot restablir-se amb la instrucció `\unset fontSize`.

#### Canviar las propietats d’un context amb `\context`

Els valors de propietat dels contextos es poden establir per a tots els contextos d’un tipus determinat, com per exemple tots els contextos de `Staff`, amb una única instrucció. El tipus de context s’identifica mitjançant la utilització del nom del seu tipus, com `Staff`, precedit d’una barra invertida: `\Staff`. L’enunciat que estableix el valor de la propietat és el mateix que el que està en un bloc `\with`, presentat anteriorment. Es col·loca en un bloc `\context` dins d’un bloc `\layout`. Cada bloc `\context` afecta a tots els contextos del tipus especificat al llarg del bloc `\score` o `\book` en el que apareix el bloc `\layout`. A continuació presentem un exemple que mostra el format:

>     \score {
>       \new Staff {
>         \relative {
>           cisis''4 e d cis
>         }
>       }
>       \layout {
>         \context {
>           \Staff
>           extraNatural = ##t
>         }
>       }
>     }

Si es vol aplicar la sobreescriptura de propietats a tos els pentagrames de la partitura:

>     \score {
>       <<
>         \new Staff {
>           \relative {
>             gisis'4 gis aeses aes
>           }
>         }
>         \new Staff {
>           \relative {
>             gisis'4 gis aeses aes
>           }
>         }
>       >>
>       \layout {
>         \context {
>           \Score extraNatural = ##f
>         }
>       }
>     }

Les propietats de context establertes d’aquesta forma es poden sobreescriure per a exemples concrets de contextos mitjançant enunciats dins d’un bloc `\with`, i mitjançant instruccions `\set` intercalades dins d’enunciats musicals.

#### Vegeu també

Referència de la notació: Canvi dels paràmetres predeterminats dels contextos. L'ordre set

Referència de funcionament intern: Contexts, Tunable context properties.

#### LilyPond — Manual d’aprenentatge v2.24.4 (branca estable).