4.3.4 Modificar las propiedades de los contextos

Los contextos se responsabilizan de mantener los valores de un cierto número de properties de contexto. Muchas de ellas se pueden cambiar para influir en la interpretación del código de entrada y cambiar así la apariencia de la salida impresa. Se modifican mediante la instrucción \set. Esta instrucción toma la forma siguiente:

\set NombreDelContexto.nombreDeLaPropiedad = valor

Donde el NombreDelContexto es normalmente Score, Staff o Voice. Se puede omitir, en cuyo caso se supone que es Voice.

Los nombres de las propiedades de contexto consisten en palabras unidas sin ningún guión o barra baja, y donde todas las palabras excepto la primera empiezan en mayúscula. A continuación podemos ver algunos ejemplos de nombres de propiedades utilizadas con frecuencia. Hay muchas más que las que se muestran aquí.

Nombre de la propiedadTipoFunciónValor de ejemplo
extraNaturalbooleanoSi es verdadero, poner becuadros adicionales antes de las alteraciones##t, ##f
currentBarNumberenteroAjustar el número del compás actual50
doubleSlursBooleanoSi es verdadero, imprimir ligaduras de expresión por encima y por debajo de las notas##t, ##f
instrumentNametextoEstablecer el nombre del pentagrama, situado a la izquierda\markup { ... }
fontSizerealAumentar o disminuir el tamaño de la fuente tipográfica2.4
stanzatextoEstablecer el texto que se imprime antes del comienzo de una estrofa"2"

En la tabla anterior, un valor Booleano es verdadero (#t, True) o falso (#f, False), un entero es un número entero (normalmente positivo), un número real es un número decimal positivo o negativo, y el texto es una cadena que se encierra entre comillas dobles. Observe el uso de un cuadradillo adicionale, (‘#’), que debe usarse siempre que siga una expresión de Scheme.

Antes de poder establecer cualquiera de estas propiedades, tenemos que saber en qué contexto operan. A veces es algo obvio, pero en ocasiones puede ser algo enrevesado. Si especificamos un contexto equivocado, no se produce ningún mensaje de error, pero el funcionamiento esperado no tendrá lugar. Por ejemplo, la propiedad clefGlyph (dibujo de la clave) vive claramente dentro del contexto de Staff, puesto que es el glifo de la clave del pentagrama lo que se quiere cambiar. En este ejemplo, la primera clave del pentagrama se imprime correctamente, pero no la segunda (que imprime la clave predeterminada de Sol en lugar de la de Fa), porque hemos omitido el nombre del contexto.

<<
  \new Staff \relative {
    \set Staff.clefGlyph = "clefs.C"
    c''2 c
  }
  \new Staff \relative {
    \set clefGlyph = "clefs.F"  % Wrong!
    d'2 d
  }
>>
[image of music]

La segunda instrucción \set establece la propiedad Voice.clefGlyph a clefs.F, pero como LilyPond no cuenta con clefGlyph en el contexto Voice, ajustar el valor en ese lugar no tiene ningún efecto. Esto no es un error, y no se produce ningún mensaje.

La propiedad clefGlyph tendrá efecto solamente si se establece dentro del contexto Staff, pero algunas propiedades se pueden establecer en más de un contexto. Por ejemplo, la propiedad extraNatural está establecida por defecto al valor #t (verdadero) para todos los pentagramas. Si se establece a #f (falso) en un contexto de Staff determinado, se aplicará solamente a las alteraciones de ese pentagrama. Si se establece a falso en el contexto de la partitura, Score, se aplicará a todos los contextos de pentagrama donde no hubiera sido establecido.

Así, esto desactivará los becuadros adicionales en un pentagrama:

<<
  \new Staff \relative {
    aeses'2 aes
  }
  \new Staff \relative {
    \set Staff.extraNatural = ##f
    aeses'2 aes
  }
>>
[image of music]

y esto los desactivará en todos los pentagramas:

<<
  \new Staff \relative {
    aeses'2 aes
  }
  \new Staff \relative {
    \set Score.extraNatural = ##f
    aeses'2 aes
  }
>>
[image of music]

Como un ejemplo más, si se establece clefTransposition dentro del contexto de Score, se modifica la transposición para los contextos de Staff actuales y futuros en donde no esté establecido de otra manera.

El comando opuesto, \unset, elimina la propiedad del contexto. Con frecuencia, otro comando \set puede lograr el mismo resultado observable que un \unset. La principal consideración es si el valor del contexto circundante debería mostrarse. \set lo enmascara y \unset lo hace visible.

Las instrucciones \set y \unset pueden aparecer en cualquier lugar del archivo de entrada y tendrán efecto a partir del tiempo en que se encuentran y hasta el final de la partitura o hasta que la propiedad se establezca de nuevo mediante \set o \unset. Probemos a modificar el tamaño de la fuente tipográfica, lo que afecta al tamaño de las cabezas de las notas (entre otras cosas) varias veces. El valor se establece de forma relativa al tamaño de fuente predeterminado, no al valor en curso.

\relative {
  c'4 d
  % make note heads smaller
  \set fontSize = -4
  e4 f |
  % make note heads larger
  \set fontSize = 2.5
  g4 a
  % return to default size
  \unset fontSize
  b4 c |
}
[image of music]

Hemos podido ver cómo establecer los valores de diversos tipos de propiedad diferentes. Observe que las expresiones de Scheme van siempre precedidas de un símbolo de cuadradillo, ‘#’, de forma que los valores booleanos ‘verdadero’ y ‘falso’ se especifican respectivamente mediante ##t y ##f, con dos cuadradillos. Una propiedad de texto se debe encerrar entre comillas dobles, como antes, aunque veremos más adelante que el texto realmente se puede especificar de una forma mucho más general utilizando la potentísima instrucción markup.

Cambiar las propiedades de un contexto con \with

El valor de las propiedades de contexto se puede establecer en el momento en que se crea el contexto. Cuando se crea un contexto con una instrucción \new puede ir inmediatamente seguido de un bloque \with { … } en el que se establecen los valores iniciales de las propiedades. Por ejemplo, si quisiéramos suprimir la impresión de becuadros adicionales, escribiríamos

\new Staff \with { extraNatural = ##f }

de la siguiente forma:

<<
  \new Staff {
    \relative {
      gisis'4 gis aeses aes
    }
  }
  \new Staff \with { extraNatural = ##f } {
    \relative {
      gisis'4 gis aeses aes
    }
  }
>>
[image of music]

\with puede ser una forma clara de establecer valores que se quieren mantener fijos para toda la duración del contexto. Sin embargo, no hace nada para forzarlo; las propiedades inicializadas de esta manera aún pueden cambiarse dinámicamente utilizando \set y \unset.

Cambiar las propiedades de un contexto con \context

Los valores de propiedad de los contextos se pueden establecer para todos los contextos de un tipo determinado, como por ejemplo todos los contextos de Staff, con una única instrucción. El tipo de contexto se identifica mediante la utilización del nombre de su tipo, como Staff, precedido de una barra invertida: \Staff. El enunciado que establece el valor de la propiedad es el mismo que el que está en un bloque \with, presentado anteriormente. Se coloca en un bloque \context dentro de un bloque \layout. Cada bloque \context afecta a todos los contextos del tipo especificado a lo largo del bloque \score o \book en el que aparece el bloque \layout. A continuación presentamos un ejemplo que muestra el formato:

\score {
  \new Staff {
    \relative {
      cisis''4 e d cis
    }
  }
  \layout {
    \context {
      \Staff
      extraNatural = ##t
    }
  }
}
[image of music]

Si se quiere aplicar la sobreescritura de propiedades a todos los pentagramas de la partitura:

\score {
  <<
    \new Staff {
      \relative {
        gisis'4 gis aeses aes
      }
    }
    \new Staff {
      \relative {
        gisis'4 gis aeses aes
      }
    }
  >>
  \layout {
    \context {
      \Score
      extraNatural = ##f
    }
  }
}
[image of music]

Las propiedades de contexto establecidas de esta forma se pueden sobreescribir para ejemplares concretos de contextos mediante enunciados dentro de un bloque \with, y mediante instrucciones \set intercaladas dentro de enunciados musicales.

Véase también

Referencia de la notación: Cambiar los valores por omisión de los contextos, Set and unset.

Referencia de funcionamiento interno: Contexts, Tunable context properties.


Manual de aprendizaje de GNU LilyPond v2.25.29 (development-branch).