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
[image of music]

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
  }
>>
[image of music]

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
[image of music]

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
  }
>>
[image of music]

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]

Referencia de la notación de GNU LilyPond v2.25.30 (development-branch).