[ << Conceptos fundamentales ] | [Arriba][Índice general][Índice] | [ Trucar la salida >> ] |
[ < Explicación de los grabadores ] | [ Subir : Contextos y grabadores ] | [ Añadir y eliminar grabadores > ] |
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 el contexto en curso (normalmente 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í.
nombreDeLaPropiedad | Tipo | Función | Valor de ejemplo |
---|---|---|---|
extraNatural | Booleano | Si es verdadero, poner becuadros adicionales antes de las alteraciones | #t , #f |
currentBarNumber | Entero | Ajustar el número del compás actual | 50 |
doubleSlurs | Booleano | Si es verdadero, imprimir ligaduras de expresión por encima y por debajo de las notas | #t , #f |
instrumentName | Texto | Establecer el nombre del pentagrama, situado a la izquierda | "Cello I" |
fontSize | Real | Aumentar o disminuir el tamaño de la fuente tipográfica | 2.4 |
stanza | Texto | Establecer el texto que se imprime antes del comienzo de una estrofa | "2" |
donde un valor Booleano es verdadero (#t
, True) o falso
(#f
, False), un Entero es un número entero positivo, un
número Real es un número decimal positivo o negativo, y el texto
se encierra entre comillas dobles. Observe la aparición de
signos de cuadradillo, (#
), en dos lugares diferentes:
como parte del valor Booleano antes de la t
o la f
,
y antes del valor dentro de la sentencia \set
. Así
pues, cuando se está escribiendo un valor Booleano, hay que
escribir dos signos de cuadradillo, por ejemplo: ##t
.
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 } >>
Recuerde que el nombre del contexto predeterminado es
Voice
, así que la segunda instrucción \set
establece la propiedad clefGlyph
del contexto
Voice
a clefs.F
, pero como LilyPond no busca esta
propiedad en el contexto Voice
, no se realiza ninguna
acción. Esto no es un error, y no se registra ningún mensaje en
el archivo Log de registro de errores.
De forma parecida, si el nombre de la propiedad se escribe con
alguna falta, no se produce ningún mensaje de error, y claramente
la acción esperada no puede tener lugar. De hecho, se puede
establecer cualquier ‘property’ (ficticia) usando cualquier
nombre que queramos en cualquier contexto que exista, mediante el
uso de la instrucción \set
. Pero si el nombre no es
conocido para LilyPond, no producirá ninguna acción. Algunos
editores de texto que apoyan a los archivos de entrada de
LilyPond de manera especial, documentan los nombres de
propiedades con viñetas cuando pasamos sobre ellos con el puntero
del ratón, como JEdit con la extensión LilyPondTool, o resaltan
los nombres de propiedades desconocidas de manera diferente, como
ConTEXT. Si no se utiliza un editor con tales posibilidades, se
recomienda comprobar la corrección del nombre de la propiedad en
el manual de Referencia de funcionamiento interno: véase
Tunable context properties o
Contexts.
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
pentagramas.
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 } >>
y esto los desactivará en todos los pentagramas:
<< \new Staff \relative { aeses'2 aes } \new Staff \relative { \set Score.extraNatural = ##f aeses'2 aes } >>
Como un ejemplo más, si se establece clefTransposition
dentro del contexto de Score
, éste cambia inmediatamente
el valor de la transposición en todos los pentagramas en curso y
establece un nuevo valor predeterminado que se aplicará a todos
los pentagramas.
La instrucción opuesta, \unset
, tiene el efecto de
suprimir la propiedad del contexto, lo que ocasiona que la
mayoría de las propiedades vuelvan a su valor predeterminado.
Normalmente no es necesario el uso de \unset
, pues una
nueva instrucción \set
hará el ajuste deseado.
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 cambio se toma a
partir del valor predeterminado, no el 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 | }
Hemos podido ver cómo establecer los valores de diversos tipos de
propiedad diferentes. Observe que los números enteros y reales
van siempre precedidos de un símbolo de cuadradillo, #
,
mientras que un valor booleano verdadero o falso se especifica
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 predeterminado de las propiedades de contexto se puede
establecer en el momento en que se crea el contexto. A veces
esta forma de establecer el valor de una propiedad es mucho más
clara, si ha de quedar fijo durante todo el tiempo que dure 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
predeterminados de las propiedades. Por ejemplo, si queremos
suprimir la impresión de becuadros adicionales para toda la
duración de un pentagrama, podemos escribir:
\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 } } >>
Las propiedades ajustadas de esta manera aún pueden cambiarse
dinámicamente utilizando \set
y ser devueltas al valor
predeterminados que se estableció en el bloque \with
mediante \unset
.
Así pues, si la propiedad fontSize
se ajusta dentro de una
cláusula \with
, tiene el efecto de reiniciar el valor
predeterminado del tamaño de la fuente tipográfica. Si más tarde
se modifica con \set
, este nuevo valor predeterminado
puede restablecerse con la instrucción \unset fontSize
.
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 } } }
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 } } }
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, La instrucción set.
Referencia de funcionamiento interno: Contexts, Tunable context properties.
[ << Conceptos fundamentales ] | [Arriba][Índice general][Índice] | [ Trucar la salida >> ] |
[ < Explicación de los grabadores ] | [ Subir : Contextos y grabadores ] | [ Añadir y eliminar grabadores > ] |