[ << Trucar la salida ] | [Arriba][Índice general][Índice] | [ Plantillas >> ] |
[ < Apariencia de los objetos ] | [ Subir : Apariencia de los objetos ] | [ La propiedad stencil (sello) > ] |
5.3.1 Visibilidad y color de los objetos
Dentro de un uso educativo de la música, podríamos desear imprimir una partitura con ciertos elementos omitidos como ejercicio para el alumno, a quien se le pide que los complete. A la manera de ejemplo sencillo, supongamos que el ejercicio es escribir las líneas divisorias que faltan en un fragmento musical. Pero las líneas divisorias normalmente se insertan automáticamente. ¿Cómo hacemos para que no se impriman?
Antes de enredarnos con esto, recordemos que las propiedades de los objetos se agrupan en lo que hemos llamado interfaces (véase Propiedades de los interfaces). Esto es simplemente agrupar las propiedades que se pueden usar juntas para trucar un objeto gráfico: si una de ellas se necesita para un objeto, también las otras. Así, ciertos objetos usan las propiedades de algunos interfaces, otros usan las de otros interfaces. Los interfaces que contienen las propiedades que un determinado grob necesita se encuentran relacionadas en el manual RFI al final de la página que describe dicho grob, y esas propiedades se pueden ver mirando dichos interfaces.
Hemos explicado cómo encontrar información sobre los grobs en
Propiedades de los objetos de presentación. Usando el mismo
enfoque, vamos al RFI para buscar el objeto de presentación que
imprime las líneas divisorias. A través del enlace Backend
y All layout objects encontramos que hay un objeto de
presentación llamado BarLine
. Entre sus propiedades se
encuentran dos que controlan la visibilidad:
break-visibility
y stencil
. Las líneas divisorias
también contemplan un número de interfaces, entre ellos el
grob-interface
, donde podemos encontrar las propiedades
transparent
y color
. Todas ellas pueden afectar la
visibilidad de las barras de compás (y, por supuesto, por
extensión, también la de muchos otros objetos de presentación).
Vamos a considerar cada uno de ellos por orden.
La propiedad stencil (sello) | ||
The break-visibility (visibilidad en el salto) | ||
La propiedad transparent (transparente) | ||
La propiedad color |
La propiedad stencil
(sello)
Esta propiedad controla la apariencia de las barras de compás
mediante la especificación del símbolo (o «glifo») que se debe
imprimir. Igual que como otras muchas propiedades, se puede
establecer de forma que no imprima nada ajustando su valor a
#f
. Vamos a probarlo, como antes, omitiendo el Contexto
implícito, Voice
:
\relative { \time 12/16 \override BarLine.stencil = ##f c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Las barras de compás todavía se imprimen. ¿Qué es lo que está
mal? Vuelva al RFI y mire de nuevo la página que ofrece las
propiedades del objeto BarLine. Al principio de la página dice
“Barline objects are created by: Bar_engraver” (los objetos
Barline se crean por el grabador Bar_engraver). Vaya a la página
del grabador Bar_engraver
siguiendo el enlace. Al final da
una lista de contextos en los que el grabador de líneas divisorias
opera. Todos ellos son del tipo Staff
, y así la razón de
que la instrucción \override
no funcionara como
esperábamos, es porque Barline
no se encuentra en el
contexto predeterminado Voice
. Si el contexto no se
especifica correctamente, la instrucción simplemente no funciona.
No se produce ningún mensaje de error, y no se registra nada en el
archivo log de registro. Vamos a intentar corregirlo escribiendo
el contexto correcto:
\relative { \time 12/16 \override Staff.BarLine.stencil = ##f c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Ahora las barras de compás han desaparecido. La operación de
fijar la propiedad stencil
al valor #f
es tan
frecuente que existe una abreviatura para ella, llamada
\omit
(omitir):
\relative { \time 12/16 \omit Staff.BarLine c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Sin embargo, observe que el establecimiento de la propiedad
stencil
al valor #f
produce errores cuando las se
requieren las dimensiones del objeto para un procesamiento
correcto. Por ejemplo, se generan errores si la propiedad
stencil
del objeto NoteHead
se establece al valor
#f
. Si es el caso, podemos en vez de ello utilizar la
función point-stencil
, que establece el sello a un objeto
con tamaño nulo:
\relative { c''4 c \once \override NoteHead.stencil = #point-stencil c4 c }
[ << Trucar la salida ] | [Arriba][Índice general][Índice] | [ Plantillas >> ] |
[ < La propiedad stencil (sello) ] | [ Subir : Visibilidad y color de los objetos ] | [ La propiedad transparent (transparente) > ] |
The break-visibility
(visibilidad en el salto)
Vemos en las propiedades de BarLine
que aparecen en el RFI
que la propiedad break-visibility
requiere un vector de
tres valores booleanos. Controlan respectivamente si las barras
de compás se imprimen al final de una línea, en mitad de una
línea, y al principio de las líneas. Para nuestro ejemplo,
queremos que todas las barras de compás se supriman, por lo que el
valor que necesitamos es #(#f #f #f)
(disponible también
bajo el nombre all-invisible
, todas invisibles). Vamos a
probarlo, recordando incluir el contexto de Staff
. Observe
también que al escribir este valor tenemos ##
antes del
paréntesis de apertura. Se necesita un #
como parte de la
sintaxis de las contantes vectoriales, y el primer símbolo de
almohadilla #
se necesita, como siempre, para preceder
el valor en sí dentro de la instrucción \override
.
\relative { \time 12/16 \override Staff.BarLine.break-visibility = ##(#f #f #f) c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Y podemos ver que esto también quita todas las líneas divisorias.
La propiedad transparent
(transparente)
En la relación de propiedades que se especifican en la página del
grob-interface
del RFI podemos ver que la propiedad
transparent
es un valor booleano. Esto se debe establecer
a #t
para hacer que el grob sea transparente. En el
ejemplo siguiente vamos a hacer que la indicación de compás, y no
las líneas divisorias, sea transparente. Para hacerlo tenemos que
buscar el nombre del grob de la indicación de compás. Volviendo a
la página ‘All layout objects’ del RFI, buscamos las propiedades
del objeto de presentación TimeSignature
. Se produce por
parte del grabador Time_signature_engraver
que como puede
comprobar vive dentro del contexto de Staff
y también
contempla el interface grob-interface
. Así pues, la
instrucción que hace transparente a la indicación de compás es:
\relative { \time 12/16 \override Staff.TimeSignature.transparent = ##t c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Una vez más, el establecimiento de la propiedad transparent
es una operación bastante frecuente, de modo que tenemos una
abreviatura llamada \hide
(ocultar):
\relative { \time 12/16 \hide Staff.TimeSignature c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
En ninguno de los dos casos aparece ya la indicación de compás,
pero esta instrucción deja una separación en el lugar donde antes
estaba la indicación de compás. Quizá esto es lo que queremos
para un ejercicio en que el alumno deba escribirlo, pero en otras
circunstancias esta separación podría no ser deseable. En vez de
eso, para quitarla, el stencil o «sello» de la indicación de
compás se debe establecer al valor #f
:
\relative { \time 12/16 \omit Staff.TimeSignature c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
y la diferencia es obvia: al establecer el sello al valor
#f
(posiblemente por medio de \omit
) quitamos el
objeto por completo; al hacer el objeto transparent
(lo que
puede hacerse utilizando \hide
) lo dejamos donde está, pero
lo hacemos invisible.
[ << Trucar la salida ] | [Arriba][Índice general][Índice] | [ Plantillas >> ] |
[ < La propiedad transparent (transparente) ] | [ Subir : Visibilidad y color de los objetos ] | [ Tamaño de los objetos > ] |
La propiedad color
Para finalizar, intentemos hacer invisibles las barras de compás pintándolas de color blanco (hay un problema relacionado, que consiste en que la línea divisoria blanca puede tapar o no tapar las líneas del pentagrama a las que cruza. Podrá observar en algunos de los ejemplos que aparecen a continuación, que esto sucede de forma impredecible. Los detalles sobre por qué esto ocurre así, y cómo controlarlo, se estudian en objetos de blanco Pintar los objetos de blanco; de momento estamos estudiando el color, por lo que le rogamos que acepte esta limitación por ahora).
El interface grob-interface
especifica que la propiedad del
color es una lista, pero no hay ninguna explicación sobre lo que
debe ir en esa lista. La lista que requiere es realmente una
lista de valores en unidades internas, pero para evitar tener que
saber cuáles son, se ofrecen varias vías para la especificación de
los colores. La primera forma es utilizar uno de los colores
‘CSS’ predefinidos que están relacionados en la
colores
Lista de colores. Para poner las líneas divisorias de color blanco,
escribimos:
\relative { \time 12/16 \override Staff.BarLine.color = "white" c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
y de nuevo podemos comprobar que las barras de compás no son visibles. Observe que white no viene precedido de un apóstrofo: no es un símbolo, sino una cadena de caracteres, mapeado a una lista predefinida de valores internos. A este respecto, la sintaxis de LilyPond refleja el lenguaje CSS que se usa habitualmente en las páginas web; además de los nombres predefinidos, podemos especificar un código de color hexadecimal:
\relative { \time 12/16 \override Staff.BarLine.color = "#FFFFFF" c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Podemos incluso definir dicho color como variable, y después usar esa variable como una definición de propiedad. Como es al mismo tiempo una variable de LilyPond y un objeto de Scheme, puede ir prefijada por una barra invertida o un símbolo de almohadilla sin distinción alguna:
whiteVar = "#FFFFFF" \relative { \time 12/16 \override Staff.BarLine.color = \whiteVar c''4 b8 c d16 c d8 | \override Staff.BarLine.color = #whiteVar g,8 a16 b8 c d4 e16 | e8 }
Otra manera de añadir colores a nuestra partitura es mediante el
uso de una función. Existen dos funciones útiles para ello; una
es la función x11-color
, que utilizaremos más adelante. La
otra es la función rgb-color
, que presenta la lógica
interna de LilyPond: toma tres argumentos que dan las intensidades
de los colores rojo, verde y azul. Cada uno de ellos toma valores
entre 0 y 1. Así pues, para establecer el color a rojo, el valor
sería (rgb-color 1 0 0)
y para el blanco sería
(rgb-color 1 1 1)
:
\relative { \time 12/16 \override Staff.BarLine.color = #(rgb-color 1 1 1) c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Observe que en este caso, toda la llamada a la función debe estar
entre paréntesis. Lo mismo vale para la función x11-color
que pasamos anteriormente por alto.
x11-color
, de nuevo, lleva a cabo una asignación de nombres
de color predefinidos a valores internos, pero ofrece muchas más
alternativas que los nombres de CSS, como se ve en
Lista de colores). Por ejemplo, el conjunto de colores de
X11 incluye una completa gama de tonos de gris, cuyos nombres van
desde el negro, 'grey0
, hasta el blanco, 'grey100
,
en pasos de 1. Vamos a ilustrar esto estableciendo todos los
objetos de nuetro ejemplo en distintos tonos de gris:
\relative { \time 12/16 \override Staff.StaffSymbol.color = #(x11-color 'grey30) \override Staff.TimeSignature.color = #(x11-color 'grey60) \override Staff.Clef.color = #(x11-color 'grey60) \override Voice.NoteHead.color = #(x11-color 'grey85) \override Voice.Stem.color = #(x11-color 'grey85) \override Staff.BarLine.color = #(x11-color 'grey10) c''4 b8 c d16 c d8 | g,8 a16 b8 c d4 e16 | e8 }
Observe los contextos asociados con cada uno de los objetos de presentación. Es importante que estén correctamente escritos, o las instrucciones ¡no funcionarán! Recuerde que el contexto es aquel en que se encuentra el grabador correspondiente. El contesto predeterminado para los grabadores puede encontrarse empezando por el objeto de presentación, de ahí al grabador que lo produce, y en la página del grabador del RFI aparece en qué contexto se puede encontrar normalmente el grabador.
[ << Trucar la salida ] | [Arriba][Índice general][Índice] | [ Plantillas >> ] |
[ < La propiedad transparent (transparente) ] | [ Subir : Visibilidad y color de los objetos ] | [ Tamaño de los objetos > ] |