4.3.1 Visibilitat i color dels objectes

Dins d’un ús educatiu de la música, podríem desitjar imprimir una partitura amb certs elements omesos com a exercici per a l’alumne, a qui se’l demana que els completi. Com a exemple senzill, suposem que l’exercici és escriure les línies divisòries que falten a un fragment musical. Però les línies divisòries normalment s’insereixen automàticament. Com fem perquè no s’imprimeixin?

Abans d’embolicar-nos amb això, recordem que les propietats dels objectes s’agrupen en el que hem anomenat interfaces (vegeu Propietats de les interfícies). Això és simplement agrupar les propietats que es poden usar juntes per ajustar un objecte gràfic: si cal una d’elles per a un objecte, també les altres. Així, certs objectes usen les propietats d’algunes interfícies, uns altres usen les d’unes altres interfícies. Les interfícies que contenen les propietats que un determinat objecte gràfic (grob) necessita es troben relacionades al manual RFI al final de la pàgina que descriu aquest objecte gràfic, i aquestes propietats es poden veure mirant aquestes interfícies.

Hem explicat com trobar informació sobre els objectes gràfics en Propietats dels objectes de presentació. Usant el mateix enfoc, anem al RFI per buscar l’objecte de presentació que imprimeix les línies divisòries. A través de l’enllaç Backend i All layout objects trobem que hi ha un objecte de presentació anomenat BarLine. Entre les seves propietats es troben dos que controlen la visibilitat: break-visibility i stencil. Les línies divisòries també contemplen un nombre de interfícies, entre elles transparent i color. Totes elles poden afectar la visibilitat de les barres de compàs (i, per suposat, per extensió, també la de molts altres objectes de presentació). Anem a considerar cadascú d’ells en ordre.


La propietat stencil (segell)

Aquesta propietat controla l’aparença de les barres de compàs mitjançant l’especificació del símbol (o «glif») que s’ha d’imprimir. Igual que amb altres moltes propietats, es poden establir de forma que no imprimeixi res ajustant el seu valor a #f. Comprovem-ho, com abans, ometent el context implícit, Voice:

\relative {
  \time 12/16
  \override BarLine.stencil = ##f
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Les barres de compàs encara s’imprimeixen. Què és el està malament? Torneu al RFI i mireu un altre cop la pàgina que ofereix les propietats de l’objecte BarLine. Al principi de la pàgina diu “Barline objects are created by: Bar_engraver” (els objecte Barline es creen pel gravador Bar_engraver). Aneu a la pàgina del gravador Bar_engraver seguint l’enllaç. Al final dóna una llista de contextos en els quals opera el gravador de línies divisòries. Tots ells són del tipus Staff, i així la raó que l’ordre \override no funcionarà com esperàvem, és perquè Barline no es troba en el context predeterminat Voice. Si el context no s’especifica correctament, l’ordre simplement no funciona. No es produeix cap missatge d’error, i no es registra res al fitxer log de registre. Anem a intentar corregir-lo escrivint el context correcte:

\relative {
  \time 12/16
  \override Staff.BarLine.stencil = ##f
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Ara les barres de compàs han desaparegut. L’operació de fixar la propietat stencil al valor #f és tan freqüent que existeix una abreviatura per a ella, anomenada \omit (ometre):

\relative {
  \time 12/16
  \omit Staff.BarLine
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Tot i així, observeu que l’establiment de la propietat stencil al valor #f produeix errors quan calen les dimensions de l’objecte per a un processament correcte. Per exemple, es generen errors si la propietat stencil de l’objecte NoteHead s’estableix al valor #f. Si és el cas, podem en comptes d’això utilitzar la funció point-stencil, que estableix el segell a un objecte amb mida nul·la:

\relative {
  c''4 c
  \once \override NoteHead.stencil = #point-stencil
  c4 c
}

[image of music]


La propietat break-visibility (visibilitat en els salts)

A les propietats de BarLine que apareixen en el RFI veiem que la propietat break-visibility requereix un vector de tres valors booleans. Controlen respectivament si les barres de compàs se imprimeixen al final d’una línia, a la meitat d’una línia, i al principi de les línies. Per al nostre exemple, volem que totes les barres de compàs se suprimeixin, per la qual cosa el valor que ens cal és #(#f #f #f) (disponible també sota el nom all-invisible, totes invisibles). Provem-ho, tot recordant incloure el context de Staff. Observeu també que en escriure aquest valor tenim ## abans del parèntesis d’obertura. Cal un # com a par de la sintaxi de les constants vectorials, i el primer símbol de coixinet # cal, com sempre, per precedir el valor en sí dins de l’ordre \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
}

[image of music]

I podem veure que això també elimina totes les línies divisòries.


La propietat transparent

En la relació de propietats que s’especifiquen a la pàgina del grob-interface del RFI podem veure que la propietat transparent és un valor booleà. Això s’ha d’establir a #t per fer que el grob sigui transparent. A l’exemple següent farem que la indicació de compàs, i no les línies divisòries, sigui transparent. Per fer-lo hem de buscar el nom de l’objecte gràfic de la indicació de compàs. Tornant a la pàgina ‘All layout objects’ del RFI, busquem les propietats de l’objecte de presentació TimeSignature. El produeix el gravador Time_signature_engraver que com podeu comprovar viu dins del context Staff y també contempla la interfície grob-interface. Així doncs, l’ordre que fa transparent la indicació de compàs és:

\relative {
  \time 12/16
  \override Staff.TimeSignature.transparent = ##t
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Un cop més, l’establiment de la propietat transparent és una operació força freqüent, de manera que tenim una abreviatura anomenada \hide (amagar):

\relative {
  \time 12/16
  \hide Staff.TimeSignature
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

En cap dels dos casos apareix ja la indicació de compàs, però aquesta ordre deixa una separació al lloc on abans hi havia la indicació de compàs. Potser això és el que volem per a un exercici en el qual l’alumne ha d’escriure’l, però en altres circumstàncies aquesta separació podria no ser desitjable. En comptes d’això, per treure-la, el stencil o «segell» de la indicació de compàs s’ha d’establir 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
}

[image of music]

i la diferència és òbvia: en establir el segell al valor #f (possiblement per mitjà de \omit traiem l’objecte completament; en fer l’objecte transparent (el que es pot fer utilitzant \hide) el deixem on és, però el fem invisible.


La propietat color

Per finalitzar, intentem fer invisibles les barres de compàs pintant-les de color blanc (hi ha un problema relacionat, que consisteix que la línia divisòria blanca pot tapar o no tapar les línies del pentagrama a les que creua. Podreu observar en alguns dels exemples que apareixen a continuació, que això succeeix de forma impredictible. Els detalls de perquè passa això, i com controlar-ho, s’estudien a Pintar els objectes de blanc; de moment estem estudiant el color, per la qual cosa us preguem que per ara accepteu aquesta limitació).

La interfície grob-interface especifica que la propietat del color és una llisa, però no hi ha cap explicació sobre el que ha d’anar a aquesta llista. La llista que requereix és realment una llista de valors en unitats internes, però per evitar tenir que saber quines són, s’ofereixen diverses vies per a l’especificació dels colors. La primera via és utilitzar un dels colors ‘normals’ que estan relacionats amb la primera taula de la Llista de colors. Per a posar les línies divisòries de color blanc, escrivim:

\relative {
  \time 12/16
  \override Staff.BarLine.color = #white
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

i de nou podem comprovar que les barres de compàs no són visibles. Observeu que white no ve precedit d’un apòstrof: no és un símbol, sinó una variable. Quan s’avalua, proporciona la llista de valors interns que es requereixen per establir el color a blanc. Els altres colors de la llista normal també són variables. Per convèncer-vos que això funciona, potser voleu canviar el colro d’una de les altres variables de la llista.

La segona via de canviar el color és utilitzar la llista de noms de colors de X11 que apareixen a la segona llista de Llista de colors. De totes maneres, es fan correspondre als valors reals per mitjà de la funció x11-color que converteix els símbols de color de X11 a la llista de valors interns d’aquests colors:

\relative {
  \time 12/16
  \override Staff.BarLine.color = #(x11-color 'white)
  c''4 b8 c d16 c d8 |
  g,8 a16 b8 c d4 e16 |
  e8
}

[image of music]

Observeu que en aquest cas la funció x11-color agafa un símbol com argument, de manera que el símbol ha d’anar precedit per un apòstrof per evitar que resulti avaluat com si fos una variable, i tota la crida de la funció s’ha de tancar entre parèntesis.

Encara hi ha una altra funció, que converteix valors RGB en colors interns: la funció rgb-color. Agafa tres arguments que donen les intensitats de vermell, verd i blau. Cada u d’ells pot agafar valors entre 0 i 1. Per tant, per establir el color a vermell el valor ha de ser (rgb-color 1 0 0) i per a blanc ha de ser (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
}

[image of music]

Finalment, hi ha també una escala de grisos com a part del conjunt de colors de X11. Varien des del negre, 'grey0, fins el blanc, 'grey100, en passos d’1. Il·lustrarem això establint tots els objectes de presentació del nostre exemple a diverses gradacions 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
}

[image of music]

Observeu els contextos associats amb cada un dels objectes de presentació. És important que estiguin correctament escrits, o les ordres no funcionaran! Recordeu que el context és aquell en el qual es troba el gravador corresponent. El context predeterminat per als gravadors pot trobar-se començant per l’objecte de presentació, això porta al gravador que el produeix, i a la pàgina del gravador del RFI apareix en quin context es pot trobar normalment el gravador.


Altres idiomes: English, česky, deutsch, español, français, italiano, 日本語, nederlands.
Quant a selecció automàtica de l'idioma.

LilyPond — Manual d’aprenentatge v2.19.28 (branca de desenvolupament).