| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Contexts for programmers
| B.6.1 Evaluación de contextos | ||
| B.6.2 Ejecutar una función sobre todos los objetos de la presentación |
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Context evaluation
Se pueden modificar los contextos durante la interpretación con código de Scheme. Dentro de un bloque de código de LilyPond, la sintaxis para esto es:
\applyContext función |
En código de Scheme, la sintaxis es:
(make-apply-context function) |
función debe ser una función de Scheme que toma un
único argumento, que es el contexto al que aplicarla. La función
puede acceder a, así como sobreescribir u establecer propiedades
de grobs s y propiedades de contextos. Cualquier acción tomada
por la función que dependa del estado del contexto, está limitada
al estado del contexto en el momento de llamar a la
función. Asimismo, los cambios efectuados por una llamada a
\applyContext permanecen en efecto hasta que se modifican
de nuevo directamente, o se revierten, incluso si han cambiado las
condiciones iniciales sobre las que dependen.
Las siguientes funciones de Scheme son útiles cuando se utiliza
\applyContext:
ly:context-propertyrecuperar el valor de una propiedad de contexto
ly:context-set-property!establecer el valor de una propiedad de contexto
ly:context-grob-definitionly:assoc-getrecuperar el valor de una propiedad de un grob
ly:context-pushpop-propertyhacer una sobreescritura temporal
(\temporary \override) o una reversión
(\revert) sobre una propiedad de un grob
El ejemplo siguiente recupera el valor actual de fontSize,
y a continuación lo dobla:
doubleFontSize = \applyContext #(lambda (context) (let ((fontSize (ly:context-property context 'fontSize))) (ly:context-set-property! context 'fontSize (+ fontSize 6)))) { \set fontSize = -3 b'4 \doubleFontSize b' }
El ejemplo siguiente recupera los colores actuales de los grobs
NoteHead, Stem y Beam, y a continuación los
modifica para que tengan un matiz menos saturado.
desaturate = \applyContext #(lambda (context) (define (desaturate-grob grob) (let* ((grob-def (ly:context-grob-definition context grob)) (color (ly:assoc-get 'color grob-def black)) (new-color (map (lambda (x) (min 1 (/ (1+ x) 2))) color))) (ly:context-pushpop-property context grob 'color new-color))) (for-each desaturate-grob '(NoteHead Stem Beam))) \relative { \time 3/4 g'8[ g] \desaturate g[ g] \desaturate g[ g] \override NoteHead.color = #darkred \override Stem.color = #darkred \override Beam.color = #darkred g[ g] \desaturate g[ g] \desaturate g[ g] }
Esto puede implementarse también como una función musical, con el
objeto de restringir las modificaciones a un único bloque de
música. Observe cómo se usa ly:context-pushpop-property
tanto como una sobreescritura temporal
(\temporary \override) como una reversión
(\revert):
desaturate = #(define-music-function (music) (ly:music?) #{ \applyContext #(lambda (context) (define (desaturate-grob grob) (let* ((grob-def (ly:context-grob-definition context grob)) (color (ly:assoc-get 'color grob-def black)) (new-color (map (lambda (x) (min 1 (/ (1+ x) 2))) color))) (ly:context-pushpop-property context grob 'color new-color))) (for-each desaturate-grob '(NoteHead Stem Beam))) #music \applyContext #(lambda (context) (define (revert-color grob) (ly:context-pushpop-property context grob 'color)) (for-each revert-color '(NoteHead Stem Beam))) #}) \relative { \override NoteHead.color = #darkblue \override Stem.color = #darkblue \override Beam.color = #darkblue g'8 a b c \desaturate { d c b a } g b d b g2 }
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] | [Arriba] | [Índice general] | [Índice] | [ ? ] |
@translationof Running a function on all layout objects
La manera más versátil de realizar el ajuste fino de un objeto es
\applyOutput, que funciona insertando un evento dentro del
contexto especificado (
(internals)ApplyOutputEvent sección ‘ApplyOutputEvent’ en Referencia de Funcionamiento Interno). Su
sintaxis es o bien
\applyOutput Contexto proc |
o bien
\applyOutput Context.Grob proc |
donde proc es una función de Scheme que toma tres
argumentos.
Al interpretarse, la función proc se llama para cada
objeto de presentación (con el nombre del grob Grob si se
especifica) que se encuentra en el contexto Contexto
en el tiempo actual, con los siguientes argumentos:
\applyOutput.
Además, la causa del objeto de presentación, es decir el objeto o
expresión musical que es responsable de haberlo creado, está en la
propiedad cause del objeto. Por ejemplo, para la cabeza de
una nota, éste es un evento
(internals)NoteHead sección ‘NoteHead’ en Referencia de Funcionamiento Interno, y para un
objeto plica, éste es un objeto
(internals)Stem sección ‘Stem’ en Referencia de Funcionamiento Interno.
He aquí una función que usar para \applyOutput; borra las
cabezas de las notas que están sobre la línea central y junto a
ella:
#(define (blanker grob grob-origin context) (if (< (abs (ly:grob-property grob 'staff-position)) 2) (set! (ly:grob-property grob 'transparent) #t))) \relative { a'4 e8 <<\applyOutput Voice.NoteHead #blanker a c d>> b2 }
Para que función se interprete en los niveles de
Score o de Staff utilice estas formas:
\applyOutput Score… \applyOutput Staff… |
| [ < ] | [ > ] | [ << ] | [ Subir ] | [ >> ] |
Este documento ha sido generado por gub el el 13 julio 2020 utilizando texi2html 1.82.
Otros idiomas: English, deutsch, français.
Acerca de la selección automática del idioma.