[ << Canvi dels valors predeterminats ] | [Part superior][Continguts][Índex] | [ Taules del manual sobre notació >> ] |
[ < Ús d'alterBroken ] | [ Amunt : Ajustaments avançats ] | [ Ús de les funcions musicals > ] |
5.5.6 Contenidors unpure-pure
Els contenidors ‘unpure-pure’ (purs i no purs) són útils per a
la sobreescriptura dels càlculs de l’espaiat a l’eix Y
(concretament Y-offset
i Y-extent
) amb una funció de
l’Scheme en comptes d’un literal, és a dir, un nombre o una
parella de nombres.
Per certs objectes gràfics, les dimensions Y-extent
estan
basades en la propietat stencil
, la sobreescriptura de la
propietat de segell d’aquests objectes gràfics requereix una
sobreescriptura addicional de Y-extent
amb un contenidor
unpure-pure. Quan una funció sobreescriu una dimensió
Y-offset
i/o Y-extent
se suposa que això dispara els
càlculs dels salts de línia prematurament durant la compilació.
Així doncs, la funció no s’avalua en absolut (retornant en general
un valor de ‘0’ o ‘'(0 . 0)’) cosa que pot ocasionar
col·lisions. Una funció ‘pura’ no afecta a les propietats,
objectes o suicidis de grobs, i per això els seus valors
relacionats amb l’eix Y sempre s’avaluen correctament.
Actualment hi ha unes treinta funcions que ja es consideren ‘puras’ i els contenidors Unpure-pure són una manera d’establir funcions que no estan a la llista com ‘pures’. La funció ‘pura’ s’avalua abans de qualsevol salt de línia i així l’espaiat horitzontal es pot ajustar ‘a temps’. La funció ‘impura’ s’avalua aleshores després del salt de línia.
Nota: Donat que és difícil saber sempre quines funcions estan
en aquesta llista, recomanem que qualsevol funció ‘pura’ que
estem creant no utilitzeu els grobs Beam
o
VerticalAlignment
.
Un contenidor ‘unpure-pure’ es construeix de la manera següent:
(ly:make-unpure-pure-container f0 f1)
on f0
és una funció que agafa n arguments (n >=
1) i el primer argument sempre ha de ser el grob. Aquesta és
la funció que dóna el resultat real. f1 és la funció que
s’etiqueta com a ‘pura’ que agafa n + 2 arguments. Un
altre cop, el primer argument ha de ser sempre el grob però els
arguments segon i tercer són arguments d’‘inici’ i de ‘final’.
inici i final són, a tots els efectes, valors muts que
sols tenen importància per als objectes d'extensió
(o
sigui: Hairpin
, regulador, o Beam
, barra), que poden
retornar diferents estimacions d’altura basades en una columna
d’inici i una de final.
La resta són els altres arguments per a la primera funció (que pot no ser cap si n = 1).
El resultat de la segona funció s’usa com una aproximació del valor necessari, que s’usa aleshores per la primera funció per obtenir el valor real que s’usa a continuació per a l’ajustament de precisió molt més tardà durant el procés d’espaiat.
#(define (square-line-circle-space grob) (let* ((pitch (ly:event-property (ly:grob-property grob 'cause) 'pitch)) (notename (ly:pitch-notename pitch))) (if (= 0 (modulo notename 2)) (make-circle-stencil 0.5 0.0 #t) (make-filled-box-stencil '(0 . 1.0) '(-0.5 . 0.5))))) squareLineCircleSpace = { \override NoteHead.stencil = #square-line-circle-space } smartSquareLineCircleSpace = { \squareLineCircleSpace \override NoteHead.Y-extent = #(ly:make-unpure-pure-container ly:grob::stencil-height (lambda (grob start end) (ly:grob::stencil-height grob))) } \new Voice \with { \remove Stem_engraver } \relative c'' { \squareLineCircleSpace cis4 ces disis d \smartSquareLineCircleSpace cis4 ces disis d }
En el primer compàs, sense el contenidor unpure-pure, el motor d’espaiat no coneix l’amplada del cap de la nota i permet que col·lisioni amb les alteracions accidentals. En el segon compàs, el motor d’espaiat coneix l’amplada dels caps de les notes i evita la col·lisió mitjançant l’allargament de la línia en la mesura adequada.
Normalment, per als càlculs simples es poden usar funcions gairebé
idèntiques tant per a les parts ‘no pura’ i ‘pura’, simplement
canviant el nombre d’arguments que es passen a, i l’àmbit de la
funció. Aquest cas d’utilització és prou suficient com perquè
ly:make-unpure-pure-container
construeixi aquesta segona
funció de forma predeterminada quan es crida amb sols un argument
de funció.
Nota: Si una funció està caracteritzada com a ‘pura’ i resulta que no ho és, el resultat pot ser inesperat.
[ << Canvi dels valors predeterminats ] | [Part superior][Continguts][Índex] | [ Taules del manual sobre notació >> ] |
[ < Ús d'alterBroken ] | [ Amunt : Ajustaments avançats ] | [ Ús de les funcions musicals > ] |