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

nomDeLaPropietatTipusFuncióValor d’exemple
extraNaturalBooleàSi és vertader, posa becaires addicionals abans de les alteracions#t, #f
currentBarNumberEnterAjustar el número del compàs actual50
doubleSlursBooleàSi és vertader, imprimir lligadures d’expressió per sobre i per sota de les notes#t, #f
instrumentNameTextEstablir el nom del pentagrama, situat a l’esquerra"Cello I"
fontSizeRealAugmentar o disminuir la mida de la font tipogràfica2.4
stanzaTextEstablir 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
  }
>>

[image of music]

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

[image of music]

i això els desactivarà a tots els pentagrames:

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

[image of music]

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 |

[image of music]

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

[image of music]

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

[image of music]

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

[image of music]

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.


Manual d’aprenentatge del GNU LilyPond v2.25.22 (development-branch).