5.3.2 La instrucción \set
Cada contexto puede tener distintas propiedades, variables
contenidas dentro de ese contexto. Se pueden cambiar mientras
dura el paso de interpretación. Se consigue insertando la
instrucción \set
dentro de la música:
\set contexto.propiedad = #valor
valor es un objeto de Scheme, razón por la que va precedido
del carácter almohadilla, #
.
El nombre de las propiedades de contexto suele ir en minúsculas
con mayúscula en medio. Controlan sobre todo la traducción de la
música a la notación, p.ej. localAlterations
(para
determinar si hay que impriir alteraciones o no), o
measurePosition
(para determinar cuándo hay que imprimir
una línea divisoria). El valor de las propiedades de contexto
puede modifcarse con el tiempo durante la interpretación de la
música; un ejemplo obvio es measurePosition
. Las
propiedades de contexto se modifican mediante la instrucción
\set
.
Por ejemplo, los silencios multicompás se combinan en un solo
compás (como se explica en Compresión de los compases vacíos) si el
valor de la propiedad de contexto skipBars
se establece a
#t
(verdadero):
R1*2 \set Score.skipBars = ##t R1*2
Si se omite el argumento context, entonces se utiliza el
contexto actual de nivel más bajo (normalmente ChordNames
,
Voice
o Lyrics
). En este ejemplo:
\set Score.autoBeaming = ##f \relative { e''8 e e e \set autoBeaming = ##t e8 e e e } \\ \relative { c''8 c c c c8 c c c }
El cambio se aplica ‘al vuelo’, mientras dura la música, de forma que el ajuste sólo afecta al segundo grupo de corcheas.
Observe que el contexto del nivel más bajo no siempre contiene la
propiedad que querríamos modificar: por ejemplo, intentar ajustar
el valor de la propiedad skipBars
del contexto
predeterminado del nivel más bajo, que en este caso es
Voice
, no tendrá ningún efecto, porque skipBars es una
propiedad del contexto Score
.
R1*2 \set skipBars = ##t R1*2
Los contextos son jerárquicos, y si se ha especificado un contexto
mayor, por ejemplo Staff
, entonces el cambio se aplicaría
también a todos los contextos Voice
dentro del pentagrama
actual.
También existe una instrucción \unset
:
\unset contexto.propiedad
que elimina la definición de propiedad. Esta instrucción elimina la definición solamente si está establecida dentro de contexto. Properties that have been set in enclosing contexts will not be altered by an unset in an enclosed context:
\set Score.autoBeaming = ##t \relative { \unset autoBeaming e''8 e e e \unset Score.autoBeaming e8 e e e } \\ \relative { c''8 c c c c8 c c c }
Como \set
, el argumento contexto no se tiene que
especificar para un contexto del nivel más bajo, por lo que los
dos enunciados
\set Voice.autoBeaming = ##t \set autoBeaming = ##t
son equivalentes si el contexto inferior en curso es Voice
.
Los ajustes con \set
o \unset
que se aplican
solamente a un único paso de tiempo se pueden escribir con
\once
, por ejemplo en
c''4 \once \set fontSize = #4.7 c''4 c''4
En el manual de Referencia de funcionamiento interno hay una descripción completa de todas las propiedades de contexto disponibles, consulte Tunable context properties.
Véase también
Referencia de funcionamiento interno: Tunable context properties.