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

[image of music]

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
}

[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 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

[image of music]

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
}

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

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

[image of music]

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.


Referencia de la notación de GNU LilyPond v2.25.20 (rama de desarrollo).