]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/es/user/changing-defaults.itely
Partial update of Changing Defaults
[lilypond.git] / Documentation / es / user / changing-defaults.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
2 @c This file is part of lilypond.tely
3 @ignore
4     Translation of GIT committish: fc68c2abd535ff0bad9c703982894317dfc4967f
5
6     When revising a translation, copy the HEAD committish of the
7     version that you are working on.  See TRANSLATION for details.
8 @end ignore
9
10 @c \version "2.11.38"
11
12 @node Changing defaults
13 @chapter Changing defaults
14
15
16 El objetivo del diseño de LilyPond es proporcionar por defecto la más
17 alta calidad de los resultados.  A pesar de ello, podría tener que
18 cambiar este resultado por defecto.  La disposición sobre el papel se
19 controla a través de un amplio número de proverbiales @q{botones e
20 interruptores}.  Este capítulo no relaciona todos y cada uno de los
21 botones.  Más bien da una visión de conjunto sobre qué grupos de
22 controles se encuentran disponibles y explica la forma de hallar el
23 botón exacto que se debe utilizar para conseguir un determinado
24 efecto.
25
26
27 @cindex Referencia de funcionamiento interno
28
29 Los controles disponibles para los ajustes finos se describen en un
30 documento separado,
31 @iftex
32 el Manual de referencia de funcionamiento interno.
33 @end iftex
34 @ifnottex
35 la @ref{Top,Referencia de funcionamiento interno,,lilypond-internals}.
36 @end ifnottex
37 Dicho manual relaciona todas las variables, funciones y opciones que
38 se encuentran disponibles en LilyPond.  Está escrito como un documento
39 HTML, que se puede encontrar en
40 @c leave the @uref as one long line.
41 @uref{http://@/lilypond@/.org/@/doc/@/stable/@/Documentation/@/user/@/lilypond@/-internals/,on@/-line},
42 pero que también va incluido en el paquete de la documentación de LilyPond.
43
44 Hay cuatro áreas en las que se pueden cambiar los valores por defecto:
45
46 @itemize
47 @item
48 Notación automática: cambiar la creación automática de los elementos
49 de notación.  Por ejemplo, cambiar las reglas de barrado de las
50 figuras.
51
52 @item
53 Salida: cambiar el aspecto de los objetos individuales.  Por ejemplo,
54 cambiar las direcciones de las plicas o la situación exacta de los
55 subíndices.
56
57 @item
58 Contexto: modificar aspectos de la traducción de los eventos musicales
59 en notación.  Por ejemplo, dar a cada pentagrama una indicación de
60 compás distinta.
61
62 @item
63 Disposición de la página: cambiar el aspecto visual del espaciado, los
64 saltos de línea y las dimensiones de la página.  Estas modificaciones
65 se discuten en @ref{Non-musical notation} y @ref{Spacing issues}.
66 @end itemize
67
68 Internamente, LilyPond utiliza el lenguaje Scheme (un dialecto de
69 LISP) para aportar la infraestructura.  La sobreescritura de las
70 decisiones de disposición da acceso efectivo a las interioridades del
71 programa, lo que requiere código de Scheme como entrada.  Los
72 elementos de Scheme se inauguran dentro de un archivo @code{.ly} con
73 el símbolo de cuadradillo @code{#}.@footnote{@rlearning{Scheme
74 tutorial} contiene un breve tutorial sobre la introducción de números,
75 listas, cadenas y símbolos en Scheme.}
76
77
78 @menu
79 * Interpretation contexts::     
80 * Explaining the Internals Reference::  
81 * Modifying properties::        
82 * Common properties::           
83 * Advanced tweaks::             
84 * old The \override command::   
85 * Discussion of specific tweaks::  
86 @end menu
87
88
89 @node Interpretation contexts
90 @section Interpretation contexts
91
92 Esta sección explica qué son los contextos y cómo modificarlos.
93
94 @menu
95 * Contexts explained::          
96 * Creating contexts::           
97 * Modifying context plug-ins::  
98 * Changing context default settings::  
99 * Defining new contexts::       
100 * Aligning contexts::           
101 @end menu
102
103
104 @node Contexts explained
105 @subsection Contexts explained
106
107 Cuando se imprime la música, se tienen que añadir a la salida una gran
108 cantidad de elementos notacionales.  Por ejemplo, compare la entrada y
109 la salida del siguiente ejemplo:
110
111 @lilypond[quote,verbatim,relative=2,fragment]
112 cis4 cis2. g4
113 @end lilypond
114
115 La entrada es bastante escueta, pero en la salida se añaden líneas
116 divisorias, alteraciones accidentales, la clave y la indicación de
117 compás.  LilyPond @emph{interpreta} la entrada.  En esta fase se
118 inspecciona la información musical en orden temporal, de forma
119 parecida a la lectura de una partitura de izquierda a
120 derecha. Mientras se lee la entrada, el programa recuerda dónde se
121 encuentran los límites de los compases, y qué notas requieren
122 alteraciones explícitas.  Esta información se puede presentar sobre
123 varios niveles.  Por ejemplo, el efecto de una alteración accidental
124 se encuentra limitada a un solo pentagrama, mientras que una barra
125 divisoria debe estar sincronizada a través de la partitura de arriba a
126 abajo.
127
128 Dentro de LilyPond, estas reglas y pequeñas porciones de información
129 se agrupan en @emph{Contexts}.  Algunos ejemplos de contextos son
130 @code{Voice} (Voz), @code{Staff} (Pauta o pentagrama) y @code{Score}
131 (Partitura).  Los contextos son jerárquicos, por ejemplo: un
132 @code{Staff} contener muchas @code{Voice}s, y una @code{Score} puede
133 contener muchos contextos de @code{Staff}.
134
135 @quotation
136 @sourceimage{context-example,5cm,,}
137 @end quotation
138
139 Cada contexto asume la responsabilidad de imponer algunas reglas de
140 notación, creando ciertos objetos de notación y manteniendo las
141 propiedades asociadas.  Por ejemplo, el contexto @code{Voice} puede
142 introducir una alteración accidental y entonces el contexto
143 @code{Staff} mantiene la regla de mostrar o suprimir la alteración
144 para el resto del compás.  La sincronización de las líneas divisorias
145 se gestiona dentro del contexto de la partitura, @code{Score}.
146
147 Sin embargo, en algunas músicas posiblemente no queramos que las
148 líneas divisorias estén sincronizada (pensemos en una partitura
149 polimétrica en compases de 4/4 y de 3/4).  En tales casos, debemos
150 modificar los ajustes por omisión de los contextos @code{Score} y
151 @code{Staff}.
152
153 Para partituras muy sencillas, los contextos se crean implícitamente y
154 no debemos preocuparnos por ellos.  Para piezas mayores, como por
155 ejemplo cualquiera que tenga más de un pentagrama, los contextos se
156 deben crear explícitamente para asegurarnos de que tendremos la
157 cantidad exacta de pentagramas que necesitamos, y que están en el
158 orden correcto.  Para tipografiar piezas con notación especializada,
159 puede ser útil modificar contextos existentes o definir unos nuevos.
160
161
162 En la referencia del programa se encuentra una descripción completa de
163 todos los contextos que están disponibles, consulte
164 @ifhtml
165 @rinternals{Contexts}.
166 @end ifhtml
167 @ifnothtml
168 Traducción @expansion{} Contexto.
169 @end ifnothtml
170
171 @node Creating contexts
172 @subsection Creating contexts
173
174 Para partituras que sólo tienen una voz y un pentagrama, los contextos
175 se crean automáticamente.  Para partituras más complejas, es necesario
176 crearlos a mano.  Existen tres instrucciones que hacen esto.
177
178 @itemize
179
180 @item
181 La instrucción más fácil es @code{\new}, y es también la más rápida de
182 escribir.  Se antepone a una expresión musical, por ejemplo
183
184 @funindex \new
185 @cindex nuevos, contextos
186 @cindex Contexto, creación de
187
188 @example
189 \new @var{tipo} @var{expresión_musical}
190 @end example
191
192 @noindent
193 donde @var{tipo} es el nombre de un contexto (como @code{Staff} o
194 @code{Voice}).  Esta instrucción crea un contexto nuevo, y empieza a
195 interpretar la @var{expresión_musical} con él.
196
197 Una aplicación práctica de @code{\new} es una partitura con muchos pentagramas.
198 Cada parte que debe ir en su propio pentagrama, va precedida de
199 @code{\new Staff}.
200
201 @lilypond[quote,verbatim,relative=2,ragged-right,fragment]
202 <<
203   \new Staff { c4 c }
204   \new Staff { d4 d }
205 >>
206 @end lilypond
207
208 La instrucción @code{\new} puede también dar nombre al contexto,
209
210 @example
211 \new @var{tipo} = @var{identificador} @var{música}
212 @end example
213 Sin embargo, este nombre especificado por el usuario sólo se utiliza
214 si no hay ya otro contexto anterior con el mismo nombre.
215
216
217 @funindex \context
218
219 @item
220 Como @code{\new}, la instrucción @code{\context} también dirige una
221 expresión musical a un objeto de contexto, pero da al contexto un
222 nombre explícito.  La sintaxis es
223
224 @example
225 \context @var{tipo} = @var{identificador} @var{música}
226 @end example
227
228 En esta forma, la instrucción buscará un contexto existente del
229 @var{tipo} especificado que tenga el nombre @var{identificador}.  Si
230 ese contexto aún no existe, se crea un contexto nuevo con el nombre
231 especificado.  Esto es útil si nos vamos a referir más tarde al
232 contexto.  Por ejemplo, cuando se escribe la letra, la melodía está
233 dentro de un contexto con nombre
234
235 @example
236 \context Voice = "@b{tenor}" @var{música}
237 @end example
238
239 @noindent
240 de forma que los textos se puedan alienar correctamente con sus notas,
241
242 @example
243 \new Lyrics \lyricsto "@b{tenor}" @var{letra}
244 @end example
245
246 @noindent
247
248 Otro uso posible de los contextos con nombre es la fusión de dos
249 expresiones musicales distintas en un solo contexto.  En el siguiente
250 ejemplo, se introducen por separado las articulaciones y las notas,
251
252 @example
253 musica = @{ c4 c4 @}
254 decoracion = @{ s4-. s4-> @}
255 @end example
256
257 se combinan enviando los dos al mismo contexto @code{Voice},
258
259 @example
260 <<
261   \new Staff \context Voice = "A" \musica
262   \context Voice = "A" \decoracion
263 >>
264 @end example
265 @lilypond[quote,ragged-right]
266 music = { c4 c4 }
267 arts = { s4-. s4-> }
268 \relative c'' <<
269   \new Staff \context Voice = "A" \music
270   \context Voice = "A" \arts
271 >>
272 @end lilypond
273
274 Con este mecanismo, es posible definir un Urtext (una edición
275 original), con la posibilidad de poner articulaciones distintas sobre
276 las mismas notas.
277
278 @cindex crear contextos
279
280 @item
281 La tercera instrucción para crear contextos es
282 @example
283 \context @var{tipo} @var{música}
284 @end example
285
286
287 @noindent
288 Esto es similar a @code{\context} con @code{= @var{identificador}},
289 pero se corresponde con cualquier contexto del tipo @var{tipo}, sin
290 importar qué nombre se le ha dado.
291
292 Esta variante se usa con expresiones musicales que se pueden
293 interpretar en varios niveles.  Por ejemplo, la instrucción
294 @code{\applyOutput} (véase @ref{Running a function on all layout
295 objects}).  Sin una instrucción @code{\context} explícita, normalmente
296 se aplicaría a @code{Voice}
297
298 @example
299 \applyOutput #'@var{contexto} #@var{función}   % aplicar al contexto Voice
300 @end example
301
302 Para que se interprete dentro de los niveles de @code{Score} o
303 @code{Staff}, utilice las siguientes formas:
304
305 @example
306 \applyOutput #'Score #@var{función}
307 \applyOutput #'Staff #@var{función}
308 @end example
309
310 @end itemize
311
312
313 @node Modifying context plug-ins
314 @subsection Modifying context plug-ins
315
316 Los contextos de notación (como @code{Score} y @code{Staff}) no sólo
317 almacenan propiedades, también contienen «plug-ins» o complementos
318 llamados @q{grabadores} que crean elementos de notación.  Por ejemplo,
319 el contexto @code{Voice} contiene un grabador
320 @code{Note_head_engraver} que crea las cabezas de nota y el contexto
321 @code{Staff} contiene un grabador @code{Key_signature_engraver} que
322 crea la indicación de compás.
323
324 Para ver una descripción completa de todos y cada uno de los
325 complementos, consulte
326 @ifhtml
327 @rinternals{Engravers and Performers}.
328 @end ifhtml
329 @ifnothtml
330 Referencia de funcionamiento interno @expansion{} Traducción @expansion{} Grabadores.
331 @end ifnothtml
332 Cada contexto que se describe en
333 @ifhtml
334 @rinternals{Contexts}
335 @end ifhtml
336 @ifnothtml
337 Referencia de funcionamiento interno @expansion{} Traducción @expansion{} Contexto.
338 @end ifnothtml
339 relaciona los grabadores que se usan para ese contexto.
340
341
342 Puede ser de utilidad jugar un poco con estos complementos.  Se hace
343 iniciando un contexto nuevo con @code{\new} o @code{\context} y
344 modificándolo:
345
346 @funindex \with
347
348 @example
349 \new @var{contexto} \with @{
350   \consists @dots{}
351   \consists @dots{}
352   \remove @dots{}
353   \remove @dots{}
354   @emph{etc.}
355 @}
356 @{
357   @emph{..música..}
358 @}
359 @end example
360
361 @noindent
362 donde los @dots{} debe ser el nombre de un grabador.  Aquí tenemos un
363 ejemplo sencillo que suprime los grabadores
364 @code{Time_signature_engraver} y @code{Clef_engraver} de un contexto
365 @code{Staff}:
366
367 @lilypond[quote,relative=1,verbatim,fragment]
368 <<
369   \new Staff {
370     f2 g
371   }
372   \new Staff \with {
373      \remove "Time_signature_engraver"
374      \remove "Clef_engraver"
375   } {
376     f2 g2
377   }
378 >>
379 @end lilypond
380
381 En el segundo pentagrama no hay indicación de compás ni clave.  Éste
382 es un método bastante rudimentario de hacer que desaparezcan los
383 objetos porque afecta a todo el pentagrama.  Este método también
384 afecta al espaciado, lo que puede ser deseable o no serlo.  Se
385 muestran métodos más sofisticados para quitar objetos en
386 @rlearning{Visibility and color of objects}.
387
388 EL ejemplo siguiente muestra una aplicación práctica.  Normalmente las
389 líneas divisorias y las indicaciones de compás están sincronizadas a
390 lo largo de toda la partitura.  Lo hacen los grabadores
391 @code{Timing_translator} y @code{Default_bar_line_engraver}.  Estos
392 complementos mantienen al día la administración de las indicaciones de
393 compás, posición dentro del compás, etc.  Moviendo estos grabadores
394 desde el contexto de @code{Score} al de @code{Staff}, podemos
395 conseguir una partitura en la que cada pentagrama tiene su propio
396 compás independiente.
397
398 @cindex polimétricas, partituras
399 @cindex compases distintos al mismo tiempo
400
401 @lilypond[quote,relative=1,ragged-right,verbatim,fragment]
402 \new Score \with {
403   \remove "Timing_translator"
404   \remove "Default_bar_line_engraver"
405 } <<
406   \new Staff \with {
407     \consists "Timing_translator"
408     \consists "Default_bar_line_engraver"
409   } {
410       \time 3/4
411       c4 c c c c c
412   }
413   \new Staff \with {
414     \consists "Timing_translator"
415     \consists "Default_bar_line_engraver"
416   } {
417        \time 2/4
418        c4 c c c c c
419   }
420 >>
421 @end lilypond
422
423
424 @node Changing context default settings
425 @subsection Changing context default settings
426
427 Los ajustes de las secciones previas ( @ref{The \set command},
428 @ref{Modifying context plug-ins} y @ref{Overview of modifying
429 properties}) también se pueden escribir separados de la música dentro
430 del bloque @code{\layout}:
431
432 @example
433 \layout @{
434   @dots{}
435   \context @{
436     \Staff
437
438     \set fontSize = #-2
439     \override Stem #'thickness = #4.0
440     \remove "Time_signature_engraver"
441   @}
442 @}
443 @end example
444
445 La instrucción @code{\Staff} recupera la definición existente del
446 contexto de pentagrama de manera que se pueda modificar.
447
448 Los enunciados
449 @example
450 \set fontSize = #-2
451 \override Stem #'thickness = #4.0
452 \remove "Time_signature_engraver"
453 @end example
454
455 @noindent
456 afectan a todos los pentagramas de la partitura.  Otros contextos se
457 pueden modificar de forma análoga.
458
459 La palabra clave @code{\set} es opcional dentro del bloque
460 @code{\layout}, y así
461
462 @example
463 \context @{
464   @dots{}
465   fontSize = #-2
466 @}
467 @end example
468
469 @noindent
470 también funciona.
471
472
473
474 @knownissues
475
476 No es posible recolectar cambios de contexto dentro de una variable y
477 aplicarlos a una definición de @code{\context} por referencia a dicha
478 variable.
479
480 La instrucción @code{\RemoveEmptyStaffContext} sobreescribe nuestros
481 ajustes en curso para @code{\Staff}.  Si queremos cambiar los valores
482 predeterminados para un pentagrama que utilice
483 @code{\RemoveEmptyStaffContext}, debe hacerlo después de llamar a
484 @code{\RemoveEmptyStaffContext}, o sea
485
486 @example
487 \layout @{
488   \context @{
489     \RemoveEmptyStaffContext
490
491     \override Stem #'thickness = #4.0
492   @}
493 @}
494 @end example
495
496
497 @node Defining new contexts
498 @subsection Defining new contexts
499
500 Los contextos específicos, como @code{Staff} y @code{Voice}, están
501 construidos a base de bloques sencillos.  Es posible crear nuevos
502 tipos de contextos con combinaciones distintas de añadidos grabadores.
503
504 El siguiente ejemplo muestra cómo construir un tipo diferente de contexto de
505 @code{Voice} partiendo de cero.  Será parecido a
506 @code{Voice}, pero imprime solamente cabezas centradas en forma de barra inclinada.  Se puede usar
507 para indicar improvisación en piezas de jazz,
508
509 @c KEEP LY
510 @lilypond[quote,ragged-right]
511 \layout { \context {
512   \name ImproVoice
513   \type "Engraver_group"
514   \consists "Note_heads_engraver"
515   \consists "Text_engraver"
516   \consists Pitch_squash_engraver
517   squashedPosition = #0
518   \override NoteHead #'style = #'slash
519   \override Stem #'transparent = ##t
520   \alias Voice
521 }
522 \context { \Staff
523   \accepts "ImproVoice"
524 }}
525
526 \relative c'' {
527   a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
528    c4 c^"desvístete" c_"mientras juegas :)" c }
529   a1
530 }
531 @end lilypond
532
533
534 Estos ajustes se definen dentro de un bloque @code{\context} que a su
535 vez está dentro de un bloque @code{\layout},
536
537 @example
538 \layout @{
539   \context @{
540     @dots{}
541   @}
542 @}
543 @end example
544
545 En el siguiente análisis, la entrada de ejemplo que se muestra debe ir
546 en el lugar de los puntos suspensivos @dots{} del fragmento anterior.
547
548 En primer lugar es necesario definir un nombre para el nuevo contexto:
549
550 @example
551 \name ImproVoice
552 @end example
553
554 Debido a que es parecido al contexto @code{Voice}, queremos órdenes
555 que funcionen sobre contextos de @code{Voice} (existentes) para que
556 siga funcionando.  Esto se consigue dando al contexto nuevo un alias
557 @code{Voice},
558
559 @example
560 \alias Voice
561 @end example
562
563 El contexto imprimirá notas y textos explicativos, por ello tenemos
564 que añadir los grabadores que aportan esta funcionalidad,
565
566 @example
567 \consists Note_heads_engraver
568 \consists Text_engraver
569 @end example
570
571 Pero sólo necesitamos esto en la línea central,
572
573 @example
574 \consists Pitch_squash_engraver
575 squashedPosition = #0
576 @end example
577
578 El grabador @rinternals{Pitch_squash_engraver} modifica las cabezas de
579 nota (creadas por el grabador @rinternals{Note_heads_engraver}) y
580 establece sus posiciones verticales al valor de
581 @code{squashedPosition}, en este caso@tie{}@code{0}, la línea central.
582
583 Las notas parecen barras inclinadas y no tienen plica,
584
585 @example
586 \override NoteHead #'style = #'slash
587 \override Stem #'transparent = ##t
588 @end example
589
590 Todos estos añadidos tienen que cooperar, y esto se consigue con un
591 añadido especial, que se debe marcar con la palabra clave
592 @code{\type}.  Este será siempre @rinternals{Engraver_group},
593
594 @example
595 \type "Engraver_group"
596 @end example
597
598 Al juntarlo todo, obtenemos
599
600 @example
601 \context @{
602   \name ImproVoice
603   \type "Engraver_group"
604   \consists "Note_heads_engraver"
605   \consists "Text_engraver"
606   \consists Pitch_squash_engraver
607   squashedPosition = #0
608   \override NoteHead #'style = #'slash
609   \override Stem #'transparent = ##t
610   \alias Voice
611 @}
612 @end example
613
614 @funindex \accepts
615 Los contextos dan lugar a jerarquías.  Queremos colgar el contexto
616 @code{ImproVoice} bajo el contexto @code{Staff}, como simples
617 @code{Voice}s normales.  Por tanto, modificamos la definición de
618 @code{Staff} con la instrucción @code{\accepts} (acepta),
619
620 @example
621 \context @{
622   \Staff
623   \accepts ImproVoice
624 @}
625 @end example
626
627 @funindex \denies
628 Lo opuesto a @code{\accepts} (acepta) es @code{\denies} (deniega), lo
629 que a veces se necesita cuando se están reutilizando definiciones de
630 contexto existentes.
631
632 Ponemos ambos dentro de un bloque @code{\layout}, como
633
634 @example
635 \layout @{
636   \context @{
637     \name ImproVoice
638     @dots{}
639   @}
640   \context @{
641     \Staff
642     \accepts "ImproVoice"
643   @}
644 @}
645 @end example
646
647 Así pues, la salida que aparece al comienzo de esta sub-sección se
648 puede escribir como
649
650 @example
651 \relative c'' @{
652   a4 d8 bes8
653   \new ImproVoice @{
654     c4^"ad lib" c
655     c4 c^"undress"
656     c c_"while playing :)"
657   @}
658   a1
659 @}
660 @end example
661
662
663 @node Aligning contexts
664 @subsection Aligning contexts
665
666 Los contextos nuevos se pueden alinear por encima o por debajo de
667 otros contextos existentes.  Esto podría ser de utilidad al preparar
668 un pentagrama vocal (@rlearning{Vocal ensembles}) y un ossia,
669
670 @c ARREGLAR: esta sección no funciona en PDF. (¿?)
671
672 @cindex ossia
673 @findex alignAboveContext
674 @findex alignBelowContext
675
676 @lilypond[quote,ragged-right]
677 ossia = { f4 f f f }
678 \score{
679   \relative c' \new Staff = "main" {
680     c4 c c c
681     <<
682       \new Staff \with {alignAboveContext=main} \ossia
683       { d8 f d f d f d f }
684     >>
685   }
686 }
687 @end lilypond
688
689
690
691
692 @node Explaining the Internals Reference
693 @section Explaining the Internals Reference
694
695
696 @menu
697 * Navigating the program reference::  
698 * Layout interfaces::           
699 * Determining the grob property::  
700 * Naming conventions::          
701 @end menu
702
703
704
705 @node Navigating the program reference
706 @subsection Navigating the program reference
707
708 Supongamos que queremos mover la indicación de digitación del
709 fragmento siguiente:
710
711 @lilypond[quote,fragment,relative=2,verbatim]
712 c-2
713 \stemUp
714 f
715 @end lilypond
716
717 Si hace una visita a la documentación en busca de instrucciones de
718 digitación (en @ref{Fingering instructions}), encontrará:
719
720 @quotation
721 @seealso
722
723 Referencia de funcionamiento interno: @rinternals{Fingering}.
724
725 @end quotation
726
727 @ifnothtml
728 La referencia del programador se encuentra disponible en forma de
729 documento HTML.  Se recomienda mucho que lo lea en la forma HTML, bien
730 en línea o bien descargando los archivos de la documentación HTML.
731 Esta sección sería mucho más difícil de entender si está utilizando el
732 manual en formato PDF.
733 @end ifnothtml
734
735 Siga el enlace que lleva a @rinternals{Fingering}.  Al principio de la
736 página, puede ver
737
738 @quotation
739 Los objetos de digitación se crean por parte de:
740 @rinternals{Fingering_engraver} y @rinternals{New_fingering_engraver}.
741 @end quotation
742
743 Siguiendo los enlaces relacionados dentro de la referencia del
744 programa, podemos seguir el flujo de información dentro del programa:
745
746 @itemize
747
748 @item @rinternals{Fingering}:
749 los objetos @rinternals{Fingering} se crean por parte de:
750 @rinternals{Fingering_engraver}
751
752 @item @rinternals{Fingering_engraver}:
753 Tipos de música aceptados: @rinternals{fingering-event}
754
755 @item @rinternals{fingering-event}:
756 El tipo de evento musical @code{fingering-event} está descrito en
757 Expresiones musicales con el nombre de @rinternals{FingerEvent}
758 @end itemize
759
760 Este camino se recorre en contra de la corriente de información del
761 programa: comienza por la salida y acaba en el evento de entrada.
762 También podríamos haber empezado por un evento de la entrada, y leído
763 siguiendo el flujo de información terminando en su caso en el objeto
764 (u objetos) de la salida.
765
766 La referencia del programa también se puede examinar como un documento
767 normal.  Contiene capítulos que tratan de
768 @ifhtml
769 @rinternals{Music definitions},
770 @end ifhtml
771 @ifnothtml
772 @code{Music definitions}
773 @end ifnothtml
774 de la @rinternals{Translation}, y del @rinternals{Backend}.  Cada uno
775 de los capítulos relaciona todas las definiciones utilizadas y todas
776 las propiedades que se pueden ajustar.
777
778
779 @node Layout interfaces
780 @subsection Layout interfaces
781
782 @cindex interfaz de la presentación
783 @cindex presentación, interfaz de la
784 @cindex grob
785
786 La página HTML que pudimos ver en la sección anterior describe el
787 objeto de presentación llamado @rinternals{Fingering}.  Dicho objeto
788 es un símbolo dentro de la partitura.  Tiene propiedades que guardan
789 números (como grosores y direcciones), pero también punteros a objetos
790 relacionados.  Un objeto de presentación también se llama un
791 @emph{Grob}, que es una abreviatura de Graphical Object (objeto
792 gráfico).  Para ver más detalles acerca de los objetos gráficos o
793 Grobs, consulte @rinternals{grob-interface}.
794
795 La página dedicada a @code{Fingering} relaciona las definiciones del
796 objeto @code{Fingering}.  Por ejemplo, la página dice
797
798 @quotation
799 @code{relleno} (dimensión, en espacios de pentagrama):
800
801 @code{0.5}
802 @end quotation
803
804 @noindent
805 lo que significa que el número se mantendrá a una distancia de al
806 menos 0.5 de la cabeza de la nota.
807
808
809 Cada objeto de presentación puede tener varias funciones como elemento
810 notacional o tipográfico.  Por ejemplo, el objeto de digitación
811 Fingering tiene los siguientes aspectos
812
813 @itemize
814 @item
815 Su tamaño es independiente del espaciado horizontal, al contrario de
816 las ligaduras o las barras de las figuras.
817
818 @item
819 Es un elemento de texto.  Casi seguro que es un texto muy corto.
820
821 @item
822 este elemento de texto se tipografía con un tipo de letra, no como las
823 ligaduras o las barras de las figuras.
824
825 @item
826 Horizontalmente, el centro del símbolo se debe alinear con el centro
827 de la cabeza de la nota.
828
829 @item
830 Verticalmente, el símbolo se coloca cerca de la nota y del pentagrama.
831
832 @item
833 La posición vertical también está coordinada con otros símbolos de
834 superíndice y de subíndice.
835 @end itemize
836
837 Cada uno de estos aspectos se capta en lo que se llaman
838 @emph{interface}s, que se relacionan al final de la página dedicada a
839 @rinternals{Fingering}
840
841 @quotation
842 Este objeto contempla los siguientes interfaces:
843 @rinternals{item-interface},
844 @rinternals{self-alignment-interface},
845 @rinternals{side-position-interface}, @rinternals{text-interface},
846 @rinternals{text-script-interface}, @rinternals{font-interface},
847 @rinternals{finger-interface} y @rinternals{grob-interface}.
848 @end quotation
849
850 Al pulsar sobre cualquiera de los enlaces nos desplazaremos a la
851 página del respectivo interfaz del objeto.  Cada interfaz tiene un
852 cierto número de propiedades.  Algunas de ellas no son para que el
853 usuario las pueda ajustar (@q{Propiedades internas}), pero otras sí se
854 pueden modificar.
855
856 Hemos estado hablando de @emph{el} objeto @code{Fingering}, pero
857 realmente esto no significa mucho.  El archivo de inicialización
858 (véase @ref{File structure}) @file{scm/@/define@/-grobs@/.scm} muestra
859 el alma del @q{objeto},
860
861 @example
862 (Fingering
863   . ((padding . 0.5)
864      (avoid-slur . around)
865      (slur-padding . 0.2)
866      (staff-padding . 0.5)
867      (self-alignment-X . 0)
868      (self-alignment-Y . 0)
869      (script-priority . 100)
870      (stencil . ,ly:text-interface::print)
871      (direction . ,ly:script-interface::calc-direction)
872      (font-encoding . fetaNumber)
873      (font-size . -5)           ; don't overlap when next to heads.
874      (meta . ((class . Item)
875      (interfaces . (finger-interface
876                     font-interface
877                     text-script-interface
878                     text-interface
879                     side-position-interface
880                     self-alignment-interface
881                     item-interface))))))
882 @end example
883
884 @noindent
885 Como podemos ver, el objeto @code{Fingering} no es más que un montón
886 de valores de variables, y la página web de la Referencia de
887 funcionamiento interno se genera directamente a partir de esta
888 definición.
889
890
891 @node Determining the grob property
892 @subsection Determining the grob property
893
894 Recordemos que queríamos cambiar la posición del @b{2} en
895
896 @lilypond[quote,fragment,relative=2,verbatim]
897 c-2
898 \stemUp
899 f
900 @end lilypond
901
902 Puesto que el @b{2} se encuentra colocado verticalmente sobre su nota,
903 tenemos que negociar con el interfaz asociado con esta colocación.
904 Esto se hace usando @code{side-position-interface}.  La página que
905 describe este interface dice:
906
907 @quotation
908 @code{side-position-interface}
909
910 Colocar un objeto víctima (este mismo) junto a otros objetos (el
911 soporte).  La propiedad @code{direction} significa dónde poner el
912 objeto víctima con relación al soporte (¿a la izquierda o a la
913 derecha, encima o debajo?)
914 @end quotation
915
916 @cindex relleno
917 @noindent
918 Debajo de esta descripción, la variable @code{padding} (relleno) se describe como
919
920 @quotation
921 @table @code
922 @item padding
923 (dimensión, en espacios de pentagrama)
924
925 Añadir esta cantidad de espacio adicional entre objetos que están unos
926 junto a otros.
927 @end table
928 @end quotation
929
930 Aumentando el valor de @code{padding}, podemos alejar la cifra de
931 digitación de la cabeza de la nota.  La siguiente orden inserta un
932 espacio en blanco de 3 espacios de pentagrama entre la nota y la
933 digitación:
934 @example
935 \once \override Voice.Fingering #'padding = #3
936 @end example
937
938 Al insertar esta instrucción antes de que se haya creado el objeto
939 Fingering, es decir, antes del @code{c2}, llegamos al siguiente
940 resultado:
941
942 @lilypond[quote,relative=2,fragment,verbatim]
943 \once \override Voice.Fingering #'padding = #3
944 c-2
945 \stemUp
946 f
947 @end lilypond
948
949
950 En este caso, el contexto de este truco es @code{Voice}.  Este hecho
951 se puede deducir también a partir de la referencia del programa, ya
952 que la página dedicada al añadido @rinternals{Fingering_engraver} dice
953
954 @quotation
955 El grabador Fingering_engraver es parte de los contextos: @dots{}
956 @rinternals{Voice}
957 @end quotation
958
959
960
961 @node Naming conventions
962 @subsection Naming conventions
963
964 UNTRANSLATED NODE: IGNORE ME
965
966 @node Modifying properties
967 @section Modifying properties
968
969 @menu
970 * Overview of modifying properties::  
971 * The \set command::            
972 * The \override command::       
973 * \set versus \override::       
974 * Objects connected to the input::  
975 @end menu
976
977
978 @node Overview of modifying properties
979 @subsection Overview of modifying properties
980
981 Cada contexto es responsable de la creación de ciertos tipos de
982 objetos gráficos.  Los ajustes que se usan para imprimir estos objetos
983 también se almacenan por contexto.  Mediante la modificación de estos
984 ajustes, se puede alterar la apariencia de los objetos.
985
986 La sintaxis de esto es
987
988 @example
989 \override @var{contexto}.@var{nombre} #'@var{propiedad} = #@var{valor}
990 @end example
991
992 Aquí @var{nombre} es el nombre de un objeto gráfico, como @code{Stem}
993 o @code{NoteHead}, y @var{propiedad} es una variable interna del
994 sistema de formateo (@q{propiedad del grob} o @q{propiedad de
995 disposición}).  Este último es un símbolo, y por ello debe ir
996 precedido de un apóstrofe.  La subsección @ref{Modifying properties}
997 explica cómo se deben cumplimentar los conceptos @var{nombre},
998 @var{propiedad} y @var{valor}.  Aquí sólo nos ocuparemos de la
999 funcionalidad des esta instrucción.
1000
1001 La instrucción
1002
1003 @verbatim
1004 \override Staff.Stem #'thickness = #4.0
1005 @end verbatim
1006
1007 @noindent
1008 hace más gruesas las plicas (el valor predeterminado es 1.3, con el
1009 grosor de una línea del pentagrama como unidad).  Puesto que la
1010 instrucción especifica como contexto a @code{Staff}, sólo se aplica al
1011 pentagrama actual.  Otros pentagramas mantienen su aspecto normal.
1012 Aquí vemos la instrucción en pleno funcionamiento:
1013
1014 @lilypond[quote,verbatim,relative=2,fragment]
1015 c4
1016 \override Staff.Stem #'thickness = #4.0
1017 c4
1018 c4
1019 c4
1020 @end lilypond
1021
1022 La instrucción @code{\override} modifica la definición de la plica
1023 @code{Stem} dentro del pentagrama en curso @code{Staff}.  Después de
1024 que la instrucción se ha interpretado, todas las plicas se engrosan.
1025
1026 DE manera análoga a @code{\set}, el argumento @var{contexto} se puede
1027 omitir, ocasionando que se utilice el contexto predeterminado
1028 @code{Voice}.  Al añadir @code{\once} se aplica el cambio durante un
1029 solo paso de tiempo.
1030
1031 @lilypond[quote,fragment,verbatim,relative=2]
1032 c4
1033 \once \override Stem #'thickness = #4.0
1034 c4
1035 c4
1036 @end lilypond
1037
1038 El @code{\override} se debe hacer antes de que el objeto se inicia.
1039 Por tanto, al alterar objetos @emph{Spanner} «de extensión» como
1040 ligaduras o barras, la instrucción @code{\override} se debe ejecutar
1041 en el momento en que se crea el objeto.  En este ejemplo:
1042
1043 @lilypond[quote,fragment,verbatim,relative=2]
1044 \override Slur #'thickness = #3.0
1045 c8[( c
1046 \override Beam #'thickness = #0.6
1047 c8 c])
1048 @end lilypond
1049
1050 @noindent
1051 la ligadura es más gruesa pero la barra no lo es.  Esto es así porque
1052 la instrucción para @code{Beam}, la barra, va después de que la barra
1053 se ha iniciado, y por ello no tiene ningún efecto.
1054
1055 De forma análoga a @code{\unset}, la instrucción @code{\revert} para
1056 un contexto deshace una instrucción @code{\override}; como con
1057 @code{\unset}, solamente afecta a los ajustes que se hicieron dentro
1058 del mismo contexto.  En otras palabras, el @code{\revert} del
1059 siguiente ejemplo no hace nada.
1060
1061 @example
1062 \override Voice.Stem #'thickness = #4.0
1063 \revert Staff.Stem #'thickness
1064 @end example
1065
1066 Salgunas opciones «trucables» se llaman @q{subpropiedades} y residen
1067 dentro de las propiedades normales.  Para trucarlas, utilice
1068 instrucciones de la forma
1069
1070 @c leave this as a long long
1071 @example
1072 \override @var{context}.@var{name} #'@var{property} #'@var{subproperty} = #@var{value}
1073 @end example
1074
1075 @noindent
1076 tales como
1077
1078 @example
1079 \override Stem #'details #'beamed-lengths = #'(4 4 3)
1080 @end example
1081
1082
1083 @seealso
1084
1085 Referencia de funcionamiento interno:
1086 @rinternals{OverrideProperty},
1087 @rinternals{RevertProperty},
1088 @rinternals{PropertySet},
1089 @rinternals{Backend} y
1090 @rinternals{All layout objects}.
1091
1092
1093 @knownissues
1094
1095 El «back-end» o motor de salida no es muy estricto en la comprobación
1096 de tipos de las propiedades de objetos.  Las referencias cíclicas en
1097 valores Scheme de propiedades pueden producir cuelgues o salidas
1098 abruptas, o las dos cosas.
1099
1100
1101 @node The \set command
1102 @subsection The @code{\set} command
1103
1104 @cindex propiedades
1105 @funindex \set
1106 @cindex cambiar propiedades
1107
1108 Cada contexto puede tener distintas @emph{propiedades}, variables
1109 contenidas dentro de ese contexto.  Se pueden cambiar mientras dura el
1110 paso de interpretación.  Se consigue insertando la instrucción
1111 @code{\set} dentro de la música:
1112
1113 @example
1114 \set @var{contexto}.@var{propiedad} = #@var{valor}
1115 @end example
1116
1117 Por ejemplo:
1118 @lilypond[quote,verbatim,relative=2,fragment]
1119 R1*2
1120 \set Score.skipBars = ##t
1121 R1*2
1122 @end lilypond
1123
1124 Estas instrucción salta los compases que no tienen notas.  El
1125 resultado es que los silencios multicompás se condensan.  El valor
1126 asignado es un objeto de Scheme.  En este caso, es @code{#t}, el valor
1127 booleano True o verdadero.
1128
1129 Si se omite el argumento @var{context}, entonces se utiliza el
1130 contexto actual de nivel más bajo (normalmente @code{ChordNames},
1131 @code{Voice} o @code{Lyrics}). En este ejemplo:
1132
1133 @lilypond[quote,verbatim,relative=2,fragment]
1134 c8 c c c
1135 \set autoBeaming = ##f
1136 c8 c c c
1137 @end lilypond
1138
1139 @noindent
1140 el argumento @var{contexto} de la instrucción @code{\set} se omite,
1141 así pues el barrado automático se desactiva en la voz actual.  Observe
1142 que el contexto de nivel más bajo no siempre contiene la propiedad que
1143 queremos cambiar (por ejemplo, no tendrá ningún efecto intentar
1144 establecer un valor para la propiedad @code{skipBars} del contexto de
1145 nivel más bajo, en este caso @code{Voice}).
1146
1147 @lilypond[quote,verbatim,relative=2,fragment]
1148 R1*2
1149 \set skipBars = ##t
1150 R1*2
1151 @end lilypond
1152
1153 Los contextos so jerárquicos, y si se ha especificado un contexto
1154 mayor, por ejemplo @code{Staff}, entonces el cambio se aplicaría
1155 también a todos los contextos @code{Voice} dentro del pentagrama
1156 actual.  El cambio se aplica @q{al vuelo}, durante la música, de
1157 manera que el ajuste sólo afecta al segundo grupo de corcheas.
1158
1159 @funindex \unset
1160
1161 También existe una instrucción @code{\unset}:
1162 @example
1163 \unset @var{contexto}.@var{propiedad}
1164 @end example
1165
1166 @noindent
1167 que elimina la definición de @var{propiedad}.  Esta instrucción
1168 elimina la definición solamente si está establecida dentro de
1169 @var{contexto}, de manera que
1170
1171 @example
1172 \set Staff.autoBeaming = ##f
1173 @end example
1174
1175 @noindent
1176 introduce un ajuste de la propiedad en el nivel de @code{Staff}.  El
1177 ajuste también se aplica a la @code{Voice} actual.  Sin embargo:
1178
1179 @example
1180 \unset Voice.autoBeaming
1181 @end example
1182
1183 @noindent
1184 no tiene ningúun efecto.  Para cancelar este ajuste, se debe
1185 especificar el @code{\unset} en el mismo nivel que el @code{\set}
1186 original.  Dicho de otra forma, para deshacer el efecto de
1187 @code{Staff.autoBeaming = ##f} se necesita
1188 @example
1189 \unset Staff.autoBeaming
1190 @end example
1191
1192 Como @code{\set}, el argumento @var{contexto} no se tiene que
1193 especificar para un contexto del nivel más bajo, por lo que los dos
1194 enunciados
1195
1196 @example
1197 \set Voice.autoBeaming = ##t
1198 \set autoBeaming = ##t
1199 @end example
1200
1201 @noindent
1202 son equivalentes.
1203
1204
1205 @cindex \once
1206 Los ajustes que se aplican solamente a un único paso de tiempo se
1207 pueden escribir con @code{\once}, por ejemplo en
1208
1209 @lilypond[quote,verbatim,relative=2,fragment]
1210 c4
1211 \once \set fontSize = #4.7
1212 c4
1213 c4
1214 @end lilypond
1215
1216 la propiedad @code{fontSize} se deshace automáticamente después de la
1217 segunda nota.
1218
1219 En el manual de Referencia de funcionamiento interno hay una
1220 descripción completa de todas las propiedades de contexto disponibles,
1221 consulte
1222 @ifhtml
1223 @rinternals{Tunable context properties}.
1224 @end ifhtml
1225 @ifnothtml
1226 Traducción @expansion{} Propiedades de contexto modificables por el
1227 usuario.
1228 @end ifnothtml
1229
1230
1231
1232 @node The \override command
1233 @subsection The @code{\override} command
1234
1235 Las instrucciones que modifican la salida tienen por lo general un
1236 aspecto como
1237
1238 @example
1239 \override Voice.Stem #'thickness = #3.0
1240 @end example
1241
1242 @noindent
1243 Para construir este truco debemos determinar los siguientes datos:
1244
1245 @itemize
1246 @item el contexto: aquí @code{Voice}.
1247 @item el objeto de presentación: aquí @code{Stem}.
1248 @item la propiedad de presentación: aquí @code{thickness}.
1249 @item un valor adecuado: aquí @code{3.0}.
1250 @end itemize
1251
1252 Ciertas opciones ajustables se denominan @q{subpropiedades} y residen
1253 en el interior de las propiedades normales.  Para modificarlas utilice
1254 instrucciones de la forma
1255
1256 @example
1257 \override Stem #'details #'beamed-lengths = #'(4 4 3)
1258 @end example
1259
1260 @cindex documentación interna
1261 @cindex buscar objetos gráficos
1262 @cindex gráficos, descripción de los objetos
1263 @cindex trucos
1264 @funindex \override
1265 @cindex interna, documentación
1266
1267 Para muchas propiedades, independientemente del tipo de datos de la
1268 propiedad, si se establece el valor de la propiedad a falso
1269 (@code{##f}) se producirá su desactivación, ocasionando que LilyPond
1270 ignore por completo dicha propiedad.  Esto es especialmente útil para
1271 «apagar» propiedades de grobs (objetos gráficos) que de otra manera
1272 causarína problemas.
1273
1274 Mostraremos a continuación cómo localizar esta información en el
1275 manual de notación y en la referencia de funcionamiento interno.
1276
1277 @node \set versus \override
1278 @subsection @code{\set} vs. @code{\override}
1279
1280 Hemos visto dos formas de cambiar las propiedades: @code{\set} y
1281 @code{\override}.  De hecho, en realidad existen dos clases diferentes
1282 de propiedades.
1283
1284 Los contextos pueden tener propiedades, que por lo general reciben
1285 nombres en @code{mayúsculasDeCamello}.  Principalmente controlan la
1286 traducción de la música a la notación, p.ej. @code{localKeySignature}
1287 (para determinar si hay que imprimir las alteraciones accidentales),
1288 @code{measurePosition} (para determinar cuándo imprimir una línea
1289 divisoria).  Las propiedades de contexto pueden ver modificado su
1290 valor con el tiempo según se interpreta una pieza de música;
1291 @code{measurePosition} es un ejemplo obvio de esto.  Las propiedades
1292 de contexto se modifican con @code{\set}.
1293
1294 Hay un tipo especial de propiedad de contexto: la descripción del
1295 elemento.  Estas propiedades reciben nombres en
1296 @code{MayúsculasDeCamello} (comenzando en letra mayúscula).  Contienen
1297 los @q{ajustes por defecto} para dicho elemento gráfico como una lista
1298 asociativa.  Consulte @file{scm/@/define@/-grobs@/.scm} para ver qué
1299 tipos de ajustes hay.  Las descripciones de los elementos se pueden
1300 modificar con @code{\override}.
1301
1302 Realmente, @code{\override} es un atajo;
1303
1304 @example
1305 \override @var{contexto}.@var{nombre} #'@var{propiedad} = #@var{valor}
1306 @end example
1307
1308 @noindent
1309 es más o menos equivalente a
1310
1311 @c  leave this long line -gp
1312 @example
1313 \set @var{contexto}.@var{nombre} #'@var{propiedad} = #(cons (cons '@var{propiedad} @var{valor}) <valor previo de @var{contexto})
1314 @end example
1315
1316 El valor de @code{contexto} (la lista-a) se usa para da un valor
1317 inicial a las propiedades de los objetos gráficos individuales.  Los
1318 objetos gráficos también tienen propiedades, que reciben nombres en el
1319 estilo de Scheme, con @code{palabras-con-guiones}.  Los valores de las
1320 propiedades de objetos gráficos cambian durante el proceso de
1321 formateo: el formateo básicamente consiste en calcular las propiedades
1322 utilizando funciones de callback.
1323
1324 @code{fontSize} es una propiedad especial: equivale a escribir
1325 @code{\override ... #'font-size} para todos los objetos pertinentes.
1326 Al ser éste un cambio muy común, se creó la propiedad especial
1327 (modificada con @code{\set}).
1328
1329
1330 @node Objects connected to the input
1331 @subsection Objects connected to the input
1332
1333 @funindex \tweak
1334
1335 En ocasiones es posible tomar un atajo para realizar el ajuste fino de
1336 los objetos gráficos.  Para objetos que reusultan directamente de un
1337 elemento de código de la entrada, puede usar la función @code{\tweak},
1338 por ejemplo
1339
1340 @lilypond[relative=2,fragment,verbatim,ragged-right]
1341 <
1342   c
1343   \tweak #'color #red d
1344   g
1345   \tweak #'duration-log #1  a
1346 >4-\tweak #'padding #10 -.
1347 @end lilypond
1348
1349 Como podemos ver, las propiedades se establecen directamente dentro de
1350 los objetos, sin hacer mención al nombre del grob ni al contexto en el
1351 que se tendría que aplicar.
1352
1353 Esta técnica sólo funciona para los objetos que están conectados
1354 directamente a un @rinternals{Event} (evento) del texto de entrada,
1355 por ejemplo
1356
1357 @itemize
1358 @item cabezas de nota, producidas por chord-pitch (p. ej.: las notas de un acorde)
1359 @item signos de articulación, producidos por instrucciones de articulación
1360 @end itemize
1361
1362 Posiblemente no funcione para plicas y alteraciones accidentales
1363 (éstos están producidos por parte de las cabezas de nota, no por los
1364 eventos musicales) ni para las claves (éstos no están producidos por
1365 ninguna entrada musical, sino más bien a causa de un cambio en el
1366 valor de una propiedad).
1367
1368 Existen muy pocos objetos que estén conectados @emph{directamente} al
1369 resultado de salida.  Una nota normal (como @code{c4}) no está
1370 conectada directamente a la salida, así que
1371
1372 @example
1373 \tweak #'color #red c4
1374 @end example
1375
1376 @noindent
1377 no cambia el color.  Consulte @ref{Displaying music expressions} para
1378 ver más detalles.
1379
1380
1381 @node Common properties
1382 @section Common properties
1383
1384 @menu
1385 * Controlling visibility of objects::  
1386 * Line styles::                 
1387 * Rotating objects::            
1388 * Aligning objects::            
1389 @end menu
1390
1391 @node Controlling visibility of objects
1392 @subsection Controlling visibility of objects
1393
1394
1395 @node Line styles
1396 @subsection Line styles
1397
1398 Ciertas indicaciones de ejecución, p.ej., @i{rallentando},
1399 @i{accelerando} y los @i{trinos} se escriben como texto y se extienden
1400 sobre muchos compases mediante líneas, a veces punteadas u onduladas.
1401
1402 Todos ellos usan las mismas rutinas que el glissando para dibujar los textos y las líneas,
1403 y por ello el ajuste fino de su comportamiento se hace de la
1404 misma manera. Se hace con un spanner (un objeto de extensión), y la rutina responsable
1405 de dibujar los objetos de extensión es @code{ly:line-interface::print}. Esta
1406 rutina determina la colocación exacta de los dos @i{extremos del
1407 objeto de extensión} y dibuja una línea entre ellos, en el estilo solicitado.
1408
1409 He aquí un ejemplo de los distintos estilos de línea disponibles, y cómo
1410 aplicarles ajustes finos.
1411
1412 @lilypond[relative=2,ragged-right,verbatim,fragment]
1413 d2 \glissando d'2
1414 \once \override Glissando #'style = #'dashed-line
1415 d,2 \glissando d'2
1416 \override Glissando #'style = #'dotted-line
1417 d,2 \glissando d'2
1418 \override Glissando #'style = #'zigzag
1419 d,2 \glissando d'2
1420 \override Glissando #'style = #'trill
1421 d,2 \glissando d'2
1422 @end lilypond
1423
1424 La información que determina los puntos extremos se calcula al vuelo
1425 para cada objeto gráfico, pero es posible sobreescribirlos.
1426
1427 @lilypond[relative=2,ragged-right,verbatim,fragment]
1428 e2 \glissando f
1429 \once \override Glissando #'bound-details #'right #'Y = #-2
1430 e2 \glissando f
1431 @end lilypond
1432
1433 El objeto @code{Glissando}, como cualquier otro que use la rutina
1434 @code{ly:line-interface::print}, conlleva una lista asociativa
1435 anidada. En la instrucción anterior, el valor de @code{Y}
1436 se establece a @code{-2} para la lista asociativa correspondiente al extremo final de la
1437 derecha. Por supuesto, también es posible ajustar el extremo de la izquierda con
1438 @code{left} en vez de @code{right}.
1439
1440 Si no se establece el valor de @code{Y}, se calcula a partir de la posición
1441 vertical del punto de anclaje derecho del objeto de extensión.
1442
1443 En el caso de un salto de línea, los valores de los puntos extremos se extienden
1444 con los contenidos de las sublistas @code{left-broken} y @code{right-broken},
1445 por ejemplo
1446
1447 @lilypond[relative=2,ragged-right,verbatim,fragment]
1448 \override Glissando #'breakable = ##T 
1449 \override Glissando #'bound-details #'right-broken #'Y = #-3
1450 c1 \glissando \break
1451 f1
1452 @end lilypond
1453
1454 Las siguientes propiedades se pueden usar para el ajuste fino de los objetos de extensión:
1455
1456 @table @code
1457 @item Y
1458 Establece la coordenada Y del punto extremo, en espacios de pentagrama.  Por
1459 omisión, es el centro del objeto con que enlaza.  Así, para un glissando
1460 apuntaría al centro vertical de la cabeza de la nota.
1461
1462 Para objetos de extensión horizontales, como el de texto y los trinos, tiene el valor
1463 fijo de cero.
1464
1465 @item attach-dir
1466 Determina el lugar donde la línea comienza y acaba en la dirección X,
1467 relativo al objeto al que se enlaza.  Así, un valor de @code{-1} (o
1468 @code{LEFT}) hace que la línea comience o acabe en el lado izquierdo de la cabeza de la nota
1469 a la que el objeto se encuentra adjuntado.
1470
1471 @item X
1472 Es la coordenada absoluta del extremo final. Normalmente
1473 se calcula al vuelo y no tiene mucho sentido sobreescribirlo.
1474
1475 @item stencil
1476 Los objetos extensores de línea pueden tener símbolos al principio o al final, que se encuentra contenido
1477 dentro de esta subpropiedad.  Es para uso interno y se recomienda
1478 usar @code{text}.
1479
1480 @item text
1481 Es un elemento de marcado que se evalúa para generar la propiedad stencil anterior. Se usa
1482 para poner @i{cresc.} y @i{tr} sobre los objetos de extensión horizontales.
1483
1484 @lilypond[quote,ragged-right,fragment,relative=2,verbatim]
1485 \override TextSpanner #'bound-details #'left #'text
1486    = \markup { \small \bold Slower }
1487 c2\startTextSpan b c a\stopTextSpan
1488 @end lilypond
1489
1490 @item stencil-align-dir-y
1491 @item stencil-offset
1492 Sin un valor establecido para esto, el stencil se coloca simplemente sobre el extremo del final,
1493 tal y como se encuentra definido por las subpropiedades @code{X} e @code{Y}.
1494 La asignación de un valor para @code{stencil-align-dir-y} o para @code{stencil-offset}
1495 desplaza el símbolo del extremo de forma relativa al extremo de la línea
1496
1497 @lilypond[relative=1,fragment,verbatim]
1498 \override TextSpanner #'bound-details #'left #'stencil-align-dir-y = #DOWN
1499 \override TextSpanner #'bound-details #'right #'stencil-align-dir-y = #UP
1500
1501 \override TextSpanner #'bound-details #'left #'text = #"gggg"
1502 \override TextSpanner #'bound-details #'right #'text = #"hhhh"
1503 c4^\startTextSpan c c c \stopTextSpan
1504 @end lilypond
1505
1506 @item arrow (flecha)
1507 El establecimiento de esta subpropiedad al valor de @code{#t} produce una cabeza de flecha al final de la
1508 línea.
1509
1510 @item padding (relleno)
1511 Esta subpropiedad controla el espacio entre el punto extremo de la línea especificado
1512 y el extremo real.  Sin relleno, un glissando empezaría
1513 y acabaría en el centro de las cabezas de las notas.
1514
1515 @end table
1516
1517 La función musical \endSpanners termina los objetos de extensión y los
1518 reguladores después de una nota exactamente.
1519
1520 @lilypond[verbatim,quote,ragged-right,relative=2,fragment]
1521 \endSpanners
1522 c2 \startTextSpan c2
1523 c2 \< c2
1524 @end lilypond
1525
1526 Al utilizar \endSpanners no es necesario cerrar \startTextSpan con
1527 \stopTextSpan, ni tampoco cerrar los reguladores con \!.
1528
1529 @seealso
1530
1531 Referencia del programa:
1532 @rinternals{TextSpanner},
1533 @rinternals{Glissando},
1534 @rinternals{VoiceFollower},
1535 @rinternals{TrillSpanner},
1536 @rinternals{line-spanner-interface}.
1537
1538 Ejemplos:
1539 @lsr{expressive,line-styles.ly},
1540 @lsr{expressive,line-arrows.ly}.
1541
1542
1543 @node Rotating objects
1544 @subsection Rotating objects
1545
1546 @node Aligning objects
1547 @subsection Aligning objects
1548
1549
1550 @node Advanced tweaks
1551 @section Advanced tweaks
1552
1553 @menu
1554 * Vertical grouping of grobs::  
1555 * Modifying ends of spanners::  
1556 * Modifying stencils::          
1557 @end menu
1558
1559
1560
1561
1562 @node Vertical grouping of grobs
1563 @subsection Vertical grouping of grobs
1564
1565 Los grobs (objetos gráficos) @code{VerticalAlignment} y
1566 @code{VerticalAxisGroup} trabajan de manera coordinada.
1567 @code{VerticalAxisGroup} agrupa distintos grobs como @code{Staff},
1568 @code{Lyrics}, etc.  Después, @code{VerticalAlignment} alinea los
1569 distintos grobs agrupados previamente por @code{VerticalAxisGroup}.
1570 Normalmente sólo existe un @code{VerticalAlignment} por cada
1571 partitura, pero cada @code{Staff}, @code{Lyrics}, etc. tiene su propio
1572 @code{VerticalAxisGroup}.
1573
1574
1575 @node Modifying ends of spanners
1576 @subsection Modifying ends of spanners
1577
1578
1579 @node Modifying stencils
1580 @subsection Modifying stencils
1581
1582 @node old The \override command
1583 @section old The @code{\override} command
1584
1585 UNTRANSLATED NODE: IGNORE ME
1586
1587 @node Discussion of specific tweaks
1588 @section Discussion of specific tweaks
1589
1590 UNTRANSLATED NODE: IGNORE ME
1591
1592 @menu
1593 * old Contexts explained::      
1594 @end menu
1595
1596 @node old Contexts explained
1597 @subsection old Contexts explained
1598
1599 UNTRANSLATED NODE: IGNORE ME
1600