X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Fes%2Fuser%2Fchanging-defaults.itely;h=fffd408999a524d2420c9507959cebb6d7437e8f;hb=813fe33a565881ab27a840dac01f1aa0c4513081;hp=e269d15237038744eac62bc459fdd102aaa2383a;hpb=c7ad83f9cfda6ea54ead81874d8ed5c5279b82d7;p=lilypond.git diff --git a/Documentation/es/user/changing-defaults.itely b/Documentation/es/user/changing-defaults.itely index e269d15237..fffd408999 100644 --- a/Documentation/es/user/changing-defaults.itely +++ b/Documentation/es/user/changing-defaults.itely @@ -1,740 +1,251 @@ @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: 88f1608ae6fd17b05344bafb2f0721aafdac657b 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. - - -@cindex Program reference - -Los controles disponibles para los ajustes finos se describen en un documento -separado, -@iftex -el Manual de referencia del programa. -@end iftex -@ifnottex -la @ref{Top,Referencia del programa,,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 +El objetivo del diseño de LilyPond es proporcionar la más alta calidad +de los resultados, de forma predeterminada. A pesar de ello, podría +tener que cambiar este resultado predeterminado. La disposición sobre +el papel se controla a través de un amplio número de @q{botones e +interruptores} llamados en su conjunto @q{propiedades}. En el Manual +de aprendizaje podemos encontrar una introducción en forma de tutorial +al acceso y modificación de estas propiedades, véase +@rlearning{Tweaking output}. Éste debería leerse en primer lugar. +Este capítulo cubre un terreno similar, pero con un estilo más +adecuado para un manual de referencia. + +@cindex Referencia de funcionamiento interno + +La descripción definitiva de los controles que están dipsonibles para +su ajuste fino están en un documento aparte: @rinternalsnamed{Top,la +Referencia de funcionamiento interno}. 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 -@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. - -@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. - -@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. - -@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}. -@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:: +* Interpretation contexts:: +* Explaining the Internals Reference:: +* Modifying properties:: +* Useful concepts and properties:: +* Advanced tweaks:: @end menu -@node Automatic notation -@section Automatic notation +@node Interpretation contexts +@section Interpretation contexts -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. +Esta sección explica qué son los contextos y cómo modificarlos. @menu -* Automatic accidentals:: -* Setting automatic beam behavior:: +* Contexts explained:: +* Creating contexts:: +* Modifying context plug-ins:: +* Changing context default settings:: +* Defining new contexts:: +* Aligning contexts:: @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 +Manual de aprendizaje: +@rlearning{Contexts and engravers}. -@funindex autoBeamSettings -@funindex (end * * * *) -@funindex (begin * * * *) -@cindex barras automáticas, ajuste fino -@cindex ajuste fino de las barras automáticas +Archivos de inicio: +@file{ly/@/engraver@/-init@/.ly}, +@file{ly/@/performer@/-init@/.ly}. -@c [TODO: use \applyContext] +Fragmentos de código: +@rlsr{Contexts and engravers}. -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}. +Referencia de funcionamiento interno: +@rinternals{Contexts}, +@rinternals{Engravers and Performers}. -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 +@node Contexts explained +@subsection Contexts explained -@item @code{be} es "begin" (comienzo) o "end" (final). +Los contextos se disponen de forma jerárquica: -@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. +@menu +* Score - the master of all contexts:: +* Top-level contexts - staff containers:: +* Intermediate-level contexts - staves:: +* Bottom-level contexts - voices:: +@end menu -@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. +@node Score - the master of all contexts +@unnumberedsubsubsec Score - the master of all contexts -@item @code{a/b} es la posición dentro del compás en la que debe comenzar o terminar -la barra. +Este es el contexto de notación del nivel más alto. Ningún otro +contexto puede contener a un contexto Score. De forma predeterminada, +el contexto Score maneja la administración de las indicaciones de +compás y se asegura de que ciertos elementos como claves, compases y +armaduras están siempre alineados entre los distintos pentagramas. -@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)}. +Se crea implícitamente una instancia del contexto Score cuando se +procesa un bloque @code{\score @{@dots{}@}} o @code{\layout +@{@dots{}@}}, o explícitamente cuando se ejecuta una instrucción +@code{\new Score}. -@end itemize +@node Top-level contexts - staff containers +@unnumberedsubsubsec Top-level contexts - staff containers -Por ejemplo, si queremos que las barras automáticas siempre acaben sobre la primera -negra del compás, escriba +@strong{@emph{StaffGroup}} -@example -#(override-auto-beam-setting '(end * * * *) 1 4) -@end example +Agrupa pentagramas y añade un corchete en la parte izquierda, formando +un grupo. Las líneas divisorias de los pentagramas contenidos se +conectan verticalmente. StaffGroup sólo consiste en una colección de +pentagramas, con un corchete delante y líneas divisorias de arriba a +abajo. -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 +@strong{@emph{ChoirStaff}} -@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 +Idéntico a StaffGroup excepto que las barras de compás de los +pentagramas contenidos no se conectan verticalmente. -Puede forzar los ajustes del barrado para que sólo afecten a ciertas indicaciones -de compás +@strong{@emph{GrandStaff}} -@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 +Un grupo de pentagramas, con una llave en la parte izquierda que +abarca el grupo. Las barras de compás de los pentagramas contenidos +se conectan verticalmente. -También puede eliminar una regla de finalización de barra previamente establecida, usando +@strong{@emph{PianoStaff}} -@example -#(revert-auto-beam-setting '(be p q n m) a b [contexto]) -@end example +@c TODO No longer correct? Check. -td +Igual que GrandStaff pero con una distancia fija entre los +pentagramas, de manera que se pueden usar ligaduras y barras que +cruzan de un pentagrama a otro. -@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. +@ignore +@strong{@emph{InnerStaffGroup}} -@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 +TODO -td -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 +@strong{@emph{InnerChoirStaff}} +TODO -td +@end ignore -@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 +@node Intermediate-level contexts - staves +@unnumberedsubsubsec Intermediate-level contexts - staves -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). +@strong{@emph{Staff}} -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. +Maneja claves, barras de compás, tonalidades y alteraciones +accidentales. Puede contener contextos de Voice. -Por ejemplo, para tipografiar finales de barra de @code{(3 4 3 2)} corcheas en un 12/8, comience -con +@strong{@emph{RhythmicStaff}} -@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 +Como Staff, pero para imprimir ritmos. Se ignoran las alturas de las +notas; las notas se imprimen sobre una línea. -@cindex automáticas, generación de las barras -@cindex autobarrado -@funindex autoBeaming -@cindex letra +@strong{@emph{TabStaff}} -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}. +Contexto para generar tablaturas. De forma predeterminada dispone la +expresión musical como una tablatura de guitarra, impresa sobre seis +líneas. +@strong{@emph{DrumStaff}} -@refcommands +Maneja el tipografiado para instrumentos de percusión. Puede contener +contextos DrumVoice. -@funindex \autoBeamOff -@code{\autoBeamOff}, -@funindex \autoBeamOn -@code{\autoBeamOn}. +@strong{@emph{VaticanaStaff}} -@commonprop +Iguall que Staff, excepto que está pensado para tipografiar piezas en +estilo gregoriano. -Los patrones de barrado se pueden alterar con la propiedad @code{beatGrouping}, +@strong{@emph{MensuralStaff}} -@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 +Igual que Staff, excepto que está diseñado para tipografiar piezas en +estilo mensural. -@refbugs +@node Bottom-level contexts - voices +@unnumberedsubsubsec Bottom-level contexts - voices -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. +Los contextos del mismo nivel que Voice dan un valor inicial a ciertas +propiedades e inician los grabadores correspondientes. Siendo +contextos del nivel más bajo, no pueden contener a otros contextos. +@strong{@emph{Voice}} -@node Interpretation contexts -@section Interpretation contexts +Corresponde a una voz sobre un pentagrama. este contexto maneja la +conversión de las indicaciones dinámicas, plicas, barras, subíndices y +superíndices, ligaduras de expresión y de unión, y silencios. Tenemos +que crear instancias explícitas de este contexto si necesitamos varias +voces en el mismo pentagrama. -Esta sección explica qué son los contextos y cómo modificarlos. +@strong{@emph{VaticanaVoice}} -@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 +Lo mismo que Voice, excepto que está diseñado para tipografiar piezas +en estilo gregoriano. +@strong{@emph{MensuralVoice}} -@node Contexts explained -@subsection Contexts explained +Lo mismmo que Voice, con modificaciones para el tipografiado de piezas +en estilo mensural. -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: +@strong{@emph{Lyrics}} -@lilypond[quote,verbatim,relative=2,fragment] -cis4 cis2. g4 -@end lilypond +Corresponde a una voz con letra. Maneja la impresión de una sola +línea de letra. -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}. +@strong{@emph{DrumVoice}} -@quotation -@image{context-example,5cm,,} -@end quotation +El contexto de voz utilizado en una pauta de percusión. -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}. +@strong{@emph{FiguredBass}} -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}. +El contexto en que los objetos BassFigure se crean a partir de la +entrada escrita en el modo @code{\figuremode}. -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. +@strong{@emph{TabVoice}} +El contexto de voz utilizado dentro de un contexto TabStaff. Se suele +dejar que se cree implícitamente. -En la referencia del programa se encuentra una descripción completa de todos los contextos que están disponibles, -consulte -@ifhtml -@internalsref{Contexts}. -@end ifhtml -@ifnothtml -Traducción @arrow{} Contexto. -@end ifnothtml +@strong{@emph{ChordNames}} -@c [TODO: describe propagation] +Tipografía nombres de acordes. @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 +276,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 +311,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 +338,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 +351,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 +376,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 +425,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 +444,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 @ref{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,176 +487,67 @@ indicación de compás. @end lilypond -@node Layout tunings within contexts -@subsection Layout tunings within contexts +@node Changing context default settings +@subsection Changing context default settings -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. +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}: -La sintaxis de esto es +@example +\layout @{ + @dots{} + \context @{ + \Staff + + \set fontSize = #-2 + \override Stem #'thickness = #4.0 + \remove "Time_signature_engraver" + @} +@} +@end example + +La instrucción @code{\Staff} recupera la definición existente del +contexto de pentagrama de manera que se pueda modificar. +Los enunciados @example -\override @var{contexto}.@var{nombre} #'@var{propiedad} = #@var{valor} +\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. +@noindent +afectan a todos los pentagramas de la partitura. Otros contextos se +pueden modificar de forma análoga. -La instrucción +La palabra clave @code{\set} es opcional dentro del bloque +@code{\layout}, y así -@verbatim -\override Staff.Stem #'thickness = #4.0 -@end verbatim +@example +\context @{ + @dots{} + fontSize = #-2 +@} +@end example @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: +también funciona. -@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}, - -@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 -@example -\set fontSize = #-2 -\override Stem #'thickness = #4.0 -\remove "Time_signature_engraver" -@end example - -@noindent -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í: - -@example -\context @{ - @dots{} - fontSize = #-2 -@} -@end example - -@noindent -también funciona. +@knownissues -@refbugs +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. -No es posible recolectar cambios de contexto en una variable y aplicarlos -a una definición @code{\context} mediante la referencia a esa 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 +563,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 +591,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 +608,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 +617,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 +641,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 +653,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 +678,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 +691,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 +710,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 +729,9 @@ 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, @cindex ossia @findex alignAboveContext @@ -1459,95 +750,73 @@ ossia = { f4 f f f } } @end lilypond +@cindex nested contexts +@cindex contexts, nested -@node Vertical grouping of grobs -@subsection Vertical grouping of grobs +@funindex \accepts +@funindex \denies + +Los contextos como @code{PianoStaff} pueden llevar dentro otros +contextos anidados. Los contextos que se pueden aceptar para su +anidamiento están definidos por la lista @qq{accepts} (acepta) de un +contexto. Los contextos que no están en esta lista se colocan debajo +del contexto exterior en la partitura impresa. Por ejemplo, el +contexto @code{PianoStaff} está definido para que acepte contextos +@code{Staff} y @code{FiguredBass} de forma predeterminada, pero no un +contexto @code{Lyrics}, por ejemplo. Así pues, en la siguiente +estructura la letra se sitúa debajo del sistema de piano en lugar de +colocarse entre los dos pentagramas: + +@lilypond[verbatim,quote,relative=1] +\new PianoStaff +<< + \new Staff { e4 d c2 } + \addlyrics { Three blind mice } + \new Staff { + \clef "bass" + { c,1 } + } +>> +@end lilypond -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. +La lista @qq{accepts} de un contexto se puede modificar para que +incluya contextos anidados adicionales, y así si quisiéramos que la +letra apareciese entre los dos pentagramas podríamos usar: +@lilypond[verbatim,quote,relative=1] +\new PianoStaff \with { \accepts Lyrics } +<< + \new Staff { e4 d c2 } + \addlyrics { Three blind mice } + \new Staff { + \clef "bass" + { c,1 } + } +>> +@end lilypond -@node The \override command -@section The @code{\override} command +Lo contrario de @code{\accepts} (acepta) es @code{\denies} (deniega); +esto suprime un contexto de la lista @qq{accepts}. -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:: +* Navigating the program reference:: +* Layout interfaces:: +* Determining the grob property:: +* 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 +824,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á: - -@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 +Si hace una visita a la documentación en busca de instrucciones de +digitación (en @ref{Fingering instructions}), encontrará: @quotation -Accepted by: @internalsref{Fingering_engraver}, -@end quotation +@strong{Véase también} -@noindent -That link brings us to the documentation for the Engraver, the -plug-in, which says +Referencia de funcionamiento interno: @rinternals{Fingering}. -@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 +894,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 +912,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 -@ref{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 +992,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 +1009,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 +1032,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 @@ -1813,246 +1056,2099 @@ c-2 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 +@ignore +Another thing that is needed, is an overview of the various naming +conventions: + + scheme functions: lowercase-with-hyphens (incl. one-word +names) + scheme functions: ly:plus-scheme-style + music events, music classes and music properties: +as-scheme-functions + Grob interfaces: scheme-style + backend properties: scheme-style (but X and Y!) + contexts (and MusicExpressions and grobs): Capitalized or +CamelCase + context properties: lowercaseFollowedByCamelCase + engravers: +Capitalized_followed_by_lowercase_and_with_underscores + +Which of these are conventions and which are rules? +Which are rules of the underlying language, and which are +LP-specific? +@end ignore -@lilypond[relative=2,fragment,verbatim,ragged-right] -< - c - \tweak #'color #red d - g - \tweak #'duration-log #1 a ->4-\tweak #'padding #10 -. -@end lilypond +@node Modifying properties +@section Modifying properties -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. +@menu +* Overview of modifying properties:: +* The set command:: +* The override command:: +* The tweak command:: +* set versus override:: +@end menu -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 -@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 +@node Overview of modifying properties +@subsection Overview of modifying properties -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). +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. -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 +La sintaxis de esto es @example -\tweak #'color #red c4 +\override @var{contexto}.@var{nombre} #'@var{propiedad} = #@var{valor} @end example -@noindent -no cambia el color. Consulte @ref{Displaying music expressions} para ver más -detalles. - - -@node Using Scheme code instead of \tweak -@subsection Using Scheme code instead of @code{\tweak} +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 principal desventaja de @code{\tweak} es su inflexibilidad -sintáctica. Por ejemplo, lo siguiente produce un error de sintaxis. - -@example -F = \tweak #'font-size #-3 -\flageolet +La instrucción -\relative c'' @{ - c4^\F c4_\F -@} -@end example +@verbatim +\override Staff.Stem #'thickness = #4.0 +@end verbatim @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{_}. +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: -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. +@lilypond[quote,verbatim,relative=2,fragment] +c4 +\override Staff.Stem #'thickness = #4.0 +c4 +c4 +c4 +@end lilypond -@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 -@} -@end example +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. -@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}. +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. +@lilypond[quote,fragment,verbatim,relative=2] +c4 +\once \override Stem #'thickness = #4.0 +c4 +c4 +@end lilypond -@node \set versus \override -@subsection @code{\set} vs. @code{\override} +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: -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}. +@lilypond[quote,fragment,verbatim,relative=2] +\override Slur #'thickness = #3.0 +c8[( c +\override Beam #'thickness = #0.6 +c8 c]) +@end lilypond -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}. +@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. -Realmente, @code{\override} es un atajo; +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 -\override @var{contexto}.@var{nombre} #'@var{propiedad} = #@var{valor} +\override Voice.Stem #'thickness = #4.0 +\revert Staff.Stem #'thickness @end example -@noindent -es más o menos equivalente a +Algunas opciones «trucables» se llaman @q{subpropiedades} y residen +dentro de las propiedades normales. Para trucarlas, utilice +instrucciones de la forma -@c leave this long line -gp +@c leave this as a long long @example -\set @var{contexto}.@var{nombre} #'@var{propiedad} = #(cons (cons '@var{propiedad} @var{valor}) = (length siblings) 2) - (eq? (car (last-pair siblings)) grob)) - (ly:grob-set-property! grob 'extra-offset '(-2 . 5))))) +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: -\relative c'' { - \override Tie #'after-line-breaking = - #my-callback - c1 ~ \break c2 ~ c -} +@lilypond[quote,verbatim,relative=2,fragment] +c8 c c c +\set autoBeaming = ##f +c8 c c c @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}. +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 son 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. -@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. +@funindex \unset +También existe una instrucción @code{\unset}: @example -\overrideProperty -#"Score.NonMusicalPaperColumn" % Nombre del Grob u objeto gráfico -#'line-break-system-details % Nombre de la propiedad -#'((next-padding . 20)) % Valor +\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 -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}. +@noindent +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 + +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 +\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 +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 The tweak command +@subsection The @code{\tweak} command + +@funindex \tweak +@cindex trucar + +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 + +@lilypond[relative=2,verbatim] +< c + \tweak #'color #red + d + g + \tweak #'duration-log #1 + a +> 4 +-\tweak #'padding #8 +-^ +@end lilypond + +@cindex chord, modifying one note in + +Pero el uso principal de la instrucción @code{\tweak} es modificar +solamente uno de varios elementos de notación que dan comienzo en el +mismo momento musical, como las notas de un acorde, o corchetes de +tresillo que empiezan al mismo tiempo. + +Para ver una introducción a la sintaxis y los usos de la instrucción +tweak, consulte @rlearning{Tweaking methods}. + +La instrucción @code{\tweak} fija una propiedad en el objeto que viene +a continuación de forma directa, sin necesidad de especificar el +nombre del grob o el contexto. Para que esto funcione, es necesario +que la instrucción @code{\tweak} permanezca inmediatamente adyacente +al objeto al que se aplica, después de que el archivo de entrada se ha +convertido en un flujo musical. Con frecuencia no es el caso, pues +muchos elementos adicionales se insertan en la corriente musical de +forma implícita. Por ejemplo, cuando se procesa una nota que no forma +parte de un acorde, LilyPond inserta implícitamente un evento +@code{ChordEvent} antes de la nota, separando así el truco de la nota. +Sin embargo, si los símbolos de acorde se sitúan cerca del truco y la +nota, la instrucción @code{\tweak} viene después del @code{ChordEvent} +en el flujo musical, permaneciendo así adyacente a la nota, y con la +posibilidad de modificarla. + +Así, esto funciona: + +@lilypond[relative=2,verbatim,quote] +<\tweak #'color #red c>4 +@end lilypond + +@noindent +pero esto no funciona: + +@lilypond[relative=2,verbatim,quote] +\tweak #'color #red c4 +@end lilypond + +Si se colocan varios elementos similares en el mismo momento musical, +la instrucción @code{\override} no se puede usar para modificar uno +solo de ellos: aquí es donde se debe usar la instrucción +@code{\tweak}. Entre los elementos que pueden aparecer más de una vez +en el mismo momento musical están los siguientes: + +@c TODO expand to include any further uses of \tweak +@itemize +@item las cabezas de las notas de un acorde +@item signos de articulación sobre la misma nota +@item ligaduras de unión entre notas de un acorde +@item corchetes de grupos especials que comienzan en el mismo momento @end itemize +@c TODO add examples of these + +@noindent +y se puede usar @code{\tweak} para modificar cualquier aparición +específica de estos elementos. + +Es de resaltar que la instrucción @code{\tweak} no se puede usar para +modificar plicas, barras o alteraciones accidentales, porque éstos se +generan más tarde por parte de las cabezas de nota, en vez de por +elementos musicales que están en el flujo de entrada. Ni se puede +usar una instrucción @code{\tweak} para modificar claves o +indicaciones de compás, ya que éstos están separados de cualquier +instrucción @code{\tweak} precedente en el flujo de entrada a causa de +la inserción automática de elementos adicionales necesarios para +especificar el contexto. + +Pero la instrucción @code{\tweak} se puede usar como alternativa a la +instrucción @code{\override} para modificar estos elementos +notacionales que no producen la adición de ningún elemento notacional +implícito antes de ellos mismos en el flujo musical. Por ejemplo, las +ligaduras de expresión se pueden modificar de esta forma: + +@lilypond[verbatim,quote,relative=1] +c-\tweak #'thickness #5 ( d e f) +@end lilypond + +También se pueden escribir varias instrucciones @code{\tweak} antes de +un elemento notacional, y todas ellas le afectan: + +@lilypond[verbatim,quote,relative=1] +c +-\tweak #'style #'dashed-line +-\tweak #'dash-fraction #0.2 +-\tweak #'thickness #3 +-\tweak #'color #red + \glissando +f' +@end lilypond + +El flujo musical que se genera a partir de una sección de un archivo +de entrada, incluido cualquier elemento insertado automáticamente, +puede examinarse, véase @ref{Displaying music expressions}. Esto +puede ser de utilidad en la determinación de lo que puede modificarse +por medio de una instrucción @code{\tweak}. + +@seealso + +Manual de aprendizaje: +@rlearning{Tweaking methods}. + +Referencia de la notación: +@ref{Displaying music expressions}. + +@knownissues + +@cindex trucos en una variable +La instrucción @code{\tweak} no se puede usar dentro de una variable. + +@cindex trucos en la letra +Las instrucciones @code{\tweak} no se pueden usar dentro del modo @code{\lyricmode}. + +@cindex trucar puntos de control +@cindex control, trucar puntos de + +La instrucción @code{\tweak} no se puede usar para modificar los +puntos de control de una única ligadura entre varias dentro de un +acorde, aparte de la primera que aparece en el archivo de entrada. + +@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}. + +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}. + +Realmente, @code{\override} es un atajo; + +@example +\override @var{contexto}.@var{nombre} #'@var{propiedad} = #@var{valor} +@end example + +@noindent +es más o menos equivalente a + +@c leave this long line -gp +@example +\set @var{contexto}.@var{nombre} #'@var{propiedad} = #(cons (cons '@var{propiedad} @var{valor}) }, @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 + +@cindex distances, absolute +@cindex distances, scaled + +@funindex \mm +@funindex \cm +@funindex \in +@funindex \pt + +Las distancias en LilyPond son de dos tipos: absolutas y escaladas. + +Las distancias absolutas se usan para especificar márgenes, sangrados +y otros detalles de diseño de página, y de forma predeterminada se +especifican en milímetros. Las distancias se pueden especificar en +otras unidades escribiendo después de la cifra indicativa de la +cantidad, @code{\mm}, @code{\cm}, @code{\in}@tie{}(pulgadas), o +@code{\pt}@tie{}(puntos, 1/72.27 pulgadas). Las distancias de diseño +de página se pueden especificar también en unidades escalables (véase +el párrafo siguiente) adjuntando @code{\staff-space} a la cantidad. +La disposición de página se describe en detalle en @ref{Page +formatting}. + +Las distancias escaladas siempre se especifican en unidades de un +espacio del pentagrama o, más raramente, medio espacio del pentagrama. +El espacio de pentagrama es la distancia entre dos líneas del +pentagrama adyacentes. El valor predeterminado se puede cambiar +globalmente fijando el tamaño global del pentagrama, o se puede +sobreescribir localmente cambiando la propiedad @code{staff-space} del +objeto @code{StaffSymbol}. Las distancias escaladas se escalan +automáticamente con cualquier cambio al tamaño global del pentagrama o +a la propiedad @code{staff-space} del objeto @code{StaffSymbol}, pero +las fuentes tipográficas se escalan solamente con los cambios +efectuados al tamaño global del pentagrama. Así, el tamaño global del +pentagrama posibilita la fácil variación del tamaño general de una +partitura impresa. Para ver los métodos de establecimiento del tamaño +global del pentagrama, véase @ref{Setting the staff size}. + +@funindex magstep + +Si se necesita dibujar sólo una sección de una partitura a una escala +distinta, por ejemplo una sección ossia o una nota al pie, no se puede +simplemente cambiar el tamaño global del pentagrama porque esto +afectaría a toda la partitura. En tales casos, el cambio de tamaño se +hace sobreescribiendo tanto la propiedad @code{staff-space} de +@code{StaffSymbol} como el tamaño de las fuentes tipográficas. Está a +nuestra disposición una función de Scheme, @code{magstep}, para +convertir de un cambio en el tamaño de la fuente al cambio equivalente +en @code{staff-space}. Para ver una explicación y un ejemplo de su +utilización, consulte @rlearning{Length and thickness of objects}. + +@seealso + +Manual de aprendizaje: +@rlearning{Length and thickness of objects}. + +Referencia de la notación: +@ref{Page formatting}, +@ref{Setting the staff size}. + + +@node Staff symbol properties +@subsection Staff symbol properties + +@cindex ajuste del símbolo del pentagrama +@cindex dibujar el símbolo del pentagrama +@cindex pentagrama, establecer el símbolo del + +@c TODO Extend or remove this section. See also NR 1.6.2 Staff symbol +@c Need to think of uses for these properties. Eg 'line-positions +@c is used in a snippet to thicken centre line. +@c If retained, add @ref to here in 1.6.2 -td + +Se puede definir al mismo tiempo la posición vertical de las líneas de +la pauta y el número de líneas de la misma. Como muestra el siguiente +ejemplo, las posiciones de las notas no están influidas por las +posiciones de las líneas de la pauta. + +@warning{La propiedad @code{'line-positions} sobreescribe a la +propiedad @code{'line-count}. El número de líneas de la pauta está +definido implícitamente por el número de elementos de la lista de +valores de @code{'line-positions}.} + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'line-positions = #'(7 3 0 -4 -6 -7) +} +{ a4 e' f b | d1 } +@end lilypond + +Se puede modificar la anchura de la pauta. Las unidades son espacios +de pentagrama. El espaciado de los objetos dentro del pentagrama no +resulta afectado por este ajuste. + +@lilypond[verbatim,quote,relative=1] +\new Staff \with { + \override StaffSymbol #'width = #23 +} +{ a4 e' f b | d1 } +@end lilypond + + +@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. + +Todos los objetos de extensión contemplan el interface +@code{spanner-interface}. Algunos, básicamente aquellos que trazan +una línea recta entre los dos objetos, contemplan también el interface +@code{line-spanner-interface}. + +@unnumberedsubsubsec Using the @code{spanner-interface} + +Este interface proporciona dos propiedades que se aplican a varios +extensores. + +@strong{@i{La propiedad @code{minimum-length}}} + +La longitud mínima del objeto de extensión se pesoecifica a través de +la propiedad @code{minimum-length}. Su aumento suele producir el +efecto necesario de aumentar el espaciado de las notas entre los dos +puntos extremos. Sin embargo, esta sobreescritura no tiene ningún +efecto sobre muchos extensores, pues su longitud está determinada por +otras consideraciones. Más abajo se muestran algunos ejemplos de +dónde es efectiva. + +@ignore +Works for: + Tie + MultiMeasureRest + Hairpin + Slur + PhrasingSlur + +Works as long as callback is made: + Glissando + Beam + +Works not at all for: + LyricSpace + LyricHyphen + LyricExtender + TextSpanner + System + +@end ignore + +@lilypond[verbatim,quote,relative=2] +a~a +a +% increase the length of the tie +-\tweak #'minimum-length #5 +~a +@end lilypond + +@lilypond[verbatim,quote,relative=2] +a1 +\compressFullBarRests +R1*23 +% increase the length of the rest bar +\once \override MultiMeasureRest #'minimum-length = #20 +R1*23 +a1 +@end lilypond + +@lilypond[verbatim,quote,relative=2] +a \< a a a \! +% increase the length of the hairpin +\override Hairpin #'minimum-length = #20 +a \< a a a \! +@end lilypond + +Esta sobreescritura se puede usar también para aumentar la longitud de +las ligaduras de expresión y de fraseo: + +@lilypond[verbatim,quote,relative=2] +a( a) +a +-\tweak #'minimum-length #5 +( a) + +a\( a\) +a +-\tweak #'minimum-length #5 +\( a\) +@end lilypond + +Para algunos objetos de preesentación, la propiedad +@code{minimum-length} es efectiva sólo si se llama explícitamente al +procedimiento @code{set-spacing-rods}. Para hacerlo, se debe fijar la +propiedad @code{springs-and-rods} al valor +@code{ly:spanner::set-spacing-rods}. Por ejemplo, la longitud mínima +de un glissando no tiene efecto a no ser que se establezca la +propiedad @code{springs-and-rods}: + +@lilypond[verbatim,quote,relative=1] +% default +e \glissando c' + +% not effective alone +\once \override Glissando #'minimum-length = #20 +e, \glissando c' + +% effective only when both overrides are present +\once \override Glissando #'minimum-length = #20 +\once \override Glissando #'springs-and-rods = #ly:spanner::set-spacing-rods +e, \glissando c' +@end lilypond + +Lo mismo se puede decir del objeto @code{Beam}: + +@lilypond[verbatim,quote,relative=1] +% not effective alone +\once \override Beam #'minimum-length = #20 +e8 e e e + +% effective only when both overrides are present +\once \override Beam #'minimum-length = #20 +\once \override Beam #'springs-and-rods = #ly:spanner::set-spacing-rods +e8 e e e +@end lilypond + +@strong{@i{The @code{to-barline} property}} + +La segunda propiedad útil del @code{spanner-interface} es +@code{to-barline}. De forma predeterminada tiene el valor cierto, +haciendo que los reguladores y otros objetos de extensión que terminan +sobre la primera nota de un compás, en vez de eso terminen en la línea +divisoria inmediatamente precedente. Si se establece al valor falso, +el extensor llegará más allá de la barra de compás y terminará +excatamente sobre la nota: + +@lilypond[verbatim,quote,relative=2] +a \< a a a a \! a a a \break +\override Hairpin #'to-barline = ##f +a \< a a a a \! a a a +@end lilypond + +Esta propiedad no es efectiva para todos los extensores. Por ejemplo, +su establecimiento a @code{#t} no tienen ningún efecto sobre las +ligaduras de expresión o de fraseo, o sobre otros extensores para los +que terminar en la barra de compás no tendría ningún significado. + +@unnumberedsubsubsec Using the @code{line-spanner-interface} + +Entre los objetos que contemplan el interface +@code{line-spanner-interface} se encuentran + +@itemize +@item @code{DynamicTextSpanner} +@item @code{Glissando} +@item @code{TextSpanner} +@item @code{TrillSpanner} +@item @code{VoiceFollower} +@end itemize + +La rutina responsable de dibujar los sellos de estos extensores es +@code{ly:line-interface::print}. esta rutina determina la +localización exacta de los dos puntos extremos y traza una línea entre +ellos, en el estilo solicitado. Las posiciones de los dos puntos +extremos del extensor se calculan al vuelo, pero es posible +sobreescribir sus coordenadas Y. Las propiedades que se deben +especificar están anidadas a dos niveles de profundidad en la +jerarquía de propiedades, pero la sintaxis de la instrucción +@code{\override} es bastante sencilla: + +@lilypond[relative=2,quote,verbatim] +e2 \glissando b +\once \override Glissando #'bound-details #'left #'Y = #3 +\once \override Glissando #'bound-details #'right #'Y = #-2 +e2 \glissando b +@end lilypond + +Las unidades para la propiedad @code{Y} son @code{staff-space}s, +siendo el punto del cero la línea central del pentagrama. Para el +glissando, esto es el valor de @code{Y} en la coordenada X que +corresponde al punto central de cada cabeza de nota si nos imaginamos +que la línea se extiende hasta allí. + +Si no está fijado @code{Y}, su valor se calcula a partir de la +posición vertical del punto de anclaje correspondiente del extensor. + +En caso de salto de línea, los valores para los puntos extremos se +especifican por las sub-listas @code{left-broken} y +@code{right-broken} de @code{bound-details}. Por ejemplo: + +@lilypond[relative=2,ragged-right,verbatim,fragment] +\override Glissando #'breakable = ##t +\override Glissando #'bound-details #'right-broken #'Y = #-3 +c1 \glissando \break +f1 +@end lilypond + +Un número de propiedades adicionales de las sub-listas @code{left} y +@code{right} de la propiedad @code{bound-details} se pueden +especificar de la misma forma que @code{Y}: + +@table @code +@item Y +Establece la coordenada Y del punto extremo, en desplazamientos de +@code{staff-space}s desde la línea central del pentagrama. De forma +predeterminada es el centro del objeto ancla, y así un glissando +apunta al centro vertical de la cabeza de la nota. + +Para extensores horizontales como los extensores de texto y los +trinos, está inamoviblemente codificado como 0. + +@item attach-dir (dirección de anclaje) +Determina dónde comienza y termina la línea en la dirección X, con +relación al objeto ancla. Sí, un valor de @code{-1} (o @code{LEFT}, +izquierda) hace que la línea comienze o termine en el lado izquierdo +de la cabeza de la nota a la que está anclado. + +@item X +Es la coordenada X absoluta del punto extremo. Se suele calcular al +vuelo, y su sobreescritura no tiene un efecto útil. + +@item stencil (sello) +Los extensores de línea pueden tener símbolos al comienzo o al final, +lo que está contenido en esta sub-propiedad. Esto es para uso +interno; se recomienda en su lugar el uso de @code{text}. + +@item text (texto) +Es un elemento de marcado que se evalúa para dar lugar al sello. Se +usa para escribir @i{cresc.}, @i{tr} y otros textos sobre los objetos +de extensión horizontales. + +@lilypond[quote,ragged-right,fragment,relative=2,verbatim] +\override TextSpanner #'bound-details #'left #'text + = \markup { \small \bold Slower } +c2\startTextSpan b c a\stopTextSpan +@end lilypond + +@item stencil-align-dir-y (alineación del sello en y) +@item stencil-offset (desplazamiento del sello) +Si no se modifican uno u otro, el sello se coloca sencillamente en el +punto extremo, centrado sobrer la línea, como viene definido por las +subpropiedades @code{X} e @code{Y}. Si se fijan +@code{stencil-align-dir-y} o @code{stencil-offset} se moverá el +símbolo del borde verticalmente con relación al extremo de la línea: + +@lilypond[relative=1,fragment,verbatim] +\override TextSpanner #'bound-details + #'left #'stencil-align-dir-y = #-2 +\override TextSpanner #'bound-details + #'right #'stencil-align-dir-y = #UP + +\override TextSpanner #'bound-details + #'left #'text = #"ggg" +\override TextSpanner #'bound-details + #'right #'text = #"hhh" +c4^\startTextSpan c c c \stopTextSpan +@end lilypond + +Observe que los valores negativos mueven el texto @emph{hacia arriba}, +al contrario de lo que podríoa esperarse, pues el valor de @code{-1} o +@code{DOWN} (abajo) significa alinear el bborde @emph{inferior} del +texto con la línea de extensión. Un valor de @code{1} o @code{UP} +(arriba) alinea el borde superior del texto con la línea extensora. + +@item arrow (flecha) +Al establecer esta sub-propiedad a @code{#t} se produce una punta de +flecha en el extremo de la línea. + +@item padding (relleno) +Esta sub-propiedad controla el espacio entre el punto extremo +especificado de la línea y el extremo real. Sin relleno, un glissando +empezaría y terminaría en el centro de la cabeza de las notas. + +@end table + +La función musical @code{\endSpanners} finaliza de forma prematura el +extensor que comienza sobre la nota que sigue inmediatamente a +continuación. Se termina después de una nota exactamente, o en la +siguiente barra de compás si @code{to-barline} es verdadero y se +produce una divisoria antes de la siguiente nota. + +@lilypond[verbatim,quote,ragged-right,relative=2,fragment] +\endSpanners +c2 \startTextSpan c2 c2 +\endSpanners +c2 \< c2 c2 +@end lilypond + +Si se usa @code{\endSpanners} no es necesario cerrar \startTextSpan +con \stopTextSpan, ni cerrar los reguladores con @code{\!}. + +@seealso + +Referencia de funcionamiento interno: +@rinternals{TextSpanner}, +@rinternals{Glissando}, +@rinternals{VoiceFollower}, +@rinternals{TrillSpanner}, +@rinternals{line-spanner-interface}. + + +@node Visibility of objects +@subsection Visibility of objects + +@cindex objetos, visibilidad de +@cindex grobs, visibilidad de +@cindex visibilidad de los objetos + +Hay cuatro formas principales en que se puede controlar la visibilidad +de los objetos de presentación: se puede eliminar su sello, se pueden +volver transparentes, se pueden pintar de blanco, o se puede +sobreescribir su propiedad @code{break-visibility}. Las tres primeras +se aplican a todos los objetos de presentación; la última sólo a unos +pocos: los objetos @emph{divisibles}. El Manual de aprendizaje +introduce estas cuatro técnicas, véase @rlearning{Visibility and color +of objects}. + +Hay también algunas otras técnicas que son específicas de ciertos +objetos de presentación. Se estudian bajo Consideraciones especiales. + +@menu +* Removing the stencil:: +* Making objects transparent:: +* Painting objects white:: +* Using break-visibility:: +* Special considerations:: +@end menu + + +@node Removing the stencil +@unnumberedsubsubsec Removing the stencil + +@cindex sello, eliminar + +Todo objeto de presentación tiene una propiedad stencil (sello). De +forma predeterminada está establecida a la función específica que +dibuja ese objeto. Se se sobreescribe eesta propiedad a @code{#f} no +se llama a ninguna función y el objeto no se dibuja. La acción +predeterminada se puede recuperar con @code{\revert}. + +@lilypond[quote,verbatim,relative=1] +a1 a +\override Score.BarLine #'stencil = ##f +a a +\revert Score.BarLine #'stencil +a a a +@end lilypond + +@node Making objects transparent +@unnumberedsubsubsec Making objects transparent + +@cindex transparentes, hacer los objetos + +Todo objeto de presentación tiene una propiedad transparent +(transparente) que de forma predeterminada está establecida a +@code{#f}. Si se fija a @code{#t} el objeto aún ocupa espacio pero es +invisible. + +@lilypond[quote,verbatim,relative=2] +a4 a +\once \override NoteHead #'transparent = ##t +a a +@end lilypond + +@node Painting objects white +@unnumberedsubsubsec Painting objects white + +@cindex objetos, coloreado de +@cindex coloreado de objetos +@cindex capas +@cindex impresión, orden de +@cindex sobreescritura de objetos +@cindex objetos, sobreescritura de +@cindex grobs, sobreescritura de + +Todo objeto de presentación tiene una propiedad de color que de forma +predeterminada está establecida a @code{black} (negro). Si se +sobreescribe a @code{white} (blanco) el objeto será indistinguible del +fondo blanco. Sin embargo, si el objeto cruza a otros objetos, el +color de los puntos de cruce queda determinado por el orden en que se +dibujan estos objetos, lo que puede dejar una imagen fantasma del +objeto blanco, como puede verse aquí: + +@lilypond[quote,verbatim,relative=2] +\override Staff.Clef #'color = #white +a1 +@end lilypond + +Se puede evitar esto cambiando el orden de impresión de los objetos. +Todos los objetos de presentación tienen una propiedad @code{layer} +(capa) que se debe establecer a un valor entero. Los objetos con el +valor de @code{layer} más bajo se dibujan primero, después se dibujan +los objetos con valores progresivamente mayores, y así los objetos con +valores más altos se dibujan encima de los que tienen valores más +bajos. De forma predeterminada, casi todos los objetos tienen +asignado un valor @code{layer} de @code{1}, aunque algunos objetos, +entre ellos el pentagrama y las líneas divisorias, @code{StaffSymbol} +y @code{BarLine}, tienen asignado un calor de @code{0}. El orden de +impresión de los objetos con el mismo valor de @code{layer} es +indeterminado. + +En el ejemplo de arriba, la clave blanca, con un valor @code{layer} +predeterminado de @code{1}, se dibuja después de las líneas del +pentragrama (valor @code{layer} predeterminado de @code{0}), +sobreimpresionándolas. Para cambiarlo, se debe dar al objeto +@code{Clef} un valor de @code{layer} más bajo, digamos @code{-1}, para +que se dibuje antes: + +@lilypond[quote,verbatim,relative=2] +\override Staff.Clef #'color = #white +\override Staff.Clef #'layer = #-1 +a1 +@end lilypond + +@node Using break-visibility +@unnumberedsubsubsec Using break-visibility + +@c TODO Add making other objects breakable + +@cindex break-visibility + +Casi todos los objetos de presentación se imprimen una sola vez, pero +algunos como las líneas divisorias, claves, indicaciones de compás y +armaduras de tonalidad, se pueden tener que imprimir dos veces cuando +se produce un salto de línea : una vez al final de la línea y otra al +comienzo de la siguiente. Estos objetos reciben el nombre de +@emph{divisibles}, y tienen una propiedad, @code{break-visibility} +(visibilidad en el salto), para controlar su visibilidad en las tres +posiciones en que pueden aparecer: al comienzo de una línea, dentro de +la línea si se produce un cambio, y al final de la línea si el cambio +se produce en ese lugar. + +Por ejemplo, la indicación de compás se imprime de forma +predeterminada al comienzo de la primera línea y en ningún otro lugar +a no ser que cambie, en cuyo caso se imprime en el punto en que se +produce el cambio. Si este cambio se produce al final de una línea, +la nueva indicación de compás se imprime al principio de la línea +siguiente y también al final de la línea anterior como indicación de +precaución. + +Este comportamiento se controla por medio de la propiedad +@code{break-visibility}, que se explica en +@c Leave this ref on a newline - formats incorrectly otherwise -td +@rlearning{Visibility and color of objects}. Esta propiedad toma un +vector de tres valores booleanos que, por orden, determinan si el +objeto se imprime al final, dentro, o al principio de la línea. O, +para ser más exactos: antes del salto de línea, si no hay salto, o +después del salto. + +Como alternativa se pueden especificar siete de las ocho combinaciones +mediante funciones predefinidas cuya definición está en +@file{scm/output-lib.scm}, donde las tres últimas columnas indican si +los objetos de presentación serán visibles en las posiciones que se +muestran en el encabezamiento de cada columna: + +@multitable @columnfractions .40 .15 .1 .1 .1 +@c TODO check these more carefully +@headitem Forma @tab Forma @tab Antes del @tab Si no hay @tab Después del +@headitem de función @tab de vector @tab salto @tab salto @tab salto + +@item @code{all-invisible} @tab @code{'#(#f #f #f)} @ @ @tab no @tab no @tab no +@item @code{begin-of-line-visible} @tab @code{'#(#f #f #t)} @tab no @tab no @tab sí +@item @code{end-of-line-visible} @tab @code{'#(#t #f #f)} @tab sí @tab no @tab no +@item @code{all-visible} @tab @code{'#(#t #t #t)} @tab sí @tab sí @tab sí +@c The center-visible function is not defined +@c @item @code{center-visible} @tab @code{'#(#f #t #f)} @tab no @tab sí @tab no +@item @code{begin-of-line-invisible} @tab @code{'#(#t #t #f)} @tab sí @tab sí @tab no +@item @code{end-of-line-invisible} @tab @code{'#(#f #t #t)} @tab no @tab sí @tab sí +@item @code{center-invisible} @tab @code{'#(#t #f #t)} @tab sí @tab no @tab sí +@end multitable + +La función @code{center-visible} no está predefinida. + +Los ajustes predeterminados de @code{break-visibility} dependen del +objeto de presentación. La tabla siguiente muestra todos los objetos +de presentación de interés que resultan afectados por +@code{break-visibility} y el ajuste predeterminado de esta propiedad: + +@multitable @columnfractions .3 .3 .4 + +@headitem Objeto @tab Contexto usual @tab Valor predet. + +@c omit Ambitus as it appears not to be affected by break-visibility -td +@c @item @code{Ambitus} @tab as specified @tab @code{begin-of-line-visible} +@item @code{BarLine} @tab @code{Score} @tab calculado +@item @code{BarNumber} @tab @code{Score} @tab @code{begin-of-line-visible} +@c omit the following item until it can be explained -td +@c @item @code{BreakAlignGroup} @tab @code{Score} @tab calculated +@item @code{BreathingSign} @tab @code{Voice} @tab @code{begin-of-line-invisible} +@item @code{Clef} @tab @code{Staff} @tab @code{begin-of-line-visible} +@item @code{Custos} @tab @code{Staff} @tab @code{end-of-line-visible} +@item @code{DoublePercentRepeat} @tab @code{Voice} @tab @code{begin-of-line-invisible} +@c omit KeyCancellation until it can be explained -td +@c @item @code{KeyCancellation} @tab ?? @tab @code{begin-of-line-invisible} +@item @code{KeySignature} @tab @code{Staff} @tab @code{begin-of-line-visible} +@c omit LeftEdge until it can be explained -td +@c @item @code{LeftEdge} @tab @code{Score} @tab @code{center-invisible} +@item @code{OctavateEight} @tab @code{Staff} @tab @code{begin-of-line-visible} +@item @code{RehearsalMark} @tab @code{Score} @tab @code{end-of-line-invisible} +@item @code{TimeSignature} @tab @code{Staff} @tab @code{all-visible} + +@end multitable + +El ejemplo de abajo muestra el uso de la forma de vector para +controlar la visibilidad de las líneas divisorias: + +@lilypond[quote,verbatim,relative=1,ragged-right] +f4 g a b +f4 g a b +% Remove bar line at the end of the current line +\once \override Score.BarLine #'break-visibility = #'#(#f #t #t) +\break +f4 g a b +f4 g a b +@end lilypond + +Aunque los tres componentes del vector utilizado para sobreescribir +@code{break-visibility} deben estar presentes, no todos son efectivos +para todos los objetos de presentación, y algunas combinaciones pueden +incluso dar errores. Son de aplicación las siguientes limitaciones: + +@itemize @bullet +@item Las líneas divisorias no se pueden imprimir al principio de la línea. +@item No se puede imprimir el número de compás al principio de la primera +línea a no ser que su valor establecido sea distinto de 1. +@item Clave: véase más abajo +@item Las repeticiones dobles de tipo porcentaje se imprimen completamente o +se suprimen por completo. Utilice begin-of line-invisible para +imprimirlas y all-invisible para suprimirlas. +@item Armadura: véase más abajo +@item OctavateEight: véase más abajo +@end itemize + +@node Special considerations +@unnumberedsubsubsec Special considerations + +@strong{@emph{Visibilidad después de un cambio explícito}} + +@cindex armadura, visibilidad después de un cambio explícito +@cindex explicitKeySignatureVisibility +@cindex clave, visibilidad después de un cambio explícito +@cindex explicitClefVisibility + +La propiedad @code{break-visibility} controla la visibilidad de las +armaduras y cambios de clave sólo al principio de las líneas, es +decir, después de un salto. No tiene ningún efecto sobre la +visibilidad de la armadura o la clave después de un cambio explícito +de tonalidad o de clave dentro o al final de una línea. En el ejemplo +siguiente la armadura que sigue al cambio explícito de tonalidad a Si +bemol mayor es visible incluso con @code{all-invisible} establecido. + +@lilypond[quote,verbatim,relative=1,ragged-right] +\key g \major +f4 g a b +% Try to remove all key signatures +\override Staff.KeySignature #'break-visibility = #all-invisible +\key bes \major +f4 g a b +\break +f4 g a b +f4 g a b +@end lilypond + +La visibilidad de estos cambios explícitos de tonalidad y de clave se +controla por medio de las propiedades +@code{explicitKeySignatureVisibility} y @code{explicitClefVisibility}. +Son los equivalentes de la propiedad @code{break-visibility} y las dos +toman un vector de tres valores booleanos o las funciones predefinidas +relacionadas anteriormente, exactamente igual que +@code{break-visibility}. Las dos son propiedades del contexto Staff, +no de los propios objetos de presentación, y por tanto se establecen +utilizando la instrucción @code{\set}. Las dos están establecidas de +forma predeterminada al valor @code{all-visible}. Estas propiedades +controlan sólo la visibilidad de las armaduras y las claves que +resultan de los cambios explícitos y no afectan a las armaduras y +tonalidades que están al principio de las líneas; para quitarlas, aún +se debe sobreescribir la propiedad @code{break-visibility} en el +objeto correspondiente. + +@lilypond[quote,verbatim,relative=1,ragged-right] +\key g \major +f4 g a b +\set Staff.explicitKeySignatureVisibility = #all-invisible +\override Staff.KeySignature #'break-visibility = #all-invisible +\key bes \major +f4 g a b \break +f4 g a b +f4 g a b +@end lilypond + +@strong{@emph{Visibilidad de las alteraciones de precaución}} + +Para eliminar las alteraciones de precaución que se imprimen en un +cambio de tonalidad explícito, establezca la propiedad +@code{printKeyCancellation} del contexto Staff a @code{#f}: + +@lilypond[quote,verbatim,relative=1,ragged-right] +\key g \major +f4 g a b +\set Staff.explicitKeySignatureVisibility = #all-invisible +\set Staff.printKeyCancellation = ##f +\override Staff.KeySignature #'break-visibility = #all-invisible +\key bes \major +f4 g a b \break +f4 g a b +f4 g a b +@end lilypond + +Con estas sobreescrituras solamente permanecen las alteraciones +accidentales delante de las notas para indicar el cambio de tonalidad. + +@c TODO Add visibility of cautionary accidentals before notes + +@strong{@emph{Automatic bars}} + +@cindex automaticBars +@cindex líneas divisorias, eliminación + +Como caso especial, la impresión de las líneas divisorias también se +puede inhabilitar estableciendo la propiedad @code{automaticBars} en +el contexto Score. Si se fija a @code{#f}, las barras de compás no se +imprimen automáticamente; se deben crear explícitamente con una +instrucción @code{\bar}. A diferencia de la instrucción predefinida +@code{\cadenzaOn}, los compases se siguen contando. La generación de +compases continúa de acuerdo a esta cuenta si esta propiedad se +establece posteriormente a @code{#t}. Si se fija al valor @code{#f}, +sólo pueden producirse saltos de línea en instrucciones @code{\bar} +explícitas. + +@c TODO Add example + +@strong{@emph{Octavated clefs}} + +@cindex octavadas, visibilidad de las claves +@cindex visibilidad de las claves octavadas +@cindex claves, visibilidad de la octavación + +El pequeño símbolo de octava sobre las claves en octava alta o baja se +produce por parte del objeto @code{OctavateEight}. Su visibilidad se +controla independientemente de la del objeto @code{Clef}, así que es +necesario aplicar las sobreescrituras correspondientes +@code{break-visibility} tanto a los objetos @code{Clef} como +@code{OctavateEight} para suprimir completamente estos símbolos de +clave al comienzo de cada línea. + +Para los cambios de clave explícitos, la propiedad +@code{explicitClefVisibility} controla tanto el símbolo de clave como +el símbolo de octava asociado. + +@seealso + +Manual de aprendizaje: +@rlearning{Visibility and color 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 + +Las posiciones de los puntos extremos del objeto de extensión se +computan al vuelo para cada uno de los objetos gráficos, 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 valor de @code{Y} está establecido a @code{-2} para el extremo +derecho. El lado izquierdo se puede ajustar de forma similar +especificando @code{left} en vez de @code{right}. + +Si no está establecido @code{Y}, el valor se computa a partir de la +posición vertical de los puntos de anclaje izquierdo y derecho del +extensor. + +Son posibles otros ajustes de los extensores, para ver más detalles +consulte @ref{Spanners}. + + +@node Rotating objects +@subsection Rotating objects + +Tanto los objetos de presentación como los elementos de texto de +marcado se pueden girar cualquier ángulo respecto a cualquier punto, +pero difiere el método de hacerlo. + +@menu +* Rotating layout objects:: +* Rotating markup:: +@end menu + +@node Rotating layout objects +@unnumberedsubsubsec Rotating layout objects + +@cindex rotating objects +@cindex objects, rotating + +Todos los objetos de presentación que contemplan el interface +@code{grob-interface} se pueden rotar estableciendo su propiedad +@code{rotation}. Acepta una lista de tres elementos: el ángulo de la +rotación en sentido antihorario, y las coordenadas x e y del punto con +relación al punto de referencia del objeto, alrededor del que se va a +realizar la rotación. El ángulo de rotación se pespecifica en grados +y las coordenadas en espacios de pentagrama. + +El ángulo de rotación y las coordenadas del punto de rotación se deben +determinar por ensayo y error. + +@cindex reguladores en ángulo +@cindex ángulo, reguladores en + +Solamente en ciertas ocasiones es útil la rotación de objetos de +presentación; el ejemplo siguiente muestra una situación en que puede +serlo: + +@lilypond[quote,verbatim,relative=1] +g4\< e' d' f\! +\override Hairpin #'rotation = #'(20 -1 0) +g,,4\< e' d' f\! +@end lilypond + +@node Rotating markup +@unnumberedsubsubsec Rotating markup + +Todos los textos de marcado se pueden rotar para que se dispongan en +cualquier ángulo predeciéndolos de la instrucción @code{\rotate}. La +instrucción acepta dos argumentos: el ángulo de rotación en grados en +sentido antihorario, y el texto que rotar. Los límites que ocupa el +texto no se rotan: toman su valor a partir de los extremos de las +coordenadas x e y del texto rotado. En el ejemplo siguiente la +propiedad @code{outside-staff-priority} del texto se establece a +@code{#f} para desactivar la evitación automática de colisiones, lo +que empuja al texto a una posición muy alta. + +@lilypond[quote,verbatim,relative=1] +\override TextScript #'outside-staff-priority = ##f +g4^\markup { \rotate #30 "a G" } +b^\markup { \rotate #30 "a B" } +des^\markup { \rotate #30 "a D-Flat" } +fis^\markup { \rotate #30 "an F-Sharp" } +@end lilypond + +@node Advanced tweaks +@section Advanced tweaks + +Esta sección trata sobre distintos enfoques en la realización de +ajustes finos a la apariencia de la partitura impresa. + +@menu +* Aligning objects:: +* Vertical grouping of grobs:: +* Modifying stencils:: +* Modifying shapes:: +@end menu + +@seealso + +Manual de aprendizaje: +@rlearning{Tweaking output}, +@rlearning{Other sources of information}. + +Referencia de la notación: +@ref{Explaining the Internals Reference}, +@ref{Modifying properties}, +@ref{Interfaces for programmers}. + +Archivos de inicio: +@file{scm/@/define@/-grobs@/.scm}. + +Fragmentos de código: +@rlsr{Tweaks and overrides}. + +Referencia de funcionamiento interno: +@rinternals{All layout objects}. + + +@node Aligning objects +@subsection Aligning objects + +Los objetos gráficos que soportan el interface +@code{self-alignment-interface} y/o el @code{side-position-interface} +se pueden alinear contra un objeto colocado previamente, de diversas +maneras. Para ver una lista de estos objetos, consulte +@rinternals{self-alignment-interface} y +@rinternals{side-position-interface}. + +Todos los objetos gráficos tienen un punto de referencia, una +extensión horizontal y una extensión vertical. La extensión +horizontal es una pareja de números que dan los desplazamientos a +partir del punto de referencia de los bordes izquierdo y derecho, +siendo negativos los desplazamientos hacia la izquierda. La extensión +vertical es una pareja de números que dan el desplazamiento a partir +del punto de referencia hasta los bordes inferior y superior, siendo +negativos los deplazamientos hacia abajo. + +La posición de un objeto sobre el pentagrama viene dada por los +valores de las propiedades @code{X-offset} e @code{Y-offset}. El +valor de @code{X-offset} da el desplazamiento desde la coordenada x +del punto de referencia del objeto padre, y el valor de +@code{Y-offset} da el desplazamiento a partir de la línea central del +pentagrama. Los valores de @code{X-offset} y @code{Y-offset} se +pueden establecer directamente o se puede dejar que se calculen por +parte de procedimientos para conseguir una alineación con el objeto +padre de distintas maneras. + +@warning{Muchos objetos tienen consideraciones de posicionamiento +especiales que hacen que se ignore o se modifique cualquier ajuste +realizado a @code{X-offset} o a @code{Y-offset}, a pesar de que el +objeto contemple el interface @code{self-alignment-interface}.} + +Por ejemplo, una alteración accidental se puede reposicionar +verticalmente estableciendo @code{Y-offset} pero los cambios a +@code{X-offset} no tienen ningún efecto. + +Las letras de ensayo se pueden alinear con objetos divisibles como +líneas divisorias, claves, armaduras e indicaciones de compás. Hay +propiedades especiales que se encuentran en +@code{break-aligned-interface} para el posicionamiento de las letras +de ensayo sobre dichos objetos. + +@menu +* Setting @code{X-offset} and @code{Y-offset} directly:: +* Using the @code{side-position-interface}:: +* Using the @code{self-alignment-interface}:: +* Using the @code{break-aligned-interface}:: +@end menu + +@node Setting @code{X-offset} and @code{Y-offset} directly +@unnumberedsubsubsec Setting @code{X-offset} and @code{Y-offset} directly + +Se pueden dar valores numéricos a las propiedades @code{X-offset} y +@code{Y-offset} de muchos objetos. El ejemplo siguiente muestra tres +notas con una digitación en su posición predeterminada y con los +valores @code{X-offset} y @code{Y-offset} modificados. + +@lilypond[verbatim,quote,relative=2] +a-3 +a +-\tweak #'X-offset #0 +-\tweak #'Y-offset #0 +-3 +a +-\tweak #'X-offset #-1 +-\tweak #'Y-offset #1 +-3 +@end lilypond + +@c TODO write more + +@node Using the @code{side-position-interface} +@unnumberedsubsubsec Using the @code{side-position-interface} + +Un objeto que contempla el @code{side-position-interface} se puede +colocar junto a su objeto padre de forma que los bordes especificados +de los dos objetos se toquen. El objeto se puede situar encima, +debajo, a la derecha o a la izquierda del objeto padre. El padre no +se puede especificar; ciene determinado por el orden de los elementos +en el flujo de entrada. Casi todos los objetos tienen la cabeza de la +nota asociada como padre. + +Los valores de las propiedades @code{side-axis} y @code{direction} +determinan dónde colocar el objeto, como sigue: + +@c TODO add an example of each to the table + +@multitable @columnfractions .3 .3 .3 +@headitem @code{side-axis} @tab @code{direction} @tab +@headitem propiedad @tab propiedad @tab colocación + +@item @code{0} @tab @code{-1} @tab izquierda +@item @code{0} @tab @code{1} @tab derecha +@item @code{1} @tab @code{-1} @tab debajo +@item @code{1} @tab @code{1} @tab encima + +@end multitable + +Si @code{side-axis} es @code{0}, @code{X-offset} se debe establecer al +procedimiento @code{ly:side-position-interface::x-aligned-side}. Este +procedimiento devuelve el calor correcto de @code{X-offset} para +situar el objeto al lado izquierdo o derecho del padre de acuerdo con +el valor de @code{direction}. + +Si @code{side-axis} es @code{1}, @code{Y-offset} se debe establecer al +procedimiento @code{ly:side-position-interface::y-aligned-side}. Este +procedimiento devuelve el valor correcto de @code{Y-offset} para +situar el objeto encima o debajo del padre de acuerdo con el valor de +@code{direction}. + +@c TODO Add examples + +@node Using the @code{self-alignment-interface} +@unnumberedsubsubsec Using the @code{self-alignment-interface} + +@emph{Auto-alineación horizontal de los objetos} + +La alineación horizontal de un objeto que contempla el interface +@code{self-alignment-interface} está controlada por el valor de la +propiedad @code{self-alignment-X}, siempre y cuando la propiedad +@code{X-offset} de este objeto esté establecida a +@code{ly:self-alignment-interface::x-aligned-on-self}. Se le puede +dar a @code{self-alignment-X} cualquier valor real, en unidades de la +mitad de la extensión X total del objeto. Los valores negativos +mueven el objeto a la derecha, los positivos hacia la izquierda. Un +valor de @code{0} centra el objeto sobre el punto de referencia de su +padre, un valor de @code{-1} alinea el borde izquierdo del objeto +sobre el punto de referencia de su padre, y un valor de @code{1} +alinea el borde derecho del objeto sobre el punto de referencia de su +padre. Se pueden usar los símbolos @code{LEFT}, @code{CENTER} y +@code{RIGHT} en sustitución de los valores @code{-1, 0, 1}, +respectivamente. + +Normalmente se usaría la instrucción @code{\override} para modificar +el valor de @code{self-alignment-X}, pero se puede usar la instrucción +@code{\tweak} para alinear varias anotaciones por separado sobre una +sola nota: + +@lilypond[quote,verbatim,relative=1] +a' +-\tweak #'self-alignment-X #-1 +^"left-aligned" +-\tweak #'self-alignment-X #0 +^"center-aligned" +-\tweak #'self-alignment-X #RIGHT +^"right-aligned" +-\tweak #'self-alignment-X #-2.5 +^"aligned further to the right" +@end lilypond + +@emph{Auto-alineación vertical de los objetos} + +Los objetos se pueden alinear verticalmente en una forma análoga a la +alineación horizontal si la propiedad @code{Y-offset} está establecida +a @code{ly:self-alignment-interface::y-aligned-on-self}. Sin embargo, +a menudo se encuentran implicados otros mecanismos en la alineación +vertical: el valor de @code{Y-offset} es tan sólo una variable que se +tiene en cuenta. Esto puede hacer que ajustar el valor de ciertos +objetos sea una tarea dificultosa. Las unidades son sólo la mitad de +las dimensiones verticales del objeto, que suele ser bastante pequeño, +por lo que pueden requerirse números bastante grandes. Un valor de +@code{-1} alinea el borde inferior del objeto con el punto de +referencia del objeto padre, un valor de @code{0} alinea el centro del +objeto con el punto de referencia del padre, y un valor de @code{1} +alinea el borde superior del objeto con el punto de referencia del +padre. Se pueden usar los símbolos @code{DOWN}, @code{CENTER}, +@code{UP} en sustitución de @code{-1, 0, 1} respectivamente. + +@emph{Auto-alineación de objetos en las dos direcciones} + +Estableciendo tanto @code{X-offset} como @code{Y-offset}, se puede +alinear un objeto en las dos direcciones simultáneamente. + +El ejemplo siguiente muestra cómo ajustar una digitación de forma que +se acerque a la cabeza de la nota. + +@lilypond[quote,verbatim,relative=2] +a +-\tweak #'self-alignment-X #0.5 % move horizontally left +-\tweak #'Y-offset #ly:self-alignment-interface::y-aligned-on-self +-\tweak #'self-alignment-Y #-1 % move vertically up +-3 % third finger +@end lilypond + +@ignore +@unnumberedsubsubsec Using the @code{aligned-on-parent} procedures + +@c Cannot document as they do not seem to operate consistently on all objects -td +@c TODO investigate further + +The @code{aligned-on-parent} procedures are used in the same way +as the @code{aligned-on-self} procedures, they difference being +that they permit an object to be aligned with the @emph{edges} of +the parent rather than the parent's reference point. The following +example shows the difference: + +@c TODO Add example + +@lilypond[verbatim,quote] +@end lilypond + +@end ignore + +@ignore +@unnumberedsubsubsec Using the @code{centered-on-parent} procedures + +@c Cannot document as they do not seem to operate consistently on all objects -td +@c TODO investigate further + +@end ignore + +@c TODO The align-interface, BassFigureAlignment and VerticalAlignment + + +@node Using the @code{break-aligned-interface} +@unnumberedsubsubsec Using the @code{break-aligned-interface} + +Las letras de ensayo se pueden alinear con objetos de notación +distintos a las barras de compás. Estos objetos son @code{ambitus}, +@code{breathing-sign}, @code{clef}, @code{custos}, @code{staff-bar}, +@code{left-edge}, @code{key-cancellation}, @code{key-signature} y +@code{time-signature}. + +De forma predeterminada, las letras de ensayo se centran +horizontalmente sobre el objeto: + +@lilypond[verbatim,quote,relative=1] +e1 +% the RehearsalMark will be centered above the Clef +\override Score.RehearsalMark #'break-align-symbols = #'(clef) +\key a \major +\clef treble +\mark "↓" +e +% the RehearsalMark will be centered above the TimeSignature +\override Score.RehearsalMark #'break-align-symbols = #'(time-signature) +\key a \major +\clef treble +\time 3/4 +\mark "↓" +e2. +@end lilypond + +La alineación de la letra de enzayo con relación al objeto de notación +se puede cambiar, como se ve en el ejemplo siguiente. En una +partitura con varios pentagramas, este ajuste se debe hacer para todos +los pentagramas. + +@lilypond[verbatim,quote,relative=1] +% The RehearsalMark will be centered above the KeySignature +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature) +\key a \major +\clef treble +\time 4/4 +\mark "↓" +e1 +% The RehearsalMark will be aligned with the left edge of the KeySignature +\once \override Score.KeySignature #'break-align-anchor-alignment = #LEFT +\mark "↓" +\key a \major +e +% The RehearsalMark will be aligned with the right edge of the KeySignature +\once \override Score.KeySignature #'break-align-anchor-alignment = #RIGHT +\key a \major +\mark "↓" +e +@end lilypond + +La letra de ensayo también se puede desplazar al borde derecho o +izquierdo en una medida arbitraria. Las unidades son espacios de +pentagrama: + +@lilypond[verbatim,quote,relative=1] +% The RehearsalMark will be aligned with the left edge of the KeySignature +% and then shifted right by 3.5 staff-spaces +\override Score.RehearsalMark #'break-align-symbols = #'(key-signature) +\once \override Score.KeySignature #'break-align-anchor = #3.5 +\key a \major +\mark "↓" +e +% The RehearsalMark will be aligned with the left edge of the KeySignature +% and then shifted left by 2 staff-spaces +\once \override Score.KeySignature #'break-align-anchor = #-2 +\key a \major +\mark "↓" +e +@end lilypond + + +@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 stencils +@subsection Modifying stencils + +Todos los objetos de presentación tienen una propiedad @code{stencil} +que es parte del @code{grob-interface}. De forma predeterminada, esta +propiedad suele estar establecida a una función específica del objeto +que está hecha a medida para disponer el símbolo que lo representa en +la salida. Por ejemplo, el ajuste estándar para la propiedad +@code{stencil} del objeto @code{MultiMeasureRest} es +@code{ly:multi-measure-rest::print}. + +El símbolo estándar de cualquier objeto se puede sustituir modificando +la propiedad @code{stencil} para que haga referencia a un +procedimiento diferente escrito especialmente. Esto requiere un alto +nivel de conocimiento del funcionamiento interno de LilyPond, pero hay +una forma más fácil que a menudo puede dar resultados adecuados. + +El procedimiento es establecer la propiedad @code{stencil} al +procedimiento que imprime texto (@code{ly:text-interface::print}) y +añadir una propiedad @code{text} al objeto ajustada para que contenga +el texto de marcado que produce el símbolo requerido. Debido a la +flexibilidad del marcado, se pueden conseguir muchas cosas; en +particular, consulte @ref{Graphic notation inside markup}. + +El ejemplo siguiente muestra esto cambiando el símbolo de la cabeza de +la nota a unas aspas dentro de una circunferencia. + +@lilypond[verbatim,quote] +XinO = { + \once \override NoteHead #'stencil = #ly:text-interface::print + \once \override NoteHead #'text = \markup { + \combine + \halign #-0.7 \draw-circle #0.85 #0.2 ##f + \musicglyph #"noteheads.s2cross" + } +} +\relative c'' { + a a \XinO a a +} +@end lilypond + +Cualquiera de los glifos de la fuente tipográfica Feta se puede pasar +a la instrucción de marcado @code{\musicglyph}: véase @ref{The Feta +font}. + +@c TODO Add inserting eps files or ref to later + +@c TODO Add inserting Postscript or ref to later + +@seealso + +Referencia de la notación: +@ref{Graphic notation inside markup}, +@ref{Formatting text}, +@ref{Text markup commands}, +@ref{The Feta font}. + + +@node Modifying shapes +@subsection Modifying shapes + +@menu +* Modifying ties and slurs:: +@end menu + +@node Modifying ties and slurs +@unnumberedsubsubsec Modifying ties and slurs + +Las ligaduras de unión, de expresión y de fraseo se trazan como curvas +de Bézier de tercer orden. Si la forma de la ligadura calculada +automáticamente no resulta óptima, se puede modificar su forma +manualmente mediante la especificación explícita de los cuatro puntos +de control necesarios para definir una curva de Bézier de tercer +orden. + +Las curvas Bézier de tercer orden o cúbicas están definidas por cuatro +puntos de control. El primer y cuarto puntos de control son +exactamente los puntos extremos de comienzo y de final de la curva. +Los dos puntos de contros intermedios definen la forma. Se pueden +encontrar en la web animaciones que muestran cómo se traza la curva, +pero la descripción siguiente puede ser de ayuda. La curva comienza a +partir del primer punto de control dirigiéndose directamente hacia el +segundo, curvándose progresivamente para dirigirse hacia el tercero y +continuando la curva hacia el cuarto, llegando a éste en viaje directo +desde el tercer punto de control. La curva está contenida enteramente +dentro del cuadrilátero definido por los cuatro puntos de control. + +He aquí un ejemplo de un caso en que la ligadura no es óptima, y donde +@code{\tieDown} no sirve de ayuda. + +@lilypond[verbatim,quote,relative=1] +<< + { e1 ~ e } +\\ + { r4 } +>> +@end lilypond + +Una forma de mejorar esta ligadura es modificar manualmente sus puntos +de control como sigue. + +Las coordenadas de los puntos de control de Bézier se especifican en +unidades de espacios de pentagrama. La coordenada@tie{}X está en +relación con el punto de referencia de la nota a la que está unida la +ligadura, y la coordenada@tie{}Y está en relación con la línea central +del pentagrama. Las coordenadas se introducen como una lista de +cuatro parejas de números decimales (reales). Un enfoque es estimar +las coordenadas de los dos puntos extremos, y luego tratar de adivinar +los dos puntos intermedios. Los valores óptimos se encuentran por +ensayo y error. + +Es útil recordar que una curva simétrica necesita puntos de contros +simétricos, y que las curvas de Bézier tienen la útil propiedad de que +las transformaciones de la curva tales como la traslación, rotación y +escalado se pueden obtener aplicando la misma transformación a los +puntos de control de la curva. + +Para el ejemplo anterior, la sobreescritura siguiente da una ligadura +satisfactoria: + +@lilypond[verbatim,quote,relative=1] +<< + \once \override Tie + #'control-points = #'((1 . -1) (3 . 0.6) (12.5 . 0.6) (14.5 . -1)) + { e1 ~ e1 } +\\ + { r4 4 } +>> +@end lilypond + +@knownissues + +No es posible modificar la forma de las ligaduras de unión o de +expresión cambiando la propiedad @code{control-points} si hay más de +una en el mismo mom ento musical, ni siquiera usando la instrucción +@code{\tweak}. +