5.1.7 Orden de disposición de los contextos
Los contextos se disponen en un sistema normalmente desde arriba hacia abajo en el orden en que se encuentran en el archivo de entrada. Cuando los contextos se anidan unos dentro de otros, el contexto exterior incluye a los contextos anidados tal y como se especifica en el archivo de entrada, siempre y cuando los contextos interiores estén incluidos en la lista “accepts” del contexto externo. Los contextos anidados que no está nincluidos en la lista “accepts” del contexto externo se recolocan debajo del contexto externo en lugar de anidarse dentro de él.
La lista “accepts” de un contexto se puede cambiar con las
instrucciones \accepts
(acepta) o \denies
(niega).
\accepts
añade un contexto a la lista “accepts” y
\denies
elimina un contexto de la lista.
Por ejemplo, un grupo de pentagramas con un corchete cuadrado no
se encuentra normalmente en el interior de un pentagrama con llave
curva que tenga conectadas las líneas divisorias, y un
GrandStaff
para piano no acepta un StaffGroup
dentro
de él, de forma predeterminada.
\score { \new GrandStaff << \new StaffGroup << \new Staff { c'1 } \new Staff { d'1 } >> \new Staff { \set Staff.instrumentName = bottom f'1 } >> }
Sin embargo, usando la instrucción \accepts
, se puede
añadir un StaffGroup
al contexto GrandStaff
:
\score { \new GrandStaff << \new StaffGroup << \new Staff { c'1 } \new Staff { d'1 } >> \new Staff { \set Staff.instrumentName = bottom f'1 } >> \layout { \context { \GrandStaff \accepts StaffGroup } } }
\denies
se usa principalmente cuando un contexto nuevo se
está basando en otro, pero los anidamientos requeridos difieren.
Por ejemplo, el contexto VaticanaStaff
está basado en el
contexto Staff
, pero con el contexto VaticanaVoice
sustituido por el contexto Voice
en la lista “accepts”.
Observe que discretamente se crea un contexto de forma implícita si se encuentra una instrucción donde no hay un contexto apropiado para contenerlo.
Dentro de una definición de contexto, el tipo de un subcontexto
que se va a crear implícitamente se especifica usando
\defaultchild
(hijo predeterminado). Algunos eventos
musicales requieren un contexto ‘Bottom’ (inferior): cuando
se encuentra este evento, se crean subcontextos de forma recursiva
hasta que se alcanza un contexto que no tiene establecido el
‘defaultchild’.
La creación implícita de contextos puede dar lugar a pentagramas o
partituras nuevos no esperados. La utilización de \new
para crear contextos explícitamente evita esos problemas.
En ocasiones se necesita que un contexto exista durante un breve intervalo de tiempo, siendo un buen ejemplo el contexto de pentagrama de un ossia. Esto se consigue normalmente mediante la introducción de la definición del contexto en el lugar apropiado en paralelo con la sección correspondiente de la música principal. De forma predeterminada, el contexto tempral se coloca debajo de todos los contextos existentes. Para reposicionarlo por encima del contexto que tenga el nombre “principal”, debería definirse de esta forma:
\new Staff \with { alignAboveContext = "principal" }
Se presenta una situación similar cuando se posiciona un contexto
temporal de letra de una canción dentro de una disposición de varios
pentagramas tal como ChoirStaff
, por ejemplo, cuando se añade
una segunda estrofa a una sección que se repite. De forma
predeterminada, el contexto temporal de letra se coloca debajo de los
pentagramas inferiores. Mediante la definición del contexto temporal
de letra con alignBelowContext
se puede posicionar
correctamente debajo del contexto de letra con nombre que contiene el
texto de la primera estrofa.
En diversos lugares pueden verse ejemplos que muestran esta recolocación de contextos temporales: véase Anidado de expresiones musicales, Modificación de pentagramas sueltos y Técnicas específicas para la letra.
Véase también
Manual de aprendizaje: Anidado de expresiones musicales.
Referencia de la notación: Modificación de pentagramas sueltos, Técnicas específicas para la letra.
Manual de utilización del programa: Aparece un pentagrama de más.
Archivos instalados: ‘ly/engraver-init.ly’.