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
Por ejemplo:
R1*2 \set Score.skipBars = ##t R1*2
Estas instrucción salta los compases que no tienen notas. El
resultado es que los silencios multicompás se condensan. El valor
asignado es un objeto de Scheme. En este caso, es #t
, el valor
booleano True o verdadero.
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:
c8 c c c \set autoBeaming = ##f c8 c c c
el argumento contexto de la instrucción \set
se omite,
así pues el barrado automático se desactiva en la voz actual. Observe
que el contexto de nivel más bajo no siempre contiene la propiedad que
queremos cambiar (por ejemplo, no tendrá ningún efecto intentar
establecer un valor para la propiedad skipBars
del contexto de
nivel más bajo, en este caso Voice
).
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. El cambio se aplica ‘al vuelo’, durante la música, de
manera que el ajuste sólo afecta al segundo grupo de corcheas.
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, de manera que
\set Staff.autoBeaming = ##f
introduce un ajuste de la propiedad en el nivel de Staff
. El
ajuste también se aplica a la Voice
actual. Sin embargo:
\unset Voice.autoBeaming
no tiene ningúun efecto. Para cancelar este ajuste, se debe
especificar el \unset
en el mismo nivel que el \set
original. Dicho de otra forma, para deshacer el efecto de
Staff.autoBeaming = ##f
se necesita
\unset Staff.autoBeaming
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.
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
la propiedad fontSize
se deshace automáticamente después de la
segunda nota.
En el manual de Referencia de funcionamiento interno hay una descripción completa de todas las propiedades de contexto disponibles, consulte Tunable context properties.