1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
2 @c This file is part of lilypond.tely
4 Translation of GIT committish: 56ed249c9d5076f33515e36af54126ea5fb88783
6 When revising a translation, copy the HEAD committish of the
7 version that you are working on. See TRANSLATION for details.
12 @node Changing defaults
13 @chapter Changing defaults
16 El objetivo del diseño de LilyPond es proporcionar por defecto la más alta
17 calidad de los resultados. A pesar de ello, podría tener que cambiar
18 este resultado por defecto. La disposición sobre el papel se controla a través de un amplio número
19 de proverbiales @q{botones e interruptores.} Este capítulo no
20 relaciona todos y cada uno de los botones. Más bien da una visión de conjunto sobre qué grupos de controles
21 se encuentran disponibles y explica la forma de hallar el botón exacto que se debe utilizar para conseguir
22 un determinado efecto.
25 @cindex Referencia de funcionamiento interno
27 Los controles disponibles para los ajustes finos se describen en un documento
30 el Manual de referencia de funcionamiento interno.
33 la @ref{Top,Referencia de funcionamiento interno,,lilypond-internals}.
36 relaciona todas las variables, funciones y opciones que se encuentran disponibles en
37 LilyPond. Está escrito como un documento HTML, que se puede encontrar en
38 @c leave the @uref as one long line.
39 @uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/user/@/lilypond@/-internals/,on@/-line},
40 pero que también va incluido en el paquete de la documentación de LilyPond.
42 Hay cuatro áreas en las que se pueden cambiar los valores por defecto:
46 Notación automática: cambiar la creación automática de los elementos de
47 notación. Por ejemplo, cambiar las reglas de barrado de las figuras.
50 Salida: cambiar el aspecto de los objetos individuales.
51 Por ejemplo, cambiar las direcciones de las plicas o la situación exacta de
55 Contexto: modificar aspectos de la traducción de los eventos musicales en
56 notación. Por ejemplo, dar a cada pentagrama una indicación de compás distinta.
59 Disposición de la página: cambiar el aspecto visual del espaciado, los saltos de
60 línea y las dimensiones de la página. Estas modificaciones se discuten
61 en @ref{Non-musical notation} y @ref{Spacing issues}.
64 Internamente, LilyPond utiliza el lenguaje Scheme (un dialecto de LISP) para aportar
65 la infraestructura. La sobreescritura de las decisiones de disposición da acceso efectivo a las interioridades
66 del programa, lo que requiere código de Scheme como entrada. Los elementos de Scheme
67 se inauguran dentro de un archivo @code{.ly} con el símbolo de cuadradillo
68 @code{#}.@footnote{@rlearning{Scheme tutorial} contiene un breve tutorial
69 sobre la introducción de números, listas, cadenas y símbolos en Scheme.}
73 * Interpretation contexts::
74 * The \override command::
78 @node Interpretation contexts
79 @section Interpretation contexts
81 Esta sección explica qué son los contextos y cómo modificarlos.
84 * Contexts explained::
86 * Changing context properties on the fly::
87 * Modifying context plug-ins::
88 * Layout tunings within contexts::
89 * Changing context default settings::
90 * Defining new contexts::
92 * Vertical grouping of grobs::
96 @node Contexts explained
97 @subsection Contexts explained
99 Cuando se imprime la música, se tienen que añadir a la salida una gran cantidad de elementos
100 notacionales. Por ejemplo, compare la entrada y la salida del siguiente ejemplo:
102 @lilypond[quote,verbatim,relative=2,fragment]
106 La entrada es bastante escueta, pero en la salida se añaden líneas divisorias, alteraciones accidentales,
107 la clave y la indicación de compás. LilyPond @emph{interpreta} la
108 entrada. En esta fase se inspecciona la información musical en orden temporal,
109 de forma parecida a la lectura de una partitura de izquierda a derecha. Mientras se lee
110 la entrada, el programa recuerda dónde se encuentran los límites de los compases, y qué notas
111 requieren alteraciones explícitas. Esta información se puede presentar sobre varios
112 niveles. Por ejemplo, el efecto de una alteración accidental se encuentra limitada
113 a un solo pentagrama, mientras que una barra divisoria debe estar sincronizada a través
114 de la partitura de arriba a abajo.
116 Dentro de LilyPond, estas reglas y pequeñas porciones de información se agrupan en
117 @emph{Contexts}. Algunos ejemplos de contextos son @code{Voice} (Voz),
118 @code{Staff} (Pauta o pentagrama) y @code{Score} (Partitura). Los contextos son jerárquicos, por
119 ejemplo: un @code{Staff} contener muchas @code{Voice}s, y una
120 @code{Score} puede contener muchos contextos de @code{Staff}.
123 @sourceimage{context-example,5cm,,}
126 Cada contexto asume la responsabilidad de imponer algunas reglas de notación,
127 creando ciertos objetos de notación y manteniendo las propiedades
128 asociadas. Por ejemplo, el contexto @code{Voice} puede introducir una alteración
129 accidental y entonces el contexto @code{Staff} mantiene la regla de mostrar o
130 suprimir la alteración para el resto del compás. La
131 sincronización de las líneas divisorias se gestiona dentro del contexto de la partitura, @code{Score}.
133 Sin embargo, en algunas músicas posiblemente no queramos que las líneas divisorias estén
134 sincronizada (pensemos en una partitura polimétrica en compases de 4/4 y de 3/4). En tales casos,
135 debemos modificar los ajustes por omisión de los contextos @code{Score}
138 Para partituras muy sencillas, los contextos se crean implícitamente y no debemos
139 preocuparnos por ellos. Para piezas mayores, como por ejemplo cualquiera que tenga más de un pentagrama,
140 los contextos se deben crear explícitamente para asegurarnos
141 de que tendremos la cantidad exacta de pentagramas que necesitamos,
142 y que están en el orden correcto. Para tipografiar piezas
143 con notación especializada, puede ser útil modificar contextos existentes
144 o definir unos nuevos.
147 En la referencia del programa se encuentra una descripción completa de todos los contextos que están disponibles,
150 @internalsref{Contexts}.
153 Traducción @expansion{} Contexto.
156 @c [TODO: describe propagation]
159 @node Creating contexts
160 @subsection Creating contexts
162 Para partituras que sólo tienen una voz y un pentagrama, los contextos se
163 crean automáticamente. Para partituras más complejas, es necesario crearlos
164 a mano. Existen tres instrucciones que hacen esto.
169 La instrucción más fácil es @code{\new}, y es también la más rápida de escribir.
170 Se antepone a una expresión musical, por ejemplo
173 @cindex nuevos, contextos
174 @cindex Contexto, creación de
177 \new @var{tipo} @var{expresión_musical}
181 donde @var{tipo} es el nombre de un contexto (como @code{Staff} o
182 @code{Voice}). Esta instrucción crea un contexto nuevo, y empieza a
183 interpretar la @var{expresión_musical} con él.
185 Una aplicación práctica de @code{\new} es una partitura con muchos pentagramas.
186 Cada parte que debe ir en su propio pentagrama, va precedida de
189 @lilypond[quote,verbatim,relative=2,ragged-right,fragment]
196 La instrucción @code{\new} puede también dar nombre al contexto,
199 \new @var{tipo} = @var{identificador} @var{música}
201 Sin embargo, este nombre especificado por el usuario sólo se utiliza si no hay ya otro contexto
202 anterior con el mismo nombre.
208 Como @code{\new}, la instrucción @code{\context} también dirige una expresión musical
209 a un objeto de contexto, pero da al contexto un nombre explícito. La sintaxis
213 \context @var{tipo} = @var{identificador} @var{música}
216 En esta forma, la instrucción buscará un contexto existente del @var{tipo} especificado
217 que tenga el nombre @var{identificador}. Si ese contexto aún no existe, se crea
218 un contexto nuevo con el nombre especificado. Esto es útil si nos vamos a referir
219 más tarde al contexto. Por ejemplo, cuando
220 se escribe la letra, la melodía está dentro de un contexto con nombre
223 \context Voice = "@b{tenor}" @var{música}
227 de forma que los textos se puedan alienar correctamente con sus notas,
230 \new Lyrics \lyricsto "@b{tenor}" @var{letra}
235 Otro uso posible de los contextos con nombre es la fusión de dos expresiones musicales
236 distintas en un solo contexto. En el siguiente ejemplo,
237 se introducen por separado las articulaciones y las notas,
241 decoracion = @{ s4-. s4-> @}
244 se combinan enviando los dos al mismo contexto @code{Voice},
248 \new Staff \context Voice = "A" \musica
249 \context Voice = "A" \decoracion
252 @lilypond[quote,ragged-right]
256 \new Staff \context Voice = "A" \music
257 \context Voice = "A" \arts
261 Con este mecanismo, es posible definir un Urtext (una edición
262 original), con la posibilidad de poner articulaciones distintas sobre las
265 @cindex crear contextos
268 La tercera instrucción para crear contextos es
270 \context @var{tipo} @var{música}
275 Esto es similar a @code{\context} con @code{= @var{identificador}}, pero se corresponde con
276 cualquier contexto del tipo @var{tipo}, sin importar qué nombre se le ha dado.
278 Esta variante se usa con expresiones musicales que se pueden interpretar en
279 varios niveles. Por ejemplo, la instrucción @code{\applyOutput} (véase
280 @ref{Running a function on all layout objects}). Sin una instrucción
281 @code{\context} explícita, normalmente se aplicaría a @code{Voice}
284 \applyOutput #'@var{contexto} #@var{función} % aplicar al contexto Voice
287 Para que se interprete dentro de los niveles de @code{Score} o @code{Staff}, utilice las siguientes
291 \applyOutput #'Score #@var{función}
292 \applyOutput #'Staff #@var{función}
298 @node Changing context properties on the fly
299 @subsection Changing context properties on the fly
303 @cindex changing properties
305 Cada contexto puede tener diferentes @emph{propiedades} o variables contenidas
306 en dicho contexto. Se pueden cambiar mientras se desarrolla la fase de interpretación.
307 Esto se consigue insertando la instrucción @code{\set} en la música,
310 \set @var{contexto}.@var{propiedad} = #@var{valor}
314 @lilypond[quote,verbatim,relative=2,fragment]
316 \set Score.skipBars = ##t
320 Esta instrucción hace que se salten los compases que no tienen ninguna nota. El resultado es que
321 los silencios multicompás se comprimen. El valor asignado es un objeto del lenguaje Scheme. En
322 este caso, es @code{#t}, el valor booleano Verdadero.
324 Si el argumento @var{contexto} se deja en blanco, entonces se utiliza el contexto actual más bajo
325 (normalmente @code{ChordNames}, @code{Voice} o
326 @code{Lyrics}). En este ejemplo,
328 @lilypond[quote,verbatim,relative=2,fragment]
330 \set autoBeaming = ##f
335 el argumento @var{contexto} para la instrucción @code{\set} está omitido, por tanto
336 el barrado automático está desactivado en la @internalsref{Voice} (voz) actual. Fíjese en que
337 el contexto más bajo no siempre contiene la propiedad que quiere
338 cambiar. Por ejemplo, si intenta establecer la propiedad @code{skipBars}
339 (del contexto más bajo, en este caso @code{Voice}) no se producirá ningún
342 @lilypond[quote,verbatim,relative=2,fragment]
348 Los contextos son jerárquicos, de forma que si se especificó un contexto mayor, por
349 ejemplo @code{Staff}, entonces el cambio también se aplicaría a todos los
350 @code{Voice}s o contextos de voz en el pentagrama actual. El cambio se aplica
351 @q{al vuelo}, mientras transcurre la música, de manera que el ajuste sólo afecta al segundo
356 También existe una instrucción @code{\unset},
358 \unset @var{contexto}.@var{propiedad}
362 que quita la definición de la @var{propiedad}. Esta instrucción quita
363 la definición solamente si está establecida dentro del @var{contexto} especificado, por lo que
366 \set Staff.autoBeaming = ##f
370 introduce un ajuste de propiedad en el nivel del contexto @code{Staff}. El ajuste también se aplica
371 a la @code{Voice} actual. Sin embargo,
374 \unset Voice.autoBeaming
378 no tiene ningún efecto. Para cancelar este ajuste, el @code{\unset}
379 se debe especificar en el mismo nivel que el @code{\set} original. En
380 otras palabras, deshacer el efecto de @code{Staff.autoBeaming = ##f}
383 \unset Staff.autoBeaming
386 Igual que @code{\set}, el argumento @var{contexto} no tiene que especificarse para un contexto
387 que está en la parte más baja, por lo que las dos instrucciones
390 \set Voice.autoBeaming = ##t
391 \set autoBeaming = ##t
399 Los ajustes que se quieren aplicar a un paso de tiempo único se pueden escribir
400 con @code{\once}, por ejemplo en
402 @lilypond[quote,verbatim,relative=2,fragment]
404 \once \set fontSize = #4.7
409 la propiedad @code{fontSize} pierde su valor automáticamente después de la segunda
412 En la referencia del programa hay una descripción detallada de todas las propiedades de contexto disponibles,
415 @internalsref{Tunable context properties}.
418 Traducción @expansion{} propiedades de contexto ajustables.
422 @node Modifying context plug-ins
423 @subsection Modifying context plug-ins
425 Los contextos de notación (como @code{Score} y @code{Staff}) no sólo
426 almacenan propiedades,
427 también contienen plug-ins o añadidos llamados @q{engravers} (grabadores) que crean elementos
428 de notación. Por ejemplo, el contexto @code{Voice} contiene un
429 @code{Note_head_engraver} (grabador de las cabezas de nota) y el contexto @code{Staff} contiene un
430 @code{Key_signature_engraver} (grabador de la armadura).
432 Para ver una descripción completa de cada uno de los añadidos, consulte
434 @internalsref{Engravers}.
437 Referencia del programa @expansion Traducción @expansion{} Grabadores.
439 cada uno de los contextos descritos en
441 @internalsref{Contexts}
444 Referencia del programa @expansion Traducción @expansion{} Contexto.
446 relaciona los grabadores utilizados para ese contexto.
449 Puede ser útil poner o quitar estos añadidos. Esto se hace
450 iniciando un contexto nuevo con @code{\new} o @code{\context} y
456 \new @var{contexto} \with @{
469 donde los @dots{} serían el nombre de un grabador. A continuación se presenta un ejemplo sencillo
470 que quita los grabadores @code{Time_signature_engraver} y
471 @code{Clef_engraver} de un contexto @code{Staff},
473 @lilypond[quote,relative=1,verbatim,fragment]
479 \remove "Time_signature_engraver"
480 \remove "Clef_engraver"
487 En el segundo pentagrama no hay indicación de compás ni clave. Ésta es
488 una forma un poco fuerte de hacer desaparecer objetos, porque afectará
489 al pentagrama completo. Este método también influye en el espaciado, lo que podría ser
490 deseable o no. Un método más
491 sofisticado de borrar objetos se muestra en @rlearning{Common tweaks}.
493 El ejemplo siguiente muestra una aplicación práctica. Las líneas divisorias y las indicaciones
494 de compás están normalmente sincronizadas en toda la partitura. Esto se hace
495 por parte del @code{Timing_translator} y el grabador @code{Default_bar_line_engraver}.
496 Este añadido mantiene al día la administración de la indicación de compás, colocación
497 dentro del compás, etc. Moviendo el grabador desde el contexto @code{Score} al
498 contexto @code{Staff}, podemos tener una partitura donde cada pentagrama tiene su propia
499 indicación de compás.
501 @cindex polimétricas, partituras
502 @cindex Indicaciones de compás, varias
504 @lilypond[quote,relative=1,ragged-right,verbatim,fragment]
506 \remove "Timing_translator"
507 \remove "Default_bar_line_engraver"
510 \consists "Timing_translator"
511 \consists "Default_bar_line_engraver"
517 \consists "Timing_translator"
518 \consists "Default_bar_line_engraver"
527 @node Layout tunings within contexts
528 @subsection Layout tunings within contexts
530 Cada contexto es responsable de crear ciertos tipos de objetos
531 gráficos. Los ajustes utilizados para imprimir estos objetos también se almacenan en cada contexto.
532 Cambiando estos ajustes se puede alterar la apariencia visual de los
535 La sintaxis de esto es
538 \override @var{contexto}.@var{nombre} #'@var{propiedad} = #@var{valor}
541 Aquí @var{nombre} es el nombre de un objeto gráfico, como @code{Stem} (plica) o
542 @code{NoteHead} (cabeza de nota), y @var{propiedad} es una variable interna del sistema
543 de formateo (@q{propiedad del objeto gráfico o grob} o @q{propiedad de la disposición o layout}). El último es un
544 símbolo, por ello debe ir entre comillas. La subsección @ref{Constructing a
545 tweak} explica qué datos hay que cumplimentar para las variables @var{nombre}, @var{propiedad} y
546 @var{valor}. Aquí discutiremos solamente la funcionalidad de esta instrucción.
551 \override Staff.Stem #'thickness = #4.0
555 hace las plicas más gruesas (el valor por defecto es 1.3, tomando como unidad el grosor de las líneas del
556 pentagrama). Puesto que la orden especifica @code{Staff} como contexto, sólo se
557 aplica al pentagrama en curso. Otros pentagramas conservarán su apariencia visual
558 normal. Aquí podemos ver la orden en acción:
560 @lilypond[quote,verbatim,relative=2,fragment]
562 \override Staff.Stem #'thickness = #4.0
568 La instrucción @code{\override} cambia la definición de la @code{Stem} (plica)
569 dentro del pentagrama @code{Staff} en curso. Después de que la orden se ha interpretado,
570 todas las plicas quedan engrosadas.
572 Análogo a @code{\set}, el argumento @var{contexto} se puede dejar en blanco,
573 haciendo que se utilice el contexto por defecto, @code{Voice}. Al añadir
574 @code{\once} se aplicará el cambio solamente durante un paso de tiempo.
576 @lilypond[quote,fragment,verbatim,relative=2]
578 \once \override Stem #'thickness = #4.0
583 El @code{\override} debe hacerse antes de que el objeto haya
584 comenzado. Por ello, al alterar objetos de extensión o @emph{Spanner} tales como ligaduras
585 o barras de figuras, la instrucción @code{\override} debe ejecutarse en el momento en que se
586 crea el objeto. En este ejemplo,
588 @lilypond[quote,fragment,verbatim,relative=2]
589 \override Slur #'thickness = #3.0
591 \override Beam #'thickness = #0.6
596 la ligadura es más gruesa, no así la barra. Esto es así porque la orden para la barra
597 @code{Beam} va después de que la barra Beam ha comenzado, así que no tiene ningún efecto.
599 De forma análoga a @code{\unset}, la orden @code{\revert} para un contexto
600 deshace una orden @code{\override}; como con @code{\unset}, afecta solamente
601 los ajustes que se hayan hecho dentro del mismo contexto. En otras palabras, el
602 @code{\revert} del siguiente ejemplo no hace nada en absoluto.
605 \override Voice.Stem #'thickness = #4.0
606 \revert Staff.Stem #'thickness
609 Algunas opciones trucables reciben el nombre de @q{subpropiedades} y residen dentro de las
610 propiedades. Para trucarlas, utilice órdenes de la forma
612 @c leave this as a long long
614 \override @var{contexto}.@var{nombre} #'@var{propiedad} #'@var{subpropiedad} = #@var{valor}
621 \override Stem #'details #'beamed-lengths = #'(4 4 3)
627 Funcionamiento interno: @internalsref{OverrideProperty}, @internalsref{RevertProperty},
628 @internalsref{PropertySet}, @internalsref{Backend} y
629 @internalsref{All layout objects}.
634 El back-end o parte profunda del programa no es muy estricta cuando se trata de la comprobación de tipos de las propiedades de los objetos.
635 Las referencias circulares en los valores de Scheme para las propiedades pueden causar cuelgues o
636 terminaciones abruptas, o las dos cosas.
639 @node Changing context default settings
640 @subsection Changing context default settings
642 Los ajustes de las subsecciones previas (@ref{Changing context
643 properties on the fly}, @ref{Modifying context plug-ins} y
644 @ref{Layout tunings within contexts}) también se pueden escribir separados de la música
645 dentro del bloque @code{\layout},
654 \override Stem #'thickness = #4.0
655 \remove "Time_signature_engraver"
660 La orden @code{\Staff} saca la definición existente del contexto de
661 pentagrama de manera que pueda ser modificada.
666 \override Stem #'thickness = #4.0
667 \remove "Time_signature_engraver"
671 afectan a todos los pentagramas de la partitura. Otros contextos se pueden modificar de forma
674 La palabra clave @code{\set} es opcional dentro del bloque @code{\layout}, y así:
690 No es posible recolectar cambios de contexto en una variable y aplicarlos
691 a una definición @code{\context} mediante la referencia a esa variable.
693 El @code{\RemoveEmptyStaffContext} sobreescribirá sus ajustes actuales
694 de @code{\Staff}. Si quiere cambiar los valores por defecto para un pentagrama que usa
695 @code{\RemoveEmptyStaffContext}, tendrá que hacerlo después de
696 llamar a @code{\RemoveemptyStaffContext}, es decir
701 \RemoveEmptyStaffContext
703 \override Stem #'thickness = #4.0
709 @node Defining new contexts
710 @subsection Defining new contexts
712 Los contextos específicos, como @code{Staff} y @code{Voice}, están construidos a base de
713 bloques sencillos. Es posible crear nuevos tipos de
714 contextos con combinaciones distintas de añadidos grabadores.
716 El siguiente ejemplo muestra cómo construir un tipo diferente de contexto de
717 @code{Voice} partiendo de cero. Será parecido a
718 @code{Voice}, pero imprime solamente cabezas centradas en forma de barra inclinada. Se puede usar
719 para indicar improvisación en piezas de jazz,
721 @lilypond[quote,ragged-right]
724 \type "Engraver_group"
725 \consists "Note_heads_engraver"
726 \consists "Text_engraver"
727 \consists Pitch_squash_engraver
728 squashedPosition = #0
729 \override NoteHead #'style = #'slash
730 \override Stem #'transparent = ##t
734 \accepts "ImproVoice"
738 a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
739 c4 c^"undress" c_"while playing :)" c }
745 Estos ajustes se definen dentro de un bloque @code{\context} que a su vez está dentro de un bloque
756 En el siguiente análisis, la entrada de ejemplo que se muestra debe ir en el lugar de
757 los puntos suspensivos @dots{} del fragmento anterior.
759 En primer lugar es necesario definir un nombre para el nuevo contexto:
765 Debido a que es parecido al contexto @code{Voice}, queremos órdenes que funcionen sobre
766 contextos de @code{Voice} (existentes) para que siga funcionando. Esto se consigue dando al
767 contexto nuevo un alias @code{Voice},
773 El contexto imprimirá notas y textos explicativos, por ello tenemos que añadir los
774 grabadores que aportan esta funcionalidad,
777 \consists Note_heads_engraver
778 \consists Text_engraver
781 Pero sólo necesitamos esto en la línea central,
784 \consists Pitch_squash_engraver
785 squashedPosition = #0
788 El grabador @internalsref{Pitch_squash_engraver} modifica las cabezas de nota (creadas
789 por el grabador @internalsref{Note_heads_engraver}) y establece sus posiciones verticales
790 al valor de @code{squashedPosition}, en este caso@tie{}@code{0},
793 Las notas parecen barras inclinadas y no tienen plica,
796 \override NoteHead #'style = #'slash
797 \override Stem #'transparent = ##t
800 Todos estos añadidos tienen que cooperar, y esto se consigue con un añadido especial,
801 que se debe marcar con la palabra clave @code{\type}.
802 Este será siempre @internalsref{Engraver_group},
805 \type "Engraver_group"
808 Al juntarlo todo, obtenemos
813 \type "Engraver_group"
814 \consists "Note_heads_engraver"
815 \consists "Text_engraver"
816 \consists Pitch_squash_engraver
817 squashedPosition = #0
818 \override NoteHead #'style = #'slash
819 \override Stem #'transparent = ##t
825 Los contextos dan lugar a jerarquías. Queremos colgar el contexto @code{ImproVoice}
826 bajo el contexto @code{Staff}, como simples @code{Voice}s normales. Por tanto, modificamos
827 la definición de @code{Staff} con la instrucción
828 @code{\accepts} (acepta),
838 Lo opuesto a @code{\accepts} (acepta) es @code{\denies} (deniega),
839 lo que a veces se necesita cuando se están reutilizando definiciones de contexto existentes.
841 Ponemos ambos dentro de un bloque @code{\layout}, como
851 \accepts "ImproVoice"
856 Así pues, la salida que aparece al comienzo de esta sub-sección se puede escribir como
864 c c_"while playing :)"
871 @node Aligning contexts
872 @subsection Aligning contexts
874 Los contextos nuevos se pueden alinear por encima o por debajo de otros contextos existentes. Esto
875 podría ser de utilidad al preparar un pentagrama vocal (@rlearning{Vocal ensembles}) y
878 ARREGLAR: esta sección no funciona en PDF. (¿?)
881 @findex alignAboveContext
882 @findex alignBelowContext
884 @lilypond[quote,ragged-right]
887 \relative c' \new Staff = "main" {
890 \new Staff \with {alignAboveContext=main} \ossia
898 @node Vertical grouping of grobs
899 @subsection Vertical grouping of grobs
901 Los grobs (objetos gráficos) VerticalAlignment y VerticalAxisGroup funcionan juntos.
902 VerticalAxisGroup agrupa distintos objetos gráficos como Staff, Lyrics,
903 etc. VerticalAlignment por su parte alinea verticalmente los diferentes objetos gráficos
904 agrupados por VerticalAxisGroup. Normalmente hay solamente un
905 VerticalAlignment por cada partitura, pero cada Staff, Lyrics, etc. tiene su propio
909 @node The \override command
910 @section The @code{\override} command
912 En la sección anterior ya hemos tocado una orden que
913 modifica los detalles de la presentación: la instrucción @code{\override}. En esta sección
914 observaremos con mayor detalle la manera de usar esta orden en la práctica. La
915 sintaxis general de esta orden es:
918 \override @var{contexto}.@var{objeto_de_presentación} #'@var{propiedad_de_presentación} = #@var{valor}
921 Así establecemos la @var{propiedad_de_presentación} del @var{objeto_de_presentación} especificado,
922 que es miembro del @var{contexto}, al @var{valor} que se indica.
925 * Constructing a tweak::
926 * Navigating the program reference::
927 * Layout interfaces::
928 * Determining the grob property::
929 * Objects connected to the input::
930 * Using Scheme code instead of \tweak::
931 * \set versus \override::
937 @node Constructing a tweak
938 @subsection Constructing a tweak
940 Las instrucciones que cambian la salida generalmente tienen la forma
943 \override Voice.Stem #'thickness = #3.0
947 Para construir este ajuste debemos primero averiguar estos datos:
950 @item el contexto: aquí @code{Voice} (voz).
951 @item el objeto de presentación: aquí @code{Stem} (plica).
952 @item la propiedad de presentación: aquí @code{thickness} (grosor).
953 @item un valor: aquí @code{3.0}.
956 Ciertas opciones ajustables se llaman @q{subpropiedades} y residen en el interior
957 de las propiedades. Para trucarlas, utilice órdenes de la forma
960 \override Stem #'details #'beamed-lengths = #'(4 4 3)
963 @cindex documentación interna
964 @cindex buscar objetos gráficos
965 @cindex gráficos, descripciones de los objetos
968 @cindex interna, documentación
970 Para muchas propiedades, independientemente del tipo de datos de la propiedad, el establecimiento del valor de la
971 propiedad a Falso ( @code{##f} ) dará como resultado su apagado o desactivación, haciendo que
972 Lilypond ignore por completo dicha propiedad. Esto es especialmente útil para
973 desactivar propiedades de objetos gráficos que, de otro modo, podrían causar problemas.
975 Explicaremos a continuación cómo extraer esta información del manual de notación y de la
976 referencia del programa.
981 @node Navigating the program reference
982 @subsection Navigating the program reference
984 Supongamos que queremos mover la indicación de digitación del fragmento
987 @lilypond[quote,fragment,relative=2,verbatim]
993 Si hace una visita a la documentación en busca de instrucciones de digitación (en
994 @ref{Fingering instructions}), encontrará:
999 Referencia de funcionamiento interno: @internalsref{Fingering}.
1004 @c outdated info; probably will delete.
1006 This fragment points to two parts of the program reference: a page
1007 on @code{FingerEvent} and one on @code{Fingering}.
1009 The page on @code{FingerEvent} describes the properties of the music
1010 expression for the input @code{-2}. The page contains many links
1011 forward. For example, it says
1014 Accepted by: @internalsref{Fingering_engraver},
1018 That link brings us to the documentation for the Engraver, the
1022 This engraver creates the following layout objects: @internalsref{Fingering}.
1024 In other words, once the @code{FingerEvent}s are interpreted, the
1025 @code{Fingering_engraver} plug-in will process them.
1029 @c I can't figure out what this is supposed to mean. -gp
1031 The @code{Fingering_engraver} is also listed to create
1032 @internalsref{Fingering} objects,
1034 @c old info? it doesn't make any sense to me with our current docs.
1036 second bit of information listed under @b{See also} in the Notation
1041 La referencia del programador se encuentra disponible en forma de documento HTML. Se recomienda
1042 mucho que lo lea en la forma HTML, bien en línea o bien
1043 descargando los archivos de la documentación HTML. Esta sección sería mucho más difícil de entender
1044 si está utilizando el manual en
1048 Siga el enlace que lleva a @internalsref{Fingering}. Al principio de la página,
1052 Los objetos de digitación se crean por parte de: @internalsref{Fingering_engraver} y
1053 @internalsref{New_fingering_engraver}.
1056 Siguiendo los enlaces relacionados dentro de la referencia del programa, podemos seguir el
1057 flujo de información dentro del programa:
1061 @item @internalsref{Fingering}:
1062 los objetos @internalsref{Fingering} se crean por parte de:
1063 @internalsref{Fingering_engraver}
1065 @item @internalsref{Fingering_engraver}:
1066 Tipos de música aceptados: @internalsref{fingering-event}
1068 @item @internalsref{fingering-event}:
1069 El tipo de evento musical @code{fingering-event} está descrito en Expresiones musicales con el nombre de
1070 @internalsref{FingerEvent}
1073 Este camino se recorre en contra de la corriente de información del programa: comienza
1074 por la salida y acaba en el evento de entrada. También podríamos haber
1075 empezado por un evento de la entrada, y leído siguiendo el flujo de información
1076 terminando en su caso en el objeto (u objetos) de la salida.
1078 La referencia del programa también se puede examinar como un documento normal. Contiene
1079 capítulos que tratan de
1081 @internalsref{Music definitions},
1084 @code{Music definitions}
1086 de la @internalsref{Translation}, y del @internalsref{Backend}. Cada uno de los capítulos
1087 relaciona todas las definiciones utilizadas y todas las propiedades que se pueden
1091 @node Layout interfaces
1092 @subsection Layout interfaces
1094 @cindex interfaz de la presentación
1095 @cindex presentación, interfaz de la
1098 La página HTML que pudimos ver en la sección anterior describe el
1099 objeto de presentación llamado @internalsref{Fingering}. Dicho objeto es un
1100 símbolo dentro de la partitura. Tiene propiedades que guardan números (como
1101 grosores y direcciones), pero también punteros a objetos relacionados. Un
1102 objeto de presentación también se llama un @emph{Grob}, que es una abreviatura de Graphical
1103 Object (objeto gráfico). Para ver más detalles acerca de los objetos gráficos o Grobs, consulte @internalsref{grob-interface}.
1105 La página dedicada a @code{Fingering} relaciona las definiciones del objeto
1106 @code{Fingering}. Por ejemplo, la página dice
1109 @code{relleno} (dimensión, en espacios de pentagrama):
1115 lo que significa que el número se mantendrá a una distancia de al menos 0.5
1116 de la cabeza de la nota.
1119 Cada objeto de presentación puede tener varias funciones como elemento notacional o
1120 tipográfico. Por ejemplo, el objeto de digitación Fingering tiene
1121 los siguientes aspectos
1125 Su tamaño es independiente del espaciado horizontal, al contrario de las ligaduras o las barras de las figuras.
1128 Es un elemento de texto. Casi seguro que es un texto muy corto.
1131 este elemento de texto se tipografía con un tipo de letra, no como las ligaduras o las barras de las figuras.
1134 Horizontalmente, el centro del símbolo se debe alinear con el centro de la cabeza
1138 Verticalmente, el símbolo se coloca cerca de la nota y del pentagrama.
1141 La posición vertical también está coordinada con otros símbolos de superíndice
1145 Cada uno de estos aspectos se capta en lo que se llaman @emph{interface}s,
1146 que se relacionan al final de la página dedicada a @internalsref{Fingering}
1149 Este objeto contempla los siguientes interfaces:
1150 @internalsref{item-interface},
1151 @internalsref{self-alignment-interface},
1152 @internalsref{side-position-interface}, @internalsref{text-interface},
1153 @internalsref{text-script-interface}, @internalsref{font-interface},
1154 @internalsref{finger-interface} y @internalsref{grob-interface}.
1157 Al pulsar sobre cualquiera de los enlaces nos desplazaremos a la página del respectivo interfaz del
1158 objeto. Cada interfaz tiene un cierto número de propiedades. Algunas de ellas
1159 no son para que el usuario las pueda ajustar (@q{Propiedades internas}), pero otras
1160 sí se pueden modificar.
1162 Hemos estado hablando de @emph{el} objeto @code{Fingering}, pero realmente esto no significa
1163 mucho. El archivo de inicialización (véase
1164 @rlearning{Default files})
1165 @file{scm/@/define@/-grobs@/.scm} muestra el alma del @q{objeto},
1170 (avoid-slur . around)
1171 (slur-padding . 0.2)
1172 (staff-padding . 0.5)
1173 (self-alignment-X . 0)
1174 (self-alignment-Y . 0)
1175 (script-priority . 100)
1176 (stencil . ,ly:text-interface::print)
1177 (direction . ,ly:script-interface::calc-direction)
1178 (font-encoding . fetaNumber)
1179 (font-size . -5) ; don't overlap when next to heads.
1180 (meta . ((class . Item)
1181 (interfaces . (finger-interface
1183 text-script-interface
1185 side-position-interface
1186 self-alignment-interface
1187 item-interface))))))
1191 Como podemos ver, el objeto @code{Fingering} no es más que un montón de
1192 valores de variables, y la página web de la Referencia de funcionamiento interno
1193 se genera directamente a partir de esta definición.
1196 @node Determining the grob property
1197 @subsection Determining the grob property
1199 Recordemos que queríamos cambiar la posición del @b{2} en
1201 @lilypond[quote,fragment,relative=2,verbatim]
1207 Puesto que el @b{2} se encuentra colocado verticalmente sobre su nota, tenemos que
1208 negociar con el interfaz asociado con esta colocación. Esto se
1209 hace usando @code{side-position-interface}. La página que describe este interface
1213 @code{side-position-interface}
1215 Colocar un objeto víctima (este mismo) junto a otros objetos (el
1216 soporte). La propiedad @code{direction} significa dónde poner el objeto
1217 víctima con relación al soporte (¿a la izquierda o a la derecha, encima o debajo?)
1222 Debajo de esta descripción, la variable @code{padding} (relleno) se describe como
1227 (dimensión, en espacios de pentagrama)
1229 Añadir esta cantidad de espacio adicional entre objetos que están unos junto a otros.
1233 Aumentando el valor de @code{padding}, podemos alejar
1234 la cifra de digitación de la cabeza de la nota. La siguiente orden inserta
1235 un espacio en blanco de 3 espacios de pentagrama
1236 entre la nota y la digitación:
1238 \once \override Voice.Fingering #'padding = #3
1241 Al insertar esta instrucción antes de que se haya creado el objeto Fingering,
1242 es decir, antes del @code{c2}, llegamos al siguiente resultado:
1244 @lilypond[quote,relative=2,fragment,verbatim]
1245 \once \override Voice.Fingering #'padding = #3
1252 En este caso, el contexto de este truco es @code{Voice}. Este
1253 hecho se puede deducir también a partir de la referencia del programa, ya que la página dedicada al
1254 añadido @internalsref{Fingering_engraver} dice
1257 El grabador Fingering_engraver es parte de los contextos: @dots{} @internalsref{Voice}
1261 @node Objects connected to the input
1262 @subsection Objects connected to the input
1266 En ocasiones es posible tomar un atajo para realizar el ajuste fino de los objetos
1267 gráficos. Para objetos que reusultan directamente de un elemento de código de la entrada,
1268 puede usar la función @code{\tweak}, por ejemplo
1270 @lilypond[relative=2,fragment,verbatim,ragged-right]
1273 \tweak #'color #red d
1275 \tweak #'duration-log #1 a
1276 >4-\tweak #'padding #10 -.
1279 Como podemos ver, las propiedades se establecen directamente dentro de los objetos,
1280 sin hacer mención al nombre del grob ni al contexto en el que se tendría que
1283 Esta técnica sólo funciona para los objetos que están conectados directamente a
1284 un @internalsref{Event} (evento) del texto de entrada, por ejemplo
1287 @item cabezas de nota, producidas por chord-pitch (p. ej.: las notas de un acorde)
1288 @item signos de articulación, producidos por instrucciones de articulación
1291 Posiblemente no funcione para plicas y alteraciones accidentales (éstos están producidos
1292 por parte de las cabezas de nota, no por los eventos musicales) ni para las claves (éstos no están producidos por
1293 ninguna entrada musical, sino más bien a causa de un cambio en el valor de una propiedad).
1295 Existen muy pocos objetos que estén conectados @emph{directamente} al
1296 resultado de salida. Una nota normal (como @code{c4}) no está conectada directamente
1297 a la salida, así que
1300 \tweak #'color #red c4
1304 no cambia el color. Consulte @ref{Displaying music expressions} para ver más
1308 @node Using Scheme code instead of \tweak
1309 @subsection Using Scheme code instead of @code{\tweak}
1311 La principal desventaja de @code{\tweak} es su inflexibilidad
1312 sintáctica. Por ejemplo, lo siguiente produce un error de sintaxis.
1315 F = \tweak #'font-size #-3 -\flageolet
1323 En otras palabras, @code{\tweak} no se comporta como una articulación en lo que respecta a la
1324 sintaxis; en concreto, no se puede adjuntar mediante
1325 @code{^} y @code{_}.
1327 Utilizando el lenguaje Scheme, se puede dar un rodeo a este problema. La ruta hacia el resultado
1328 se da en @ref{Adding articulation to notes (example)},
1329 especialmente cómo usar @code{\displayMusic} como guía de ayuda.
1332 F = #(let ((m (make-music 'ArticulationEvent
1333 'articulation-type "flageolet")))
1334 (set! (ly:music-property m 'tweaks)
1335 (acons 'font-size -3
1336 (ly:music-property m 'tweaks)))
1345 Aquí las propiedades @code{tweaks} del objeto de flageolet
1346 @code{m} (creado con @code{make-music}) se extraen con
1347 @code{ly:music-property}, un nuevo par clave-valor para cambiar el
1348 tamaño de la tipografía se antepone a la lista de propiedades con la función de Scheme
1349 @code{acons}, y el resultado finalmente se escribe
1350 de nuevo con @code{set!}. El último elemento del bloque
1351 @code{let} es el valor devuelto, el propio @code{m}.
1354 @node \set versus \override
1355 @subsection @code{\set} vs. @code{\override}
1357 Hemos visto dos formas de cambiar las propiedades: @code{\set} y
1358 @code{\override}. De hecho, en realidad existen dos clases diferentes de
1361 Los contextos pueden tener propiedades, que por lo general reciben nombres en
1362 @code{mayúsculasDeCamello}. Principalmente controlan la traducción
1363 de la música a la notación, p.ej. @code{localKeySignature} (para determinar
1364 si hay que imprimir las alteraciones accidentales), @code{measurePosition} (para
1365 determinar cuándo imprimir una línea divisoria). Las propiedades de contexto pueden
1366 ver modificado su valor con el tiempo según se interpreta una pieza de música;
1367 @code{measurePosition} es un ejemplo obvio de esto.
1368 Las propiedades de contexto se modifican con @code{\set}.
1370 Hay un tipo especial de propiedad de contexto: la descripción del
1371 elemento. Estas propiedades reciben nombres en @code{MayúsculasDeCamello}
1372 (comenzando en letra mayúscula). Contienen los
1373 @q{ajustes por defecto} para dicho elemento gráfico como una lista
1374 asociativa. Consulte @file{scm/@/define@/-grobs@/.scm}
1375 para ver qué tipos de ajustes hay. Las descripciones de los elementos
1376 se pueden modificar con @code{\override}.
1378 Realmente, @code{\override} es un atajo;
1381 \override @var{contexto}.@var{nombre} #'@var{propiedad} = #@var{valor}
1385 es más o menos equivalente a
1387 @c leave this long line -gp
1389 \set @var{contexto}.@var{nombre} #'@var{propiedad} = #(cons (cons '@var{propiedad} @var{valor}) <valor previo de @var{contexto})
1392 El valor de @code{contexto} (la lista-a) se usa para da un valor inicial
1393 a las propiedades de los objetos gráficos individuales. Los objetos gráficos también tienen
1394 propiedades, que reciben nombres en el estilo de Scheme, con
1395 @code{palabras-con-guiones}. Los valores de las propiedades de objetos gráficos cambian
1396 durante el proceso de formateo: el formateo básicamente consiste en
1397 calcular las propiedades utilizando funciones de callback.
1399 @code{fontSize} es una propiedad especial: equivale a
1400 escribir @code{\override ... #'font-size} para todos los objetos
1401 pertinentes. Al ser éste un cambio muy común, se creó la propiedad especial
1402 (modificada con @code{\set}).
1405 @node Difficult tweaks
1406 @subsection Difficult tweaks
1408 Hay ciertos tipos de ajustes difíciles.
1414 Un tipo de ajuste difícil es la apariencia visual de los objetos de extensión,
1415 como las ligaduras de expresión y de unión. Inicialmente sólo se crea uno de estos objetos,
1416 y se pueden ajustar a través del mecanismo normal. Sin embargo, en ocasiones
1417 los objetos de extensión atraviesan los saltos de línea. Si esto ocurre, estos objetos
1418 se clonan. Se crea un objeto separado para cada grupo de pentagramas en el que está.
1419 Son clones del objeto original y heredan todas las
1420 propiedades, incluyendo los @code{\override}s.
1423 En otras palabras, un @code{\override} siempre afecta a todas las piezas de un elemento de
1424 extensión roto. Para cambiar sólo una parte del elemento de extensión en un salto de línea,
1425 es necesario implicarse en el proceso de formateo. La función de callback
1426 @code{after-line-breaking} contiene el procedimiento de Scheme que
1427 se llama después de que se han determinado los saltos de línea, y de que los objetos de
1428 presentación se han dividido sobre los diferentes sistemas o grupos de pentagramas.
1430 En el ejemplo siguiente, definimos un procedimiento
1431 @code{my-callback}. Este procedimiento
1435 determina si hemos sido divididos en un salto de línea
1437 si es así, recupera todos los objetos divididos
1439 comprueba si nosotros somos el último de los objetos divididos
1441 si es así, establece @code{extra-offset}.
1444 Este procedimiento se instala dentro de @internalsref{Tie} (ligadura de unión), de forma que la última parte
1445 de la ligadura dividida se traslada hacia arriba.
1447 @lilypond[quote,verbatim,ragged-right]
1448 #(define (my-callback grob)
1450 ; have we been split?
1451 (orig (ly:grob-original grob))
1453 ; if yes, get the split pieces (our siblings)
1454 (siblings (if (ly:grob? orig)
1455 (ly:spanner-broken-into orig) '() )))
1457 (if (and (>= (length siblings) 2)
1458 (eq? (car (last-pair siblings)) grob))
1459 (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
1462 \override Tie #'after-line-breaking =
1469 Cuando aplicamos este truco, la nueva función de callback @code{after-line-breaking}
1470 también debe llamar a la antigua @code{after-line-breaking}, si existe.
1471 Por ejemplo, si se utiliza con @code{Hairpin} (regulador),
1472 también se debe llamar a @code{ly:hairpin::after-line-breaking}.
1475 @item Algunos objetos no se pueden cambiar con @code{\override} por razones
1476 técnicas. Ejemplo de ello son @code{NonMusicalPaperColumn}
1477 y @code{PaperColumn}. Se pueden cambiar con la función
1478 @code{\overrideProperty}, que funciona de forma parecida a @code{\once
1479 \override}, pero usa una sintaxis diferente.
1483 #"Score.NonMusicalPaperColumn" % Nombre del Grob u objeto gráfico
1484 #'line-break-system-details % Nombre de la propiedad
1485 #'((next-padding . 20)) % Valor
1488 Fíjese, sin embargo, en que @code{\override}, aplicado a
1489 @code{NoteMusicalPaperColumn} y a @code{PaperColumn}, aún funciona tal y como se espera
1490 dentro de los bloques @code{\context}.