[ << Trucar la salida ] | [Arriba][Índice general][Índice][ ? ] | [ Trabajar en proyectos de LilyPond >> ] | ||
[ < Apariencia de los objetos ] | [ Subir : Apariencia de los objetos ] | [ Tamaño de los objetos > ] |
4.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.
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
:
{ \time 12/16 \override BarLine #'stencil = ##f c4 b8 c d16 c d8 | g, 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 se especifica mal, 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:
{ \time 12/16 \override Staff.BarLine #'stencil = ##f c4 b8 c d16 c d8 | g, a16 b8 c d4 e16 | e8 }
Ahora las barras de compás han desaparecido.
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)
. 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 '#
como parte del valor para introducir un vector, y el primer símbolo de
almohadilla #
se necesita, como siempre, para preceder el valor
en sí dentro de la instrucción \override
.
{ \time 12/16 \override Staff.BarLine #'break-visibility = #'#(#f #f #f) c4 b8 c d16 c d8 | g, a16 b8 c d4 e16 | e8 }
Y podemos ver que esto también quita todas las líneas divisorias.
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:
{ \time 12/16 \override Staff.TimeSignature #'transparent = ##t c4 b8 c d16 c d8 | g, a16 b8 c d4 e16 | e8 }
El compás ya no está, 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
:
{ \time 12/16 \override Staff.TimeSignature #'stencil = ##f c4 b8 c d16 c d8 | g, a16 b8 c d4 e16 | e8 }
y la diferencia es obvia: al establecer el sello al valor #f
quitamos el objeto por completo; al hacer el objeto transparent
lo dejamos donde está, pero lo hacemos invisible.
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 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 ‘normales’ que están
relacionados en la primera tabla de la
Lista de colores. Para
poner las líneas divisorias de color blanco, escribimos:
{ \time 12/16 \override Staff.BarLine #'color = #white c4 b8 c d16 c d8 | g, 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 función. Cuando se invoca, proporciona la lista de valores internos que se requieren para establecer el color a blanco. Los otros colores de la lista normal también son funciones. Para convencerse de que esto funciona, quizá quiera cambiar el color a una de las otras funciones de la lista.
La segunda forma de cambiar el color es utilizar la lista de nombres
de colores de X11 que aparecen en la segunda lista de
colors
Lista de colores. Sin embargo, éstos deben ir precedidos de otra función, que
convierte los nombres de colores de X11 en la lista de valores
internos, x11-color
, de la siguiente manera:
{ \time 12/16 \override Staff.BarLine #'color = #(x11-color 'white) c4 b8 c d16 c d8 | g, a16 b8 c d4 e16 | e8 }
Observe que en este caso la función x11-color
toma un símbolo
como argumento, así que el símbolo debe ir precedido de un apóstrofo y
los dos deben ir entre paréntesis.
Aún hay una tercera función, que convierte valores RGB en colores
internos: la función rgb-color
. Toma tres argumentos que dan
las intensidades de rojo, verde y azul. Cada uno de ellos puede tomar
valores entre 0 y 1. Por lo tanto, para establecer el color a rojo el
valor debe ser (rgb-color 1 0 0)
y para blanco debe ser
(rgb-color 1 1 1)
:
{ \time 12/16 \override Staff.BarLine #'color = #(rgb-color 1 1 1) c4 b8 c d16 c d8 | g, a16 b8 c d4 e16 | e8 }
Finalmente, existe también una escala de grises como parte del
conjunto de colores de X11. Varían desde el negro, 'grey0'
,
hasta el blanco, 'grey100
, en pasos de 1. Vamos a ilustrar esto
estableciendo todos los objetos de presentación de nuestro ejemplo a
varias gradaciones de gris:
{ \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) c4 b8 c d16 c d8 | g, 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][ ? ] | [ Trabajar en proyectos de LilyPond >> ] | ||
[ < Apariencia de los objetos ] | [ Subir : Apariencia de los objetos ] | [ Tamaño de los objetos > ] |