Referencia de la notación de GNU LilyPond: 5.3.2 La instrucción \set

### 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.

#### LilyPond — Referencia de la notación v2.22.2 (rama estable).