@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@ignore
-Translation of GIT committish: 412fa426d510594ec7772c7cf7b568e376bd1c84
+Translation of GIT committish: 2055f35c47a045a50a01ff4dba8524322cfc3b48
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.12.0"
+@c \version "2.14.0"
@node Cambiar los valores por omisión
@chapter Cambiar los valores por omisión
LISP) para aportar la infraestructura. La sobreescritura de las
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 @code{.ly} con
-el símbolo de cuadradillo @code{#}.@footnote{@rextend{Tutorial de
-Scheme} contiene un breve tutorial sobre la introducción de números,
+elementos de Scheme se inauguran dentro de un archivo @file{.ly} con
+el símbolo de cuadradillo @code{#}.@footnote{@rextend{Tutorial de Scheme}
+contiene un breve tutorial sobre la introducción de números,
listas, cadenas y símbolos en Scheme.}
@menu
@rlearning{Contextos y grabadores}.
Archivos de inicio:
-@file{ly/@/engraver@/-init@/.ly},
-@file{ly/@/performer@/-init@/.ly}.
+@file{ly/engraver-init.ly},
+@file{ly/performer-init.ly}.
Fragmentos de código:
@rlsr{Contexts and engravers}.
@menu
* Score. El contexto maestro::
-* Contextos del nivel superior. Contenedores de pentagramas::
+* Contextos del nivel superior. Contenedores de pentagramas::
* Contextos de nivel intermedio. Pentagramas::
* Contextos del nivel más bajo. Voces::
@end menu
Se crea implícitamente una instancia del contexto Score cuando se
procesa un bloque @code{\score @{@dots{}@}} o @code{\layout
-@{@dots{}@}}, o explícitamente cuando se ejecuta una instrucción
-@code{\new Score}.
+@{@dots{}@}}.
@node Contextos del nivel superior. Contenedores de pentagramas
@unnumberedsubsubsec Contextos del nivel superior: contenedores de pentagramas
@subsection Crear contextos
@translationof Creating contexts
+@c TODO more complete descriptions rather than learning style
+
Para partituras que sólo tienen una voz y un pentagrama, los contextos
se crean automáticamente. Para partituras más complejas, es necesario
crearlos a mano. Existen tres instrucciones que hacen esto.
pentagramas. Cada parte que debe ir en su propio pentagrama, va
precedida de @code{\new Staff}.
-@lilypond[quote,verbatim,relative=2,ragged-right,fragment]
+@lilypond[quote,verbatim,relative=2,ragged-right]
<<
\new Staff { c4 c }
\new Staff { d4 d }
Esta variante se usa con expresiones musicales que se pueden
interpretar en varios niveles. Por ejemplo, la instrucción
-@code{\applyOutput} (véase @rextend{Ejecutar una función sobre todos
-los objetos de la presentación}). Sin una instrucción @code{\context}
+@code{\applyOutput} (véase
+@rextend{Ejecutar una función sobre todos los objetos de la presentación}).
+Sin una instrucción @code{\context}
explícita, normalmente se aplicaría a @code{Voice}
@example
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.
@code{Time_signature_engraver} y @code{Clef_engraver} de un contexto
@code{Staff}:
-@lilypond[quote,relative=1,verbatim,fragment]
+@lilypond[quote,relative=1,verbatim]
<<
\new Staff {
f2 g
@cindex polimétricas, partituras
@cindex compases distintos al mismo tiempo
-@lilypond[quote,relative=1,ragged-right,verbatim,fragment]
-\new Score \with {
- \remove "Timing_translator"
- \remove "Default_bar_line_engraver"
-} <<
+@lilypond[quote,verbatim]
+\score {
+ <<
+ \new Staff \with {
+ \consists "Timing_translator"
+ \consists "Default_bar_line_engraver"
+ } {
+ \time 3/4
+ c4 c c c c c
+ }
\new Staff \with {
\consists "Timing_translator"
\consists "Default_bar_line_engraver"
} {
- \time 3/4
+ \time 2/4
c4 c c c c c
}
- \new Staff \with {
- \consists "Timing_translator"
- \consists "Default_bar_line_engraver"
- } {
- \time 2/4
- c4 c c c c c
- }
>>
+\layout {
+ \context {
+ \Score
+ \remove "Timing_translator"
+ \remove "Default_bar_line_engraver"
+ }
+ }
+}
@end lilypond
@knownissues
aplicarlos a una definición de @code{\context} por referencia a dicha
variable.
-La instrucción @code{\RemoveEmptyStaffContext} sobreescribe nuestros
-ajustes en curso para @code{\Staff}. Si queremos cambiar los valores
-predeterminados para un pentagrama que utilice
-@code{\RemoveEmptyStaffContext}, debe hacerlo después de llamar a
-@code{\RemoveEmptyStaffContext}, o sea
+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
@example
\layout @{
\context @{
- \RemoveEmptyStaffContext
+ \Staff \RemoveEmptyStaves
\override Stem #'thickness = #4.0
@}
Supongamos que queremos mover la indicación de digitación del
fragmento siguiente:
-@lilypond[quote,fragment,relative=2,verbatim]
+@lilypond[quote,relative=2,verbatim]
c-2
\stemUp
f
Hemos estado hablando de @emph{el} objeto @code{Fingering}, pero
realmente esto no significa mucho. El archivo de inicialización
(véase @rlearning{Otras fuentes de información})
-@file{scm/@/define@/-grobs@/.scm} muestra el alma del @q{objeto},
+@file{scm/define-grobs.scm} muestra el alma del @q{objeto},
@example
(Fingering
(script-priority . 100)
(stencil . ,ly:text-interface::print)
(direction . ,ly:script-interface::calc-direction)
- (font-encoding . fetaNumber)
+ (font-encoding . fetaText)
(font-size . -5) ; don't overlap when next to heads.
(meta . ((class . Item)
(interfaces . (finger-interface
Recordemos que queríamos cambiar la posición del @b{2} en
-@lilypond[quote,fragment,relative=2,verbatim]
+@lilypond[quote,relative=2,verbatim]
c-2
\stemUp
f
Fingering, es decir, antes del @code{c2}, llegamos al siguiente
resultado:
-@lilypond[quote,relative=2,fragment,verbatim]
+@lilypond[quote,relative=2,verbatim]
\once \override Voice.Fingering #'padding = #3
c-2
\stemUp
* La instrucción override::
* La instrucción tweak::
* set frente a override::
+* Modificación de las listas-A::
@end menu
pentagrama actual. Otros pentagramas mantienen su aspecto normal.
Aquí vemos la instrucción en pleno funcionamiento:
-@lilypond[quote,verbatim,relative=2,fragment]
+@lilypond[quote,verbatim,relative=2]
c4
\override Staff.Stem #'thickness = #4.0
c4
@code{Voice}. Al añadir @code{\once} se aplica el cambio durante un
solo paso de tiempo.
-@lilypond[quote,fragment,verbatim,relative=2]
+@lilypond[quote,verbatim,relative=2]
c4
\once \override Stem #'thickness = #4.0
c4
ligaduras o barras, la instrucción @code{\override} se debe ejecutar
en el momento en que se crea el objeto. En este ejemplo:
-@lilypond[quote,fragment,verbatim,relative=2]
+@lilypond[quote,verbatim,relative=2]
\override Slur #'thickness = #3.0
c8[( c
-\override Beam #'thickness = #0.6
+\override Beam #'beam-thickness = #0.6
c8 c])
@end lilypond
si el valor de la propiedad de contexto @code{skipBars} se establece a
@code{#t} (verdadero):
-@lilypond[quote,verbatim,relative=2,fragment]
+@lilypond[quote,verbatim,relative=2]
R1*2
\set Score.skipBars = ##t
R1*2
contexto actual de nivel más bajo (normalmente @code{ChordNames},
@code{Voice} o @code{Lyrics}). En este ejemplo:
-@lilypond[quote,verbatim,relative=2,fragment]
+@lilypond[quote,verbatim,relative=2]
\set Score.autoBeaming = ##f
<<
{
nivel más bajo, que en este caso es @code{Voice}, no tendrá ningún
efecto, porque skipBars es una propiedad del contexto @code{Score}.
-@lilypond[quote,verbatim,relative=2,fragment]
+@lilypond[quote,verbatim,relative=2]
R1*2
\set skipBars = ##t
R1*2
@var{contexto}. Properties that have been set in enclosing contexts will
not be altered by an unset in an enclosed context:
-@lilypond[quote,verbatim,relative=2,fragment]
+@lilypond[quote,verbatim,relative=2]
\set Score.autoBeaming = ##t
<<
{
Los ajustes que se aplican solamente a un único paso de tiempo se
pueden escribir con @code{\once}, por ejemplo en
-@lilypond[quote,verbatim,relative=2,fragment]
+@lilypond[quote,verbatim,relative=2]
c4
\once \set fontSize = #4.7
c4
los grobs. Las decscripciones de los grobs reciben un nombre en
@code{MayúsculasDeCamello} (empezando en mayúscula). Contienen los
@q{ajustes predeterminados} para un tipo particular de grob, en forma
-de lista asociativa. Consulte @file{scm/@/define@/-grobs@/.scm} para
+de lista asociativa. Consulte @file{scm/define-grobs.scm} para
ver los ajustes de cada descripción de grob. Las descripciones de
grob se modifican con @code{\override}.
sobreescribiendo la propiedad @code{thickness} (grosor) del objeto
@code{Stem} (plica):
-@lilypond[quote, verbatim, relative=2, fragment]
+@lilypond[quote,verbatim,relative=2]
c4 c
\override Voice.Stem #'thickness = #3.0
c4 c
Si no se ha especificado ningún contexto en la instrucción
@code{\override}, se utiliza el contexto del nivel inferior:
-@lilypond[quote, verbatim, relative=2, fragment]
+@lilypond[quote,verbatim,relative=2]
{ \override Staff.Stem #'thickness = #3.0
<<
{
El efecto de una instrucción de sobreescritura @code{\override} se
puede deshacer con @code{\revert}:
-@lilypond[quote, verbatim, relative=2, fragment]
+@lilypond[quote,verbatim,relative=2]
c4
\override Voice.Stem #'thickness = #3.0
c4 c
los grobs del contexto afectado partiendo del momento actual y hacia
adelante:
-@lilypond[quote, verbatim, relative=2, fragment]
+@lilypond[quote,verbatim,relative=2]
{
<<
{
Se puede usar @code{\once} con @code{\override} para afectar solamente
al instante de tiempo actual:
-@lilypond[quote, verbatim, relative=2, fragment]
+@lilypond[quote,verbatim,relative=2]
{
<<
{
elemento de código de la entrada, puede usar la función @code{\tweak},
por ejemplo
-@lilypond[relative=2,verbatim]
+@lilypond[relative=2,verbatim,quote]
< c
\tweak #'color #red
d
El flujo musical que se genera a partir de una sección de un archivo
de entrada (incluido cualquier elemento insertado automáticamente)
-puede examinarse, véase @ref{Displaying music expressions}. Esto
-puede ser de utilidad en la determinación de lo que puede modificarse
-por medio de una instrucción @code{\tweak}.
+puede examinarse, véase @rextend{Presentación de las expresiones musicales}.
+Esto puede ser de utilidad en la determinación de lo que
+puede modificarse por medio de una instrucción @code{\tweak}.
@seealso
Manual de aprendizaje:
@rlearning{Métodos de trucaje}.
-Referencia de la notación:
-@ref{Presentación de expresiones musicales}.
+Manual de extensión:
+@rextend{Presentación de las expresiones musicales}.
@knownissues
@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
@end ignore
+
+@node Modificación de las listas-A
+@subsection Modificación de las listas-A
+@translationof Modifying alists
+
+Ciertas propiedades configurables por parte del usuario se representan
+internamente como @emph{listas-A} (listas asociativas), que almacenan
+duplas de @emph{claves} y @emph{valores}. La estructura de una
+lista-A es la siguiente:
+
+@example
+'((@var{clave1} . @var{valor1})
+ (@var{clave2} . @var{valor2})
+ (@var{clave3} . @var{valor3})
+ @dots{})
+@end example
+
+Si una lista-A es una propiedad de un grob o una variable de
+@code{\paper}, sus claves se pueden modificar individualmente sin que
+afecte a las otras claves.
+
+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{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}):
+
+@example
+'((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{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
+\new PianoStaff <<
+ \new Staff { \clef treble c''1 }
+ \new Staff { \clef bass c1 }
+>>
+
+% reduced space between staves
+\new PianoStaff \with {
+ % this is the nested declaration
+ \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{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:
+
+@lilypond[quote,verbatim]
+\new PianoStaff \with {
+ \override StaffGrouper #'staff-staff-spacing =
+ #'((basic-distance . 0)
+ (minimum-distance . 0)
+ (padding . 0)
+ (stretchability . 0))
+} <<
+ \new Staff { \clef treble c''1 }
+ \new Staff { \clef bass c1 }
+>>
+@end lilypond
+
+Observe que cualquier clave que no haya sido relacionada
+explícitamente en la definición de la lista-A, será reiniciada a sus
+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{basic-distance} si no se fija). Así, las dos declaraciones siguientes
+son equivalentes:
+
+@example
+\override StaffGrouper #'staff-staff-spacing =
+ #'((basic-distance . 7))
+
+\override StaffGrouper #'staff-staff-spacing =
+ #'((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 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},
+@code{keySignature}, @code{timeSignatureSettings}, etc.). Estas
+propiedades sólo se pueden modificar redefiniéndolas completamente
+como listas-A.}
+
+
@node Conceptos y propiedades útiles
@section Conceptos y propiedades útiles
@translationof Useful concepts and properties
@seealso
Manual de utilización del programa:
-@rprogram{An extra staff appears}.
+@rprogram{Aparece un pentagrama de más}.
@node Distancias y medidas
@subsection Distancias y medidas
@code{\pt}@tie{}(puntos, 1/72.27 pulgadas). Las distancias de diseño
de página se pueden especificar también en unidades escalables (véase
el párrafo siguiente) adjuntando @code{\staff-space} a la cantidad.
-La disposición de página se describe en detalle en @ref{Formateo de
-las páginas}.
+La disposición de página se describe en detalle en
+@ref{Disposición de la página}.
Las distancias escaladas siempre se especifican en unidades de un
espacio del pentagrama o, más raramente, medio espacio del pentagrama.
@rlearning{Longitud y grosor de los objetos}.
Referencia de la notación:
-@ref{Formateo de las páginas},
+@ref{Disposición de la página},
@ref{Establecer el tamaño del pentagrama}.
especifican por las sub-listas @code{left-broken} y
@code{right-broken} de @code{bound-details}. Por ejemplo:
-@lilypond[relative=2,ragged-right,verbatim,fragment]
+@lilypond[relative=2,ragged-right,verbatim,quote]
\override Glissando #'breakable = ##t
\override Glissando #'(bound-details right-broken Y) = #-3
c1 \glissando \break
usa para escribir @i{cresc.}, @i{tr} y otros textos sobre los objetos
de extensión horizontales.
-@lilypond[quote,ragged-right,fragment,relative=2,verbatim]
+@lilypond[quote,ragged-right,relative=2,verbatim]
\override TextSpanner #'(bound-details left text)
= \markup { \small \bold Slower }
c2\startTextSpan b c a\stopTextSpan
@code{stencil-align-dir-y} o @code{stencil-offset} se moverá el
símbolo del borde verticalmente con relación al extremo de la línea:
-@lilypond[relative=1,fragment,verbatim]
+@lilypond[relative=1,quote,verbatim]
\override TextSpanner
#'(bound-details left stencil-align-dir-y) = #-2
\override TextSpanner
siguiente barra de compás si @code{to-barline} es verdadero y se
produce una divisoria antes de la siguiente nota.
-@lilypond[verbatim,quote,ragged-right,relative=2,fragment]
+@lilypond[verbatim,quote,ragged-right,relative=2]
\endSpanners
c2 \startTextSpan c2 c2
\endSpanners
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
He aquí un ejemplo de los distintos estilos de línea disponibles, y
cómo aplicarles ajustes finos.
-@lilypond[relative=2,ragged-right,verbatim,fragment]
+@lilypond[relative=2,ragged-right,verbatim,quote]
d2 \glissando d'2
\once \override Glissando #'style = #'dashed-line
d,2 \glissando d'2
computan al vuelo para cada uno de los objetos gráficos, pero es
posible sobreescribirlos:
-@lilypond[relative=2,ragged-right,verbatim,fragment]
+@c TODO Complete
+@lilypond[relative=2,ragged-right,verbatim,quote]
e2 \glissando f
\once \override Glissando #'(bound-details right Y) = #-2
e2 \glissando f
Archivos de inicio:
-@file{scm/@/define@/-grobs@/.scm}.
+@file{scm/define-grobs.scm}.
Fragmentos de código:
@rlsr{Tweaks and overrides}.
Extender:
-@rextend{Interfaces for programmers}.
+@rextend{Interfaces para programadores}.
Referencia de funcionamiento interno:
@rinternals{All layout objects}.
La posición de un objeto sobre el pentagrama viene dada por los
valores de las propiedades @code{X-offset} e @code{Y-offset}. El
-valor de @code{X-offset} da el desplazamiento desde la coordenada x
+valor de @code{X-offset} da el desplazamiento desde la coordenada X
del punto de referencia del objeto padre, y el valor de
@code{Y-offset} da el desplazamiento a partir de la línea central del
pentagrama. Los valores de @code{X-offset} y @code{Y-offset} se
pueden establecer directamente o se puede dejar que se calculen por
parte de procedimientos para conseguir una alineación con el objeto
-padre de distintas maneras.
+padre.
@warning{Muchos objetos tienen consideraciones de posicionamiento
especiales que hacen que se ignore o se modifique cualquier ajuste
realizado a @code{X-offset} o a @code{Y-offset}, a pesar de que el
-objeto contemple el interface @code{self-alignment-interface}.}
+objeto contemple el interface @code{self-alignment-interface}. La
+sobreescritura de las propiedades @code{X-offset} ó @code{Y-offset} a
+un valor fijo hace que se descarte la respectiva propiedad
+@code{self-alignment}.}
Por ejemplo, una alteración accidental se puede reposicionar
verticalmente estableciendo @code{Y-offset} pero los cambios a
@code{break-aligned-interface} para el posicionamiento de las letras
de ensayo sobre dichos objetos.
+@seealso
+@ref{Uso del break-alignable-interface},
+@rextend{Funciones de callback}.
+
@menu
-* Establecer directamente @code{X-offset} y @code{Y-offset}::
-* Uso del @code{side-position-interface}::
-* Uso del @code{self-alignment-interface}::
-* Uso del @code{break-alignable-interface}::
+* Establecer directamente X-offset e Y-offset::
+* Uso del side-position-interface::
+* Uso del self-alignment-interface::
+* Uso del break-alignable-interface::
@end menu
-@node Establecer directamente @code{X-offset} y @code{Y-offset}
+@node Establecer directamente X-offset e Y-offset
@unnumberedsubsubsec Establecer directamente @code{X-offset} y @code{Y-offset}
-@translationof Setting @code{X-offset} and @code{Y-offset} directly
+@translationof Setting X-offset and Y-offset directly
Se pueden dar valores numéricos a las propiedades @code{X-offset} y
@code{Y-offset} de muchos objetos. El ejemplo siguiente muestra tres
@c TODO write more
-@node Uso del @code{side-position-interface}
+@node Uso del side-position-interface
@unnumberedsubsubsec Uso del @code{side-position-interface}
-@translationof Using the @code{side-position-interface}
+@translationof Using the side-position-interface
Un objeto que contempla el @code{side-position-interface} se puede
colocar junto a su objeto padre de forma que los bordes especificados
@c TODO Add examples
-@node Uso del @code{self-alignment-interface}
+@node Uso del self-alignment-interface
@unnumberedsubsubsec Uso del @code{self-alignment-interface}
-@translationof Using the @code{self-alignment-interface}
+@translationof Using the self-alignment-interface
@emph{Auto-alineación horizontal de los objetos}
@c TODO The align-interface, BassFigureAlignment and VerticalAlignment
-@node Uso del @code{break-alignable-interface}
+@node Uso del break-alignable-interface
@unnumberedsubsubsec Uso del @code{break-alignable-interface}
-@translationof Using the @code{break-alignable-interface}
+@translationof Using the break-alignable-interface
@cindex alineación a objetos
@cindex break-align-symbols
se centran horizontalmente sobre el objeto:
@lilypond[verbatim,quote,relative=1]
-e1
-% the RehearsalMark will be centered above the Clef
+% The rehearsal mark will be centered above the Clef
\override Score.RehearsalMark #'break-align-symbols = #'(clef)
\key a \major
\clef treble
\mark "↓"
-e
-% the RehearsalMark will be centered above the TimeSignature
+e1
+% The rehearsal mark will be centered above the Time Signature
\override Score.RehearsalMark #'break-align-symbols = #'(time-signature)
\key a \major
\clef treble
\time 3/4
\mark "↓"
e2.
+% The rehearsal mark will be centered above the Breath Mark
+\override Score.RehearsalMark #'break-align-symbols = #'(breathing-sign)
+\key a \major
+\clef treble
+\time 4/4
+e1
+\breathe
+\mark "↓"
@end lilypond
Se puede especificar una lista de posibles objetos para la alineación.
con el punto en el que se encontraría la línea divisoria.
@lilypond[verbatim,quote,relative=1]
-e1
-% the RehearsalMark will be centered above the Key Signature
+% The rehearsal mark will be centered above the Key Signature
\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
\key a \major
\clef treble
\mark "↓"
-e
-% the RehearsalMark will be centered above the Clef
+e1
+% The rehearsal mark will be centered above the Clef
\set Staff.explicitKeySignatureVisibility = #all-invisible
\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
-\key a \minor
+\key a \major
\clef bass
\mark "↓"
-e,
+gis,,1
+% The rehearsal mark will be centered above the Bar Line
+\set Staff.explicitKeySignatureVisibility = #all-invisible
+\set Staff.explicitClefVisibility = #all-invisible
+\override Score.RehearsalMark #'break-align-symbols = #'(key-signature clef)
+\key a \major
+\clef treble
+\mark "↓"
+e''1
@end lilypond
La alineación de la letra de ensayo con relación al objeto de notación
los pentagramas.
@lilypond[verbatim,quote,relative=1]
-% The RehearsalMark will be centered above the KeySignature
+% The RehearsalMark will be centered above the Key Signature
\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
\key a \major
\clef treble
\time 4/4
\mark "↓"
e1
-% The RehearsalMark will be aligned with the left edge of the KeySignature
+% The RehearsalMark will be aligned with the left edge of the Key Signature
\once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT
\mark "↓"
\key a \major
-e
-% The RehearsalMark will be aligned with the right edge of the KeySignature
+e1
+% The RehearsalMark will be aligned with the right edge of the Key Signature
\once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT
\key a \major
\mark "↓"
-e
+e1
@end lilypond
La letra de ensayo también se puede desplazar al borde derecho o
pentagrama:
@lilypond[verbatim,quote,relative=1]
-% The RehearsalMark will be aligned with the left edge of the KeySignature
+% The RehearsalMark will be aligned with the left edge of the Key Signature
% and then shifted right by 3.5 staff-spaces
\override Score.RehearsalMark #'break-align-symbols = #'(key-signature)
\once \override Score.KeySignature #'break-align-anchor = #3.5
\key a \major
\mark "↓"
-e
-% The RehearsalMark will be aligned with the left edge of the KeySignature
+e1
+% The RehearsalMark will be aligned with the left edge of the Key Signature
% and then shifted left by 2 staff-spaces
\once \override Score.KeySignature #'break-align-anchor = #-2
\key a \major
\mark "↓"
-e
+e1
@end lilypond
Dondequiera que se necesite reutilizar trucos con distintas
expresiones musicales, con frecuencia conviene hacer que el truco
-forme parte de una función musical. En esta sección estudiaremos
-solamente las funciones de @emph{sustitución}, en las que el objeto es
-sustituir una variable dentro de un fragmento de código de entrada de
-LilyPond. Se describen otras funciones más complejas en
-@rextend{Music functions}.
+forme parte de una @emph{función musical}. En esta sección
+estudiaremos solamente las funciones de @emph{sustitución}, en las que
+el objeto es sustituir una variable dentro de un fragmento de código
+de entrada de LilyPond. Se describen otras funciones más complejas en
+@rextend{Funciones musicales}.
@menu
* Sintaxis de las funciones de sustitución::
-* Tipos de argumento comunes::
* Ejemplos de funciones de sustitución::
@end menu
@example
funcion =
-#(define-music-function (parser location @var{var1} @var{var2}...@var{vari}... )
- (@var{tipo-de-var1?} @var{tipo-de-var2?}...@var{tipo-de-vari?}...)
- #@{
- @emph{...música...}
- #@})
+#(define-music-function
+ (parser location @var{arg1} @var{arg2} @dots{})
+ (@var{type1?} @var{type2?} @dots{})
+ #@{
+ @var{@dots{}música@dots{}}
+ #@})
@end example
@noindent
donde
@multitable @columnfractions .33 .66
-@item @var{vari} @tab @var{i}-ésima variable
-@item @var{tipo-de-vari?} @tab tipo de la variable @var{i}-ésima
-@item @var{...música...} @tab entrada de LilyPond normal, que utiliza variables como @code{#$var1}, etc.
+@item @code{@var{argN}}
+@tab @var{n}-ésimo argumento
+
+@item @code{@var{typeN?}}
+@tab @emph{predicado de tipo} de Scheme para el que @code{@var{argN}}
+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}).
@end multitable
-Los tipos de variable comunes se describen en @ref{Tipos de argumento
-comunes}. Hay una descripción más completa de los tipos de variable
-en @rextend{Music function syntax}.
Los argumentos @code{parser} y @code{location} son necesarios, y se
utilizan en algunas situaciones avanzadas como se encuentra descrito
-en @rextend{Music function syntax}. Para las funciones de
-sustitución, tan sólo hemos de asegurarnos de incluirlos.
-
-@seealso
-
-Referencia de la notación:
-@ref{Tipos de argumento comunes}.
+en @rextend{Sintaxis de las funciones musicales}. Para las funciones
+de sustitución, tan sólo hemos de asegurarnos de incluirlos.
-Expansión de LilyPond:
-@rextend{Music function syntax}.
-
-@node Tipos de argumento comunes
-@subsection Tipos de argumento comunes
-@translationof Common argument types
+También es necesaria la lista de predicados de tipo. Algunos de los
+predicados de tipo más comunes que se utilizan en las funciones
+musicales son:
-Para hacer posible la comprobación de errores, se debe definir el tipo
-de cada argumento que se pasa a una función musical. Algunos de los
-tipos de variable comunes están relacionados en la tabla que aparece
-más abajo.
+@example
+boolean?
+cheap-list? @emph{(utilizar en lugar de }@q{list?}@emph{ para un procesado más rápido)}
+ly:music?
+markup?
+number?
+pair?
+string?
+symbol?
+@end example
-Los siguientes tipos de entrada se pueden utilizar como variables
-dentro de una función musical. La lista no es exhaustiva; hay más
-información sobre los posibles tipos de variable en
-@rextendnamed{Music function syntax,Sintaxis de las funciones
-musicales}.
+@noindent
+Para ver una lista de los predicados de tipo disponibles, consulte
+@ref{Predicados de tipo predefinidos}. También se permiten los
+predicados de tipo definidos por el usuario.
-@multitable @columnfractions .33 .66
-@headitem Tipo de entrada @tab notación de @var{tipo-de-vari?}
-@item Entero @tab @code{integer?}
-@item Flotante (número decimal) @tab @code{number?}
-@item Cadena de caracteres @tab @code{string?}
-@item Marcado @tab @code{markup?}
-@item Expresión musical @tab @code{ly:music?}
-@item Dupla de Scheme @tab @code{pair?}
-@end multitable
@seealso
+Referencia de la notación:
+@ref{Predicados de tipo predefinidos}.
+
Expansión de LilyPond:
-@rextend {Music function syntax}.
+@rextend{Sintaxis de las funciones musicales}.
Archivos instalados:
@file{lily/music-scheme.cc},
-@file{scm/c++.scm}.
+@file{scm/c++.scm},
+@file{scm/lily.scm}.
@node Ejemplos de funciones de sustitución
del relleno de un elemento de inscripción de texto TextScript:
@lilypond[quote,verbatim,ragged-right]
-padText = #(define-music-function (parser location padding) (number?)
- #{
- \once \override TextScript #'padding = #$padding
- #})
+padText =
+#(define-music-function
+ (parser location padding)
+ (number?)
+ #{
+ \once \override TextScript #'padding = $padding
+ #})
\relative c''' {
c4^"piu mosso" b a b
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 note)
- (ly:music?)
- #{
- \once \override Voice.NoteHead #'stencil =
- #ly:text-interface::print
- \once \override Voice.NoteHead #'text =
- \markup \musicglyph #"custodes.mensural.u0"
- \once \override Voice.Stem #'stencil = ##f
- $note
- #})
+custosNote =
+#(define-music-function
+ (parser location note)
+ (ly:music?)
+ #{
+ \once \override Voice.NoteHead #'stencil =
+ #ly:text-interface::print
+ \once \override Voice.NoteHead #'text =
+ \markup \musicglyph #"custodes.mensural.u0"
+ \once \override Voice.Stem #'stencil = ##f
+ $note
+ #})
-{ c' d' e' f' \custosNote g' }
+\relative c' { c4 d e f \custosNote g }
@end lilypond
-Se pueden definir funciones de sustitución con varios argumentos:
+Se pueden definir funciones de sustitución con más de un argumento:
@lilypond[quote,verbatim,ragged-right]
-tempoPadded = #(define-music-function (parser location padding tempotext)
- (number? string?)
-#{
- \once \override Score.MetronomeMark #'padding = $padding
- \tempo \markup { \bold $tempotext }
-#})
+tempoPadded =
+#(define-music-function
+ (parser location padding tempotext)
+ (number? string?)
+ #{
+ \once \override Score.MetronomeMark #'padding = $padding
+ \tempo \markup { \bold $tempotext }
+ #})
\relative c'' {
\tempo \markup { "Low tempo" }
}
@end lilypond
-@c @seealso
-
-
+@c TODO: add appropriate @@ref's here.