X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Fes%2Fuser%2Fchanging-defaults.itely;h=ae87fdcc21e2c5b2e0b613d3d52f1a507a23ebbd;hb=5c14a087ca6cbd665fd631452b7b1283ba0387c3;hp=52892a8a3f4f263d03f7ba89af85d052bb0d1294;hpb=791d0b0d334efde3617e444450d1b3535e0ceeb7;p=lilypond.git diff --git a/Documentation/es/user/changing-defaults.itely b/Documentation/es/user/changing-defaults.itely index 52892a8a3f..ae87fdcc21 100644 --- a/Documentation/es/user/changing-defaults.itely +++ b/Documentation/es/user/changing-defaults.itely @@ -1,646 +1,89 @@ @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- @c This file is part of lilypond.tely @ignore - Translation of GIT committish: 90541cc59a99d0b53baccedc0327748b760fce68 + Translation of GIT committish: dfae8d829c653d1c011f8823cd51d09c33400b66 When revising a translation, copy the HEAD committish of the version that you are working on. See TRANSLATION for details. @end ignore +@c \version "2.11.61" + @node Changing defaults @chapter Changing defaults -El objetivo del diseño de LilyPond es proporcionar por defecto la más alta -calidad de los resultados. A pesar de ello, podría tener que cambiar -este resultado por defecto. La disposición sobre el papel se controla a través de un amplio número -de proverbiales @q{botones e interruptores.} Este capítulo no -relaciona todos y cada uno de los botones. Más bien da una visión de conjunto sobre qué grupos de controles -se encuentran disponibles y explica la forma de hallar el botón exacto que se debe utilizar para conseguir -un determinado efecto. +El objetivo del diseño de LilyPond es proporcionar por defecto la más +alta calidad de los resultados. A pesar de ello, podría tener que +cambiar este resultado por defecto. La disposición sobre el papel se +controla a través de un amplio número de proverbiales @q{botones e +interruptores}. Este capítulo no relaciona todos y cada uno de los +botones. Más bien da una visión de conjunto sobre qué grupos de +controles se encuentran disponibles y explica la forma de hallar el +botón exacto que se debe utilizar para conseguir un determinado +efecto. -@cindex Program reference +@cindex Referencia de funcionamiento interno -Los controles disponibles para los ajustes finos se describen en un documento -separado, +Los controles disponibles para los ajustes finos se describen en un +documento separado, @iftex -el Manual de referencia del programa. +el Manual de referencia de funcionamiento interno. @end iftex @ifnottex -la @ref{Top,Referencia del programa,,lilypond-internals}. +la @ref{Top,Referencia de funcionamiento interno,,lilypond-internals}. @end ifnottex -Dicho manual -relaciona todas las variables, funciones y opciones que se encuentran disponibles en -LilyPond. Está escrito como un documento HTML, que se puede encontrar en +Dicho manual relaciona todas las variables, funciones y opciones que +se encuentran disponibles en LilyPond. Está escrito como un documento +HTML, que se puede encontrar en @c leave the @uref as one long line. @uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/user/@/lilypond@/-internals/,on@/-line}, pero que también va incluido en el paquete de la documentación de LilyPond. Hay cuatro áreas en las que se pueden cambiar los valores por defecto: -@itemize @bullet +@itemize @item -Notación automática: cambiar la creación automática de los elementos de -notación. Por ejemplo, cambiar las reglas de barrado de las figuras. +Notación automática: cambiar la creación automática de los elementos +de notación. Por ejemplo, cambiar las reglas de barrado de las +figuras. @item -Salida: cambiar el aspecto de los objetos individuales. -Por ejemplo, cambiar las direcciones de las plicas o la situación exacta de -los subíndices. +Salida: cambiar el aspecto de los objetos individuales. Por ejemplo, +cambiar las direcciones de las plicas o la situación exacta de los +subíndices. @item -Contexto: modificar aspectos de la traducción de los eventos musicales en -notación. Por ejemplo, dar a cada pentagrama una indicación de compás distinta. +Contexto: modificar aspectos de la traducción de los eventos musicales +en notación. Por ejemplo, dar a cada pentagrama una indicación de +compás distinta. @item -Disposición de la página: cambiar el aspecto visual del espaciado, los saltos de -línea y las dimensiones de la página. Estas modificaciones se discuten -en @ref{Non-musical notation} y @ref{Spacing issues}. +Disposición de la página: cambiar el aspecto visual del espaciado, los +saltos de línea y las dimensiones de la página. Estas modificaciones +se discuten en @ref{General input and output} y @ref{Spacing issues}. @end itemize -Internamente, LilyPond utiliza el lenguaje Scheme (un dialecto de 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{@ref{Scheme tutorial} contiene un breve tutorial -sobre la introducción de números, listas, cadenas y símbolos en Scheme.} +Internamente, LilyPond utiliza el lenguaje Scheme (un dialecto de +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{@rlearning{Scheme +tutorial} contiene un breve tutorial sobre la introducción de números, +listas, cadenas y símbolos en Scheme.} @menu -* Automatic notation:: * Interpretation contexts:: -* The \override command:: -@end menu - - -@node Automatic notation -@section Automatic notation - -Esta sección describe la manera de cambiar la forma en que se dibujan automáticamente las alteraciones accidentales y -las barras de las figuras. - -@menu -* Automatic accidentals:: -* Setting automatic beam behavior:: +* Explaining the Internals Reference:: +* Modifying properties:: +* Useful concepts and properties:: +* Common properties:: +* Advanced tweaks:: @end menu -@node Automatic accidentals -@subsection Automatic accidentals -@cindex Alteraciones accidentales automáticas - -Las reglas más usuales para tipografiar las alteraciones se han colocado en una -función. Esta función se invoca de la manera siguiente - -@funindex set-accidental-style -@example -#(set-accidental-style 'ESTILO) -@end example - -@c TODO: check the context stuff below -@c -does it *really* work? -@c -the default contexts as specified in -@c scm/music-function.scm seem to be different -vv - -Opcionalmente la función puede tomar dos argumentos: el nombre del estilo de las -alteraciones y un argumento opcional que denota el contexto que se desea -cambiar: - -@example -#(set-accidental-style 'ESTILO #('CONTEXTO#)) -@end example - -Si no se da ningún nombre de contexto, @code{Staff} (pentagrama) es el valor predeterminado, -pero en lugar de esto puede aplicar el estilo de alteraciones a una sola -voz (contexto @code{Voice}). - -Están contemplados los siguientes estilos de alteraciones: - -@table @code -@item default -Es el comportamiento de composición tipográfica por omisión. Corresponde -a la práctica común vigente en el s.XVIII: las alteraciones se -recuerdan hasta el final del compás en que aparecen -y sólo en la misma octava. - -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - %#(set-accidental-style 'default) - \musicA } - \context Staff = "down"{ - %#(set-accidental-style 'default) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'default" }}} -} -@end lilypond - -@item voice -El comportamiento normal es recordar las alteraciones al nivel del -pentagrama. Sin embargo, esta variable tipografía las alteraciones -para cada voz individual. Aparte de esto, la regla es similar a -@code{default}. - -@example - \new Staff << - #(set-accidental-style 'voice) - @{ @dots{} @} - >> -@end example - -Como resultado, las alteraciones de una voz no se cancelan en las otras voces, -lo que a menudo produce un resultado no deseado: en el ejemplo que aparece a continuación, -es difícil determinar si el segundo @samp{La} se debe tocar -natural o sostenido. - -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - #(set-accidental-style 'voice) - \musicA } - \context Staff = "down"{ - #(set-accidental-style 'voice) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'voice" }}} -} -@end lilypond - -La opción @code{voice} se debe utilizar siempre que las voces -se vayan a leer independientemente por parte de músicos individuales. Si el pentagrama se va a -usar por parte de un único músico (p.ej. un director), entonces -se deben utilizar los estilos -@code{modern} o @code{modern-cautionary}. - - -@item modern -@funindex modern style accidentals -Esta regla corresponde a la práctica común del s.XX. Imprime -las mismas alteraciones que @code{default}, pero las alteraciones temporales -también se cancelan en octavas distintas. Es más, -dentro de la misma octava, también se cancelan dentro del compás siguiente: -en el ejemplo que aparece a continuación, fíjese en los dos becuadros que aparecen -en el segundo compás del pentagrama superior. - -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - #(set-accidental-style 'modern) - \musicA } - \context Staff = "down"{ - #(set-accidental-style 'modern) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'modern" }}} -} -@end lilypond - -@item @code{modern-cautionary} -@funindex modern-cautionary -Esta regla es parecida a @code{modern}, pero las alteraciones @q{adicionales} -(las que no se tipografían en el estilo @code{default}) se componen tipográficamente como alteraciones -de cortesía o precaución. Se imprimen en un tamaño reducido o, por omisión, -con paréntesis (esto se puede establecer definiendo la propiedad @code{cautionary-style} -del objeto @internalsref{AccidentalSuggestion}. - -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - #(set-accidental-style 'modern-cautionary) - \musicA } - \context Staff = "down"{ - #(set-accidental-style 'modern-cautionary) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'modern-cautionary" }}} -} -@end lilypond - -@funindex modern-voice -@item modern-voice -Esta regla se usa para alteraciones que afectan a varias voces y que se leerán tanto por parte de músicos -que tocan una sola voz como por músicos que tocan todas las voces. Las alteraciones -se componen para cada voz, pero @emph{se cancelan} entre voces dentro del mismo -pentagrama (@internalsref{Staff}). - -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - #(set-accidental-style 'modern-voice) - \musicA } - \context Staff = "down"{ - #(set-accidental-style 'modern-voice) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'modern-voice" }}} -} -@end lilypond - -@funindex modern-voice-cautionary -@item modern-voice-cautionary -Esta regla es la misma que @code{modern-voice}, pero con las alteraciones -adicionales (las que faltaban en el estilo @code{voice}) impresas -como de precaución. Incluso aunque todas las alteraciones impresas por el estilo -@code{default} @emph{se imprimen} por esta variable, -algunas de ellas se imprimen como de precaución. - -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - #(set-accidental-style 'modern-voice-cautionary) - \musicA } - \context Staff = "down"{ - #(set-accidental-style 'modern-voice-cautionary) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'modern-voice-cautionary" }}} -} -@end lilypond - -@item piano -@funindex piano accidentals -Este estilo de alteraciones tiene lugar dentro de un contexto de pentagramas de piano, GrandStaff. Sin embargo, tendrá -que establecerlo explícitamente para @emph{cada uno} de los pentagramas individuales del grupo GrandStaff: - -@example -\new GrandStaff @{ << - \new Staff = "up" @{ << - #(set-accidental-style 'piano) - @{ @dots{} @} - >> @} - \new Staff = "down"@{ << - #(set-accidental-style 'piano) - @{ @dots{} @} - >> @} ->> @} -@end example - -Esta regla refleja la práctica del s.XX de notación para el piano. Su comportamiento es muy -parecido al estilo @code{modern}, pero aquí las alteraciones también se cancelan -entre pentagramas dentro del mismo grupo de piano @internalsref{GrandStaff} o -@internalsref{PianoStaff}. - -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - #(set-accidental-style 'piano) - \musicA } - \context Staff = "down"{ - #(set-accidental-style 'piano) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'piano" }}} -} -@end lilypond - -@item piano-cautionary -@funindex #(set-accidental-style 'piano-cautionary) -Igual que @code{#(set-accidental-style 'piano)} pero con las alteraciones adicionales -tipografiadas como de precaución. - -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - #(set-accidental-style 'piano-cautionary) - \musicA } - \context Staff = "down"{ - #(set-accidental-style 'piano-cautionary) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'piano-cautionary" }}} -} -@end lilypond - -@item no-reset -@funindex no-reset accidental style -Éste es igual que @code{default} pero con alteraciones que duran -@q{para siempre} y no solamente hasta el siguiente compás: -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - #(set-accidental-style 'no-reset) - \musicA } - \context Staff = "down"{ - #(set-accidental-style 'no-reset) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'no-reset" }}} -} -@end lilypond - -@item forget -Es algo así como lo contrario de @code{no-reset}: las alteraciones -no se recuerdan en absoluto. De aquí que todas las alteraciones -se componen tipográficamente como relativas a la armadura en vigor, sin que importe lo que haya aparecido en la música -anterior - -@lilypond[quote,ragged-right] -musicA = { << \relative { cis'8 fis, d'4 8 f bis4 | cis2. 4 | } \\ - \relative { ais'2 cis, | fis8 b a4 cis2 | } >> } - -musicB = { \clef bass \new Voice { \voiceTwo \relative { < fis, a cis>4 - \change Staff = up cis' \change Staff = down - \change Staff = up dis' | \change Staff = down 4 gis - 2 | } }} - -\score { - \new PianoStaff { - << \context Staff = "up" { - #(set-accidental-style 'forget) - \musicA } - \context Staff = "down"{ - #(set-accidental-style 'forget) - \musicB } >> } - \header { piece = \markup {\fill-line { \fontsize #3 "'forget" }}} -} -@end lilypond -@end table - - -@seealso - -Referencia del programa: @internalsref{Accidental_engraver}, -@internalsref{Accidental}, @internalsref{AccidentalSuggestion} and @internalsref{AccidentalPlacement}. - - -@refbugs - -Las notas simultáneas se considera que están introducidas en modo -secuencial. Esto significa que dentro de un acorde las alteraciones se componen como si -las notas del acorde ocurriesen una a una, en el orden en que aparecen en el código del archivo -de entrada. Esto supone un problema cuando las alteraciones -de un acorde dependen unas de otras, -lo cual no sucede para el estilo de alteraciones por defecto. El problema -se puede solucionar insertando manualmente @code{!} y @code{?} para las notas -problemáticas. - - -@node Setting automatic beam behavior -@subsection Setting automatic beam behavior - -@funindex autoBeamSettings -@funindex (end * * * *) -@funindex (begin * * * *) -@cindex barras automáticas, ajuste fino -@cindex ajuste fino de las barras automáticas - -@c [TODO: use \applyContext] - -En compases normales, las barras de figura automáticas pueden comenzar en cualquier nota -pero sólo pueden acabar en ciertas posiciones dentro del compás: las barras pueden acabar sobre un pulso -o en duraciones especificadas por las propiedades que están dentro de -@code{autoBeamSettings}. Las propiedades de @code{autoBeamSettings} -consisten en una lista de reglas sobre dónde pueden comenzar y acabar las barras. Las -reglas por defecto de @code{autoBeamSettings} están definidas en el archivo -@file{scm/@/auto@/-beam@/.scm}. - -Para añadir una regla a la lista, utilice -@example -#(override-auto-beam-setting '(be p q n m) a b [contexto]) -@end example - -@itemize @bullet - -@item @code{be} es "begin" (comienzo) o "end" (final). - -@item @code{p/q} es la duración de la figura para la que quiere añadir -una regla. Se considera que una barra tiene la duración de su figura -más breve. Establezca el valor de @code{p} y @code{q} a un asterisco @code{'*'} para -que se aplique a cualquier barra. - -@item @code{n/m} es la indicación de compás para la que se aplica -esta regla. Establezca el valor de @code{n} y @code{m} a un asterisco @code{'*'} -para que la regla se aplique a cualquier compás. - -@item @code{a/b} es la posición dentro del compás en la que debe comenzar o terminar -la barra. - -@item @code{contexto} es opcional, y especifica el contexto en el que -se debe hacer el cambio. El valor por defecto es @code{'Voice}. -@code{#(score-override-auto-beam-setting '(A B C D) E F)} equivale a -@code{#(override-auto-beam-setting '(A B C D) E F 'Score)}. - -@end itemize - -Por ejemplo, si queremos que las barras automáticas siempre acaben sobre la primera -negra del compás, escriba - -@example -#(override-auto-beam-setting '(end * * * *) 1 4) -@end example - -Puede forzar los ajustes para las barras de forma que sólo afecten a las barras cuya figura -más breve sea una duración concreta - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\time 2/4 -#(override-auto-beam-setting '(end 1 16 * *) 1 16) -a16 a a a a a a a | -a32 a a a a16 a a a a a | -#(override-auto-beam-setting '(end 1 32 * *) 1 16) -a32 a a a a16 a a a a a | -@end lilypond - -Puede forzar los ajustes del barrado para que sólo afecten a ciertas indicaciones -de compás - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\time 5/8 -#(override-auto-beam-setting '(end * * 5 8) 2 8) -c8 c d d d -\time 4/4 -e8 e f f e e d d -\time 5/8 -c8 c d d d -@end lilypond - -También puede eliminar una regla de finalización de barra previamente establecida, usando - -@example -#(revert-auto-beam-setting '(be p q n m) a b [contexto]) -@end example - -@noindent -be, p, q, n, m, a, b y contexto significan lo mismo que antes. Fíjese en que las -reglas por defecto se describen en el archivo @file{scm/@/auto@/-beam@/.scm}, -por tanto podrá recuperar las reglas que no haya creado explícitamente. - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\time 4/4 -a16 a a a a a a a a a a a a a a a -#(revert-auto-beam-setting '(end 1 16 4 4) 1 4) -a16 a a a a a a a a a a a a a a a -@end lilypond - -La regla de una instrucción revert-auto-beam-setting debe corresponder exactamente con la -regla original. Esto es: no se tiene en cuenta ninguna expansión de comodines. - -@lilypond[quote,fragment,ragged-right,verbatim,relative=2] -\time 1/4 -#(override-auto-beam-setting '(end 1 16 1 4) 1 8) -a16 a a a -#(revert-auto-beam-setting '(end 1 16 * *) 1 8) % this won't revert it! -a a a a -#(revert-auto-beam-setting '(end 1 16 1 4) 1 8) % this will -a a a a -@end lilypond - - - -@c TODO: old material -- not covered by above stuff, I think. -Si las barras automáticas han de terminar sobre las negras de un compás de 5/4, especifique toas las -terminaciones -@example -#(override-auto-beam-setting '(end * * * *) 1 4 'Staff) -#(override-auto-beam-setting '(end * * * *) 1 2 'Staff) -#(override-auto-beam-setting '(end * * * *) 3 4 'Staff) -#(override-auto-beam-setting '(end * * * *) 5 4 'Staff) -@dots{} -@end example - -La misma sintaxis se puede usar para especificar los puntos de comienzo de las barras. En este -ejemplo, las barras automáticas sólo pueden terminar sobre una negra con puntillo -@example -#(override-auto-beam-setting '(end * * * *) 3 8) -#(override-auto-beam-setting '(end * * * *) 1 2) -#(override-auto-beam-setting '(end * * * *) 7 8) -@end example -En el compás de 4/4, esto significa que las barras automáticas sólo pueden terminar sobre -3/8 y sobre el cuarto pulso del compás (después de haber transcurrido un 3/4, esto es, dos veces -3/8). - -Si ocurre algún comportamiento inesperado de las barras, compruebe los ajustes del barrado automático -por defecto en el archivo @file{scm/@/auto@/-beam@/.scm} -en busca de un posible conflicto, ya que los finales de barra -definidos en este lugar se seguirán aplicando encima de sus propias sobreescrituras. Cualesquiera -finales no deseados dentro de los valores por defecto se deben contrarrestar específicamente para nuestro o nuestros -propios compases. - -Por ejemplo, para tipografiar finales de barra de @code{(3 4 3 2)} corcheas en un 12/8, comience -con - -@example -%%% contrarrestar los valores por defecto en scm/auto-beam.scm respecto al compás de 12/8 -#(revert-auto-beam-setting '(end * * 12 8) 3 8) -#(revert-auto-beam-setting '(end * * 12 8) 3 4) -#(revert-auto-beam-setting '(end * * 12 8) 9 8) - -%%% nuestros nuevos valores -#(override-auto-beam-setting '(end 1 8 12 8) 3 8) -#(override-auto-beam-setting '(end 1 8 12 8) 7 8) -#(override-auto-beam-setting '(end 1 8 12 8) 10 8) -@end example - -@cindex automáticas, generación de las barras -@cindex autobarrado -@funindex autoBeaming -@cindex letra - -Si se van a utilizar las barras para indicar los melismas de las canciones, entonces el barrado -automático se debe desactivar con @code{\autoBeamOff}. - - -@refcommands - -@funindex \autoBeamOff -@code{\autoBeamOff}, -@funindex \autoBeamOn -@code{\autoBeamOn}. - -@commonprop - -Los patrones de barrado se pueden alterar con la propiedad @code{beatGrouping}, - -@lilypond[quote,verbatim,relative=2,fragment,ragged-right] -\time 5/16 -\set beatGrouping = #'(2 3) -c8[^"(2+3)" c16 c8] -\set beatGrouping = #'(3 2) -c8[^"(3+2)" c16 c8] -@end lilypond - - -@refbugs - -Si una partitura termina con una barra automática sin finalizar y que aún -acepta más figuras, esta última barra no se imprimirá en absoluto. Lo mismo vale para -las voces polifónicas, introducidas con @code{<< @dots{} \\ @dots{} ->>}. Si una voz polifónica termina mientras una barra automática aún -acepta notas, entonces no aparece. - @node Interpretation contexts @section Interpretation contexts @@ -650,91 +93,92 @@ Esta sección explica qué son los contextos y cómo modificarlos. @menu * Contexts explained:: * Creating contexts:: -* Changing context properties on the fly:: * Modifying context plug-ins:: -* Layout tunings within contexts:: * Changing context default settings:: * Defining new contexts:: * Aligning contexts:: -* Vertical grouping of grobs:: @end menu @node Contexts explained @subsection Contexts explained -Cuando se imprime la música, se tienen que añadir a la salida una gran cantidad de elementos -notacionales. Por ejemplo, compare la entrada y la salida del siguiente ejemplo: +Cuando se imprime la música, se tienen que añadir a la salida una gran +cantidad de elementos notacionales. Por ejemplo, compare la entrada y +la salida del siguiente ejemplo: @lilypond[quote,verbatim,relative=2,fragment] cis4 cis2. g4 @end lilypond -La entrada es bastante escueta, pero en la salida se añaden líneas divisorias, alteraciones accidentales, -la clave y la indicación de compás. LilyPond @emph{interpreta} la -entrada. En esta fase se inspecciona la información musical en orden temporal, -de forma parecida a la lectura de una partitura de izquierda a derecha. Mientras se lee -la entrada, el programa recuerda dónde se encuentran los límites de los compases, y qué notas -requieren alteraciones explícitas. Esta información se puede presentar sobre varios -niveles. Por ejemplo, el efecto de una alteración accidental se encuentra limitada -a un solo pentagrama, mientras que una barra divisoria debe estar sincronizada a través -de la partitura de arriba a abajo. - -Dentro de LilyPond, estas reglas y pequeñas porciones de información se agrupan en -@emph{Contexts}. Algunos ejemplos de contextos son @context{Voice} (Voz), -@context{Staff} (Pauta o pentagrama) y @context{Score} (Partitura). Los contextos son jerárquicos, por -ejemplo: un @context{Staff} contener muchas @context{Voice}s, y una -@context{Score} puede contener muchos contextos de @context{Staff}. +La entrada es bastante escueta, pero en la salida se añaden líneas +divisorias, alteraciones accidentales, la clave y la indicación de +compás. LilyPond @emph{interpreta} la entrada. En esta fase se +inspecciona la información musical en orden temporal, de forma +parecida a la lectura de una partitura de izquierda a +derecha. Mientras se lee la entrada, el programa recuerda dónde se +encuentran los límites de los compases, y qué notas requieren +alteraciones explícitas. Esta información se puede presentar sobre +varios niveles. Por ejemplo, el efecto de una alteración accidental +se encuentra limitada a un solo pentagrama, mientras que una barra +divisoria debe estar sincronizada a través de la partitura de arriba a +abajo. + +Dentro de LilyPond, estas reglas y pequeñas porciones de información +se agrupan en @emph{Contexts}. Algunos ejemplos de contextos son +@code{Voice} (Voz), @code{Staff} (Pauta o pentagrama) y @code{Score} +(Partitura). Los contextos son jerárquicos, por ejemplo: un +@code{Staff} contener muchas @code{Voice}s, y una @code{Score} puede +contener muchos contextos de @code{Staff}. @quotation -@image{context-example,5cm,,} +@sourceimage{context-example,5cm,,} @end quotation -Cada contexto asume la responsabilidad de imponer algunas reglas de notación, -creando ciertos objetos de notación y manteniendo las propiedades -asociadas. Por ejemplo, el contexto @context{Voice} puede introducir una alteración -accidental y entonces el contexto @context{Staff} mantiene la regla de mostrar o -suprimir la alteración para el resto del compás. La -sincronización de las líneas divisorias se gestiona dentro del contexto de la partitura, @context{Score}. - -Sin embargo, en algunas músicas posiblemente no queramos que las líneas divisorias estén -sincronizada (pensemos en una partitura polimétrica en compases de 4/4 y de 3/4). En tales casos, -debemos modificar los ajustes por omisión de los contextos @context{Score} -y @context{Staff}. - -Para partituras muy sencillas, los contextos se crean implícitamente y no debemos -preocuparnos por ellos. Para piezas mayores, como por ejemplo cualquiera que tenga más de un pentagrama, -los contextos se deben crear explícitamente para asegurarnos -de que tendremos la cantidad exacta de pentagramas que necesitamos, -y que están en el orden correcto. Para tipografiar piezas -con notación especializada, puede ser útil modificar contextos existentes -o definir unos nuevos. - - -En la referencia del programa se encuentra una descripción completa de todos los contextos que están disponibles, -consulte +Cada contexto asume la responsabilidad de imponer algunas reglas de +notación, creando ciertos objetos de notación y manteniendo las +propiedades asociadas. Por ejemplo, el contexto @code{Voice} puede +introducir una alteración accidental y entonces el contexto +@code{Staff} mantiene la regla de mostrar o suprimir la alteración +para el resto del compás. La sincronización de las líneas divisorias +se gestiona dentro del contexto de la partitura, @code{Score}. + +Sin embargo, en algunas músicas posiblemente no queramos que las +líneas divisorias estén sincronizada (pensemos en una partitura +polimétrica en compases de 4/4 y de 3/4). En tales casos, debemos +modificar los ajustes por omisión de los contextos @code{Score} y +@code{Staff}. + +Para partituras muy sencillas, los contextos se crean implícitamente y +no debemos preocuparnos por ellos. Para piezas mayores, como por +ejemplo cualquiera que tenga más de un pentagrama, los contextos se +deben crear explícitamente para asegurarnos de que tendremos la +cantidad exacta de pentagramas que necesitamos, y que están en el +orden correcto. Para tipografiar piezas con notación especializada, +puede ser útil modificar contextos existentes o definir unos nuevos. + + +En la referencia del programa se encuentra una descripción completa de +todos los contextos que están disponibles, consulte @ifhtml -@internalsref{Contexts}. +@rinternals{Contexts}. @end ifhtml @ifnothtml -Traducción @arrow{} Contexto. +Traducción @expansion{} Contexto. @end ifnothtml -@c [TODO: describe propagation] - - @node Creating contexts @subsection Creating contexts -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. +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. -@itemize @bullet +@itemize @item -La instrucción más fácil es @code{\new}, y es también la más rápida de escribir. -Se antepone a una expresión musical, por ejemplo +La instrucción más fácil es @code{\new}, y es también la más rápida de +escribir. Se antepone a una expresión musical, por ejemplo @funindex \new @cindex nuevos, contextos @@ -765,26 +209,27 @@ La instrucción @code{\new} puede también dar nombre al contexto, @example \new @var{tipo} = @var{identificador} @var{música} @end example -Sin embargo, este nombre especificado por el usuario sólo se utiliza si no hay ya otro contexto -anterior con el mismo nombre. +Sin embargo, este nombre especificado por el usuario sólo se utiliza +si no hay ya otro contexto anterior con el mismo nombre. @funindex \context @item -Como @code{\new}, la instrucción @code{\context} también dirige una expresión musical -a un objeto de contexto, pero da al contexto un nombre explícito. La sintaxis -es +Como @code{\new}, la instrucción @code{\context} también dirige una +expresión musical a un objeto de contexto, pero da al contexto un +nombre explícito. La sintaxis es @example \context @var{tipo} = @var{identificador} @var{música} @end example -En esta forma, la instrucción buscará un contexto existente del @var{tipo} especificado -que tenga el nombre @var{identificador}. Si ese contexto aún no existe, se crea -un contexto nuevo con el nombre especificado. Esto es útil si nos vamos a referir -más tarde al contexto. Por ejemplo, cuando -se escribe la letra, la melodía está dentro de un contexto con nombre +En esta forma, la instrucción buscará un contexto existente del +@var{tipo} especificado que tenga el nombre @var{identificador}. Si +ese contexto aún no existe, se crea un contexto nuevo con el nombre +especificado. Esto es útil si nos vamos a referir más tarde al +contexto. Por ejemplo, cuando se escribe la letra, la melodía está +dentro de un contexto con nombre @example \context Voice = "@b{tenor}" @var{música} @@ -799,16 +244,16 @@ de forma que los textos se puedan alienar correctamente con sus notas, @noindent -Otro uso posible de los contextos con nombre es la fusión de dos expresiones musicales -distintas en un solo contexto. En el siguiente ejemplo, -se introducen por separado las articulaciones y las notas, +Otro uso posible de los contextos con nombre es la fusión de dos +expresiones musicales distintas en un solo contexto. En el siguiente +ejemplo, se introducen por separado las articulaciones y las notas, @example musica = @{ c4 c4 @} decoracion = @{ s4-. s4-> @} @end example -se combinan enviando los dos al mismo contexto @context{Voice}, +se combinan enviando los dos al mismo contexto @code{Voice}, @example << @@ -826,8 +271,8 @@ arts = { s4-. s4-> } @end lilypond Con este mecanismo, es posible definir un Urtext (una edición -original), con la posibilidad de poner articulaciones distintas sobre las -mismas notas. +original), con la posibilidad de poner articulaciones distintas sobre +las mismas notas. @cindex crear contextos @@ -839,20 +284,22 @@ La tercera instrucción para crear contextos es @noindent -Esto es similar a @code{\context} con @code{= @var{identificador}}, pero se corresponde con -cualquier contexto del tipo @var{tipo}, sin importar qué nombre se le ha dado. +Esto es similar a @code{\context} con @code{= @var{identificador}}, +pero se corresponde con cualquier contexto del tipo @var{tipo}, sin +importar qué nombre se le ha dado. -Esta variante se usa con expresiones musicales que se pueden interpretar en -varios niveles. Por ejemplo, la instrucción @code{\applyOutput} (véase -@ref{Running a function on all layout objects}). Sin una instrucción -@code{\context} explícita, normalmente se aplicaría a @context{Voice} +Esta variante se usa con expresiones musicales que se pueden +interpretar en varios niveles. Por ejemplo, la instrucción +@code{\applyOutput} (véase @ref{Running a function on all layout +objects}). Sin una instrucción @code{\context} explícita, normalmente +se aplicaría a @code{Voice} @example \applyOutput #'@var{contexto} #@var{función} % aplicar al contexto Voice @end example -Para que se interprete dentro de los niveles de @context{Score} o @context{Staff}, utilice las siguientes -formas: +Para que se interprete dentro de los niveles de @code{Score} o +@code{Staff}, utilice las siguientes formas: @example \applyOutput #'Score #@var{función} @@ -862,160 +309,38 @@ formas: @end itemize -@node Changing context properties on the fly -@subsection Changing context properties on the fly - -@cindex properties -@funindex \set -@cindex changing properties - -Cada contexto puede tener diferentes @emph{propiedades} o variables contenidas -en dicho contexto. Se pueden cambiar mientras se desarrolla la fase de interpretación. -Esto se consigue insertando la instrucción @code{\set} en la música, - -@example -\set @var{contexto}.@var{propiedad} = #@var{valor} -@end example - -Por ejemplo, -@lilypond[quote,verbatim,relative=2,fragment] -R1*2 -\set Score.skipBars = ##t -R1*2 -@end lilypond - -Esta instrucción hace que se salten los compases que no tienen ninguna nota. El resultado es que -los silencios multicompás se comprimen. El valor asignado es un objeto del lenguaje Scheme. En -este caso, es @code{#t}, el valor booleano Verdadero. - -Si el argumento @var{contexto} se deja en blanco, entonces se utiliza el contexto actual más bajo -(normalmente @context{ChordNames}, @context{Voice} o -@context{Lyrics}). En este ejemplo, - -@lilypond[quote,verbatim,relative=2,fragment] -c8 c c c -\set autoBeaming = ##f -c8 c c c -@end lilypond - -@noindent -el argumento @var{contexto} para la instrucción @code{\set} está omitido, por tanto -el barrado automático está desactivado en la @internalsref{Voice} (voz) actual. Fíjese en que -el contexto más bajo no siempre contiene la propiedad que quiere -cambiar. Por ejemplo, si intenta establecer la propiedad @code{skipBars} -(del contexto más bajo, en este caso @code{Voice}) no se producirá ningún -efecto. - -@lilypond[quote,verbatim,relative=2,fragment] -R1*2 -\set skipBars = ##t -R1*2 -@end lilypond - -Los contextos son jerárquicos, de forma que si se especificó un contexto mayor, por -ejemplo @context{Staff}, entonces el cambio también se aplicaría a todos los -@context{Voice}s o contextos de voz en el pentagrama actual. El cambio se aplica -@q{al vuelo}, mientras transcurre la música, de manera que el ajuste sólo afecta al segundo -grupo de corcheas. - -@funindex \unset - -También existe una instrucción @code{\unset}, -@example -\unset @var{contexto}.@var{propiedad} -@end example - -@noindent -que quita la definición de la @var{propiedad}. Esta instrucción quita -la definición solamente si está establecida dentro del @var{contexto} especificado, por lo que - -@example -\set Staff.autoBeaming = ##f -@end example - -@noindent -introduce un ajuste de propiedad en el nivel del contexto @code{Staff}. El ajuste también se aplica -a la @code{Voice} actual. Sin embargo, - -@example -\unset Voice.autoBeaming -@end example - -@noindent -no tiene ningún efecto. Para cancelar este ajuste, el @code{\unset} -se debe especificar en el mismo nivel que el @code{\set} original. En -otras palabras, deshacer el efecto de @code{Staff.autoBeaming = ##f} -requiere -@example -\unset Staff.autoBeaming -@end example - -Igual que @code{\set}, el argumento @var{contexto} no tiene que especificarse para un contexto -que está en la parte más baja, por lo que las dos instrucciones - -@example -\set Voice.autoBeaming = ##t -\set autoBeaming = ##t -@end example - -@noindent -son equivalentes. - - -@cindex \once -Los ajustes que se quieren aplicar a un paso de tiempo único se pueden escribir -con @code{\once}, por ejemplo en - -@lilypond[quote,verbatim,relative=2,fragment] -c4 -\once \set fontSize = #4.7 -c4 -c4 -@end lilypond - -la propiedad @code{fontSize} pierde su valor automáticamente después de la segunda -nota. - -En la referencia del programa hay una descripción detallada de todas las propiedades de contexto disponibles, -véase -@ifhtml -@internalsref{Tunable context properties}. -@end ifhtml -@ifnothtml -Traducción @arrow{} propiedades de contexto ajustables. -@end ifnothtml - - @node Modifying context plug-ins @subsection Modifying context plug-ins Los contextos de notación (como @code{Score} y @code{Staff}) no sólo -almacenan propiedades, -también contienen plug-ins o añadidos llamados @q{engravers} (grabadores) que crean elementos -de notación. Por ejemplo, el contexto @code{Voice} contiene un -@code{Note_head_engraver} (grabador de las cabezas de nota) y el contexto @code{Staff} contiene un -@code{Key_signature_engraver} (grabador de la armadura). - -Para ver una descripción completa de cada uno de los añadidos, consulte +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{Staff} contiene un grabador @code{Key_signature_engraver} que +crea la indicación de compás. + +Para ver una descripción completa de todos y cada uno de los +complementos, consulte @ifhtml -@internalsref{Engravers}. +@rinternals{Engravers and Performers}. @end ifhtml @ifnothtml -Referencia del programa @arrow Traducción @arrow{} Grabadores. +Referencia de funcionamiento interno @expansion{} Traducción @expansion{} Grabadores. @end ifnothtml -cada uno de los contextos descritos en +Cada contexto que se describe en @ifhtml -@internalsref{Contexts} +@rinternals{Contexts} @end ifhtml @ifnothtml -Referencia del programa @arrow Traducción @arrow{} Contexto. +Referencia de funcionamiento interno @expansion{} Traducción @expansion{} Contexto. @end ifnothtml -relaciona los grabadores utilizados para ese contexto. +relaciona los grabadores que se usan para ese contexto. -Puede ser útil poner o quitar estos añadidos. Esto se hace +Puede ser de utilidad jugar un poco con estos complementos. Se hace iniciando un contexto nuevo con @code{\new} o @code{\context} y -modificándolo, +modificándolo: @funindex \with @@ -1033,9 +358,10 @@ modificándolo, @end example @noindent -donde los @dots{} serían el nombre de un grabador. A continuación se presenta un ejemplo sencillo -que quita los grabadores @code{Time_signature_engraver} y -@code{Clef_engraver} de un contexto @code{Staff}, +donde los @dots{} debe ser el nombre de un grabador. Aquí tenemos un +ejemplo sencillo que suprime los grabadores +@code{Time_signature_engraver} y @code{Clef_engraver} de un contexto +@code{Staff}: @lilypond[quote,relative=1,verbatim,fragment] << @@ -1051,22 +377,25 @@ que quita los grabadores @code{Time_signature_engraver} y >> @end lilypond -En el segundo pentagrama no hay indicación de compás ni clave. Ésta es -una forma un poco fuerte de hacer desaparecer objetos, porque afectará -al pentagrama completo. Este método también influye en el espaciado, lo que podría ser -deseable o no. Un método más -sofisticado de borrar objetos se muestra en @rlearning{Common tweaks}. - -El ejemplo siguiente muestra una aplicación práctica. Las líneas divisorias y las indicaciones -de compás están normalmente sincronizadas en toda la partitura. Esto se hace -por parte del @code{Timing_translator} y el grabador @code{Default_bar_line_engraver}. -Este añadido mantiene al día la administración de la indicación de compás, colocación -dentro del compás, etc. Moviendo el grabador desde el contexto @code{Score} al -contexto @code{Staff}, podemos tener una partitura donde cada pentagrama tiene su propia -indicación de compás. +En el segundo pentagrama no hay indicación de compás ni clave. Éste +es un método bastante rudimentario de hacer que desaparezcan los +objetos porque afecta a todo el pentagrama. Este método también +afecta al espaciado, lo que puede ser deseable o no serlo. Se +muestran métodos más sofisticados para quitar objetos en +@rlearning{Visibility and color of objects}. + +EL ejemplo siguiente muestra una aplicación práctica. Normalmente las +líneas divisorias y las indicaciones de compás están sincronizadas a +lo largo de toda la partitura. Lo hacen los grabadores +@code{Timing_translator} y @code{Default_bar_line_engraver}. Estos +complementos mantienen al día la administración de las indicaciones de +compás, posición dentro del compás, etc. Moviendo estos grabadores +desde el contexto de @code{Score} al de @code{Staff}, podemos +conseguir una partitura en la que cada pentagrama tiene su propio +compás independiente. @cindex polimétricas, partituras -@cindex Indicaciones de compás, varias +@cindex compases distintos al mismo tiempo @lilypond[quote,relative=1,ragged-right,verbatim,fragment] \new Score \with { @@ -1091,143 +420,31 @@ indicación de compás. @end lilypond -@node Layout tunings within contexts -@subsection Layout tunings within contexts - -Cada contexto es responsable de crear ciertos tipos de objetos -gráficos. Los ajustes utilizados para imprimir estos objetos también se almacenan en cada contexto. -Cambiando estos ajustes se puede alterar la apariencia visual de los -objetos. +@node Changing context default settings +@subsection Changing context default settings -La sintaxis de esto es +Los ajustes de las secciones previas ( @ref{The set command}, +@ref{Modifying context plug-ins} y @ref{Overview of modifying +properties}) también se pueden escribir separados de la música dentro +del bloque @code{\layout}: @example -\override @var{contexto}.@var{nombre} #'@var{propiedad} = #@var{valor} +\layout @{ + @dots{} + \context @{ + \Staff + + \set fontSize = #-2 + \override Stem #'thickness = #4.0 + \remove "Time_signature_engraver" + @} +@} @end example -Aquí @var{nombre} es el nombre de un objeto gráfico, como @code{Stem} (plica) o -@code{NoteHead} (cabeza de nota), y @var{propiedad} es una variable interna del sistema -de formateo (@q{propiedad del objeto gráfico o grob} o @q{propiedad de la disposición o layout}). El último es un -símbolo, por ello debe ir entre comillas. La subsección @ref{Constructing a -tweak} explica qué datos hay que cumplimentar para las variables @var{nombre}, @var{propiedad} y -@var{valor}. Aquí discutiremos solamente la funcionalidad de esta instrucción. - -La instrucción - -@verbatim -\override Staff.Stem #'thickness = #4.0 -@end verbatim - -@noindent -hace las plicas más gruesas (el valor por defecto es 1.3, tomando como unidad el grosor de las líneas del -pentagrama). Puesto que la orden especifica @context{Staff} como contexto, sólo se -aplica al pentagrama en curso. Otros pentagramas conservarán su apariencia visual -normal. Aquí podemos ver la orden en acción: - -@lilypond[quote,verbatim,relative=2,fragment] -c4 -\override Staff.Stem #'thickness = #4.0 -c4 -c4 -c4 -@end lilypond - -La instrucción @code{\override} cambia la definición de la @code{Stem} (plica) -dentro del pentagrama @context{Staff} en curso. Después de que la orden se ha interpretado, -todas las plicas quedan engrosadas. - -Análogo a @code{\set}, el argumento @var{contexto} se puede dejar en blanco, -haciendo que se utilice el contexto por defecto, @context{Voice}. Al añadir -@code{\once} se aplicará el cambio solamente durante un paso de tiempo. - -@lilypond[quote,fragment,verbatim,relative=2] -c4 -\once \override Stem #'thickness = #4.0 -c4 -c4 -@end lilypond - -El @code{\override} debe hacerse antes de que el objeto haya -comenzado. Por ello, al alterar objetos de extensión o @emph{Spanner} tales como ligaduras -o barras de figuras, la instrucción @code{\override} debe ejecutarse en el momento en que se -crea el objeto. En este ejemplo, - -@lilypond[quote,fragment,verbatim,relative=2] -\override Slur #'thickness = #3.0 -c8[( c -\override Beam #'thickness = #0.6 -c8 c]) -@end lilypond - -@noindent -la ligadura es más gruesa, no así la barra. Esto es así porque la orden para la barra -@code{Beam} va después de que la barra Beam ha comenzado, así que no tiene ningún efecto. - -De forma análoga a @code{\unset}, la orden @code{\revert} para un contexto -deshace una orden @code{\override}; como con @code{\unset}, afecta solamente -los ajustes que se hayan hecho dentro del mismo contexto. En otras palabras, el -@code{\revert} del siguiente ejemplo no hace nada en absoluto. - -@example -\override Voice.Stem #'thickness = #4.0 -\revert Staff.Stem #'thickness -@end example - -Algunas opciones trucables reciben el nombre de @q{subpropiedades} y residen dentro de las -propiedades. Para trucarlas, utilice órdenes de la forma - -@c leave this as a long long -@example -\override @var{contexto}.@var{nombre} #'@var{propiedad} #'@var{subpropiedad} = #@var{valor} -@end example - -@noindent -tal y como - -@example -\override Stem #'details #'beamed-lengths = #'(4 4 3) -@end example - - -@seealso - -Funcionamiento interno: @internalsref{OverrideProperty}, @internalsref{RevertProperty}, -@internalsref{PropertySet}, @internalsref{Backend} y -@internalsref{All layout objects}. - - -@refbugs - -El back-end o parte profunda del programa no es muy estricta cuando se trata de la comprobación de tipos de las propiedades de los objetos. -Las referencias circulares en los valores de Scheme para las propiedades pueden causar cuelgues o -terminaciones abruptas, o las dos cosas. - - -@node Changing context default settings -@subsection Changing context default settings - -Los ajustes de las subsecciones previas (@ref{Changing context -properties on the fly}, @ref{Modifying context plug-ins} y -@ref{Layout tunings within contexts}) también se pueden escribir separados de la música -dentro del bloque @code{\layout}, +La instrucción @code{\Staff} recupera la definición existente del +contexto de pentagrama de manera que se pueda modificar. -@example -\layout @{ - @dots{} - \context @{ - \Staff - - \set fontSize = #-2 - \override Stem #'thickness = #4.0 - \remove "Time_signature_engraver" - @} -@} -@end example - -La orden @code{\Staff} saca la definición existente del contexto de -pentagrama de manera que pueda ser modificada. - -Las instrucciones +Los enunciados @example \set fontSize = #-2 \override Stem #'thickness = #4.0 @@ -1235,10 +452,11 @@ Las instrucciones @end example @noindent -afectan a todos los pentagramas de la partitura. Otros contextos se pueden modificar de forma -análoga. +afectan a todos los pentagramas de la partitura. Otros contextos se +pueden modificar de forma análoga. -La palabra clave @code{\set} es opcional dentro del bloque @code{\layout}, y así: +La palabra clave @code{\set} es opcional dentro del bloque +@code{\layout}, y así @example \context @{ @@ -1252,15 +470,17 @@ también funciona. -@refbugs +@knownissues -No es posible recolectar cambios de contexto en una variable y aplicarlos -a una definición @code{\context} mediante la referencia a esa variable. +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. -El @code{\RemoveEmptyStaffContext} sobreescribirá sus ajustes actuales -de @code{\Staff}. Si quiere cambiar los valores por defecto para un pentagrama que usa -@code{\RemoveEmptyStaffContext}, tendrá que hacerlo después de -llamar a @code{\RemoveemptyStaffContext}, es decir +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 @example \layout @{ @@ -1276,15 +496,16 @@ llamar a @code{\RemoveemptyStaffContext}, es decir @node Defining new contexts @subsection Defining new contexts -Los contextos específicos, como @context{Staff} y @code{Voice}, están construidos a base de -bloques sencillos. Es posible crear nuevos tipos de -contextos con combinaciones distintas de añadidos grabadores. +Los contextos específicos, como @code{Staff} y @code{Voice}, están +construidos a base de bloques sencillos. Es posible crear nuevos +tipos de contextos con combinaciones distintas de añadidos grabadores. El siguiente ejemplo muestra cómo construir un tipo diferente de contexto de -@context{Voice} partiendo de cero. Será parecido a +@code{Voice} partiendo de cero. Será parecido a @code{Voice}, pero imprime solamente cabezas centradas en forma de barra inclinada. Se puede usar para indicar improvisación en piezas de jazz, +@c KEEP LY @lilypond[quote,ragged-right] \layout { \context { \name ImproVoice @@ -1303,14 +524,14 @@ para indicar improvisación en piezas de jazz, \relative c'' { a4 d8 bes8 \new ImproVoice { c4^"ad lib" c - c4 c^"undress" c_"while playing :)" c } + c4 c^"desvístete" c_"mientras juegas :)" c } a1 } @end lilypond -Estos ajustes se definen dentro de un bloque @code{\context} que a su vez está dentro de un bloque -@code{\layout}, +Estos ajustes se definen dentro de un bloque @code{\context} que a su +vez está dentro de un bloque @code{\layout}, @example \layout @{ @@ -1320,8 +541,8 @@ Estos ajustes se definen dentro de un bloque @code{\context} que a su vez está @} @end example -En el siguiente análisis, la entrada de ejemplo que se muestra debe ir en el lugar de -los puntos suspensivos @dots{} del fragmento anterior. +En el siguiente análisis, la entrada de ejemplo que se muestra debe ir +en el lugar de los puntos suspensivos @dots{} del fragmento anterior. En primer lugar es necesario definir un nombre para el nuevo contexto: @@ -1329,16 +550,17 @@ En primer lugar es necesario definir un nombre para el nuevo contexto: \name ImproVoice @end example -Debido a que es parecido al contexto @context{Voice}, queremos órdenes que funcionen sobre -contextos de @context{Voice} (existentes) para que siga funcionando. Esto se consigue dando al -contexto nuevo un alias @context{Voice}, +Debido a que es parecido al contexto @code{Voice}, queremos órdenes +que funcionen sobre contextos de @code{Voice} (existentes) para que +siga funcionando. Esto se consigue dando al contexto nuevo un alias +@code{Voice}, @example \alias Voice @end example -El contexto imprimirá notas y textos explicativos, por ello tenemos que añadir los -grabadores que aportan esta funcionalidad, +El contexto imprimirá notas y textos explicativos, por ello tenemos +que añadir los grabadores que aportan esta funcionalidad, @example \consists Note_heads_engraver @@ -1352,10 +574,10 @@ Pero sólo necesitamos esto en la línea central, squashedPosition = #0 @end example -El grabador @internalsref{Pitch_squash_engraver} modifica las cabezas de nota (creadas -por el grabador @internalsref{Note_heads_engraver}) y establece sus posiciones verticales -al valor de @code{squashedPosition}, en este caso@tie{}@code{0}, -la línea central. +El grabador @rinternals{Pitch_squash_engraver} modifica las cabezas de +nota (creadas por el grabador @rinternals{Note_heads_engraver}) y +establece sus posiciones verticales al valor de +@code{squashedPosition}, en este caso@tie{}@code{0}, la línea central. Las notas parecen barras inclinadas y no tienen plica, @@ -1364,9 +586,9 @@ Las notas parecen barras inclinadas y no tienen plica, \override Stem #'transparent = ##t @end example -Todos estos añadidos tienen que cooperar, y esto se consigue con un añadido especial, -que se debe marcar con la palabra clave @code{\type}. -Este será siempre @internalsref{Engraver_group}, +Todos estos añadidos tienen que cooperar, y esto se consigue con un +añadido especial, que se debe marcar con la palabra clave +@code{\type}. Este será siempre @code{Engraver_group}, @example \type "Engraver_group" @@ -1389,10 +611,10 @@ Al juntarlo todo, obtenemos @end example @funindex \accepts -Los contextos dan lugar a jerarquías. Queremos colgar el contexto @context{ImproVoice} -bajo el contexto @context{Staff}, como simples @code{Voice}s normales. Por tanto, modificamos -la definición de @code{Staff} con la instrucción -@code{\accepts} (acepta), +Los contextos dan lugar a jerarquías. Queremos colgar el contexto +@code{ImproVoice} bajo el contexto @code{Staff}, como simples +@code{Voice}s normales. Por tanto, modificamos la definición de +@code{Staff} con la instrucción @code{\accepts} (acepta), @example \context @{ @@ -1402,8 +624,9 @@ la definición de @code{Staff} con la instrucción @end example @funindex \denies -Lo opuesto a @code{\accepts} (acepta) es @code{\denies} (deniega), -lo que a veces se necesita cuando se están reutilizando definiciones de contexto existentes. +Lo opuesto a @code{\accepts} (acepta) es @code{\denies} (deniega), lo +que a veces se necesita cuando se están reutilizando definiciones de +contexto existentes. Ponemos ambos dentro de un bloque @code{\layout}, como @@ -1420,7 +643,8 @@ Ponemos ambos dentro de un bloque @code{\layout}, como @} @end example -Así pues, la salida que aparece al comienzo de esta sub-sección se puede escribir como +Así pues, la salida que aparece al comienzo de esta sub-sección se +puede escribir como @example \relative c'' @{ @@ -1438,9 +662,11 @@ Así pues, la salida que aparece al comienzo de esta sub-sección se puede escri @node Aligning contexts @subsection 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 (@ref{Vocal ensembles}) y -un ossia, +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{Vocal ensembles}) y un ossia, + +@c ARREGLAR: esta sección no funciona en PDF. (¿?) @cindex ossia @findex alignAboveContext @@ -1460,94 +686,26 @@ ossia = { f4 f f f } @end lilypond -@node Vertical grouping of grobs -@subsection Vertical grouping of grobs - -Los grobs (objetos gráficos) VerticalAlignment y VerticalAxisGroup funcionan juntos. -VerticalAxisGroup agrupa distintos objetos gráficos como Staff, Lyrics, -etc. VerticalAlignment por su parte alinea verticalmente los diferentes objetos gráficos -agrupados por VerticalAxisGroup. Normalmente hay solamente un -VerticalAlignment por cada partitura, pero cada Staff, Lyrics, etc. tiene su propio -VerticalAxisGroup. - - -@node The \override command -@section The @code{\override} command -En la sección anterior ya hemos tocado una orden que -modifica los detalles de la presentación: la instrucción @code{\override}. En esta sección -observaremos con mayor detalle la manera de usar esta orden en la práctica. La -sintaxis general de esta orden es: -@example -\override @var{contexto}.@var{objeto_de_presentación} #'@var{propiedad_de_presentación} = #@var{valor} -@end example +@node Explaining the Internals Reference +@section Explaining the Internals Reference -Así establecemos la @var{propiedad_de_presentación} del @var{objeto_de_presentación} especificado, -que es miembro del @var{contexto}, al @var{valor} que se indica. @menu -* Constructing a tweak:: * Navigating the program reference:: * Layout interfaces:: * Determining the grob property:: -* Objects connected to the input:: -* Using Scheme code instead of \tweak:: -* \set versus \override:: -* Difficult tweaks:: +* Naming conventions:: @end menu -@node Constructing a tweak -@subsection Constructing a tweak - -Las instrucciones que cambian la salida generalmente tienen la forma - -@example -\override Voice.Stem #'thickness = #3.0 -@end example - -@noindent -Para construir este ajuste debemos primero averiguar estos datos: - -@itemize -@item el contexto: aquí @context{Voice} (voz). -@item el objeto de presentación: aquí @code{Stem} (plica). -@item la propiedad de presentación: aquí @code{thickness} (grosor). -@item un valor: aquí @code{3.0}. -@end itemize - -Ciertas opciones ajustables se llaman @q{subpropiedades} y residen en el interior -de las propiedades. Para trucarlas, utilice órdenes de la forma - -@example -\override Stem #'details #'beamed-lengths = #'(4 4 3) -@end example - -@cindex documentación interna -@cindex buscar objetos gráficos -@cindex gráficos, descripciones de los objetos -@cindex trucar -@funindex \override -@cindex interna, documentación - -Para muchas propiedades, independientemente del tipo de datos de la propiedad, el establecimiento del valor de la -propiedad a Falso ( @code{##f} ) dará como resultado su apagado o desactivación, haciendo que -Lilypond ignore por completo dicha propiedad. Esto es especialmente útil para -desactivar propiedades de objetos gráficos que, de otro modo, podrían causar problemas. - -Explicaremos a continuación cómo extraer esta información del manual de notación y de la -referencia del programa. - - - - @node Navigating the program reference @subsection Navigating the program reference -Supongamos que queremos mover la indicación de digitación del fragmento -siguiente: +Supongamos que queremos mover la indicación de digitación del +fragmento siguiente: @lilypond[quote,fragment,relative=2,verbatim] c-2 @@ -1555,102 +713,66 @@ c-2 f @end lilypond -Si hace una visita a la documentación en busca de instrucciones de digitación (en -@ref{Fingering instructions}), encontrará: +Si hace una visita a la documentación en busca de instrucciones de +digitación (en @ref{Fingering instructions}), encontrará: @quotation @seealso -Referencia del programa: @internalsref{Fingering}. - -@end quotation - - -@c outdated info; probably will delete. -@ignore -This fragment points to two parts of the program reference: a page -on @code{FingerEvent} and one on @code{Fingering}. - -The page on @code{FingerEvent} describes the properties of the music -expression for the input @code{-2}. The page contains many links -forward. For example, it says +Referencia de funcionamiento interno: @rinternals{Fingering}. -@quotation -Accepted by: @internalsref{Fingering_engraver}, @end quotation -@noindent -That link brings us to the documentation for the Engraver, the -plug-in, which says - -@quotation -This engraver creates the following layout objects: @internalsref{Fingering}. -@end quotation -In other words, once the @code{FingerEvent}s are interpreted, the -@code{Fingering_engraver} plug-in will process them. -@end ignore - -@ignore -@c I can't figure out what this is supposed to mean. -gp - -The @code{Fingering_engraver} is also listed to create -@internalsref{Fingering} objects, - -@c old info? it doesn't make any sense to me with our current docs. -This is also the -second bit of information listed under @b{See also} in the Notation -manual. -@end ignore - @ifnothtml -La referencia del programador se encuentra disponible en forma de documento HTML. Se recomienda -mucho que lo lea en la forma HTML, bien en línea o bien -descargando los archivos de la documentación HTML. Esta sección sería mucho más difícil de entender -si está utilizando el manual en -formato PDF. +La referencia del programador se encuentra disponible en forma de +documento HTML. Se recomienda mucho que lo lea en la forma HTML, bien +en línea o bien descargando los archivos de la documentación HTML. +Esta sección sería mucho más difícil de entender si está utilizando el +manual en formato PDF. @end ifnothtml -Siga el enlace que lleva a @internalsref{Fingering}. Al principio de la página, -puede ver +Siga el enlace que lleva a @rinternals{Fingering}. Al principio de la +página, puede ver @quotation -Los objetos de digitación se crean por parte de: @internalsref{Fingering_engraver} y -@internalsref{New_fingering_engraver}. +Los objetos de digitación se crean por parte de: +@rinternals{Fingering_engraver} y @rinternals{New_fingering_engraver}. @end quotation -Siguiendo los enlaces relacionados dentro de la referencia del programa, podemos seguir el -flujo de información dentro del programa: +Siguiendo los enlaces relacionados dentro de la referencia del +programa, podemos seguir el flujo de información dentro del programa: -@itemize @bullet +@itemize -@item @internalsref{Fingering}: -los objetos @internalsref{Fingering} se crean por parte de: -@internalsref{Fingering_engraver} +@item @rinternals{Fingering}: +los objetos @rinternals{Fingering} se crean por parte de: +@rinternals{Fingering_engraver} -@item @internalsref{Fingering_engraver}: -Tipos de música aceptados: @internalsref{fingering-event} +@item @rinternals{Fingering_engraver}: +Tipos de música aceptados: @rinternals{fingering-event} -@item @internalsref{fingering-event}: -El tipo de evento musical @code{fingering-event} está descrito en Expresiones musicales con el nombre de -@internalsref{FingerEvent} +@item @rinternals{fingering-event}: +El tipo de evento musical @code{fingering-event} está descrito en +Expresiones musicales con el nombre de @rinternals{FingeringEvent} @end itemize -Este camino se recorre en contra de la corriente de información del programa: comienza -por la salida y acaba en el evento de entrada. También podríamos haber -empezado por un evento de la entrada, y leído siguiendo el flujo de información -terminando en su caso en el objeto (u objetos) de la salida. +Este camino se recorre en contra de la corriente de información del +programa: comienza por la salida y acaba en el evento de entrada. +También podríamos haber empezado por un evento de la entrada, y leído +siguiendo el flujo de información terminando en su caso en el objeto +(u objetos) de la salida. -La referencia del programa también se puede examinar como un documento normal. Contiene -capítulos que tratan de +La referencia del programa también se puede examinar como un documento +normal. Contiene capítulos que tratan de @ifhtml -@internalsref{Music definitions}, +@rinternals{Music definitions}, @end ifhtml @ifnothtml @code{Music definitions} @end ifnothtml -de la @internalsref{Translation}, y del @internalsref{Backend}. Cada uno de los capítulos -relaciona todas las definiciones utilizadas y todas las propiedades que se pueden -ajustar. +de la @rinternals{Translation}, y del @rinternals{Backend}. Cada uno +de los capítulos relaciona todas las definiciones utilizadas y todas +las propiedades que se pueden ajustar. @node Layout interfaces @@ -1661,14 +783,16 @@ ajustar. @cindex grob La página HTML que pudimos ver en la sección anterior describe el -objeto de presentación llamado @internalsref{Fingering}. Dicho objeto es un -símbolo dentro de la partitura. Tiene propiedades que guardan números (como -grosores y direcciones), pero también punteros a objetos relacionados. Un -objeto de presentación también se llama un @emph{Grob}, que es una abreviatura de Graphical -Object (objeto gráfico). Para ver más detalles acerca de los objetos gráficos o Grobs, consulte @internalsref{grob-interface}. +objeto de presentación llamado @rinternals{Fingering}. Dicho objeto +es un símbolo dentro de la partitura. Tiene propiedades que guardan +números (como grosores y direcciones), pero también punteros a objetos +relacionados. Un objeto de presentación también se llama un +@emph{Grob}, que es una abreviatura de Graphical Object (objeto +gráfico). Para ver más detalles acerca de los objetos gráficos o +Grobs, consulte @rinternals{grob-interface}. -La página dedicada a @code{Fingering} relaciona las definiciones del objeto -@code{Fingering}. Por ejemplo, la página dice +La página dedicada a @code{Fingering} relaciona las definiciones del +objeto @code{Fingering}. Por ejemplo, la página dice @quotation @code{relleno} (dimensión, en espacios de pentagrama): @@ -1677,57 +801,61 @@ La página dedicada a @code{Fingering} relaciona las definiciones del objeto @end quotation @noindent -lo que significa que el número se mantendrá a una distancia de al menos 0.5 -de la cabeza de la nota. +lo que significa que el número se mantendrá a una distancia de al +menos 0.5 de la cabeza de la nota. -Cada objeto de presentación puede tener varias funciones como elemento notacional o -tipográfico. Por ejemplo, el objeto de digitación Fingering tiene -los siguientes aspectos +Cada objeto de presentación puede tener varias funciones como elemento +notacional o tipográfico. Por ejemplo, el objeto de digitación +Fingering tiene los siguientes aspectos -@itemize @bullet +@itemize @item -Su tamaño es independiente del espaciado horizontal, al contrario de las ligaduras o las barras de las figuras. +Su tamaño es independiente del espaciado horizontal, al contrario de +las ligaduras o las barras de las figuras. @item Es un elemento de texto. Casi seguro que es un texto muy corto. @item -este elemento de texto se tipografía con un tipo de letra, no como las ligaduras o las barras de las figuras. +este elemento de texto se tipografía con un tipo de letra, no como las +ligaduras o las barras de las figuras. @item -Horizontalmente, el centro del símbolo se debe alinear con el centro de la cabeza -de la nota. +Horizontalmente, el centro del símbolo se debe alinear con el centro +de la cabeza de la nota. @item Verticalmente, el símbolo se coloca cerca de la nota y del pentagrama. @item -La posición vertical también está coordinada con otros símbolos de superíndice -y de subíndice. +La posición vertical también está coordinada con otros símbolos de +superíndice y de subíndice. @end itemize -Cada uno de estos aspectos se capta en lo que se llaman @emph{interface}s, -que se relacionan al final de la página dedicada a @internalsref{Fingering} +Cada uno de estos aspectos se capta en lo que se llaman +@emph{interface}s, que se relacionan al final de la página dedicada a +@rinternals{Fingering} @quotation Este objeto contempla los siguientes interfaces: -@internalsref{item-interface}, -@internalsref{self-alignment-interface}, -@internalsref{side-position-interface}, @internalsref{text-interface}, -@internalsref{text-script-interface}, @internalsref{font-interface}, -@internalsref{finger-interface} y @internalsref{grob-interface}. +@rinternals{item-interface}, +@rinternals{self-alignment-interface}, +@rinternals{side-position-interface}, @rinternals{text-interface}, +@rinternals{text-script-interface}, @rinternals{font-interface}, +@rinternals{finger-interface} y @rinternals{grob-interface}. @end quotation -Al pulsar sobre cualquiera de los enlaces nos desplazaremos a la página del respectivo interfaz del -objeto. Cada interfaz tiene un cierto número de propiedades. Algunas de ellas -no son para que el usuario las pueda ajustar (@q{Propiedades internas}), pero otras -sí se pueden modificar. +Al pulsar sobre cualquiera de los enlaces nos desplazaremos a la +página del respectivo interfaz del objeto. Cada interfaz tiene un +cierto número de propiedades. Algunas de ellas no son para que el +usuario las pueda ajustar (@q{Propiedades internas}), pero otras sí se +pueden modificar. -Hemos estado hablando de @emph{el} objeto @code{Fingering}, pero realmente esto no significa -mucho. El archivo de inicialización (véase -@rlearning{Default files}) -@file{scm/@/define@/-grobs@/.scm} muestra el alma del @q{objeto}, +Hemos estado hablando de @emph{el} objeto @code{Fingering}, pero +realmente esto no significa mucho. El archivo de inicialización +(véase @ref{File structure}) @file{scm/@/define@/-grobs@/.scm} muestra +el alma del @q{objeto}, @example (Fingering @@ -1753,9 +881,10 @@ mucho. El archivo de inicialización (véase @end example @noindent -Como podemos ver, el objeto @code{Fingering} no es más que un montón de -valores de variables, y la página web de la Referencia del programa -se genera directamente a partir de esta definición. +Como podemos ver, el objeto @code{Fingering} no es más que un montón +de valores de variables, y la página web de la Referencia de +funcionamiento interno se genera directamente a partir de esta +definición. @node Determining the grob property @@ -1769,17 +898,18 @@ c-2 f @end lilypond -Puesto que el @b{2} se encuentra colocado verticalmente sobre su nota, tenemos que -negociar con el interfaz asociado con esta colocación. Esto se -hace usando @code{side-position-interface}. La página que describe este interface -dice: +Puesto que el @b{2} se encuentra colocado verticalmente sobre su nota, +tenemos que negociar con el interfaz asociado con esta colocación. +Esto se hace usando @code{side-position-interface}. La página que +describe este interface dice: @quotation @code{side-position-interface} Colocar un objeto víctima (este mismo) junto a otros objetos (el -soporte). La propiedad @code{direction} significa dónde poner el objeto -víctima con relación al soporte (¿a la izquierda o a la derecha, encima o debajo?) +soporte). La propiedad @code{direction} significa dónde poner el +objeto víctima con relación al soporte (¿a la izquierda o a la +derecha, encima o debajo?) @end quotation @cindex relleno @@ -1791,20 +921,22 @@ Debajo de esta descripción, la variable @code{padding} (relleno) se describe co @item padding (dimensión, en espacios de pentagrama) -Añadir esta cantidad de espacio adicional entre objetos que están unos junto a otros. +Añadir esta cantidad de espacio adicional entre objetos que están unos +junto a otros. @end table @end quotation -Aumentando el valor de @code{padding}, podemos alejar -la cifra de digitación de la cabeza de la nota. La siguiente orden inserta -un espacio en blanco de 3 espacios de pentagrama -entre la nota y la digitación: +Aumentando el valor de @code{padding}, podemos alejar la cifra de +digitación de la cabeza de la nota. La siguiente orden inserta un +espacio en blanco de 3 espacios de pentagrama entre la nota y la +digitación: @example \once \override Voice.Fingering #'padding = #3 @end example -Al insertar esta instrucción antes de que se haya creado el objeto Fingering, -es decir, antes del @code{c2}, llegamos al siguiente resultado: +Al insertar esta instrucción antes de que se haya creado el objeto +Fingering, es decir, antes del @code{c2}, llegamos al siguiente +resultado: @lilypond[quote,relative=2,fragment,verbatim] \once \override Voice.Fingering #'padding = #3 @@ -1814,131 +946,357 @@ f @end lilypond -En este caso, el contexto de este truco es @context{Voice}. Este -hecho se puede deducir también a partir de la referencia del programa, ya que la página dedicada al -añadido @internalsref{Fingering_engraver} dice +En este caso, el contexto de este truco es @code{Voice}. Este hecho +se puede deducir también a partir de la referencia del programa, ya +que la página dedicada al añadido @rinternals{Fingering_engraver} dice @quotation -El grabador Fingering_engraver es parte de los contextos: @dots{} @internalsref{Voice} +El grabador Fingering_engraver es parte de los contextos: @dots{} +@rinternals{Voice} @end quotation -@node Objects connected to the input -@subsection Objects connected to the input -@funindex \tweak +@node Naming conventions +@subsection Naming conventions -En ocasiones es posible tomar un atajo para realizar el ajuste fino de los objetos -gráficos. Para objetos que reusultan directamente de un elemento de código de la entrada, -puede usar la función @code{\tweak}, por ejemplo +@untranslated -@lilypond[relative=2,fragment,verbatim,ragged-right] -< - c - \tweak #'color #red d - g - \tweak #'duration-log #1 a ->4-\tweak #'padding #10 -. +@node Modifying properties +@section Modifying properties + +@menu +* Overview of modifying properties:: +* The set command:: +* The override command:: +* set versus override:: +* The tweak command:: +@end menu + + +@node Overview of modifying properties +@subsection Overview of modifying properties + +Cada contexto es responsable de la creación de ciertos tipos de +objetos gráficos. Los ajustes que se usan para imprimir estos objetos +también se almacenan por contexto. Mediante la modificación de estos +ajustes, se puede alterar la apariencia de los objetos. + +La sintaxis de esto es + +@example +\override @var{contexto}.@var{nombre} #'@var{propiedad} = #@var{valor} +@end example + +Aquí @var{nombre} es el nombre de un objeto gráfico, como @code{Stem} +o @code{NoteHead}, y @var{propiedad} es una variable interna del +sistema de formateo (@q{propiedad del grob} o @q{propiedad de +disposición}). Este último es un símbolo, y por ello debe ir +precedido de un apóstrofo. La subsección @ref{Modifying properties} +explica cómo se deben cumplimentar los conceptos @var{nombre}, +@var{propiedad} y @var{valor}. Aquí sólo nos ocuparemos de la +funcionalidad des esta instrucción. + +La instrucción + +@verbatim +\override Staff.Stem #'thickness = #4.0 +@end verbatim + +@noindent +hace más gruesas las plicas (el valor predeterminado es 1.3, con el +grosor de una línea del pentagrama como unidad). Puesto que la +instrucción especifica como contexto a @code{Staff}, sólo se aplica al +pentagrama actual. Otros pentagramas mantienen su aspecto normal. +Aquí vemos la instrucción en pleno funcionamiento: + +@lilypond[quote,verbatim,relative=2,fragment] +c4 +\override Staff.Stem #'thickness = #4.0 +c4 +c4 +c4 @end lilypond -Como podemos ver, las propiedades se establecen directamente dentro de los objetos, -sin hacer mención al nombre del grob ni al contexto en el que se tendría que -aplicar. +La instrucción @code{\override} modifica la definición de la plica +@code{Stem} dentro del pentagrama en curso @code{Staff}. Después de +que la instrucción se ha interpretado, todas las plicas se engrosan. -Esta técnica sólo funciona para los objetos que están conectados directamente a -un @internalsref{Event} (evento) del texto de entrada, por ejemplo +DE manera análoga a @code{\set}, el argumento @var{contexto} se puede +omitir, ocasionando que se utilice el contexto predeterminado +@code{Voice}. Al añadir @code{\once} se aplica el cambio durante un +solo paso de tiempo. -@itemize @bullet -@item cabezas de nota, producidas por chord-pitch (p. ej.: las notas de un acorde) -@item signos de articulación, producidos por instrucciones de articulación -@end itemize +@lilypond[quote,fragment,verbatim,relative=2] +c4 +\once \override Stem #'thickness = #4.0 +c4 +c4 +@end lilypond -Posiblemente no funcione para plicas y alteraciones accidentales (éstos están producidos -por parte de las cabezas de nota, no por los eventos musicales) ni para las claves (éstos no están producidos por -ninguna entrada musical, sino más bien a causa de un cambio en el valor de una propiedad). +El @code{\override} se debe hacer antes de que el objeto se inicia. +Por tanto, al alterar objetos @emph{Spanner} «de extensión» como +ligaduras o barras, la instrucción @code{\override} se debe ejecutar +en el momento en que se crea el objeto. En este ejemplo: -Existen muy pocos objetos que estén conectados @emph{directamente} al -resultado de salida. Una nota normal (como @code{c4}) no está conectada directamente -a la salida, así que +@lilypond[quote,fragment,verbatim,relative=2] +\override Slur #'thickness = #3.0 +c8[( c +\override Beam #'thickness = #0.6 +c8 c]) +@end lilypond + +@noindent +la ligadura es más gruesa pero la barra no lo es. Esto es así porque +la instrucción para @code{Beam}, la barra, va después de que la barra +se ha iniciado, y por ello no tiene ningún efecto. + +De forma análoga a @code{\unset}, la instrucción @code{\revert} para +un contexto deshace una instrucción @code{\override}; como con +@code{\unset}, solamente afecta a los ajustes que se hicieron dentro +del mismo contexto. En otras palabras, el @code{\revert} del +siguiente ejemplo no hace nada. @example -\tweak #'color #red c4 +\override Voice.Stem #'thickness = #4.0 +\revert Staff.Stem #'thickness +@end example + +Salgunas opciones «trucables» se llaman @q{subpropiedades} y residen +dentro de las propiedades normales. Para trucarlas, utilice +instrucciones de la forma + +@c leave this as a long long +@example +\override @var{context}.@var{name} #'@var{property} #'@var{subproperty} = #@var{value} @end example @noindent -no cambia el color. Consulte @ref{Displaying music expressions} para ver más -detalles. +tales como + +@example +\override Stem #'details #'beamed-lengths = #'(4 4 3) +@end example + + +@seealso +Referencia de funcionamiento interno: +@rinternals{OverrideProperty}, +@rinternals{RevertProperty}, +@rinternals{PropertySet}, +@rinternals{Backend} y +@rinternals{All layout objects}. -@node Using Scheme code instead of \tweak -@subsection Using Scheme code instead of @code{\tweak} -La principal desventaja de @code{\tweak} es su inflexibilidad -sintáctica. Por ejemplo, lo siguiente produce un error de sintaxis. +@knownissues + +El «back-end» o motor de salida no es muy estricto en la comprobación +de tipos de las propiedades de objetos. Las referencias cíclicas en +valores Scheme de propiedades pueden producir cuelgues o salidas +abruptas, o las dos cosas. + + +@node The set command +@subsection The @code{\set} command + +@cindex propiedades +@funindex \set +@cindex cambiar propiedades + +Cada contexto puede tener distintas @emph{propiedades}, variables +contenidas dentro de ese contexto. Se pueden cambiar mientras dura el +paso de interpretación. Se consigue insertando la instrucción +@code{\set} dentro de la música: @example -F = \tweak #'font-size #-3 -\flageolet +\set @var{contexto}.@var{propiedad} = #@var{valor} +@end example -\relative c'' @{ - c4^\F c4_\F -@} +Por ejemplo: +@lilypond[quote,verbatim,relative=2,fragment] +R1*2 +\set Score.skipBars = ##t +R1*2 +@end lilypond + +Estas instrucción salta los compases que no tienen notas. El +resultado es que los silencios multicompás se condensan. El valor +asignado es un objeto de Scheme. En este caso, es @code{#t}, el valor +booleano True o verdadero. + +Si se omite el argumento @var{context}, entonces se utiliza el +contexto actual de nivel más bajo (normalmente @code{ChordNames}, +@code{Voice} o @code{Lyrics}). En este ejemplo: + +@lilypond[quote,verbatim,relative=2,fragment] +c8 c c c +\set autoBeaming = ##f +c8 c c c +@end lilypond + +@noindent +el argumento @var{contexto} de la instrucción @code{\set} se omite, +así pues el barrado automático se desactiva en la voz actual. Observe +que el contexto de nivel más bajo no siempre contiene la propiedad que +queremos cambiar (por ejemplo, no tendrá ningún efecto intentar +establecer un valor para la propiedad @code{skipBars} del contexto de +nivel más bajo, en este caso @code{Voice}). + +@lilypond[quote,verbatim,relative=2,fragment] +R1*2 +\set skipBars = ##t +R1*2 +@end lilypond + +Los contextos so jerárquicos, y si se ha especificado un contexto +mayor, por ejemplo @code{Staff}, entonces el cambio se aplicaría +también a todos los contextos @code{Voice} dentro del pentagrama +actual. El cambio se aplica @q{al vuelo}, durante la música, de +manera que el ajuste sólo afecta al segundo grupo de corcheas. + +@funindex \unset + +También existe una instrucción @code{\unset}: +@example +\unset @var{contexto}.@var{propiedad} +@end example + +@noindent +que elimina la definición de @var{propiedad}. Esta instrucción +elimina la definición solamente si está establecida dentro de +@var{contexto}, de manera que + +@example +\set Staff.autoBeaming = ##f +@end example + +@noindent +introduce un ajuste de la propiedad en el nivel de @code{Staff}. El +ajuste también se aplica a la @code{Voice} actual. Sin embargo: + +@example +\unset Voice.autoBeaming @end example @noindent -En otras palabras, @code{\tweak} no se comporta como una articulación en lo que respecta a la -sintaxis; en concreto, no se puede adjuntar mediante -@samp{^} y @samp{_}. +no tiene ningúun efecto. Para cancelar este ajuste, se debe +especificar el @code{\unset} en el mismo nivel que el @code{\set} +original. Dicho de otra forma, para deshacer el efecto de +@code{Staff.autoBeaming = ##f} se necesita +@example +\unset Staff.autoBeaming +@end example -Utilizando el lenguaje Scheme, se puede dar un rodeo a este problema. La ruta hacia el resultado -se da en @ref{Adding articulation to notes (example)}, -especialmente cómo usar @code{\displayMusic} como guía de ayuda. +Como @code{\set}, el argumento @var{contexto} no se tiene que +especificar para un contexto del nivel más bajo, por lo que los dos +enunciados @example -F = #(let ((m (make-music 'ArticulationEvent - 'articulation-type "flageolet"))) - (set! (ly:music-property m 'tweaks) - (acons 'font-size -3 - (ly:music-property m 'tweaks))) - m) - -\relative c'' @{ - c4^\F c4_\F -@} +\set Voice.autoBeaming = ##t +\set autoBeaming = ##t +@end example + +@noindent +son equivalentes. + + +@cindex \once +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] +c4 +\once \set fontSize = #4.7 +c4 +c4 +@end lilypond + +la propiedad @code{fontSize} se deshace automáticamente después de la +segunda nota. + +En el manual de Referencia de funcionamiento interno hay una +descripción completa de todas las propiedades de contexto disponibles, +consulte +@ifhtml +@rinternals{Tunable context properties}. +@end ifhtml +@ifnothtml +Traducción @expansion{} Propiedades de contexto modificables por el +usuario. +@end ifnothtml + + + +@node The override command +@subsection The @code{\override} command + +Las instrucciones que modifican la salida tienen por lo general un +aspecto como + +@example +\override Voice.Stem #'thickness = #3.0 @end example @noindent -Aquí las propiedades @code{tweaks} del objeto de flageolet -@samp{m} (creado con @code{make-music}) se extraen con -@code{ly:music-property}, un nuevo par clave-valor para cambiar el -tamaño de la tipografía se antepone a la lista de propiedades con la función de Scheme -@code{acons}, y el resultado finalmente se escribe -de nuevo con @code{set!}. El último elemento del bloque -@code{let} es el valor devuelto, el propio @samp{m}. +Para construir este truco debemos determinar los siguientes datos: + +@itemize +@item el contexto: aquí @code{Voice}. +@item el objeto de presentación: aquí @code{Stem}. +@item la propiedad de presentación: aquí @code{thickness}. +@item un valor adecuado: aquí @code{3.0}. +@end itemize + +Ciertas opciones ajustables se denominan @q{subpropiedades} y residen +en el interior de las propiedades normales. Para modificarlas utilice +instrucciones de la forma + +@example +\override Stem #'details #'beamed-lengths = #'(4 4 3) +@end example + +@cindex documentación interna +@cindex buscar objetos gráficos +@cindex gráficos, descripción de los objetos +@cindex trucos +@funindex \override +@cindex interna, documentación + +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 +ignore por completo dicha propiedad. Esto es especialmente útil para +«apagar» propiedades de grobs (objetos gráficos) que de otra manera +causarína problemas. +Mostraremos a continuación cómo localizar esta información en el +manual de notación y en la referencia de funcionamiento interno. -@node \set versus \override +@node set versus override @subsection @code{\set} vs. @code{\override} Hemos visto dos formas de cambiar las propiedades: @code{\set} y -@code{\override}. De hecho, en realidad existen dos clases diferentes de -propiedades. - -Los contextos pueden tener propiedades, que por lo general reciben nombres en -@code{mayúsculasDeCamello}. Principalmente controlan la traducción -de la música a la notación, p.ej. @code{localKeySignature} (para determinar -si hay que imprimir las alteraciones accidentales), @code{measurePosition} (para -determinar cuándo imprimir una línea divisoria). Las propiedades de contexto pueden -ver modificado su valor con el tiempo según se interpreta una pieza de música; -@code{measurePosition} es un ejemplo obvio de esto. -Las propiedades de contexto se modifican con @code{\set}. +@code{\override}. De hecho, en realidad existen dos clases diferentes +de propiedades. + +Los contextos pueden tener propiedades, que por lo general reciben +nombres en @code{mayúsculasDeCamello}. Principalmente controlan la +traducción de la música a la notación, p.ej. @code{localKeySignature} +(para determinar si hay que imprimir las alteraciones accidentales), +@code{measurePosition} (para determinar cuándo imprimir una línea +divisoria). Las propiedades de contexto pueden ver modificado su +valor con el tiempo según se interpreta una pieza de música; +@code{measurePosition} es un ejemplo obvio de esto. Las propiedades +de contexto se modifican con @code{\set}. Hay un tipo especial de propiedad de contexto: la descripción del -elemento. Estas propiedades reciben nombres en @code{MayúsculasDeCamello} -(comenzando en letra mayúscula). Contienen los -@q{ajustes por defecto} para dicho elemento gráfico como una lista -asociativa. Consulte @file{scm/@/define@/-grobs@/.scm} -para ver qué tipos de ajustes hay. Las descripciones de los elementos -se pueden modificar con @code{\override}. +elemento. Estas propiedades reciben nombres en +@code{MayúsculasDeCamello} (comenzando en letra mayúscula). Contienen +los @q{ajustes por defecto} para dicho elemento gráfico como una lista +asociativa. Consulte @file{scm/@/define@/-grobs@/.scm} para ver qué +tipos de ajustes hay. Las descripciones de los elementos se pueden +modificar con @code{\override}. Realmente, @code{\override} es un atajo; @@ -1954,105 +1312,481 @@ es más o menos equivalente a \set @var{contexto}.@var{nombre} #'@var{propiedad} = #(cons (cons '@var{propiedad} @var{valor}) 4-\tweak #'padding #10 -. +@end lilypond -@item -Un tipo de ajuste difícil es la apariencia visual de los objetos de extensión, -como las ligaduras de expresión y de unión. Inicialmente sólo se crea uno de estos objetos, -y se pueden ajustar a través del mecanismo normal. Sin embargo, en ocasiones -los objetos de extensión atraviesan los saltos de línea. Si esto ocurre, estos objetos -se clonan. Se crea un objeto separado para cada grupo de pentagramas en el que está. -Son clones del objeto original y heredan todas las -propiedades, incluyendo los @code{\override}s. - - -En otras palabras, un @code{\override} siempre afecta a todas las piezas de un elemento de -extensión roto. Para cambiar sólo una parte del elemento de extensión en un salto de línea, -es necesario implicarse en el proceso de formateo. La función de callback -@code{after-line-breaking} contiene el procedimiento de Scheme que -se llama después de que se han determinado los saltos de línea, y de que los objetos de -presentación se han dividido sobre los diferentes sistemas o grupos de pentagramas. - -En el ejemplo siguiente, definimos un procedimiento -@code{my-callback}. Este procedimiento - -@itemize @bullet -@item -determina si hemos sido divididos en un salto de línea -@item -si es así, recupera todos los objetos divididos -@item -comprueba si nosotros somos el último de los objetos divididos -@item -si es así, establece @code{extra-offset}. +Como podemos ver, las propiedades se establecen directamente dentro de +los objetos, sin hacer mención al nombre del grob ni al contexto en el +que se tendría que aplicar. + +Esta técnica sólo funciona para los objetos que están conectados +directamente a un @rinternals{Event} (evento) del texto de entrada, +por ejemplo + +@itemize +@item cabezas de nota, producidas por chord-pitch (p. ej.: las notas de un acorde) +@item signos de articulación, producidos por instrucciones de articulación @end itemize -Este procedimiento se instala dentro de @internalsref{Tie} (ligadura de unión), de forma que la última parte -de la ligadura dividida se traslada hacia arriba. +Posiblemente no funcione para plicas y alteraciones accidentales +(éstos están producidos por parte de las cabezas de nota, no por los +eventos musicales) ni para las claves (éstos no están producidos por +ninguna entrada musical, sino más bien a causa de un cambio en el +valor de una propiedad). + +Existen muy pocos objetos que estén conectados @emph{directamente} al +resultado de salida. Una nota normal (como @code{c4}) no está +conectada directamente a la salida, así que + +@example +\tweak #'color #red c4 +@end example -@lilypond[quote,verbatim,ragged-right] -#(define (my-callback grob) - (let* ( - ; have we been split? - (orig (ly:grob-original grob)) +@noindent +no cambia el color. Consulte @ref{Displaying music expressions} para +ver más detalles. - ; if yes, get the split pieces (our siblings) - (siblings (if (ly:grob? orig) - (ly:spanner-broken-into orig) '() ))) +@node Useful concepts and properties +@section Useful concepts and properties - (if (and (>= (length siblings) 2) - (eq? (car (last-pair siblings)) grob)) - (ly:grob-set-property! grob 'extra-offset '(-2 . 5))))) -\relative c'' { - \override Tie #'after-line-breaking = - #my-callback - c1 ~ \break c2 ~ c +@menu +* Input modes:: +* Direction and placement:: +* Distances and measurements:: +* Spanners:: +@end menu + +@node Input modes +@subsection Input modes + +La forma en que se interpreta la notación conenida dentro de un +archivo de entrada, está determinada por el modo de entrada en curso. + +@strong{Modo de acordes} + +Se activa con la instrucción @code{\chordmode} y produce que la +entrada se interprete con al sintaxis de la notación de acordes, véase +@ref{Chord notation}. Los acordes se imprimen como notas sobre un +pentagrama. + +El modo de acordes se activa también con la instrucción +@code{\chords}. Esto crea también un contexto @code{ChordNames} nuevo +y produce que el código que sigue se interprete conla sintaxis de la +notación de acordes y se imprima como nombres de acorde dentro del +contexto @code{ChordNames}, véase @ref{Printing chord names}. + +@strong{Modo de percusión} + +Se activa con la instrucción @code{\drummode} y produce que el código +de entrada se interprete con la sintaxis de la notación de percusión, +véase @ref{Basic percussion notation}. + +EL modo de percusión también se activa con la instrucción +@code{\drums}. También crea un contexto @code{DrumStaff} nuevo y hace +que el código que sigue se interprete con la sintaxis de la notación +de percusión y se imprima como símbolos de percusión sobre un +pentagrama de percusión, véase @ref{Basic percussion notation}. + +@strong{Modo de cifras} + +Se activa con la instrucción @code{\figuremode} y hace que el código +de entrada se interprete con la sintaxis del bajo cifrado, véase +@ref{Entering figured bass}. + +El modo de cifrase también se activa con la instrucción +@code{\figures}. También crea un contexto de @code{FiguredBass} nuevo +y hace que el código que viene a continuación se interprete con la +sintaxis del bajo cifrado y se imprima como símbolos de bajo cifrado +dentro del contexto @code{FiguredBass}, véase @ref{Introduction to +figured bass}. + +@strong{Modos de traste y tablatura} + +No existen modos de entrada especiales para introducir símibolos de +trastes y de tablatura. + +Para crear diagramas de trastes, escriba las notas o acordes en el +modo de notas e imprímalos dentro de un contexto @code{TabStaff}, +véase @ref{Default tablatures}. + +Para crear diagramas de trastes encima de un pentagrama, escríbalos +como elementos de marcado encima de las notas utilizando la +instrucción @code{\fret-diagram}, véase @ref{Fret diagram markups}. + +@strong{Modo de letra} + +Se activa con la instrucción @code{\lyricmode}, y hace que la entrada +se interprete como sílabas de la letra de la canción con duraciones +opcionales y modificadores de letra asociados, véase @ref{Vocal +music}. + +El modo de letra también se habilita con la instrucción +@code{\addlyrics}. Esto también crea un contexto @code{Lyrics} nuevo +y una instrucción @code{\lyricsto} implícita que asocia la letra que +viene a continuación con la música precedente. + +@strong{Modo de marcado} + +Se activa con la instrucción @code{\markup}, y hace que la entrada se +interprete con la sintaxis del marcado, véase @ref{Text markup +commands}. + +@c silly work-around for texinfo broken-ness +@c (@strong{Note...} causes a spurious cross-reference in Info) +@b{Modo de notas} + +Es el modo predeterminado o se puede activar con la instrucción +@code{\notemode}. La entrada se interpreta como alturas, duraciones, +marcado, etc. y se imprime como notación musical sobre un pentagrama. + +Normalmente no es necesario especificar el modo de notas de forma +explícita, pero puede ser útil hacerlo en ciertas situaciones, por +ejemplo si estamos en el modo de letra, en el modo de acordes o en +otro modo y queremos insertar algo que solamente se puede hacer con la +sintaxis del modo de notas. + +Por ejemplo, para insertar indicaciones dinámicas para las estrofas de +una pieza coral es necesario entrar en el modo de notas para poder +interpretar dichas indicaciones: + +@lilypond[verbatim,relative=2,quote] +{ c4 c4 c4 c4 } +\addlyrics { + \notemode{\set stanza = \markup{ \dynamic f 1. } } + To be sung loudly +} +\addlyrics { + \notemode{\set stanza = \markup{ \dynamic p 2. } } + To be sung quietly } @end lilypond -@noindent -Cuando aplicamos este truco, la nueva función de callback @code{after-line-breaking} -también debe llamar a la antigua @code{after-line-breaking}, si existe. -Por ejemplo, si se utiliza con @code{Hairpin} (regulador), -también se debe llamar a @code{ly:hairpin::after-line-breaking}. -@item Algunos objetos no se pueden cambiar con @code{\override} por razones -técnicas. Ejemplo de ello son @code{NonMusicalPaperColumn} -y @code{PaperColumn}. Se pueden cambiar con la función -@code{\overrideProperty}, que funciona de forma parecida a @code{\once -\override}, pero usa una sintaxis diferente. +@node Direction and placement +@subsection Direction and placement -@example -\overrideProperty -#"Score.NonMusicalPaperColumn" % Nombre del Grob u objeto gráfico -#'line-break-system-details % Nombre de la propiedad -#'((next-padding . 20)) % Valor -@end example +Al tipografiar música, la dirección y colocación de muchos elementos +es cuestión de elección. Por ejemplo, las plicas de las notas se +pueden dirigir hacia arriba o hacia abajo; la letra, las indicaciones +dinámicas y otras marcas expresivas se pueden colocar encima o debajo +del pentagrama; el texto se pude alinear a la izquierda, a la derecha +o centrado; etc. La mayoría de estas elecciones pueden dejarse que +LilyPond las determine automáticamente, pero en ciertos casos puede +ser deseable forzar una dirección o colocación concreta. + +@strong{Acciones predeterminadas} + +De forma predeterminada algunas direcciones siempre son hacia arriba o +siempre hacia abajo (p. ej. los matices o el calderón), mientras que +otras cosas pueden alternar entre arriba y abajo en función de la +dirección de las plicas (como las ligaduras o los acentos). + +@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. -Fíjese, sin embargo, en que @code{\override}, aplicado a -@code{NoteMusicalPaperColumn} y a @code{PaperColumn}, aún funciona tal y como se espera -dentro de los bloques @code{\context}. +@c TODO Add example ? +Se pude cambiar el orden predeterminado en que los contextos se +presentan, véase @ref{Aligning contexts} + +@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 perdeterminado +@code{-}. Pero se necesita un indicador de dirección @strong{always} +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{--} @end itemize +@strong{La propiedad de dirección} + +La posición o dirección de muchos objetos de presentación está +controlada por la propiedad @code{direction}. + +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 +@code{CENTER}. De forma alternativa, en muchos casos existen +instrucciones predefinidas para especificar la dirección. Todas ellas +son de la forma: + +@noindent +@code{\xxxUp}, @code{xxxDown}, @code{xxxNeutral} + +@noindent +donde @code{xxxNeutral} significa @qq{utilizar la dirección +predeterminada}. Véase @rlearning{Within-staff objects}. + +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} +significan @qq{utilizar la dirección predeterminada}, como antes. + + +@node Distances and measurements +@subsection Distances and measurements + +@untranslated + +@node Spanners +@subsection Spanners + +Muchos objetos de notación musical abarcan varias notas o incluso +varios compases. Son ejemplos los crescendi, trinos, corchetes de +grupo especial y corchetes de primera y segunda vez. Estos objetos se +llaman @qq{spanners} u «objetos de extensión», y tienen propiedades +especiales para controlar su apariencia y comportamiento. Algunas de +estas propiedades son comunes a todos los objetos de extensión; otras +se limitan a un subconjunto de los extensores. + + +@node Common properties +@section Common properties + +@menu +* Controlling visibility of objects:: +* Line styles:: +* Rotating objects:: +* Aligning objects:: +@end menu + +@node Controlling visibility of objects +@subsection Controlling visibility of objects + + +@node Line styles +@subsection Line styles + +Ciertas indicaciones de ejecución, p.ej., @i{rallentando}, +@i{accelerando} y los @i{trinos} se escriben como texto y se extienden +sobre muchos compases mediante líneas, a veces punteadas u onduladas. + +Todos ellos usan las mismas rutinas que el glissando para dibujar los textos y las líneas, +y por ello el ajuste fino de su comportamiento se hace de la +misma manera. Se hace con un spanner (un objeto de extensión), y la rutina responsable +de dibujar los objetos de extensión es @code{ly:line-interface::print}. Esta +rutina determina la colocación exacta de los dos @i{extremos del +objeto de extensión} y dibuja una línea entre ellos, en el estilo solicitado. + +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] +d2 \glissando d'2 +\once \override Glissando #'style = #'dashed-line +d,2 \glissando d'2 +\override Glissando #'style = #'dotted-line +d,2 \glissando d'2 +\override Glissando #'style = #'zigzag +d,2 \glissando d'2 +\override Glissando #'style = #'trill +d,2 \glissando d'2 +@end lilypond + +La información que determina los puntos extremos se calcula al vuelo +para cada objeto gráfico, pero es posible sobreescribirlos. + +@lilypond[relative=2,ragged-right,verbatim,fragment] +e2 \glissando f +\once \override Glissando #'bound-details #'right #'Y = #-2 +e2 \glissando f +@end lilypond + +El objeto @code{Glissando}, como cualquier otro que use la rutina +@code{ly:line-interface::print}, conlleva una lista asociativa +anidada. En la instrucción anterior, el valor de @code{Y} +se establece a @code{-2} para la lista asociativa correspondiente al extremo final de la +derecha. Por supuesto, también es posible ajustar el extremo de la izquierda con +@code{left} en vez de @code{right}. + +Si no se establece el valor de @code{Y}, se calcula a partir de la posición +vertical del punto de anclaje derecho del objeto de extensión. + +En el caso de un salto de línea, los valores de los puntos extremos se extienden +con los contenidos de las sublistas @code{left-broken} y @code{right-broken}, +por ejemplo + +@lilypond[relative=2,ragged-right,verbatim,fragment] +\override Glissando #'breakable = ##T +\override Glissando #'bound-details #'right-broken #'Y = #-3 +c1 \glissando \break +f1 +@end lilypond + +Las siguientes propiedades se pueden usar para el ajuste fino de los objetos de extensión: + +@table @code +@item Y +Establece la coordenada Y del punto extremo, en espacios de pentagrama. Por +omisión, es el centro del objeto con que enlaza. Así, para un glissando +apuntaría al centro vertical de la cabeza de la nota. + +Para objetos de extensión horizontales, como el de texto y los trinos, tiene el valor +fijo de cero. + +@item attach-dir +Determina el lugar donde la línea comienza y acaba en la dirección X, +relativo al objeto al que se enlaza. Así, un valor de @code{-1} (o +@code{LEFT}) hace que la línea comience o acabe en el lado izquierdo de la cabeza de la nota +a la que el objeto se encuentra adjuntado. + +@item X +Es la coordenada absoluta del extremo final. Normalmente +se calcula al vuelo y no tiene mucho sentido sobreescribirlo. + +@item stencil +Los objetos extensores de línea pueden tener símbolos al principio o al final, que se encuentra contenido +dentro de esta subpropiedad. Es para uso interno y se recomienda +usar @code{text}. + +@item text +Es un elemento de marcado que se evalúa para generar la propiedad stencil anterior. Se usa +para poner @i{cresc.} y @i{tr} sobre los objetos de extensión horizontales. + +@lilypond[quote,ragged-right,fragment,relative=2,verbatim] +\override TextSpanner #'bound-details #'left #'text + = \markup { \small \bold Slower } +c2\startTextSpan b c a\stopTextSpan +@end lilypond + +@item stencil-align-dir-y +@item stencil-offset +Sin un valor establecido para esto, el stencil se coloca simplemente sobre el extremo del final, +tal y como se encuentra definido por las subpropiedades @code{X} e @code{Y}. +La asignación de un valor para @code{stencil-align-dir-y} o para @code{stencil-offset} +desplaza el símbolo del extremo de forma relativa al extremo de la línea + +@lilypond[relative=1,fragment,verbatim] +\override TextSpanner #'bound-details #'left #'stencil-align-dir-y = #DOWN +\override TextSpanner #'bound-details #'right #'stencil-align-dir-y = #UP + +\override TextSpanner #'bound-details #'left #'text = #"gggg" +\override TextSpanner #'bound-details #'right #'text = #"hhhh" +c4^\startTextSpan c c c \stopTextSpan +@end lilypond + +@item arrow (flecha) +El establecimiento de esta subpropiedad al valor de @code{#t} produce una cabeza de flecha al final de la +línea. + +@item padding (relleno) +Esta subpropiedad controla el espacio entre el punto extremo de la línea especificado +y el extremo real. Sin relleno, un glissando empezaría +y acabaría en el centro de las cabezas de las notas. + +@end table + +La función musical \endSpanners termina los objetos de extensión y los +reguladores después de una nota exactamente. + +@lilypond[verbatim,quote,ragged-right,relative=2,fragment] +\endSpanners +c2 \startTextSpan c2 +c2 \< c2 +@end lilypond + +Al utilizar \endSpanners no es necesario cerrar \startTextSpan con +\stopTextSpan, ni tampoco cerrar los reguladores con \!. + +@seealso + +Referencia del programa: +@rinternals{TextSpanner}, +@rinternals{Glissando}, +@rinternals{VoiceFollower}, +@rinternals{TrillSpanner}, +@rinternals{line-spanner-interface}. + + +@node Rotating objects +@subsection Rotating objects + +@node Aligning objects +@subsection Aligning objects + + +@node Advanced tweaks +@section Advanced tweaks + +@menu +* Vertical grouping of grobs:: +* Modifying ends of spanners:: +* Modifying stencils:: +@end menu + + +@node Vertical grouping of grobs +@subsection Vertical grouping of grobs + +Los grobs (objetos gráficos) @code{VerticalAlignment} y +@code{VerticalAxisGroup} trabajan de manera coordinada. +@code{VerticalAxisGroup} agrupa distintos grobs como @code{Staff}, +@code{Lyrics}, etc. Después, @code{VerticalAlignment} alinea los +distintos grobs agrupados previamente por @code{VerticalAxisGroup}. +Normalmente sólo existe un @code{VerticalAlignment} por cada +partitura, pero cada @code{Staff}, @code{Lyrics}, etc. tiene su propio +@code{VerticalAxisGroup}. + + +@node Modifying ends of spanners +@subsection Modifying ends of spanners + +@untranslated + + +@node Modifying stencils +@subsection Modifying stencils + +@untranslated