@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
-Translation of GIT committish: 7ba0a22641cb0c7f5949d66a06d1e2e1fd0b3033
+Translation of GIT committish: 18cfd801fa7fcd698e924f3b530862714f3e3013
When revising a translation, copy the HEAD committish of the
version that you are working on. For details, see the Contributors'
Guide, node Updating translation committishes..
@end ignore
-@c \version "2.13.39"
+@c \version "2.15.20"
@node Cambiar los valores por omisión
@chapter Cambiar los valores por omisión
decisiones de disposición da acceso efectivo a las interioridades del
programa, lo que requiere código de Scheme como entrada. Los
elementos de Scheme se inauguran dentro de un archivo @file{.ly} con
-el símbolo de cuadradillo @code{#}.@footnote{@rextend{Tutorial de Scheme}
+el símbolo de cuadradillo@tie{}@code{#}.@footnote{@rextend{Tutorial de Scheme}
contiene un breve tutorial sobre la introducción de números,
listas, cadenas y símbolos en Scheme.}
* Modificar los complementos (plug-ins) de contexto::
* Cambiar los valores por omisión de los contextos::
* Definir contextos nuevos::
-* Alinear los contextos::
+* Orden de disposición de los contextos::
@end menu
almacenan propiedades, también contienen «plug-ins» o complementos
llamados @q{grabadores} que crean elementos de notación. Por ejemplo,
el contexto @code{Voice} contiene un grabador
-@code{Note_head_engraver} que crea las cabezas de nota y el contexto
+@code{Note_heads_engraver} que crea las cabezas de nota y el contexto
@code{Staff} contiene un grabador @code{Key_signature_engraver} que
crea la indicación de compás.
Se pueden realizar de forma similar modificaciones al contexto
@code{Score} o a todos los contextos @code{Voice}.
-@knownissues
+Los cambios de contexto se pueden poner dentro de una variable y
+aplicarse a una definición de contexto @code{\context} anteponiendo la
+modificación mediante @code{\with}:
-No es posible recolectar cambios de contexto dentro de una variable y
-aplicarlos a una definición de @code{\context} por referencia a dicha
-variable.
+@lilypond[quote,verbatim]
+blubb = \with {
+ fontSize = #-4
+ \override Stem #'thickness = #4.0
+ \remove "Time_signature_engraver"
+}
-La instrucción @code{\RemoveEmptyStaves} sobreescribe nuestros ajustes
-en curso para el contexto @code{\Staff}. Si queremos cambiar los
-valores predeterminados para un pentagrama que utilice
-@code{\RemoveEmptyStaves}, debemos hacerlo después de llamar a
-@code{\RemoveEmptyStaves}, o sea
+bla = \with {
+ fontSize = #3
+ \override Stem #'thickness = #-2.0
+}
-@example
-\layout @{
- \context @{
- \Staff \RemoveEmptyStaves
+melody = \relative c'' {
+ a4 a a a |
+ a4 a a a |
+}
- \override Stem #'thickness = #4.0
- @}
-@}
-@end example
+\score {
+ <<
+ \new Staff <<
+ \melody
+ s1*0^"Small, thicker stems, no time signature"
+ >>
+ \new Staff \bla <<
+ \melody
+ s1*0^"Different"
+ >>
+ >>
+ \layout {
+ \context {
+ \Staff
+ \blubb
+ }
+ }
+}
+@end lilypond
@c TODO: add \with in here.
squashedPosition = #0
\override NoteHead #'style = #'slash
\override Stem #'transparent = ##t
+ \override Flag #'transparent = ##t
\alias Voice
}
\context { \Staff
@example
\override NoteHead #'style = #'slash
\override Stem #'transparent = ##t
+\override Flag #'transparent = ##t
@end example
Todos estos añadidos tienen que cooperar, y esto se consigue con un
squashedPosition = #0
\override NoteHead #'style = #'slash
\override Stem #'transparent = ##t
+ \override Flag #'transparent = ##t
\alias Voice
@}
@end example
@end example
-@node Alinear los contextos
-@subsection Alinear los contextos
-@translationof Aligning contexts
-
-Los contextos nuevos se pueden alinear por encima o por debajo de
-otros contextos existentes. Esto podría ser de utilidad al preparar
-un pentagrama vocal (@rlearning{Conjuntos vocales}) y en el ossia,
-
-@cindex ossia
-@funindex alignAboveContext
-@funindex alignBelowContext
-
-@lilypond[quote,ragged-right]
-ossia = { f4 f f f }
-\score{
- \relative c' \new Staff = "main" {
- c4 c c c
- <<
- \new Staff \with { alignAboveContext = #"main" } \ossia
- { d8 f d f d f d f }
- >>
- }
-}
-@end lilypond
-
-@cindex nested contexts
-@cindex contexts, nested
+@node Orden de disposición de los contextos
+@subsection Orden de disposición de los contextos
+@translationof Context layout order
+@cindex contextos, orden de disposición
@funindex \accepts
@funindex \denies
-Los contextos como @code{PianoStaff} pueden llevar dentro otros
-contextos anidados. Los contextos que se pueden aceptar para su
-anidamiento están definidos por la lista @qq{accepts} (acepta) de un
-contexto. Los contextos que no están en esta lista se colocan debajo
-del contexto exterior en la partitura impresa. Por ejemplo, el
-contexto @code{PianoStaff} está definido para que acepte contextos
-@code{Staff} y @code{FiguredBass} de forma predeterminada, pero no un
-contexto @code{Lyrics}, por ejemplo. Así pues, en la siguiente
-estructura la letra se sitúa debajo del sistema de piano en lugar de
-colocarse entre los dos pentagramas:
+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 @qq{accepts} del contexto externo. Los
+contextos anidados que no está nincluidos en la lista @qq{accepts} del
+contexto externo se recolocan debajo del contexto externo en lugar de
+anidarse dentro de él.
-@lilypond[verbatim,quote,relative=1]
-\new PianoStaff
-<<
- \new Staff { e4 d c2 }
- \addlyrics { Three blind mice }
+La lista @qq{accepts} de un contexto se puede cambiar con las
+instrucciones @code{\accepts} (acepta) y @code{\denies} (niega).
+@code{\accepts} añade un contexto a la lista @qq{accepts} y
+@code{\denies} elimina un contexto de la lista. Por ejemplo,
+normalmente no sería deseable que los acordes de cifrado americano
+estuvieran anidados dentro de un contexto @code{Staff}, por lo que el
+contexto @code{ChordNames} no se incluye de forma predeterminada
+dentro de la lista @qq{accepts} del contexto @code{Staff}, pero podría
+hacerse si fuera necesario:
+
+@lilypond[verbatim,quote]
+\score {
\new Staff {
- \clef "bass"
- { c,1 }
+ c' d' e' f'
+ \chords { d1:m7 b1:min7.5- }
}
->>
+}
@end lilypond
-La lista @qq{accepts} de un contexto se puede modificar para que
-incluya contextos anidados adicionales, y así si quisiéramos que la
-letra apareciese entre los dos pentagramas podríamos usar:
-
-@lilypond[verbatim,quote,relative=1]
-\new PianoStaff \with { \accepts Lyrics }
-<<
- \new Staff { e4 d c2 }
- \addlyrics { Three blind mice }
+@lilypond[verbatim,quote]
+\score {
\new Staff {
- \clef "bass"
- { c,1 }
+ c' d' e' f'
+ \chords { d1:m7 b1:min7.5- }
}
->>
+ \layout {
+ \context {
+ \Staff
+ \accepts "ChordNames"
+ }
+ }
+}
@end lilypond
-Lo contrario de @code{\accepts} (acepta) es @code{\denies} (deniega);
-esto suprime un contexto de la lista @qq{accepts}.
+@code{\denies} se usa principalmente cuando un contexto nuevo se está
+basando en otro, pero los anidamientos requeridos difieren. Por
+ejemplo, el contexto @code{VaticanaStaff} está basado en el contexto
+@code{Staff}, pero con el contexto @code{VaticanaVoice} sustituido por
+el contexto @code{Voice} en la lista @qq{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. Esto puede dar lugar a pentagramas o partituras nuevos no
+esperados.
+
+@seealso
+Manual de utilización del programa:
+@rprogram{Aparece un pentagrama de más}.
+
+Archivos instalados:
+@file{ly/engraver-init.ly}.
@node Explicación del Manual de referencia de funcionamiento interno
Existen dos tipos diferentes de propiedades almacenadas en los
contextos: las propiedades de contexto y las propiedades de grob. Las
-prpopiedades de contexto son propiedades que se aplican al contexto
+propiedades de contexto son propiedades que se aplican al contexto
como un todo y controlan la forma en que el propio contexto se
imprime. Por contra, las propiedades de grob se aplican a los tipos
de grob específicos que se imprimirán dentro del contexto.
@end example
@var{valor} es un objeto de Scheme, razón por la que va precedido del
-carácter almohadilla, @code{#}.
+carácter almohadilla,@tie{}@code{#}.
El nombre de las propiedades de contexto suele ir en minúsculas con
mayúscula en medio. Controlan sobre todo la traducción de la música a
Para muchas propiedades, independientemente del tipo de datos de la
propiedad, si se establece el valor de la propiedad a falso
-(@code{##f}) se producirá su desactivación, ocasionando que LilyPond
+(@code{#f}) se producirá su desactivación, ocasionando que LilyPond
ignore por completo dicha propiedad. Esto es especialmente útil para
«apagar» propiedades de grobs (objetos gráficos) que de otra manera
causarían problemas.
@subsection @code{\set} frente a @code{\override}
@translationof set versus override
-HACER: probablemente esta sección es innecesaria.
+@c HACER: probablemente esta sección es innecesaria.
@ignore
We have seen two methods of changing properties: @code{\set} and
Por ejemplo, para reducir el espacio entre pentagramas adyacentes
dentro de un grupo, use la propiedad @code{staff-staff-spacing}
del grob @code{StaffGrouper}. La propiedad es una lista-A con cuatro
-claves: @code{padding} (relleno), @code{space} (espacio),
-@code{minimum-distance} (distancia mínima) y @code{stretchability}
-(ampliabilidad). Tres de las cuatro claves tienen valores
-predeterminados en el inicio; éstos se relacionan en la sección
+claves: @code{basic-distance} (distancia básica),
+@code{minimum-distance} (distancia mínima), @code{padding} (relleno)
+y @code{stretchability} (ampliabilidad).
+Los ajustes estándar para esta propiedad
+se relacionan en la sección
@qq{Backend} de la Referencia de Funcionamiento Interno
(véase @rinternals{StaffGrouper}):
-@file{scm/define-grobs.scm}:
-
@example
-'((space . 9) (minimum-distance . 7) (padding . 1))
+'((basic-distance . 9)
+ (minimum-distance . 7)
+ (padding . 1)
+ (stretchability . 5))
@end example
Una forma de acercar los pentagramas entre sí es reducir el valor de
-la clave @code{space} (@code{9}) para que se corresponda con el valor
-de @code{minimum-distance} (@code{7}). Para modificar una única clave
-de forma individual, utilice una @emph{declaración anidada}:
+la clave @code{basic-distance} (@code{9}) para que se corresponda con
+el valor de @code{minimum-distance} (@code{7}). Para modificar una
+única clave de forma individual, utilice una @emph{declaración
+anidada}:
@lilypond[quote,verbatim]
% default space between staves
% reduced space between staves
\new PianoStaff \with {
% this is the nested declaration
- \override StaffGrouper #'staff-staff-spacing #'space = #7
+ \override StaffGrouper #'staff-staff-spacing #'basic-distance = #7
} <<
\new Staff { \clef treble c''1 }
\new Staff { \clef bass c1 }
@end lilypond
La utilización de una declaración anidada actualiza la clave
-especificada (como @code{space} en el ejemplo anterior) sin alterar ninguna
+especificada (como @code{basic-distance} en el ejemplo anterior)
+sin alterar ninguna
de las otras claves que ya se habían establecido para la misma
propiedad.
Ahora, supongamos que deseamos que los pentagramas estén tan próximos
como sea posible sin que se superpongan. La manera más sencilla de
hacerlo es establecer las cuatro claves de la lista-A a cero. Sin
-embargo, no es necesario escribir cuatro declaraciones anidadas,
-una por cada clave. En lugar de eso, se puede redefinir
-completamente la propiedad con una sola declaración, como una lista-A:
+embargo, no es necesario escribir cuatro declaraciones anidadas, una
+por cada clave. En lugar de eso, se puede redefinir completamente la
+propiedad con una sola declaración, como una lista-A:
@lilypond[quote,verbatim]
\new PianoStaff \with {
\override StaffGrouper #'staff-staff-spacing =
- #'((padding . 0)
- (space . 0)
+ #'((basic-distance . 0)
(minimum-distance . 0)
+ (padding . 0)
(stretchability . 0))
} <<
\new Staff { \clef treble c''1 }
valores @emph{predeterminados si no se han fijado}. En el caso de
@code{staff-staff-spacing}, el valor de cualquier clave no fijada se
reiniciaría a cero (excepto @code{stretchability}, que toma el valor
-de @code{space} si no se fija). Así, las dos declaraciones siguientes
-son equivalentes:
+de @code{basic-distance} si no se fija). Así, las dos declaraciones
+siguientes son equivalentes:
@example
\override StaffGrouper #'staff-staff-spacing =
- #'((space . 7))
+ #'((basic-distance . 7))
\override StaffGrouper #'staff-staff-spacing =
- #'((padding . 0)
- (space . 7)
+ #'((basic-distance . 7)
(minimum-distance . 0)
+ (padding . 0)
(stretchability . 7))
@end example
Una consecuencia de esto (posiblemente no intencionada) es la
-eliminación de cualquier valor predeterminado @emph{inicializado} que
-se establezca en un archivo de inicio y que se carga cada vez que se
-compila un archivo de entrada. En el ejemplo anterior, los valores
-predeterminados inicializados para @code{padding} y
-@code{minimum-distance} (definidos en @file{scm/define-grobs.scm}) se
-reinician a sus valores predeterminados si no se han fijado (cero para
-las dos claves). La definición de una propiedad o variable como una
-lista-A (de cualquier tamaño) siempre reinicia todos los valores de
-clave no establecidos a sus valores predeterminados si no se han
-fijado. Ano ser que este sea el resultado deseado, es más seguro
-actualizar los valores de clave inddividualmente con una declaración
-anidada.
+eliminación de cualquier valor estándar que se establezca en un
+archivo de inicio y que se carga cada vez que se compila un archivo de
+entrada. En el ejemplo anterior, los ajustes estándar para
+@code{padding} y @code{minimum-distance} (definidos en
+@file{scm/define-grobs.scm}) se reinician a sus valores
+predeterminados si no se han fijado (cero para las dos claves). La
+definición de una propiedad o variable como una lista-A (de cualquier
+tamaño) siempre reinicia todos los valores de clave no establecidos a
+sus valores predeterminados si no se han fijado. Ano ser que este sea
+el resultado deseado, es más seguro actualizar los valores de clave
+individualmente con una declaración anidada.
@warning{Las declaraciones anidadas no funcionan para las listas-A de
propiedades de contexto (como @code{beamExceptions},
@menu
* Modos de entrada::
* Dirección y posición::
-* Orden de disposición de los contextos::
* Distancias y medidas::
* Propiedades del símbolo del pentagrama::
* Objetos de extensión::
@c TODO Add table showing these
-@strong{Disposición de contexto}
-
-Los contextos se colocan dentro de un sistema de arriba a abajo en el
-orden en que se encuentran. Sin embargo, observe que se crea un
-contexto implícitamente si se encuentra una instrucción cuando no está
-disponible un contexto apropiado para contenerla.
-
-@c TODO Add example ?
-
-Se pude cambiar el orden predeterminado en que los contextos se
-presentan, véase @ref{Alinear los contextos}
-
-@strong{Indicadores de dirección de las articulaciones}
-
-Al añadir articulaciones a notas se puede omitir normalmente el
-indicador de dirección, @code{^} (que significa @qq{arriba}), @code{_}
-(que significa @qq{abajo}) o @code{-} (que significa @qq{usar la
-dirección predeterminada}), en cuyo caso se supone el predeterminado
-@code{-}. Pero se necesita un indicador de dirección @strong{siempre}
-antes de:
+Se puede sobreescribir la acción predeterminada mediante el prefijado
+de la articulación por un @emph{indicacor de dirección}. Están
+disponibles tres indicadores de dirección: @code{^} (que significa
+@qq{arriba}), @code{_} (que significa @qq{abajo}) o @code{-} (que
+significa @qq{usar la dirección predeterminada}). El indicador de
+dirección se puede normalmente omitir, en cuyo caso se supone el
+indicador predeterminado @code{-}, pero se necesita un indicador de
+dirección @strong{siempre} antes de:
@itemize
@item las instrucciones @code{\tweak}
@item las instrucciones @code{\markup}
@item las instrucciones @code{\tag}
@item los marcados de cadena, p.ej. -"cadena"
-@item las instrucciones de digitación, p.ej. @code{-1}
-@item las abreviaturas de articulación, p.ej. @code{-.}, @code{->}, @code{--}
+@item las instrucciones de digitación, p.ej. @w{@code{-1}}
+@item las abreviaturas de articulación, p.ej. @w{@code{-.}}, @w{@code{->}}, @w{@code{--}}
@end itemize
Estas indicaciones afectan sólo a la nota siguiente.
El valor de la propiedad @code{direction} se puede establecer al valor
@code{1}, con el significado de @qq{hacia arriba} o @qq{encima}, o a
-@code{-1}, con el significado de @qq{hacia abajo} o @qq{debajo}. Se
-pueden usar los símbolos @code{UP} y @code{DOWN} en sustitución de
-@code{1} y @code{-1} respectivamente. La dirección predeterminada se
-puede especificar estableciendo @code{direction} a @code{0} ó a
+@w{@code{-1}}, con el significado de @qq{hacia abajo} o @qq{debajo}.
+Se pueden usar los símbolos @code{UP} y @code{DOWN} en sustitución de
+@code{1} y @w{@code{-1}} respectivamente. La dirección predeterminada
+se puede especificar estableciendo @code{direction} a @code{0} ó a
@code{CENTER}. De forma alternativa, en muchos casos existen
instrucciones predefinidas para especificar la dirección. Todas ellas
son de la forma:
En alguna que otra ocasión, con el único ejemplo usual del arpegio, el
valor de la propiedad @code{direction} especifica si el objeto se debe
colocar a la izquierda o a la derecha del objeto padre. En este caso
-@code{-1} ó @code{LEFT} significan @qq{a la izquierda} y @code{1} ó
-@code{RIGHT} significan @qq{a la derecha}. @code{0} ó @code{CENTER}
+@w{@code{-1}} ó @code{LEFT} significan @qq{a la izquierda} y @code{1}
+ó @code{RIGHT} significan @qq{a la derecha}. @code{0} ó @code{CENTER}
significan @qq{utilizar la dirección predeterminada}, como antes.
Estas indicaciones afectan a todas las notas hasta que son canceladas.
@end lilypond
-@node Orden de disposición de los contextos
-@subsection Orden de disposición de los contextos
-@translationof Context layout order
-
-@cindex contextos, orden de disposición
-
-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 @qq{accepts} del contexto externo. Los
-contextos anidados que no está nincluidos en la lista @qq{accepts} del
-contexto externo se recolocan debajo del contexto externo en lugar de
-anidarse dentro de él.
-
-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. Esto puede dar lugar a pentagramas o partituras nuevos no
-esperados.
-
-El orden predeterminado en que los contextos se disponen, así como la
-lista @qq{accepts}, pueden cambiarse; véase @ref{Alinear los
-contextos}.
-
-@seealso
-Manual de utilización del programa:
-@rprogram{Aparece un pentagrama de más}.
-
@node Distancias y medidas
@subsection Distancias y medidas
@translationof Distances and measurements
@item attach-dir (dirección de anclaje)
Determina dónde comienza y termina la línea en la dirección X, con
-relación al objeto ancla. Sí, un valor de @code{-1} (o @code{LEFT},
+relación al objeto ancla. Sí, un valor de @w{@code{-1}} (o @code{LEFT},
izquierda) hace que la línea comience o termine en el lado izquierdo
de la cabeza de la nota a la que está anclado.
@end lilypond
Observe que los valores negativos mueven el texto @emph{hacia arriba},
-al contrario de lo que podría esperarse, pues el valor de @code{-1} o
+al contrario de lo que podría esperarse, pues el valor de @w{@code{-1}} o
@code{DOWN} (abajo) significa alinear el borde @emph{inferior} del
texto con la línea de extensión. Un valor de @code{1} o @code{UP}
(arriba) alinea el borde superior del texto con la línea extensora.
sobreescribir su propiedad @code{break-visibility}. Las tres primeras
se aplican a todos los objetos de presentación; la última sólo a unos
pocos: los objetos @emph{divisibles}. El Manual de aprendizaje
-introduce estas cuatro técnicas, véase @rlearning{Visibilidad y color de los objetos}.
+introduce estas cuatro técnicas,
+véase @rlearning{Visibilidad y color de los objetos}.
Hay también algunas otras técnicas que son específicas de ciertos
objetos de presentación. Se estudian bajo Consideraciones especiales.
predeterminado de @code{1}, se dibuja después de las líneas del
pentagrama (valor @code{layer} predeterminado de @code{0}),
sobreimpresionándolas. Para cambiarlo, se debe dar al objeto
-@code{Clef} un valor de @code{layer} más bajo, digamos @code{-1}, para
-que se dibuje antes:
+@code{Clef} un valor de @code{layer} más bajo, digamos @w{@code{-1}},
+para que se dibuje antes:
@lilypond[quote,verbatim,relative=2]
\override Staff.Clef #'color = #white
El pequeño símbolo de octava sobre las claves en octava alta o baja se
produce por parte del objeto @code{OctavateEight}. Su visibilidad se
-controla independientemente de la del objeto @code{Clef}, así que es
+hereda automáticamente de la del objeto @code{Clef}, así que no es
necesario aplicar las sobreescrituras correspondientes
-@code{break-visibility} tanto a los objetos @code{Clef} como
-@code{OctavateEight} para suprimir completamente estos símbolos de
-clave al comienzo de cada línea.
+@code{break-visibility} a los objetos
+@code{OctavateEight} para suprimir los símbolos de octavación
+para las claves invisibles.
Para los cambios de clave explícitos, la propiedad
@code{explicitClefVisibility} controla tanto el símbolo de clave como
e2 \glissando f
@end lilypond
-El valor de @code{Y} está establecido a @code{-2} para el extremo
+El valor de @code{Y} está establecido a @w{@code{-2}} para el extremo
derecho. El lado izquierdo se puede ajustar de forma similar
especificando @code{left} en vez de @code{right}.
* Agrupación vertical de objetos gráficos::
* Modificación de los sellos::
* Modificación de las formas::
+* Contenedores unpure-pure::
@end menu
@headitem @code{side-axis} @tab @code{direction} @tab
@headitem propiedad @tab propiedad @tab colocación
-@item @code{0} @tab @code{-1} @tab izquierda
+@item @code{0} @tab @w{@code{-1}} @tab izquierda
@item @code{0} @tab @code{1} @tab derecha
-@item @code{1} @tab @code{-1} @tab debajo
+@item @code{1} @tab @w{@code{-1}} @tab debajo
@item @code{1} @tab @code{1} @tab encima
@end multitable
mitad de la extensión X total del objeto. Los valores negativos
mueven el objeto a la derecha, los positivos hacia la izquierda. Un
valor de @code{0} centra el objeto sobre el punto de referencia de su
-padre, un valor de @code{-1} alinea el borde izquierdo del objeto
+padre, un valor de @w{@code{-1}} alinea el borde izquierdo del objeto
sobre el punto de referencia de su padre, y un valor de @code{1}
alinea el borde derecho del objeto sobre el punto de referencia de su
padre. Se pueden usar los símbolos @code{LEFT}, @code{CENTER} y
-@code{RIGHT} en sustitución de los valores @code{-1, 0, 1},
+@code{RIGHT} en sustitución de los valores @w{@code{-1}}, @code{0} y @code{1},
respectivamente.
Normalmente se usaría la instrucción @code{\override} para modificar
objetos sea una tarea dificultosa. Las unidades son sólo la mitad de
las dimensiones verticales del objeto, que suele ser bastante pequeño,
por lo que pueden requerirse números bastante grandes. Un valor de
-@code{-1} alinea el borde inferior del objeto con el punto de
+@w{@code{-1}} alinea el borde inferior del objeto con el punto de
referencia del objeto padre, un valor de @code{0} alinea el centro del
objeto con el punto de referencia del padre, y un valor de @code{1}
alinea el borde superior del objeto con el punto de referencia del
padre. Se pueden usar los símbolos @code{DOWN}, @code{CENTER},
-@code{UP} en sustitución de @code{-1, 0, 1} respectivamente.
+@code{UP} en sustitución de @w{@code{-1}},
+@code{0} y @code{1}, respectivamente.
@emph{Auto-alineación de objetos en las dos direcciones}
@subsection Agrupación vertical de objetos gráficos
@translationof Vertical grouping of grobs
+@c TODO Expand this section
+
Los grobs (objetos gráficos) @code{VerticalAlignment} y
@code{VerticalAxisGroup} trabajan de manera coordinada.
@code{VerticalAxisGroup} agrupa distintos grobs como @code{Staff},
@cindex ligaduras de expresión, modificar
@cindex ligaduras de unión, modificar
-@cindex Bézier, curvas de
-@cindex Bézier, puntos de control
+@cindex Bézier, curvas de, puntos de control
+@cindex puntos de control en curvas de Bézier
Las ligaduras de unión, de expresión y de fraseo se trazan como curvas
de Bézier de tercer orden. Si la forma de la ligadura calculada
@lilypond[verbatim,quote,relative=1]
<<
- { e1 ~ e }
+ { e1~ e }
\\
{ r4 <g c,> <g c,> <g c,> }
>>
{
\once \override Tie
#'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1))
- e1 ~ e1
+ e1 ~ e
}
\\
- { r4 <g c,> <g c,> <g c,>4 }
+ { r4 <g c,> <g c,> <g c,> }
>>
@end lilypond
@knownissues
-
No es posible modificar la forma de las ligaduras de unión o de
expresión cambiando la propiedad @code{control-points} si hay más de
una en el mismo momento musical, ni siquiera usando la instrucción
-@code{\tweak}.
+@code{\tweak}. Sin embargo, se puede sobreescribir la propiedad
+@code{tie-configuration} de @code{TieColumn} para fijar la línea de
+inicio y la dirección según se requiera.
+@seealso
+Referencia de funcionamiento interno:
+@rinternals{TieColumn}.
+
+@cindex Scheme, contenedores puros
+@cindex Scheme, contenedores no-puros
+@cindex puros, contenedores de Scheme
+@cindex no-puros: contenedores de Scheme
+@cindex horizontal, sobreescribir el espaciado
+
+@node Contenedores unpure-pure
+@subsection Contenedores unpure-pure
+@translationof Unpure-pure containers
+
+Los contenedores @q{unpure-pure} (pura y no pura) son útiles para la
+sobreescritura de los cálculos del espaciado en el @emph{eje Y}
+(concretamente @code{Y-offset} e @code{Y-extent}) con una función de
+Scheme en lugar de un literal, es decir, un número o una pareja de
+números.
+
+Para ciertos objetos gráficos, las dimensiones @code{Y-extent} están
+basadas en la propiedad @code{stencil}, la sobreescritura de la
+propiedad de sello de éstos requiere una sobreescritura adicional de
+@code{Y-extent} con un contenedor unpure-pure. Cuando una función
+sobreescribe una dimensión @code{Y-offset} y/o @code{Y-extent} se
+supone que esto dispara los cálculos de los saltos de línea
+prematuramente durante la compilación. Así pues, la función no se
+evalúa en absoluto (devolviendo por lo general un valor de @samp{0} o
+@samp{'(0 . 0)}) lo que puede dar lugar a colisiones. Una función
+@q{pura} no afecta a las propiedades, objetos o suicidios de grobs, y
+por ello siempre ven sus valores relacionados con el eje Y evaluados
+correctamente.
+
+Actualmente hay unas treinta funciones que ya se consideran @q{puras}
+y los contenedores Unpure-pure son una manera de establecer funciones
+que no están en esta lista como @q{puras}. La función @q{pura} se
+evalúa @emph{antes} de cualquier salto de línea y así el espaciado
+horizontal se puede ajustar @q{a tiempo}. La función @q{impura} se
+evalúa entonces @emph{después} del salto de línea.
+
+@warning{Dado que es difícil saber siempre qué funciones están en esta
+lista, recomendamos que cualquier función @q{pura} que estemos creando
+no utilice los grobs @code{Beam} o @code{VerticalAlignment}.}
+
+Un contenedor @q{unpure-pure} se contruye de la manera siguiente:
+
+@code{(ly:make-unpure-pure-container f0 f1)}
+
+donde @code{f0} es una función que toma @var{n} argumentos (@var{n >=
+1}) y el primer argumento siempre debe ser el grob. Ésta es la
+función que da el resultado real. @var{f1} es la función que se
+etiqueta como @q{pura} que toma @var{n + 2} argumentos. De nuevo, el
+primer argumento debe ser siempre el grob pero los argumentos segundo
+y tercero son argumentos de @q{inicio} y de @q{final}.
+
+@var{inicio} y @var{final} son, a todos los efectos, valores mudos que
+sólo tienen importancia para los @code{objetos de extensión} (o sea:
+@code{Hairpin}, regulador, o @code{Beam}, barra), que pueden devolver
+distintas estimaciones de altura basadas en una columna de inicio y
+una de final.
+
+El resto son los otros argumentos para la primera función (que puede
+no ser ninguno si @var{n = 1}).
+
+El resultado de la segunda función se usa como una aproximación del
+valor necesario, que se usa entonces por la primera función para
+obtener el valor real que se usa a continuación para el ajuste de
+precisión mucho más tardío durante el proceso de espaciado.
+
+@lilypond[verbatim,quote,ragged-right]
+#(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 cisis c
+ \smartSquareLineCircleSpace
+ cis4 ces cisis c
+}
+@end lilypond
+
+En el primer compás, sin el contenedor @emph{unpure-pure}, el motor de
+espaciado no conoce la anchura de la cabeza de la nota y permite que
+colisione con las alteraciones accidentales. En el segundo compás, el
+motor de espaciado conoce la anchura de las cabezas de las notas y
+evita la colisión mediante el alargamiento de la línea en la medida
+adecuada.
+
+Normalmente, para cálculos simples se pueden usar funciones casi
+idénticas tanto para las partes @q{no pura} y @q{pura}, simplemente
+cambiando el número de argumentos que se pasan a, y el ámbito de, la
+función.
+
+@warning{Si una función está caracterizada como @q{pura} y resulta que
+no lo es, el resultado puede ser inesperado.}
@node Uso de las funciones musicales
debe devolver @code{#t}.
@item @code{@var{@dots{}música@dots{}}}
-@tab entrada de LilyPond normal, que utiliza @code{$} para
-referenciar argumentos (p.ej. @samp{$arg1}).
+@tab código de entrada normal de LilyPond, que utiliza @code{$} (en los
+lugares en que sólo se permiten construcciones de Lilypond) o @code{#}
+(para usarlo como un valor de Scheme o un argumento de función
+musical) para referenciar argumentos (p.ej. @samp{#arg1}).
@end multitable
-
Los argumentos @code{parser} y @code{location} son necesarios, y se
utilizan en algunas situaciones avanzadas como se encuentra descrito
en @rextend{Sintaxis de las funciones musicales}. Para las funciones
@example
boolean?
cheap-list? @emph{(utilizar en lugar de }@q{list?}@emph{ para un procesado más rápido)}
+ly:duration?
ly:music?
+ly:pitch?
markup?
number?
pair?
(parser location padding)
(number?)
#{
- \once \override TextScript #'padding = $padding
+ \once \override TextScript #'padding = #padding
#})
\relative c''' {
Además de números, podemos usar expresiones musicales, como notas,
para los argumentos de las funciones musicales:
+@c TODO: use a better example (the music argument is redundant).
+
@lilypond[quote,verbatim,ragged-right]
custosNote =
#(define-music-function
(parser location padding tempotext)
(number? string?)
#{
- \once \override Score.MetronomeMark #'padding = $padding
- \tempo \markup { \bold $tempotext }
+ \once \override Score.MetronomeMark #'padding = #padding
+ \tempo \markup { \bold #tempotext }
#})
\relative c'' {
}
@end lilypond
-@c @seealso
-
-
+@c TODO: add appropriate @@ref's here.