From: Francisco Vila Date: Sun, 9 Sep 2007 09:00:55 +0000 (+0200) Subject: Spanih changing defaults file X-Git-Tag: release/2.11.33-1~4^2~12^2~26 X-Git-Url: https://git.donarmstrong.com/?a=commitdiff_plain;h=f89da3de689fb4db3b6afbea2a679ecf11d5b4ce;p=lilypond.git Spanih changing defaults file --- diff --git a/Documentation/es/user/changing-defaults.itely b/Documentation/es/user/changing-defaults.itely index 7afd34e6b5..487e4c67b6 100644 --- a/Documentation/es/user/changing-defaults.itely +++ b/Documentation/es/user/changing-defaults.itely @@ -1,160 +1,2058 @@ -@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- +@c -*- coding: utf-8; mode: texinfo; -*- @c This file is part of lilypond.tely @ignore - Translation of GIT committish: 21149cf2a4a3f620c5ed11989998bb0d4a4fc254 - + Translation of GIT committish: 9d22963d70da2db80ead5c63eb4a6e626f975cc2 When revising a translation, copy the HEAD committish of the version that you are working on. See TRANSLATION for details. @end ignore - @node Changing defaults @chapter Changing defaults -UNTRANSLATED NODE: IGNORE ME -@menu -* Automatic notation:: -* Interpretation contexts:: -* The \override command:: -@end menu +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 +@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.} + + +@menu +* Automatic notation:: +* Interpretation contexts:: +* The \override command:: +@end menu + + @node Automatic notation @section Automatic notation -UNTRANSLATED NODE: IGNORE ME +Esta sección descibe la manera de cambiar la forma en que se dibujan automáticamente las alteraciones accidentales y +las barras de las figuras. + +@menu +* Automatic accidentals:: +* Setting automatic beam behavior:: +@end menu -@menu -* Automatic accidentals:: -* Setting automatic beam behavior:: -@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 ocatavas 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 alteaciones 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 ambargo, 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 +tiografiadas 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. -UNTRANSLATED NODE: IGNORE ME @node Setting automatic beam behavior @subsection Setting automatic beam behavior -UNTRANSLATED NODE: IGNORE ME +@funindex autoBeamSettings +@funindex (end * * * *) +@funindex (begin * * * *) +@cindex barras automáticas, ajuste fino +@cindex ajuste fino de las barras automáticas + +@c [TODO: use \applyContext] + +En compases normales, las barras de figura automáticas pueden comenzar en cualquier nota +pero sólo pueden acabar en ciertas posiciones dentro del compás: las barras pueden acabar sobre un pulso +o en duraciones especificadas por las propiedades que están dentro de +@code{autoBeamSettings}. Las propiedades de @code{autoBeamSettings} +consisten en una lista de reglas sobre dónde pueden comenzar y acabar las barras. Las +reglas por defecto de @code{autoBeamSettings} están definidas en el archivo +@file{scm/@/auto@/-beam@/.scm}. + +Para añadir una regla a la lista, utilice +@example +#(override-auto-beam-setting '(be p q n m) a b [contexto]) +@end example + +@itemize @bullet + +@item @code{be} es "begin" (comienzo) o "end" (final). + +@item @code{p/q} es la duración de la figura para la que quiere añadir +una regla. Se considera que una barra tiene la duración de su figura +más breve. Establezca el valor de @code{p} y @code{q} a un asterisco @code{'*'} para +que se aplique a cualquier barra. + +@item @code{n/m} es la indicación de compás para la que se aplica +esta regla. Establezca el valor de @code{n} y @code{m} a un asterisco @code{'*'} +para que la regla se aplique a cualquier compás. + +@item @code{a/b} es la posición dentro del compás en la que debe comenzar o terminar +la barra. + +@item @code{contexto} es opcional, y especifica el contexto en el que +se debe hacer el cambio. El valor por defecto es @code{'Voice}. +@code{#(score-override-auto-beam-setting '(A B C D) E F)} equivale a +@code{#(override-auto-beam-setting '(A B C D) E F 'Score)}. + +@end itemize + +Por ejemplo, si queremos que las barras automáticas siempre acaben sobre la primera +negra del compás, escriba + +@example +#(override-auto-beam-setting '(end * * * *) 1 4) +@end example + +Puede forzar los ajustes para las barras de forma que sólo afecten a las barras cuya figura +más breve sea una duración concreta + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\time 2/4 +#(override-auto-beam-setting '(end 1 16 * *) 1 16) +a16 a a a a a a a | +a32 a a a a16 a a a a a | +#(override-auto-beam-setting '(end 1 32 * *) 1 16) +a32 a a a a16 a a a a a | +@end lilypond + +Puede forzar los ajustes del barrado para que sólo afecten a ciertas indicaciones +de compás + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\time 5/8 +#(override-auto-beam-setting '(end * * 5 8) 2 8) +c8 c d d d +\time 4/4 +e8 e f f e e d d +\time 5/8 +c8 c d d d +@end lilypond + +También puede eliminar una regla de finalización de barra previamente establecida, usando + +@example +#(revert-auto-beam-setting '(be p q n m) a b [contexto]) +@end example + +@noindent +be, p, q, n, m, a, b y contexto significan lo mismo que antes. Fíjese en que las +reglas por defecto se describen en el archivo @file{scm/@/auto@/-beam@/.scm}, +por tanto podrá recuperar las reglas que no haya creado explícitamente. + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\time 4/4 +a16 a a a a a a a a a a a a a a a +#(revert-auto-beam-setting '(end 1 16 4 4) 1 4) +a16 a a a a a a a a a a a a a a a +@end lilypond + +La regla de una instrucción revert-auto-beam-setting debe corresponder exactamente con la +regla original. Esto es: no se tiene en cuenta ninguna expansión de comodines. + +@lilypond[quote,fragment,ragged-right,verbatim,relative=2] +\time 1/4 +#(override-auto-beam-setting '(end 1 16 1 4) 1 8) +a16 a a a +#(revert-auto-beam-setting '(end 1 16 * *) 1 8) % this won't revert it! +a a a a +#(revert-auto-beam-setting '(end 1 16 1 4) 1 8) % this will +a a a a +@end lilypond + + + +@c TODO: old material -- not covered by above stuff, I think. +Si las barras automáticas han de terminar sobre las negras de un compás de 5/4, especifique toas las +terminaciones +@example +#(override-auto-beam-setting '(end * * * *) 1 4 'Staff) +#(override-auto-beam-setting '(end * * * *) 1 2 'Staff) +#(override-auto-beam-setting '(end * * * *) 3 4 'Staff) +#(override-auto-beam-setting '(end * * * *) 5 4 'Staff) +@dots{} +@end example + +La misma sintaxis sepuede usar para especificar los puntos de comienzo de las barras. En este +ejemplo, las barras automáticas sólo pueden terminar sobre una negra con puntillo +@example +#(override-auto-beam-setting '(end * * * *) 3 8) +#(override-auto-beam-setting '(end * * * *) 1 2) +#(override-auto-beam-setting '(end * * * *) 7 8) +@end example +En el compás de 4/4, esto significa que las barras automáticas sólo pueden terminar sobre +3/8 y sobre el cuarto pulso del compás (después de haber transcurrido un 3/4, esto es, dos veces +3/8). + +Si ocurre algún comportamiento inesperado de las barras, compruebe los ajustes del barrado automático +por defecto en el archivo @file{scm/@/auto@/-beam@/.scm} +en busca de un posible conflicto, ya que los finales de barra +definidos en este lugar se seguirán aplicando encima de sus propias sobreescrituras. Cualesquiera +finales no deseados dentro de los valores por defecto se deben contrarrestar específicamente para nuestro o nuestros +propios compases. + +Por ejemplo, para tipografiar finales de barra de @code{(3 4 3 2)} corcheas en un 12/8, comience +con + +@example +%%% contrarrestar los valores por defecto en scm/auto-beam.scm respecto al compás de 12/8 +#(revert-auto-beam-setting '(end * * 12 8) 3 8) +#(revert-auto-beam-setting '(end * * 12 8) 3 4) +#(revert-auto-beam-setting '(end * * 12 8) 9 8) + +%%% nuestros nuevos valores +#(override-auto-beam-setting '(end 1 8 12 8) 3 8) +#(override-auto-beam-setting '(end 1 8 12 8) 7 8) +#(override-auto-beam-setting '(end 1 8 12 8) 10 8) +@end example + +@cindex automáticas, generación de las barras +@cindex autobarrado +@funindex autoBeaming +@cindex letra + +Si se van a utilizar las barras para indicar los melismas de las canciones, entonces el barrado +automático se debe desactivar con @code{\autoBeamOff}. + + +@refcommands + +@funindex \autoBeamOff +@code{\autoBeamOff}, +@funindex \autoBeamOn +@code{\autoBeamOn}. + +@commonprop + +Los patrones de barrado se pueden alterar con la propiedad @code{beatGrouping}, + +@lilypond[quote,verbatim,relative=2,fragment,ragged-right] +\time 5/16 +\set beatGrouping = #'(2 3) +c8[^"(2+3)" c16 c8] +\set beatGrouping = #'(3 2) +c8[^"(3+2)" c16 c8] +@end lilypond + + +@refbugs + +Si una partitura termina con una barra automática sin finalizar y que aún +acepta más figuras, esta última barra no se imprimirá en absoluto. Lo mismo vale para +las voces polifónicas, introducidas con @code{<< @dots{} \\ @dots{} +>>}. Si una voz polifónica termina meintras una barra automática aún +acepta notas, entonces no aparece. + @node Interpretation contexts @section Interpretation contexts -UNTRANSLATED NODE: IGNORE ME - -@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 +Esta sección explica qué son los contextos y cómo modificarlos. + +@menu +* Contexts explained:: +* Creating contexts:: +* Changing context properties on the fly:: +* Modifying context plug-ins:: +* Layout tunings within contexts:: +* Changing context default settings:: +* Defining new contexts:: +* Aligning contexts:: +* Vertical grouping of grobs:: +@end menu + + @node Contexts explained @subsection Contexts explained -UNTRANSLATED NODE: IGNORE ME +Cuando se imprime la música, se tienen que añadir a la salida una gran cantidad de elementos +notacionales. Por ejemplo, compare la entrada y la salida del siguiente ejemplo: + +@lilypond[quote,verbatim,relative=2,fragment] +cis4 cis2. g4 +@end lilypond + +La entrada es bastante escueta, pero en la salida se añaden líneas divisorias, alteraciones accidentales, +la clave y la indicación de compás. LilyPond @emph{interpreta} la +entrada. En esta fase se inspecciona la información musical en orden temporal, +de forma parecida a la lectura de una partitura de izquierda a derecha. Mientras se lee +la entrada, el programa recuerda dónde se encuentran los límites de los compases, y qué notas +requieren alteraciones explícitas. Esta información se puede presentar sobre varios +niveles. Por ejemplo, el efecto de una alteración accidental se encuentra limitada +a un solo pentagrama, mientras que una barra divisoria debe estar sincronizada a través +de la partitura de arriba a abajo. + +Dentro de LilyPond, estas reglas y pequeñas porciones de información se agrupan en +@emph{Contexts}. Algunos ejemplos de contextos son @context{Voice} (Voz), +@context{Staff} (Pauta o pentagrama) y @context{Score} (Partitura). Los contextos son jerárquicos, por +ejemplo: un @context{Staff} contener muchas @context{Voice}s, y una +@context{Score} puede contener muchos contextos de @context{Staff}. + +@quotation +@image{context-example,5cm,,} +@end quotation + +Cada contexto asume la responsabilidad de imponer algunas reglas de notación, +creando ciertos objetos de notación y manteniendo las propiedades +asociadas. Por ejemplo, el contexto @context{Voice} puede introducir una alteración +accidental y entonces el contexto @context{Staff} mantiene la regla de mostrar o +suprimir la alteración para el resto del compás. La +sincronización de las líneas divisorias se gestiona dentro del contexto de la partitura, @context{Score}. + +Sin embargo, en algunas músicas posiblemente no queramos que las líneas divisorias estén +sincronizada (pensemos en una partitura polimétrica en compases de 4/4 y de 3/4). En tales casos, +debemos modificar los ajustes por omisión de los contextos @context{Score} +y @context{Staff}. + +Para partituras muy sencillas, los contextos se crean implícitamente y no debemos +preocuparnos por ellos. Para piezas mayores, como por ejemplo cualquiera que tenga más de un pentagrama, +los contextos se deben crear explícitamente para asegurarnos +de que tendremos la cantidad exacta de pentagramas que necesitamos, +y que están en el orden correcto. Para tipografiar piezas +con notación especializada, puede ser útil modificar contextos existentes +o definir unos nuevos. + + +En la referencia del programa se encuentra una descripción completa de todos los contextos que están disponibles, +consulte +@ifhtml +@internalsref{Contexts}. +@end ifhtml +@ifnothtml +Translation @arrow{} Context. +@end ifnothtml + +@c [TODO: describe propagation] + @node Creating contexts @subsection Creating contexts -UNTRANSLATED NODE: IGNORE ME +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 + +@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 + +@funindex \new +@cindex nuevos, contextos +@cindex Contexto, creación de + +@example +\new @var{tipo} @var{expresión_musical} +@end example + +@noindent +donde @var{tipo} es el nombre de un contexto (como @code{Staff} o +@code{Voice}). Esta instrucción crea un contexto nuevo, y empieza a +interpretar la @var{expresión_musical} con él. + +Una aplicación práctica de @code{\new} es una partitura con muchos pentragramas. +Cada parte que debe ir en su propio pentagrama, va precedida de +@code{\new Staff}. + +@lilypond[quote,verbatim,relative=2,ragged-right,fragment] +<< + \new Staff { c4 c } + \new Staff { d4 d } +>> +@end lilypond + +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. + + +@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 + +@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 + +@example +\context Voice = "@b{tenor}" @var{música} +@end example + +@noindent +de forma que los textos se puedan alienar correctamente con sus notas, + +@example +\new Lyrics \lyricsto "@b{tenor}" @var{letra} +@end example + +@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, + +@example +musica = @{ c4 c4 @} +decoracion = @{ s4-. s4-> @} +@end example + +se combinan enviando los dos al mismo contexto @context{Voice}, + +@example +<< + \new Staff \context Voice = "A" \musica + \context Voice = "A" \decoracion +>> +@end example +@lilypond[quote,ragged-right] +music = { c4 c4 } +arts = { s4-. s4-> } +\relative c'' << + \new Staff \context Voice = "A" \music + \context Voice = "A" \arts +>> +@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. + +@cindex crear contextos + +@item +La tercera instrucción para crear contextos es +@example +\context @var{tipo} @var{música} +@end example + + +@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. + +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} + +@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: + +@example +\applyOutput #'Score #@var{función} +\applyOutput #'Staff #@var{función} +@end example + +@end itemize + @node Changing context properties on the fly @subsection Changing context properties on the fly -UNTRANSLATED NODE: IGNORE ME +@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 interpretció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 objero 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}, or +@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 decripció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 -UNTRANSLATED NODE: IGNORE ME +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 +@ifhtml +@internalsref{Engravers}. +@end ifhtml +@ifnothtml +Referencia del programa @arrow Traducción @arrow{} Grabadores. +@end ifnothtml +cada uno de los contextos descritos en +@ifhtml +@internalsref{Contexts} +@end ifhtml +@ifnothtml +Referencia del programa @arrow Traducción @arrow{} Contexto. +@end ifnothtml +relaciona los grabadores utilizados para esse contexto. + + +Puede ser útil poner o quitar estos añadidos. Esto se hace +iniciando un contexto nuevo con @code{\new} o @code{\context} y +modificándolo, + +@funindex \with + +@example +\new @var{contexto} \with @{ + \consists @dots{} + \consists @dots{} + \remove @dots{} + \remove @dots{} + @emph{etc.} +@} +@{ + @emph{..música..} +@} +@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}, + +@lilypond[quote,relative=1,verbatim,fragment] +<< + \new Staff { + f2 g + } + \new Staff \with { + \remove "Time_signature_engraver" + \remove "Clef_engraver" + } { + f2 g2 + } +>> +@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 pentragrama tiene su propia +indicación de compás. + +@cindex polimétricas, partituras +@cindex Indicaciones de compás, varias + +@lilypond[quote,relative=1,ragged-right,verbatim,fragment] +\new Score \with { + \remove "Timing_translator" + \remove "Default_bar_line_engraver" +} << + \new Staff \with { + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } { + \time 3/4 + c4 c c c c c + } + \new Staff \with { + \consists "Timing_translator" + \consists "Default_bar_line_engraver" + } { + \time 2/4 + c4 c c c c c + } +>> +@end lilypond + @node Layout tunings within contexts @subsection Layout tunings within contexts -UNTRANSLATED NODE: IGNORE ME +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. + +La sintaxis de esto es + +@example +\override @var{contexto}.@var{nombre} #'@var{propiedad} = #@var{valor} +@end example + +Aquí @var{nombre} es el nombre de un objeto gráfico, como @code{Stem} (plica) o +@code{NoteHead} (cabeza de nota), y @var{propiedad} es una variable interna del sistema +de formateo (@q{propiedad del objeto gráfico o grob} o @q{propiedad de la disposición o layout}). El último es un +símbolo, por ello debe ir entre comillas. La subsección @ref{Constructing a +tweak} explica qué datos hay que cumplimentar para las variables @var{nombre}, @var{propiedad} y +@var{valor}. Aquí discutiremos solamente la funcionalidad de esta instrucción. + +La instrucción + +@verbatim +\override Staff.Stem #'thickness = #4.0 +@end verbatim + +@noindent +hace las plicas más gruesas (el valor por defecto es 1.3, tomando como unidad el grosor de las líneas del +pentagrama). Puesto que la orden especifica @context{Staff} como contexto, sólo se +aplica al pentagrama en curso. Otros pentagramas conservarán su apariencia visual +normal. Aquí podemos ver la orden en acción: + +@lilypond[quote,verbatim,relative=2,fragment] +c4 +\override Staff.Stem #'thickness = #4.0 +c4 +c4 +c4 +@end lilypond + +La instrucción @code{\override} cambia la definición de la @code{Stem} (plica) +dentro del pentagrama @context{Staff} en curso. Después de que la orden se ha interpretado, +todas las plicas quedan engrosadas. + +Análogo a @code{\set}, el argumento @var{contexto} se puede dejar en blanco, +haciendo que se utilice el contexto por defecto, @context{Voice}. Al añadir +@code{\once} se aplicará el cambio solamente durante un paso de tiempo. + +@lilypond[quote,fragment,verbatim,relative=2] +c4 +\once \override Stem #'thickness = #4.0 +c4 +c4 +@end lilypond + +El @code{\override} debe hacerse antes de que el objeto haya +comenzado. Por ello, al alterar objetos de extensión o @emph{Spanner} tales como ligaduras +o barras de figuras, la instrucción @code{\override} debe ejecutarse en el momento en que se +crea el objeto. En este ejemplo, + +@lilypond[quote,fragment,verbatim,relative=2] +\override Slur #'thickness = #3.0 +c8[( c +\override Beam #'thickness = #0.6 +c8 c]) +@end lilypond + +@noindent +la ligadura es más gruesa, no así la barra. Esto es así porque la orden para la barra +@code{Beam} va después de que la barra Beam ha comenzado, así que no tiene ningún efecto. + +De forma análoga a @code{\unset}, la orden @code{\revert} para un contexto +deshace una orden @code{\override}; como con @code{\unset}, afecta solamente +los ajustes que se hayan hecho dentro del mismo contexto. En otras palabras, el +@code{\revert} del siguiente ejemplo no hace nada en absoluto. + +@example +\override Voice.Stem #'thickness = #4.0 +\revert Staff.Stem #'thickness +@end example + +Algunas opciones trucables reciben el nombre de @q{subpropiedades} y residen dentro de las +propiedades. Para trucarlas, utilice órdenes de la forma + +@c leave this as a long long +@example +\override @var{contexto}.@var{nombre} #'@var{propiedad} #'@var{subpropiedad} = #@var{valor} +@end example + +@noindent +tal y como + +@example +\override Stem #'details #'beamed-lengths = #'(4 4 3) +@end example + + +@seealso + +Funcionamiento interno: @internalsref{OverrideProperty}, @internalsref{RevertProperty}, +@internalsref{PropertySet}, @internalsref{Backend} y +@internalsref{All layout objects}. + + +@refbugs + +El back-end o parte profunda del programa no es muy estrict 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 -UNTRANSLATED NODE: IGNORE ME +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. + + + +@refbugs + +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 + +@example +\layout @{ + \context @{ + \RemoveEmptyStaffContext + + \override Stem #'thickness = #4.0 + @} +@} +@end example + @node Defining new contexts @subsection Defining new contexts -UNTRANSLATED NODE: IGNORE ME +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. + +El siguiente ejemplo muestra cómo construir un tipo diferente de contexto de +@context{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, + +@lilypond[quote,ragged-right] +\layout { \context { + \name ImproVoice + \type "Engraver_group" + \consists "Note_heads_engraver" + \consists "Text_engraver" + \consists Pitch_squash_engraver + squashedPosition = #0 + \override NoteHead #'style = #'slash + \override Stem #'transparent = ##t + \alias Voice +} +\context { \Staff + \accepts "ImproVoice" +}} + +\relative c'' { + a4 d8 bes8 \new ImproVoice { c4^"ad lib" c + c4 c^"undress" c_"while playing :)" 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}, + +@example +\layout @{ + \context @{ + @dots{} + @} +@} +@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 primer lugar es necesario definir un nombre para el nuevo contexto: + +@example +\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}, + +@example +\alias Voice +@end example + +El contexto imprimirá notas y textos explicativos, por ello tenemos que añadir los +grabadores que aportan esta funcionalidad, + +@example +\consists Note_heads_engraver +\consists Text_engraver +@end example + +Pero sólo necesitamos esto en la línea central, + +@example +\consists Pitch_squash_engraver +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. + +Las notas parecen barras inclinadas y no tienen plica, + +@example +\override NoteHead #'style = #'slash +\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}, + +@example +\type "Engraver_group" +@end example + +Al juntarlo todo, obtenemos + +@example +\context @{ + \name ImproVoice + \type "Engraver_group" + \consists "Note_heads_engraver" + \consists "Text_engraver" + \consists Pitch_squash_engraver + squashedPosition = #0 + \override NoteHead #'style = #'slash + \override Stem #'transparent = ##t + \alias Voice +@} +@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), + +@example +\context @{ + \Staff + \accepts ImproVoice +@} +@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. + +Ponemos ambos dentro de un bloque @code{\layout}, como + +@example +\layout @{ + \context @{ + \name ImproVoice + @dots{} + @} + \context @{ + \Staff + \accepts "ImproVoice" + @} +@} +@end example + +Así pues, la salida que aparece al comienzo de esta sub-sección se uede escribir como + +@example +\relative c'' @{ + a4 d8 bes8 + \new ImproVoice @{ + c4^"ad lib" c + c4 c^"undress" + c c_"while playing :)" + @} + a1 +@} +@end example + @node Aligning contexts @subsection Aligning contexts -UNTRANSLATED NODE: IGNORE ME +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, + +@cindex ossia +@findex alignAboveContext +@findex alignBelowContext + +@lilypond[quote,ragged-right] +ossia = { f4 f f f } +\score{ + \relative c' \new Staff = "main" { + c4 c c c + << + \new Staff \with {alignAboveContext=main} \ossia + { d8 f d f d f d f } + >> + } +} +@end lilypond + @node Vertical grouping of grobs @subsection Vertical grouping of grobs -UNTRANSLATED NODE: IGNORE ME +Los grobs (objetos gráficos) VerticalAlignment y VerticalAxisGroup funcionan juntos. +VerticalAxisGroup agrupa distintos objetos gráficos como Staff, Lyrics, +etc. VerticalAlignment por su parte alinea verticalmente los diferentes objetos gráficos +agrupados por VerticalAxisGroup. Normalmente hay solamente un +VerticalAlignment por cada partitura, pero cada Staff, Lyrics, etc. tiene su propio +VerticalAxisGroup. + @node The \override command @section The @code{\override} command -UNTRANSLATED NODE: IGNORE ME - -@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:: -@end menu +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 + +Así establecemos la @var{propiedad_de_presentación} del @var{objeto_de_presentación} especificado, +wque 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:: +@end menu + + + @node Constructing a tweak @subsection Constructing a tweak -UNTRANSLATED NODE: IGNORE ME +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{subpropieades} 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íann 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 -UNTRANSLATED NODE: IGNORE ME +Supongamos que queremos mover la indicación de digitación del fragmento +siguiente: + +@lilypond[quote,fragment,relative=2,verbatim] +c-2 +\stemUp +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 + +@quotation +Accepted by: @internalsref{Fingering_engraver}, +@end quotation + +@noindent +That link brings us to the documentation for the Engraver, the +plug-in, which says + +@quotation +This engraver creates the following layout objects: @internalsref{Fingering}. +@end quotation +In other words, once the @code{FingerEvent}s are interpreted, the +@code{Fingering_engraver} plug-in will process them. +@end ignore + +@ignore +@c I can't figure out what this is supposed to mean. -gp + +The @code{Fingering_engraver} is also listed to create +@internalsref{Fingering} objects, + +@c old info? it doesn't make any sense to me with our current docs. +This is also the +second bit of information listed under @b{See also} in the Notation +manual. +@end ignore + +@ifnothtml +La referencia del programador se encuentra disponible en forma dedocumento 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 + +@quotation +Los objetos de digitación se crean por parte de: @internalsref{Fingering_engraver} y +@internalsref{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: + +@itemize @bullet + +@item @internalsref{Fingering}: +los objetos @internalsref{Fingering} se crean por parte de: +@internalsref{Fingering_engraver} + +@item @internalsref{Fingering_engraver}: +Tipos de música aceptados: @internalsref{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} +@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 uun 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 tamién se puede examinar como undocumento normal. Contiene +capítulos que tratan de +@ifhtml +@internalsref{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. + @node Layout interfaces @subsection Layout interfaces -UNTRANSLATED NODE: IGNORE ME +@cindex interfaz de la presentación +@cindex presentación, interfaz de la +@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íimbolo 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}. + +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): + +@code{0.5} +@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. + + +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 +@item +Su tamañoo es independiente del espaciado horizontal, al contrario de las ligaduras o las baarras 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. + +@item +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. +@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} + +@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}. +@end quotation + +Al pulsar sobre cualquiera de los enlaces nos desplazaremos a la página del respectivo interfaz del +objeto. Cada interfaz tiene uncierto 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 hestado hablando de @emph{el} objeto @code{Fingering}, pero realmente esto no significa +mucho. El archivo de incialización (véase +@ref{Default files}) +@file{scm/@/define@/-grobs@/.scm} muestra el alma del @q{objeto}, + +@example +(Fingering + . ((padding . 0.5) + (avoid-slur . around) + (slur-padding . 0.2) + (staff-padding . 0.5) + (self-alignment-X . 0) + (self-alignment-Y . 0) + (script-priority . 100) + (stencil . ,ly:text-interface::print) + (direction . ,ly:script-interface::calc-direction) + (font-encoding . fetaNumber) + (font-size . -5) ; don't overlap when next to heads. + (meta . ((class . Item) + (interfaces . (finger-interface + font-interface + text-script-interface + text-interface + side-position-interface + self-alignment-interface + item-interface)))))) +@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. + @node Determining the grob property @subsection Determining the grob property -UNTRANSLATED NODE: IGNORE ME +Recordemos que queríamos cambiar la posición del @b{2} en + +@lilypond[quote,fragment,relative=2,verbatim] +c-2 +\stemUp +f +@end lilypond + +Puesto que el @b{2} se encuentra colocado verticalmente sobre su nota, tenemos que +negociar con el interfaz asociado con esta colocaciió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?) +@end quotation + +@cindex relleno +@noindent +Debajo de esta descripción, la variable @code{padding} (relleno) se describe como + +@quotation +@table @code +@item padding +(dimensión, en espacios de pentagrama) + +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: +@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: + +@lilypond[quote,relative=2,fragment,verbatim] +\once \override Voice.Fingering #'padding = #3 +c-2 +\stemUp +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 + +@quotation +El grabador Fingering_engraver es parte de los contextos: @dots{} @internalsref{Voice} +@end quotation + @node Objects connected to the input @subsection Objects connected to the input -UNTRANSLATED NODE: IGNORE ME +@funindex \tweak + +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,fragment,verbatim,ragged-right] +< + c + \tweak #'color #red d + g + \tweak #'duration-log #1 a +>4-\tweak #'padding #10 -. +@end lilypond + +Como podemos ver, las propiedades se establecen directamente dentro de los objetos, +sin hacer mención al nombre del grob ni al contexto en el que se tendría que +aplicar. + +Esta técnica sóloo 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 + +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 unn cambio en el valor de una propiedad). + +Existen muy pocos objetos que estén conectados @emph{directamente} al +resultado de salida. Una nota normal (como @code{c4}) no está conectada directamente +a la salida, así que + +@example +\tweak #'color #red c4 +@end example + +@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} -UNTRANSLATED NODE: IGNORE ME +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 + +\relative c'' @{ + c4^\F c4_\F +@} +@end example + +@noindent +En otras palabras, @code{\tweak} no se comporta como una articulación en lo que respecta a la +sintaxis; en concreto, no se puede adjuntar mediante +@samp{^} y @samp{_}. + +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. + +@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 + +@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}. + @node \set versus \override @subsection @code{\set} vs. @code{\override} -UNTRANSLATED NODE: IGNORE ME +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}) = (length siblings) 2) + (eq? (car (last-pair siblings)) grob)) + (ly:grob-set-property! grob 'extra-offset '(-2 . 5))))) + +\relative c'' { + \override Tie #'after-line-breaking = + #my-callback + c1 ~ \break c2 ~ c +} +@end lilypond + +@noindent +Cuando aplicamos este truco, la nueva función de callback @code{after-line-breaking} +también debe llamar a la antigua @code{after-line-breaking}, si existe. +Por ejemplo, si se utiliza con @code{Hairpin} (regulador), +también se debe llamar a @code{ly:hairpin::after-line-breaking}. + + +@item Algunos objetos no se pueden cambiar con @code{\override} por razones +técnicas. Ejemplo de ello son @code{NonMusicalPaperColumn} +y @code{PaperColumn}. Se peuden cambiar con la función +@code{\overrideProperty}, que funciona de forma parecida a @code{\once +\override}, pero usa una sintaxis diferente. + +@example +\overrideProperty +#"Score.NonMusicalPaperColumn" % Nombre del Grob u objeto gráfico +#'line-break-system-details % Nombre de la propiedad +#'((next-padding . 20)) % Valor +@end example + +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}. +@end itemize --- SKELETON FILE -- -When you actually translate this file, please remove these lines as -well as all `UNTRANSLATED NODE: IGNORE ME' lines.