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. localKeySignature
(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
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 << { e8 e e e \set autoBeaming = ##t e8 e e e } \\ { c8 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 << { \unset autoBeaming e8 e e e \unset Score.autoBeaming e8 e e e } \\ { c8 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 que se aplican solamente a un único paso de tiempo se
pueden escribir con \once
, por ejemplo en
c4 \once \set fontSize = #4.7 c4 c4
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.