35.2 Las instrucciones \set y \unset
La sintaxis de la instrucción \set es
\set contexto.propiedad = valor
donde valor debe ir precedido del carácter de almohadilla ‘#’ si es un objeto de Scheme.
La sintaxis de su contrapartida, la instrucción \unset, es
\unset contexto.propiedad
Esto elimina una definición anteriormente establecida de la
propiedad del contexto. Cualquier propiedad que haya
sido establecida dentro del contexto incluido no resulta
alterada por un \unset en el mismo contexto incluido.
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 la
propiedad de contexto skipBars se ha establecido a
#t:
R1*2 \set Score.skipBars = ##t R1*2![]()
Si el argumento contexto se deja sin especificar, entonces
la propiedad se establece en el contexto ‘de nivel inferior’
actual (normalmente ChordNames, Voice,
TabVoice, o Lyrics).
<< \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 un
engraver que usa la propiedad que querríamos modificar: por
ejemplo, intentar ajustar el valor de la propiedad skipBars
del contexto predeterminado del nivel más bajo, no tendrá ningún
efecto, porque skipBars es una propiedad del contexto
Score, no de Voice.
R1*2 \set skipBars = ##t R1*2![]()
Los contextos son jerárquicos; cualquier cambio especificado para
un contexto que encierra a otros (p.ej. Staff) se aplica
también a todas las Voices dentro de ese contexto
Staff en curso (suponiendo, por descontado, que el propio
contexto Voice no tiene una sobreescritura).
Todos los contextos heredan los ajustes que estén establecidos en
el contexto de nivel más alto Global (a través de
\grobdescriptions), aunque algunos de esos valores
predeterminados resultan sobreescritos dentro de sus propias
definiciones de contexto.
<< \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.
Tal y como se ha descrito anteriormente, \unset restaura el
valor predeterminado de una propiedad de contexto. Sin embarco, a
veces es útil cambiar un valor durante un tiempo, y después
devolverlo al valor utilizado anteriormente. Para este propósito
existen las dos instrucciones \pushContextProperty y
\popContextProperty: la primera inserta el valor actual en
una pila, mientras que la segunda retira un valor a partir de la
pila y restaura la propiedad a ese valor.
{ c' \pushContextProperty Staff.fontSize \set Staff.fontSize = 3 c' \pushContextProperty Staff.fontSize \set Staff.fontSize = 6 c' \popContextProperty Staff.fontSize c' \popContextProperty Staff.fontSize c' }![]()
![[image of music]](../af/lily-b9bf26a8.png)
![[image of music]](../09/lily-c2c78f88.png)
![[image of music]](../67/lily-7555b083.png)
![[image of music]](../48/lily-dbb5c5ca.png)
![[image of music]](../1d/lily-f312dbf7.png)