X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Fes%2Fuser%2Fchanging-defaults.itely;h=dbc9397137dad0461009f1d835be5e06dd4b92f9;hb=20b8c1519bbba8728457aa98e59993837bedfb04;hp=fc99a9c08a674e7a9c65911a5112c61175cc9885;hpb=b80683cc94b0c22bbe3fccb94a9b2e23787fd10b;p=lilypond.git diff --git a/Documentation/es/user/changing-defaults.itely b/Documentation/es/user/changing-defaults.itely index fc99a9c08a..dbc9397137 100644 --- a/Documentation/es/user/changing-defaults.itely +++ b/Documentation/es/user/changing-defaults.itely @@ -1,160 +1,1792 @@ @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*- @c This file is part of lilypond.tely @ignore - Translation of GIT committish: 9634340429eb0518432b152fe4aaf7471b67b013 - + Translation of GIT committish: 2ac76a5b0a5572cb259f22751764acfe431bfff2 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.51" @node Changing defaults @chapter Changing defaults -UNTRANSLATED NODE: IGNORE ME -@menu -* Automatic notation:: -* Interpretation contexts:: -* The \override command:: -@end menu -@node Automatic notation -@section Automatic notation +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. -UNTRANSLATED NODE: IGNORE ME -@menu -* Automatic accidentals:: -* Setting automatic beam behavior:: -@end menu -@node Automatic accidentals -@subsection Automatic accidentals +@cindex Referencia de funcionamiento interno -UNTRANSLATED NODE: IGNORE ME +Los controles disponibles para los ajustes finos se describen en un +documento separado, +@iftex +el Manual de referencia de funcionamiento interno. +@end iftex +@ifnottex +la @ref{Top,Referencia de funcionamiento interno,,lilypond-internals}. +@end ifnottex +Dicho manual relaciona todas las variables, funciones y opciones que +se encuentran disponibles en LilyPond. Está escrito como un documento +HTML, que se puede encontrar en +@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. -@node Setting automatic beam behavior -@subsection Setting automatic beam behavior +Hay cuatro áreas en las que se pueden cambiar los valores por defecto: + +@itemize +@item +Notación automática: cambiar la creación automática de los elementos +de notación. Por ejemplo, cambiar las reglas de barrado de las +figuras. + +@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{General input and output} y @ref{Spacing issues}. +@end itemize + +Internamente, LilyPond utiliza el lenguaje Scheme (un dialecto de +LISP) para aportar la infraestructura. La sobreescritura de las +decisiones de disposición da acceso efectivo a las interioridades del +programa, lo que requiere código de Scheme como entrada. Los +elementos de Scheme se inauguran dentro de un archivo @code{.ly} con +el símbolo de cuadradillo @code{#}.@footnote{@rlearning{Scheme +tutorial} contiene un breve tutorial sobre la introducción de números, +listas, cadenas y símbolos en Scheme.} + + +@menu +* Interpretation contexts:: +* Explaining the Internals Reference:: +* Modifying properties:: +* Useful concepts and properties:: +* Common properties:: +* Advanced tweaks:: +@end menu -UNTRANSLATED NODE: IGNORE ME @node Interpretation contexts @section Interpretation contexts -UNTRANSLATED NODE: IGNORE ME +Esta sección explica qué son los contextos y cómo modificarlos. + +@menu +* Contexts explained:: +* Creating contexts:: +* Modifying context plug-ins:: +* Changing context default settings:: +* Defining new contexts:: +* Aligning contexts:: +@end menu + -@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 +@code{Voice} (Voz), @code{Staff} (Pauta o pentagrama) y @code{Score} +(Partitura). Los contextos son jerárquicos, por ejemplo: un +@code{Staff} contener muchas @code{Voice}s, y una @code{Score} puede +contener muchos contextos de @code{Staff}. + +@quotation +@sourceimage{context-example,5cm,,} +@end quotation + +Cada contexto asume la responsabilidad de imponer algunas reglas de +notación, creando ciertos objetos de notación y manteniendo las +propiedades asociadas. Por ejemplo, el contexto @code{Voice} puede +introducir una alteración accidental y entonces el contexto +@code{Staff} mantiene la regla de mostrar o suprimir la alteración +para el resto del compás. La sincronización de las líneas divisorias +se gestiona dentro del contexto de la partitura, @code{Score}. + +Sin embargo, en algunas músicas posiblemente no queramos que las +líneas divisorias estén sincronizada (pensemos en una partitura +polimétrica en compases de 4/4 y de 3/4). En tales casos, debemos +modificar los ajustes por omisión de los contextos @code{Score} y +@code{Staff}. + +Para partituras muy sencillas, los contextos se crean implícitamente y +no debemos preocuparnos por ellos. Para piezas mayores, como por +ejemplo cualquiera que tenga más de un pentagrama, los contextos se +deben crear explícitamente para asegurarnos de que tendremos la +cantidad exacta de pentagramas que necesitamos, y que están en el +orden correcto. Para tipografiar piezas con notación especializada, +puede ser útil modificar contextos existentes o definir unos nuevos. + + +En la referencia del programa se encuentra una descripción completa de +todos los contextos que están disponibles, consulte +@ifhtml +@rinternals{Contexts}. +@end ifhtml +@ifnothtml +Traducción @expansion{} Contexto. +@end ifnothtml @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. -@node Changing context properties on the fly -@subsection Changing context properties on the fly +@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 + +@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 pentagramas. +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 @code{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 @code{Voice} + +@example +\applyOutput #'@var{contexto} #@var{función} % aplicar al contexto Voice +@end example + +Para que se interprete dentro de los niveles de @code{Score} o +@code{Staff}, utilice las siguientes formas: + +@example +\applyOutput #'Score #@var{función} +\applyOutput #'Staff #@var{función} +@end example + +@end itemize -UNTRANSLATED NODE: IGNORE ME @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 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. -@node Layout tunings within contexts -@subsection Layout tunings within contexts +Para ver una descripción completa de todos y cada uno de los +complementos, consulte +@ifhtml +@rinternals{Engravers and Performers}. +@end ifhtml +@ifnothtml +Referencia de funcionamiento interno @expansion{} Traducción @expansion{} Grabadores. +@end ifnothtml +Cada contexto que se describe en +@ifhtml +@rinternals{Contexts} +@end ifhtml +@ifnothtml +Referencia de funcionamiento interno @expansion{} Traducción @expansion{} Contexto. +@end ifnothtml +relaciona los grabadores que se usan para ese contexto. + + +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: + +@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{} 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] +<< + \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. É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 compases distintos al mismo tiempo + +@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 -UNTRANSLATED NODE: IGNORE ME @node Changing context default settings @subsection Changing context default settings -UNTRANSLATED NODE: IGNORE ME +Los ajustes de las secciones previas ( @ref{The \set command}, +@ref{Modifying context plug-ins} y @ref{Overview of modifying +properties}) también se pueden escribir separados de la música dentro +del bloque @code{\layout}: + +@example +\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 +\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 + +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. + +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 @{ + \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 @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 +@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 + \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^"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}, + +@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 @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, + +@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 @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, + +@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 @rinternals{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 +@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 @{ + \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 +puede 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 (@rlearning{Vocal ensembles}) y un ossia, -@node Vertical grouping of grobs -@subsection Vertical grouping of grobs +@c ARREGLAR: esta sección no funciona en PDF. (¿?) -UNTRANSLATED NODE: IGNORE ME +@cindex ossia +@findex alignAboveContext +@findex alignBelowContext -@node The \override command -@section The @code{\override} command +@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 -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 -@node Constructing a tweak -@subsection Constructing a tweak -UNTRANSLATED NODE: IGNORE ME + +@node Explaining the Internals Reference +@section Explaining the Internals Reference + + +@menu +* Navigating the program reference:: +* Layout interfaces:: +* Determining the grob property:: +* Naming conventions:: +@end menu + + @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 de funcionamiento interno: @rinternals{Fingering}. + +@end quotation + +@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. +@end ifnothtml + +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: +@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: + +@itemize + +@item @rinternals{Fingering}: +los objetos @rinternals{Fingering} se crean por parte de: +@rinternals{Fingering_engraver} + +@item @rinternals{Fingering_engraver}: +Tipos de música aceptados: @rinternals{fingering-event} + +@item @rinternals{fingering-event}: +El tipo de evento musical @code{fingering-event} está descrito en +Expresiones musicales con el nombre de @rinternals{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 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 +@ifhtml +@rinternals{Music definitions}, +@end ifhtml +@ifnothtml +@code{Music definitions} +@end ifnothtml +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 @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 @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 + +@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 +@item +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. + +@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 +@rinternals{Fingering} + +@quotation +Este objeto contempla los siguientes interfaces: +@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. + +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 + . ((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 de +funcionamiento interno 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 -@node Objects connected to the input -@subsection Objects connected to the input +@lilypond[quote,fragment,relative=2,verbatim] +c-2 +\stemUp +f +@end lilypond -UNTRANSLATED NODE: IGNORE ME +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?) +@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: -@node Using Scheme code instead of \tweak -@subsection Using Scheme code instead of @code{\tweak} +@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 @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{} +@rinternals{Voice} +@end quotation + + + +@node Naming conventions +@subsection Naming conventions UNTRANSLATED NODE: IGNORE ME +@node Modifying properties +@section Modifying properties + +@menu +* Overview of modifying properties:: +* The \set command:: +* The \override command:: +* \set versus \override:: +* Objects connected to the input:: +@end menu + + +@node Overview of modifying properties +@subsection Overview of modifying properties + +Cada contexto es responsable de la creación de ciertos tipos de +objetos gráficos. Los ajustes que se usan para imprimir estos objetos +también se almacenan por contexto. Mediante la modificación de estos +ajustes, se puede alterar la apariencia de los objetos. + +La sintaxis de esto es + +@example +\override @var{contexto}.@var{nombre} #'@var{propiedad} = #@var{valor} +@end example + +Aquí @var{nombre} es el nombre de un objeto gráfico, como @code{Stem} +o @code{NoteHead}, y @var{propiedad} es una variable interna del +sistema de formateo (@q{propiedad del grob} o @q{propiedad de +disposición}). Este último es un símbolo, y por ello debe ir +precedido de un apóstrofe. La subsección @ref{Modifying properties} +explica cómo se deben cumplimentar los conceptos @var{nombre}, +@var{propiedad} y @var{valor}. Aquí sólo nos ocuparemos de la +funcionalidad des esta instrucción. + +La instrucción + +@verbatim +\override Staff.Stem #'thickness = #4.0 +@end verbatim + +@noindent +hace más gruesas las plicas (el valor predeterminado es 1.3, con el +grosor de una línea del pentagrama como unidad). Puesto que la +instrucción especifica como contexto a @code{Staff}, sólo se aplica al +pentagrama actual. Otros pentagramas mantienen su aspecto normal. +Aquí vemos la instrucción en pleno funcionamiento: + +@lilypond[quote,verbatim,relative=2,fragment] +c4 +\override Staff.Stem #'thickness = #4.0 +c4 +c4 +c4 +@end lilypond + +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. + +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 + +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: + +@lilypond[quote,fragment,verbatim,relative=2] +\override Slur #'thickness = #3.0 +c8[( c +\override Beam #'thickness = #0.6 +c8 c]) +@end lilypond + +@noindent +la ligadura es más gruesa pero la barra no lo es. Esto es así porque +la instrucción para @code{Beam}, la barra, va después de que la barra +se ha iniciado, y por ello no tiene ningún efecto. + +De forma análoga a @code{\unset}, la instrucción @code{\revert} para +un contexto deshace una instrucción @code{\override}; como con +@code{\unset}, solamente afecta a los ajustes que se hicieron dentro +del mismo contexto. En otras palabras, el @code{\revert} del +siguiente ejemplo no hace nada. + +@example +\override Voice.Stem #'thickness = #4.0 +\revert Staff.Stem #'thickness +@end example + +Salgunas opciones «trucables» se llaman @q{subpropiedades} y residen +dentro de las propiedades normales. Para trucarlas, utilice +instrucciones de la forma + +@c leave this as a long long +@example +\override @var{context}.@var{name} #'@var{property} #'@var{subproperty} = #@var{value} +@end example + +@noindent +tales como + +@example +\override Stem #'details #'beamed-lengths = #'(4 4 3) +@end example + + +@seealso + +Referencia de funcionamiento interno: +@rinternals{OverrideProperty}, +@rinternals{RevertProperty}, +@rinternals{PropertySet}, +@rinternals{Backend} y +@rinternals{All layout objects}. + + +@knownissues + +El «back-end» o motor de salida no es muy estricto en la comprobación +de tipos de las propiedades de objetos. Las referencias cíclicas en +valores Scheme de propiedades pueden producir cuelgues o salidas +abruptas, o las dos cosas. + + +@node The \set command +@subsection The @code{\set} command + +@cindex propiedades +@funindex \set +@cindex cambiar propiedades + +Cada contexto puede tener distintas @emph{propiedades}, variables +contenidas dentro de ese contexto. Se pueden cambiar mientras dura el +paso de interpretación. Se consigue insertando la instrucción +@code{\set} dentro de la música: + +@example +\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 + +Estas instrucción salta los compases que no tienen notas. El +resultado es que los silencios multicompás se condensan. El valor +asignado es un objeto de Scheme. En este caso, es @code{#t}, el valor +booleano True o verdadero. + +Si se omite el argumento @var{context}, entonces se utiliza el +contexto actual de nivel más bajo (normalmente @code{ChordNames}, +@code{Voice} o @code{Lyrics}). En este ejemplo: + +@lilypond[quote,verbatim,relative=2,fragment] +c8 c c c +\set autoBeaming = ##f +c8 c c c +@end lilypond + +@noindent +el argumento @var{contexto} de la instrucción @code{\set} se omite, +así pues el barrado automático se desactiva en la voz actual. Observe +que el contexto de nivel más bajo no siempre contiene la propiedad que +queremos cambiar (por ejemplo, no tendrá ningún efecto intentar +establecer un valor para la propiedad @code{skipBars} del contexto de +nivel más bajo, en este caso @code{Voice}). + +@lilypond[quote,verbatim,relative=2,fragment] +R1*2 +\set skipBars = ##t +R1*2 +@end lilypond + +Los contextos so jerárquicos, y si se ha especificado un contexto +mayor, por ejemplo @code{Staff}, entonces el cambio se aplicaría +también a todos los contextos @code{Voice} dentro del pentagrama +actual. El cambio se aplica @q{al vuelo}, durante la música, de +manera que el ajuste sólo afecta al segundo grupo de corcheas. + +@funindex \unset + +También existe una instrucción @code{\unset}: +@example +\unset @var{contexto}.@var{propiedad} +@end example + +@noindent +que elimina la definición de @var{propiedad}. Esta instrucción +elimina la definición solamente si está establecida dentro de +@var{contexto}, de manera que + +@example +\set Staff.autoBeaming = ##f +@end example + +@noindent +introduce un ajuste de la propiedad en el nivel de @code{Staff}. El +ajuste también se aplica a la @code{Voice} actual. Sin embargo: + +@example +\unset Voice.autoBeaming +@end example + +@noindent +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 \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}) 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ólo funciona para los objetos que están conectados +directamente a un @rinternals{Event} (evento) del texto de entrada, +por ejemplo + +@itemize +@item cabezas de nota, producidas por chord-pitch (p. ej.: las notas de un acorde) +@item signos de articulación, producidos por instrucciones de articulación +@end itemize + +Posiblemente no funcione para plicas y alteraciones accidentales +(éstos están producidos por parte de las cabezas de nota, no por los +eventos musicales) ni para las claves (éstos no están producidos por +ninguna entrada musical, sino más bien a causa de un cambio en el +valor de una propiedad). + +Existen muy pocos objetos que estén conectados @emph{directamente} al +resultado de salida. Una nota normal (como @code{c4}) no está +conectada directamente a la salida, así que + +@example +\tweak #'color #red c4 +@end example + +@noindent +no cambia el color. Consulte @ref{Displaying music expressions} para +ver más detalles. + +@node Useful concepts and properties +@section Useful concepts and properties + + +@menu +* Input modes:: +* Direction and placement:: +* Distances and measurements:: +* Spanners:: +@end menu + +@node Input modes +@subsection Input modes + +La forma en que se interpreta la notación conenida dentro de un +archivo de entrada, está determinada por el modo de entrada en curso. + +@strong{Modo de acordes} + +Se activa con la instrucción @code{\chordmode} y produce que la +entrada se interprete con al sintaxis de la notación de acordes, véase +@ref{Chord notation}. Los acordes se imprimen como notas sobre un +pentagrama. + +El modo de acordes se activa también con la instrucción +@code{\chords}. Esto crea también un contexto @code{ChordNames} nuevo +y produce que el código que sigue se interprete conla sintaxis de la +notación de acordes y se imprima como nombres de acorde dentro del +contexto @code{ChordNames}, véase @ref{Printing chord names}. + +@strong{Modo de percusión} + +Se activa con la instrucción @code{\drummode} y produce que el código +de entrada se interprete con la sintaxis de la notación de percusión, +véase @ref{Basic percussion notation}. + +EL modo de percusión también se activa con la instrucción +@code{\drums}. También crea un contexto @code{DrumStaff} nuevo y hace +que el código que sigue se interprete con la sintaxis de la notación +de percusión y se imprima como símbolos de percusión sobre un +pentagrama de percusión, véase @ref{Basic percussion notation}. + +@strong{Modo de cifras} + +Se activa con la instrucción @code{\figuremode} y hace que el código +de entrada se interprete con la sintaxis del bajo cifrado, véase +@ref{Entering figured bass}. + +El modo de cifrase también se activa con la instrucción +@code{\figures}. También crea un contexto de @code{FiguredBass} nuevo +y hace que el código que viene a continuación se interprete con la +sintaxis del bajo cifrado y se imprima como símbolos de bajo cifrado +dentro del contexto @code{FiguredBass}, véase @ref{Introduction to +figured bass}. + +@strong{Modos de traste y tablatura} + +No existen modos de entrada especiales para introducir símibolos de +trastes y de tablatura. + +Para crear diagramas de trastes, escriba las notas o acordes en el +modo de notas e imprímalos dentro de un contexto @code{TabStaff}, +véase @ref{Default tablatures}. + +Para crear diagramas de trastes encima de un pentagrama, escríbalos +como elementos de marcado encima de las notas utilizando la +instrucción @code{\fret-diagram}, véase @ref{Fret diagrams}. + +@strong{Modo de letra} + +Se activa con la instrucción @code{\lyricmode}, y hace que la entrada +se interprete como sílabas de la letra de la canción con duraciones +opcionales y modificadores de letra asociados, véase @ref{Vocal +music}. + +El modo de letra también se habilita con la instrucción +@code{\addlyrics}. Esto también crea un contexto @code{Lyrics} nuevo +y una instrucción @code{\lyricsto} implícita que asocia la letra que +viene a continuación con la música precedente. + +@strong{Modo de marcado} + +Se activa con la instrucción @code{\markup}, y hace que la entrada se +interprete con la sintaxis del marcado, véase @ref{Text markup +commands}. + +@c silly work-around for texinfo broken-ness +@c (@strong{Note...} causes a spurious cross-reference in Info) +@b{Modo de notas} + +Es el modo predeterminado o se puede activar con la instrucción +@code{\notemode}. La entrada se interpreta como alturas, duraciones, +marcado, etc. y se imprime como notación musical sobre un pentagrama. + +Normalmente no es necesario especificar el modo de notas de forma +explícita, pero puede ser útil hacerlo en ciertas situaciones, por +ejemplo si estamos en el modo de letra, en el modo de acordes o en +otro modo y queremos insertar algo que solamente se puede hacer con la +sintaxis del modo de notas. + +Por ejemplo, para insertar indicaciones dinámicas para las estrofas de +una pieza coral es necesario entrar en el modo de notas para poder +interpretar dichas indicaciones: + +@lilypond[verbatim,relative=2,quote] +{ c4 c4 c4 c4 } +\addlyrics { + \notemode{\set stanza = \markup{ \dynamic f 1. } } + To be sung loudly +} +\addlyrics { + \notemode{\set stanza = \markup{ \dynamic p 2. } } + To be sung quietly +} +@end lilypond + + + +@node Direction and placement +@subsection Direction and placement + +Al tipografiar música, la dirección y colocación de muchos elementos +es cuestión de elección. Por ejemplo, las plicas de las notas se +pueden dirigir hacia arriba o hacia abajo; la lestra, las indicaciones +dinámicas y otrase marcas expresivas se pueden colocar encima o debajo +del pentagrama; el texto se pude alinear a la izquierda, a la derecha +o centrado; etc. La mayoría de estas elecciones pueden dejarse que +LilyPond las determine automáticamente, pero en ciertos casos puede +ser deseable forzar una dirección o colocación concreta. + +@strong{Acciones predeterminadas} + +De forma predeterminada algunas direcciones siempre son hacia arriba o +siempre hacia abajo (p. ej. los matices o el calderón), mientras que +otras cosas pueden alternar entre arriba y abajo en función de la +dirección de las plicas (como las ligaduras o los acentos). + +@c TODO Add table showing these + +@strong{Disposición de contexto} + +Los contextos se colocan dentro de un sistema de arriba a abajo en el +orden en que se encuentran. Sin embargo, observe que se crea un +contexto implícitamente si se encuentra una instrucción cuando no está +disponible un contexto apropiado para contenerla. + +@c TODO Add example ? + +Se pude cambiar el orden predeterminado en que los contextos se +presentan, véase @ref{Aligning contexts} + +@strong{Indicadores de dirección de las articulaciones} + +Al añadir articulaciones a notas se puede omitir normalmente el +indicador de dirección, @code{^} (que significa @qq{arriba}), @code{_} +(que significa @qq{abajo}) o @code{-} (que significa @qq{usar la +dirección predeterminada}), en cuyo caso se supone el perdeterminado +@code{-}. Pero se necesita un indicador de dirección @strong{always} +antes de: + +@itemize +@item las instrucciones @code{\tweak} +@item las instrucciones @code{\markup} +@item las instrucciones @code{\tag} +@item los marcados de cadena, p.ej. -"cadena" +@item las instrucciones de digitación, p.ej. @code{-1} +@item las abreviaturas de articulación, p.ej. @code{-.}, @code{->}, @code{--} +@end itemize + +@strong{La propiedad de dirección} + +La posición o dirección de muchos objetos de presentación está +controlada por la propiedad @code{direction}. + +El valor de la propiedad @code{direction} se puede establecer al valor +@code{1}, con el significado de @qq{hacia arriba} o @qq{encima}, o a +@code{-1}, con el significado de @qq{hacia abajo} o @qq{debajo}. Se +pueden usar los símbolos @code{UP} y @code{DOWN} en sustitución de +@code{1} y @code{-1} respectivamente. La dirección predeterminada se +puede especificar estableciendo @code{direction} a @code{0} ó a +@code{CENTER}. De forma alternativa, en muchos casos existen +instrucciones predefinidas para especificar la dirección. Todas ellas +son de la forma: + +@noindent +@code{\xxxUp}, @code{xxxDown}, @code{xxxNeutral} + +@noindent +donde @code{xxxNeutral} significa @qq{utilizar la dirección +predeterminada}. Véase @rlearning{Within-staff objects}. + +En alguna que otra ocasión, con el único ejemplo usual del arpegio, el +valor de la propiedad @code{direction} especifica si el objeto se debe +colocar a la izquierda o a la derecha del objeto padre. En este caso +@code{-1} ó @code{LEFT} significan @qq{a la izquierda} y @code{1} ó +@code{RIGHT} significan @qq{a la derecha}. @code{0} ó @code{CENTER} +significan @qq{utilizar la dirección predeterminada}, como antes. + + +@node Distances and measurements +@subsection Distances and measurements + UNTRANSLATED NODE: IGNORE ME -@node Difficult tweaks -@subsection Difficult tweaks +@node Spanners +@subsection Spanners + +Muchos objetos de notación musical abarcan varias notas o incluso +varios compases. Son ejemplos los crescendi, trinos, corchetes de +grupo especial y corchetes de primera y segunda vez. Estos objetos se +llaman @qq{spanners} u «objetos de extensión», y tienen propiedades +especiales para controlar su apariencia y comportamiento. Algunas de +estas propiedades son comunes a todos los objetos de extensión; otras +se limitan a un subconjunto de los extensores. + + +@node Common properties +@section Common properties + +@menu +* Controlling visibility of objects:: +* Line styles:: +* Rotating objects:: +* Aligning objects:: +@end menu + +@node Controlling visibility of objects +@subsection Controlling visibility of objects + + +@node Line styles +@subsection Line styles + +Ciertas indicaciones de ejecución, p.ej., @i{rallentando}, +@i{accelerando} y los @i{trinos} se escriben como texto y se extienden +sobre muchos compases mediante líneas, a veces punteadas u onduladas. + +Todos ellos usan las mismas rutinas que el glissando para dibujar los textos y las líneas, +y por ello el ajuste fino de su comportamiento se hace de la +misma manera. Se hace con un spanner (un objeto de extensión), y la rutina responsable +de dibujar los objetos de extensión es @code{ly:line-interface::print}. Esta +rutina determina la colocación exacta de los dos @i{extremos del +objeto de extensión} y dibuja una línea entre ellos, en el estilo solicitado. + +He aquí un ejemplo de los distintos estilos de línea disponibles, y cómo +aplicarles ajustes finos. + +@lilypond[relative=2,ragged-right,verbatim,fragment] +d2 \glissando d'2 +\once \override Glissando #'style = #'dashed-line +d,2 \glissando d'2 +\override Glissando #'style = #'dotted-line +d,2 \glissando d'2 +\override Glissando #'style = #'zigzag +d,2 \glissando d'2 +\override Glissando #'style = #'trill +d,2 \glissando d'2 +@end lilypond + +La información que determina los puntos extremos se calcula al vuelo +para cada objeto gráfico, pero es posible sobreescribirlos. + +@lilypond[relative=2,ragged-right,verbatim,fragment] +e2 \glissando f +\once \override Glissando #'bound-details #'right #'Y = #-2 +e2 \glissando f +@end lilypond + +El objeto @code{Glissando}, como cualquier otro que use la rutina +@code{ly:line-interface::print}, conlleva una lista asociativa +anidada. En la instrucción anterior, el valor de @code{Y} +se establece a @code{-2} para la lista asociativa correspondiente al extremo final de la +derecha. Por supuesto, también es posible ajustar el extremo de la izquierda con +@code{left} en vez de @code{right}. + +Si no se establece el valor de @code{Y}, se calcula a partir de la posición +vertical del punto de anclaje derecho del objeto de extensión. + +En el caso de un salto de línea, los valores de los puntos extremos se extienden +con los contenidos de las sublistas @code{left-broken} y @code{right-broken}, +por ejemplo + +@lilypond[relative=2,ragged-right,verbatim,fragment] +\override Glissando #'breakable = ##T +\override Glissando #'bound-details #'right-broken #'Y = #-3 +c1 \glissando \break +f1 +@end lilypond + +Las siguientes propiedades se pueden usar para el ajuste fino de los objetos de extensión: + +@table @code +@item Y +Establece la coordenada Y del punto extremo, en espacios de pentagrama. Por +omisión, es el centro del objeto con que enlaza. Así, para un glissando +apuntaría al centro vertical de la cabeza de la nota. + +Para objetos de extensión horizontales, como el de texto y los trinos, tiene el valor +fijo de cero. + +@item attach-dir +Determina el lugar donde la línea comienza y acaba en la dirección X, +relativo al objeto al que se enlaza. Así, un valor de @code{-1} (o +@code{LEFT}) hace que la línea comience o acabe en el lado izquierdo de la cabeza de la nota +a la que el objeto se encuentra adjuntado. + +@item X +Es la coordenada absoluta del extremo final. Normalmente +se calcula al vuelo y no tiene mucho sentido sobreescribirlo. + +@item stencil +Los objetos extensores de línea pueden tener símbolos al principio o al final, que se encuentra contenido +dentro de esta subpropiedad. Es para uso interno y se recomienda +usar @code{text}. + +@item text +Es un elemento de marcado que se evalúa para generar la propiedad stencil anterior. Se usa +para poner @i{cresc.} y @i{tr} sobre los objetos de extensión horizontales. + +@lilypond[quote,ragged-right,fragment,relative=2,verbatim] +\override TextSpanner #'bound-details #'left #'text + = \markup { \small \bold Slower } +c2\startTextSpan b c a\stopTextSpan +@end lilypond + +@item stencil-align-dir-y +@item stencil-offset +Sin un valor establecido para esto, el stencil se coloca simplemente sobre el extremo del final, +tal y como se encuentra definido por las subpropiedades @code{X} e @code{Y}. +La asignación de un valor para @code{stencil-align-dir-y} o para @code{stencil-offset} +desplaza el símbolo del extremo de forma relativa al extremo de la línea + +@lilypond[relative=1,fragment,verbatim] +\override TextSpanner #'bound-details #'left #'stencil-align-dir-y = #DOWN +\override TextSpanner #'bound-details #'right #'stencil-align-dir-y = #UP + +\override TextSpanner #'bound-details #'left #'text = #"gggg" +\override TextSpanner #'bound-details #'right #'text = #"hhhh" +c4^\startTextSpan c c c \stopTextSpan +@end lilypond + +@item arrow (flecha) +El establecimiento de esta subpropiedad al valor de @code{#t} produce una cabeza de flecha al final de la +línea. + +@item padding (relleno) +Esta subpropiedad controla el espacio entre el punto extremo de la línea especificado +y el extremo real. Sin relleno, un glissando empezaría +y acabaría en el centro de las cabezas de las notas. + +@end table + +La función musical \endSpanners termina los objetos de extensión y los +reguladores después de una nota exactamente. + +@lilypond[verbatim,quote,ragged-right,relative=2,fragment] +\endSpanners +c2 \startTextSpan c2 +c2 \< c2 +@end lilypond + +Al utilizar \endSpanners no es necesario cerrar \startTextSpan con +\stopTextSpan, ni tampoco cerrar los reguladores con \!. + +@seealso + +Referencia del programa: +@rinternals{TextSpanner}, +@rinternals{Glissando}, +@rinternals{VoiceFollower}, +@rinternals{TrillSpanner}, +@rinternals{line-spanner-interface}. + + +@node Rotating objects +@subsection Rotating objects + +@node Aligning objects +@subsection Aligning objects + + +@node Advanced tweaks +@section Advanced tweaks + +@menu +* Vertical grouping of grobs:: +* Modifying ends of spanners:: +* Modifying stencils:: +@end menu + + +@node Vertical grouping of grobs +@subsection Vertical grouping of grobs + +Los grobs (objetos gráficos) @code{VerticalAlignment} y +@code{VerticalAxisGroup} trabajan de manera coordinada. +@code{VerticalAxisGroup} agrupa distintos grobs como @code{Staff}, +@code{Lyrics}, etc. Después, @code{VerticalAlignment} alinea los +distintos grobs agrupados previamente por @code{VerticalAxisGroup}. +Normalmente sólo existe un @code{VerticalAlignment} por cada +partitura, pero cada @code{Staff}, @code{Lyrics}, etc. tiene su propio +@code{VerticalAxisGroup}. + + +@node Modifying ends of spanners +@subsection Modifying ends of spanners UNTRANSLATED NODE: IGNORE ME --- SKELETON FILE -- -When you actually translate this file, please remove these lines as -well as all `UNTRANSLATED NODE: IGNORE ME' lines. +@node Modifying stencils +@subsection Modifying stencils + +UNTRANSLATED NODE: IGNORE ME