]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/es/user/changing-defaults.itely
Update translated docs internalsref -> rinternals
[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: 2c2b739a8f4c1998ffb6423d1d73350426ec59be
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 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.
23
24
25 @cindex Referencia de funcionamiento interno
26
27 Los controles disponibles para los ajustes finos se describen en un documento
28 separado, 
29 @iftex
30 el Manual de referencia de funcionamiento interno.
31 @end iftex
32 @ifnottex
33 la @ref{Top,Referencia de funcionamiento interno,,lilypond-internals}.
34 @end ifnottex
35 Dicho manual
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.
41
42 Hay cuatro áreas en las que se pueden cambiar los valores por defecto:
43
44 @itemize
45 @item
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.
48
49 @item
50 Salida: cambiar el aspecto de los objetos individuales.
51 Por ejemplo, cambiar las direcciones de las plicas o la situación exacta de
52 los subíndices.
53
54 @item
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.
57
58 @item
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}.
62 @end itemize
63
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.}
70
71
72 @menu
73 * Interpretation contexts::     
74 * The \override command::       
75 @end menu
76
77
78 @node Interpretation contexts
79 @section Interpretation contexts
80
81 Esta sección explica qué son los contextos y cómo modificarlos.
82
83 @menu
84 * Contexts explained::          
85 * Creating contexts::           
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::       
91 * Aligning contexts::           
92 * Vertical grouping of grobs::  
93 @end menu
94
95
96 @node Contexts explained
97 @subsection Contexts explained
98
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:
101
102 @lilypond[quote,verbatim,relative=2,fragment]
103 cis4 cis2. g4
104 @end lilypond
105
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.
115
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}.
121
122 @quotation
123 @sourceimage{context-example,5cm,,}
124 @end quotation
125
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}.
132
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}
136 y @code{Staff}.
137
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.
145
146
147 En la referencia del programa se encuentra una descripción completa de todos los contextos que están disponibles,
148 consulte
149 @ifhtml
150 @rinternals{Contexts}.
151 @end ifhtml
152 @ifnothtml
153 Traducción @expansion{} Contexto.
154 @end ifnothtml
155
156 @c [TODO: describe propagation]
157
158
159 @node Creating contexts
160 @subsection Creating contexts
161
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.
165
166 @itemize
167
168 @item
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
171
172 @funindex \new
173 @cindex nuevos, contextos
174 @cindex Contexto, creación de
175
176 @example
177 \new @var{tipo} @var{expresión_musical}
178 @end example
179
180 @noindent
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.
184
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
187 @code{\new Staff}.
188
189 @lilypond[quote,verbatim,relative=2,ragged-right,fragment]
190 <<
191   \new Staff { c4 c }
192   \new Staff { d4 d }
193 >>
194 @end lilypond
195
196 La instrucción @code{\new} puede también dar nombre al contexto,
197
198 @example
199 \new @var{tipo} = @var{identificador} @var{música}
200 @end example
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.
203
204
205 @funindex \context
206
207 @item
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
210 es
211
212 @example
213 \context @var{tipo} = @var{identificador} @var{música}
214 @end example
215
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
221
222 @example
223 \context Voice = "@b{tenor}" @var{música}
224 @end example
225
226 @noindent
227 de forma que los textos se puedan alienar correctamente con sus notas,
228
229 @example
230 \new Lyrics \lyricsto "@b{tenor}" @var{letra}
231 @end example
232
233 @noindent
234
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,
238
239 @example
240 musica = @{ c4 c4 @}
241 decoracion = @{ s4-. s4-> @}
242 @end example
243
244 se combinan enviando los dos al mismo contexto @code{Voice},
245
246 @example
247 <<
248   \new Staff \context Voice = "A" \musica
249   \context Voice = "A" \decoracion
250 >>
251 @end example
252 @lilypond[quote,ragged-right]
253 music = { c4 c4 }
254 arts = { s4-. s4-> }
255 \relative c'' <<
256   \new Staff \context Voice = "A" \music
257   \context Voice = "A" \arts
258 >>
259 @end lilypond
260
261 Con este mecanismo, es posible definir un Urtext (una edición
262 original), con la posibilidad de poner articulaciones distintas sobre las
263 mismas notas.
264
265 @cindex crear contextos
266
267 @item
268 La tercera instrucción para crear contextos es
269 @example
270 \context @var{tipo} @var{música}
271 @end example
272
273
274 @noindent
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.
277
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}
282
283 @example
284 \applyOutput #'@var{contexto} #@var{función}   % aplicar al contexto Voice
285 @end example
286
287 Para que se interprete dentro de los niveles de @code{Score} o @code{Staff}, utilice las siguientes
288 formas:
289
290 @example
291 \applyOutput #'Score #@var{función}
292 \applyOutput #'Staff #@var{función}
293 @end example
294
295 @end itemize
296
297
298 @node Changing context properties on the fly
299 @subsection Changing context properties on the fly
300
301 @cindex properties
302 @funindex \set
303 @cindex changing properties
304
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,
308
309 @example
310 \set @var{contexto}.@var{propiedad} = #@var{valor}
311 @end example
312
313 Por ejemplo,
314 @lilypond[quote,verbatim,relative=2,fragment]
315 R1*2
316 \set Score.skipBars = ##t
317 R1*2
318 @end lilypond
319
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.
323
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,
327
328 @lilypond[quote,verbatim,relative=2,fragment]
329 c8 c c c
330 \set autoBeaming = ##f
331 c8 c c c
332 @end lilypond
333
334 @noindent
335 el argumento @var{contexto} para la instrucción @code{\set} está omitido, por tanto
336 el barrado automático está desactivado en la @rinternals{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
340 efecto.
341
342 @lilypond[quote,verbatim,relative=2,fragment]
343 R1*2
344 \set skipBars = ##t
345 R1*2
346 @end lilypond
347
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
352 grupo de corcheas.
353
354 @funindex \unset
355
356 También existe una instrucción @code{\unset},
357 @example
358 \unset @var{contexto}.@var{propiedad}
359 @end example
360
361 @noindent
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
364
365 @example
366 \set Staff.autoBeaming = ##f
367 @end example
368
369 @noindent
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,
372
373 @example
374 \unset Voice.autoBeaming
375 @end example
376
377 @noindent
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}
381 requiere
382 @example
383 \unset Staff.autoBeaming
384 @end example
385
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
388
389 @example
390 \set Voice.autoBeaming = ##t
391 \set autoBeaming = ##t
392 @end example
393
394 @noindent
395 son equivalentes.
396
397
398 @cindex \once
399 Los ajustes que se quieren aplicar a un paso de tiempo único se pueden escribir
400 con @code{\once}, por ejemplo en
401
402 @lilypond[quote,verbatim,relative=2,fragment]
403 c4
404 \once \set fontSize = #4.7
405 c4
406 c4
407 @end lilypond
408
409 la propiedad @code{fontSize} pierde su valor automáticamente después de la segunda
410 nota.
411
412 En la referencia del programa hay una descripción detallada de todas las propiedades de contexto disponibles,
413 véase
414 @ifhtml
415 @rinternals{Tunable context properties}.
416 @end ifhtml
417 @ifnothtml
418 Traducción @expansion{} propiedades de contexto ajustables.
419 @end ifnothtml
420
421
422 @node Modifying context plug-ins
423 @subsection Modifying context plug-ins
424
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).
431
432 Para ver una descripción completa de cada uno de los añadidos, consulte
433 @ifhtml
434 @rinternals{Engravers}.
435 @end ifhtml
436 @ifnothtml
437 Referencia del programa @expansion Traducción @expansion{} Grabadores.
438 @end ifnothtml
439 cada uno de los contextos descritos en
440 @ifhtml
441 @rinternals{Contexts}
442 @end ifhtml
443 @ifnothtml
444 Referencia del programa @expansion Traducción @expansion{} Contexto.
445 @end ifnothtml
446 relaciona los grabadores utilizados para ese contexto.
447
448
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
451 modificándolo,
452
453 @funindex \with
454
455 @example
456 \new @var{contexto} \with @{
457   \consists @dots{}
458   \consists @dots{}
459   \remove @dots{}
460   \remove @dots{}
461   @emph{etc.}
462 @}
463 @{
464   @emph{..música..}
465 @}
466 @end example
467
468 @noindent
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},
472
473 @lilypond[quote,relative=1,verbatim,fragment]
474 <<
475   \new Staff {
476     f2 g
477   }
478   \new Staff \with {
479      \remove "Time_signature_engraver"
480      \remove "Clef_engraver"
481   } {
482     f2 g2
483   }
484 >>
485 @end lilypond
486
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{Further tweaking}.
492
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.
500
501 @cindex polimétricas, partituras
502 @cindex Indicaciones de compás, varias
503
504 @lilypond[quote,relative=1,ragged-right,verbatim,fragment]
505 \new Score \with {
506   \remove "Timing_translator"
507   \remove "Default_bar_line_engraver"
508 } <<
509   \new Staff \with {
510     \consists "Timing_translator"
511     \consists "Default_bar_line_engraver"
512   } {
513       \time 3/4
514       c4 c c c c c
515   }
516   \new Staff \with {
517     \consists "Timing_translator"
518     \consists "Default_bar_line_engraver"
519   } {
520        \time 2/4
521        c4 c c c c c
522   }
523 >>
524 @end lilypond
525
526
527 @node Layout tunings within contexts
528 @subsection Layout tunings within contexts
529
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
533 objetos.
534
535 La sintaxis de esto es
536
537 @example
538 \override @var{contexto}.@var{nombre} #'@var{propiedad} = #@var{valor}
539 @end example
540
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.
547
548 La instrucción
549
550 @verbatim
551 \override Staff.Stem #'thickness = #4.0
552 @end verbatim
553
554 @noindent
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:
559
560 @lilypond[quote,verbatim,relative=2,fragment]
561 c4
562 \override Staff.Stem #'thickness = #4.0
563 c4
564 c4
565 c4
566 @end lilypond
567
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.
571
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.
575
576 @lilypond[quote,fragment,verbatim,relative=2]
577 c4
578 \once \override Stem #'thickness = #4.0
579 c4
580 c4
581 @end lilypond
582
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,
587
588 @lilypond[quote,fragment,verbatim,relative=2]
589 \override Slur #'thickness = #3.0
590 c8[( c
591 \override Beam #'thickness = #0.6
592 c8 c])
593 @end lilypond
594
595 @noindent
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.
598
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.
603
604 @example
605 \override Voice.Stem #'thickness = #4.0
606 \revert Staff.Stem #'thickness
607 @end example
608
609 Algunas opciones trucables reciben el nombre de @q{subpropiedades} y residen dentro de las
610 propiedades.  Para trucarlas, utilice órdenes de la forma
611
612 @c leave this as a long long
613 @example
614 \override @var{contexto}.@var{nombre} #'@var{propiedad} #'@var{subpropiedad} = #@var{valor}
615 @end example
616
617 @noindent
618 tal y como
619
620 @example
621 \override Stem #'details #'beamed-lengths = #'(4 4 3)
622 @end example
623
624
625 @seealso
626
627 Funcionamiento interno: @rinternals{OverrideProperty}, @rinternals{RevertProperty},
628 @rinternals{PropertySet}, @rinternals{Backend} y
629 @rinternals{All layout objects}.
630
631
632 @knownissues
633
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.
637
638
639 @node Changing context default settings
640 @subsection Changing context default settings
641
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},
646
647 @example
648 \layout @{
649   @dots{}
650   \context @{
651     \Staff
652
653     \set fontSize = #-2
654     \override Stem #'thickness = #4.0
655     \remove "Time_signature_engraver"
656   @}
657 @}
658 @end example
659
660 La orden @code{\Staff} saca la definición existente del contexto de
661 pentagrama de manera que pueda ser modificada.
662
663 Las instrucciones
664 @example
665 \set fontSize = #-2
666 \override Stem #'thickness = #4.0
667 \remove "Time_signature_engraver"
668 @end example
669
670 @noindent
671 afectan a todos los pentagramas de la partitura.  Otros contextos se pueden modificar de forma
672 análoga.
673
674 La palabra clave @code{\set} es opcional dentro del bloque @code{\layout}, y así:
675
676 @example
677 \context @{
678   @dots{}
679   fontSize = #-2
680 @}
681 @end example
682
683 @noindent
684 también funciona.
685
686
687
688 @knownissues
689
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.
692
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
697
698 @example
699 \layout @{
700   \context @{
701     \RemoveEmptyStaffContext
702
703     \override Stem #'thickness = #4.0
704   @}
705 @}
706 @end example
707
708
709 @node Defining new contexts
710 @subsection Defining new contexts
711
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.
715
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,
720
721 @c KEEP LY
722 @lilypond[quote,ragged-right]
723 \layout { \context {
724   \name ImproVoice
725   \type "Engraver_group"
726   \consists "Note_heads_engraver"
727   \consists "Text_engraver"
728   \consists Pitch_squash_engraver
729   squashedPosition = #0
730   \override NoteHead #'style = #'slash
731   \override Stem #'transparent = ##t
732   \alias Voice
733 }
734 \context { \Staff
735   \accepts "ImproVoice"
736 }}
737
738 \relative c'' {
739   a4 d8 bes8 \new ImproVoice { c4^"ad lib" c
740    c4 c^"desvístete" c_"mientras juegas :)" c }
741   a1
742 }
743 @end lilypond
744
745
746 Estos ajustes se definen dentro de un bloque @code{\context} que a su vez está dentro de un bloque
747 @code{\layout},
748
749 @example
750 \layout @{
751   \context @{
752     @dots{}
753   @}
754 @}
755 @end example
756
757 En el siguiente análisis, la entrada de ejemplo que se muestra debe ir en el lugar de
758 los puntos suspensivos @dots{} del fragmento anterior.
759
760 En primer lugar es necesario definir un nombre para el nuevo contexto:
761
762 @example
763 \name ImproVoice
764 @end example
765
766 Debido a que es parecido al contexto @code{Voice}, queremos órdenes que funcionen sobre
767 contextos de @code{Voice} (existentes) para que siga funcionando.  Esto se consigue dando al
768 contexto nuevo un alias @code{Voice},
769
770 @example
771 \alias Voice
772 @end example
773
774 El contexto imprimirá notas y textos explicativos, por ello tenemos que añadir los
775 grabadores que aportan esta funcionalidad,
776
777 @example
778 \consists Note_heads_engraver
779 \consists Text_engraver
780 @end example
781
782 Pero sólo necesitamos esto en la línea central,
783
784 @example
785 \consists Pitch_squash_engraver
786 squashedPosition = #0
787 @end example
788
789 El grabador @rinternals{Pitch_squash_engraver} modifica las cabezas de nota (creadas
790 por el grabador @rinternals{Note_heads_engraver}) y establece sus posiciones verticales
791 al valor de @code{squashedPosition}, en este caso@tie{}@code{0},
792 la línea central.
793
794 Las notas parecen barras inclinadas y no tienen plica,
795
796 @example
797 \override NoteHead #'style = #'slash
798 \override Stem #'transparent = ##t
799 @end example
800
801 Todos estos añadidos tienen que cooperar, y esto se consigue con un añadido especial,
802 que se debe marcar con la palabra clave @code{\type}.
803 Este será siempre @rinternals{Engraver_group},
804
805 @example
806 \type "Engraver_group"
807 @end example
808
809 Al juntarlo todo, obtenemos
810
811 @example
812 \context @{
813   \name ImproVoice
814   \type "Engraver_group"
815   \consists "Note_heads_engraver"
816   \consists "Text_engraver"
817   \consists Pitch_squash_engraver
818   squashedPosition = #0
819   \override NoteHead #'style = #'slash
820   \override Stem #'transparent = ##t
821   \alias Voice
822 @}
823 @end example
824
825 @funindex \accepts
826 Los contextos dan lugar a jerarquías.  Queremos colgar el contexto @code{ImproVoice}
827 bajo el contexto @code{Staff}, como simples @code{Voice}s normales.  Por tanto, modificamos
828 la definición de @code{Staff} con la instrucción
829 @code{\accepts} (acepta),
830
831 @example
832 \context @{
833   \Staff
834   \accepts ImproVoice
835 @}
836 @end example
837
838 @funindex \denies
839 Lo opuesto a @code{\accepts} (acepta) es @code{\denies} (deniega),
840 lo que a veces se necesita cuando se están reutilizando definiciones de contexto existentes.
841
842 Ponemos ambos dentro de un bloque @code{\layout}, como
843
844 @example
845 \layout @{
846   \context @{
847     \name ImproVoice
848     @dots{}
849   @}
850   \context @{
851     \Staff
852     \accepts "ImproVoice"
853   @}
854 @}
855 @end example
856
857 Así pues, la salida que aparece al comienzo de esta sub-sección se puede escribir como
858
859 @example
860 \relative c'' @{
861   a4 d8 bes8
862   \new ImproVoice @{
863     c4^"ad lib" c
864     c4 c^"undress"
865     c c_"while playing :)"
866   @}
867   a1
868 @}
869 @end example
870
871
872 @node Aligning contexts
873 @subsection Aligning contexts
874
875 Los contextos nuevos se pueden alinear por encima o por debajo de otros contextos existentes.  Esto
876 podría ser de utilidad al preparar un pentagrama vocal (@rlearning{Vocal ensembles}) y
877 un ossia,
878
879 ARREGLAR: esta sección no funciona en PDF. (¿?)
880
881 @cindex ossia
882 @findex alignAboveContext
883 @findex alignBelowContext
884
885 @lilypond[quote,ragged-right]
886 ossia = { f4 f f f }
887 \score{
888   \relative c' \new Staff = "main" {
889     c4 c c c
890     <<
891       \new Staff \with {alignAboveContext=main} \ossia
892       { d8 f d f d f d f }
893     >>
894   }
895 }
896 @end lilypond
897
898
899 @node Vertical grouping of grobs
900 @subsection Vertical grouping of grobs
901
902 Los grobs (objetos gráficos) VerticalAlignment y VerticalAxisGroup funcionan juntos.
903 VerticalAxisGroup agrupa distintos objetos gráficos como Staff, Lyrics,
904 etc.  VerticalAlignment por su parte alinea verticalmente los diferentes objetos gráficos
905 agrupados por VerticalAxisGroup.  Normalmente hay solamente un
906 VerticalAlignment por cada partitura, pero cada Staff, Lyrics, etc. tiene su propio
907 VerticalAxisGroup. 
908
909
910 @node The \override command
911 @section The @code{\override} command
912
913 En la sección anterior ya hemos tocado una orden que
914 modifica los detalles de la presentación: la instrucción @code{\override}.  En esta sección
915 observaremos con mayor detalle la manera de usar esta orden en la práctica.  La
916 sintaxis general de esta orden es:
917
918 @example
919 \override @var{contexto}.@var{objeto_de_presentación} #'@var{propiedad_de_presentación} = #@var{valor}
920 @end example
921
922 Así establecemos la @var{propiedad_de_presentación} del @var{objeto_de_presentación} especificado,
923 que es miembro del @var{contexto}, al @var{valor} que se indica.
924
925 @menu
926 * Constructing a tweak::        
927 * Navigating the program reference::  
928 * Layout interfaces::           
929 * Determining the grob property::  
930 * Objects connected to the input::  
931 * Using Scheme code instead of \tweak::  
932 * \set versus \override::       
933 * Difficult tweaks::            
934 @end menu
935
936
937
938 @node Constructing a tweak
939 @subsection Constructing a tweak
940
941 Las instrucciones que cambian la salida generalmente tienen la forma
942
943 @example
944 \override Voice.Stem #'thickness = #3.0
945 @end example
946
947 @noindent
948 Para construir este ajuste debemos primero averiguar estos datos:
949
950 @itemize
951 @item el contexto: aquí @code{Voice} (voz).
952 @item el objeto de presentación: aquí @code{Stem} (plica).
953 @item la propiedad de presentación: aquí @code{thickness} (grosor).
954 @item un valor: aquí @code{3.0}.
955 @end itemize
956
957 Ciertas opciones ajustables se llaman @q{subpropiedades} y residen en el interior
958 de las propiedades.  Para trucarlas, utilice órdenes de la forma
959
960 @example
961 \override Stem #'details #'beamed-lengths = #'(4 4 3)
962 @end example
963
964 @cindex documentación interna
965 @cindex buscar objetos gráficos
966 @cindex gráficos, descripciones de los objetos
967 @cindex trucar
968 @funindex \override
969 @cindex interna, documentación
970
971 Para muchas propiedades, independientemente del tipo de datos de la propiedad, el establecimiento del valor de la
972 propiedad a Falso ( @code{##f} ) dará como resultado su apagado o desactivación, haciendo que
973 Lilypond ignore por completo dicha propiedad.  Esto es especialmente útil para
974 desactivar propiedades de objetos gráficos que, de otro modo, podrían causar problemas.
975
976 Explicaremos a continuación cómo extraer esta información del manual de notación y de la
977 referencia del programa.
978
979
980
981
982 @node Navigating the program reference
983 @subsection Navigating the program reference
984
985 Supongamos que queremos mover la indicación de digitación del fragmento
986 siguiente:
987
988 @lilypond[quote,fragment,relative=2,verbatim]
989 c-2
990 \stemUp
991 f
992 @end lilypond
993
994 Si hace una visita a la documentación en busca de instrucciones de digitación (en
995 @ref{Fingering instructions}), encontrará:
996
997 @quotation
998 @seealso
999
1000 Referencia de funcionamiento interno: @rinternals{Fingering}.
1001
1002 @end quotation
1003
1004
1005 @c  outdated info; probably will delete.
1006 @ignore
1007 This fragment points to two parts of the program reference: a page
1008 on @code{FingerEvent} and one on @code{Fingering}.
1009
1010 The page on @code{FingerEvent} describes the properties of the music
1011 expression for the input @code{-2}.  The page contains many links
1012 forward.  For example, it says
1013
1014 @quotation
1015 Accepted by: @rinternals{Fingering_engraver},
1016 @end quotation
1017
1018 @noindent
1019 That link brings us to the documentation for the Engraver, the
1020 plug-in, which says
1021
1022 @quotation
1023 This engraver creates the following layout objects: @rinternals{Fingering}.
1024 @end quotation
1025 In other words, once the @code{FingerEvent}s are interpreted, the
1026 @code{Fingering_engraver} plug-in will process them.
1027 @end ignore
1028
1029 @ignore
1030 @c  I can't figure out what this is supposed to mean.  -gp
1031
1032 The @code{Fingering_engraver} is also listed to create
1033 @rinternals{Fingering} objects,
1034
1035 @c  old info?  it doesn't make any sense to me with our current docs.
1036 This is also the
1037 second bit of information listed under @b{See also} in the Notation
1038 manual.
1039 @end ignore
1040
1041 @ifnothtml
1042 La referencia del programador se encuentra disponible en forma de documento HTML.  Se recomienda
1043 mucho que lo lea en la forma HTML, bien en línea o bien
1044 descargando los archivos de la documentación HTML.  Esta sección sería mucho más difícil de entender
1045 si está utilizando el manual en
1046 formato PDF.
1047 @end ifnothtml
1048
1049 Siga el enlace que lleva a @rinternals{Fingering}.  Al principio de la página,
1050 puede ver
1051
1052 @quotation
1053 Los objetos de digitación se crean por parte de: @rinternals{Fingering_engraver} y
1054 @rinternals{New_fingering_engraver}.
1055 @end quotation
1056
1057 Siguiendo los enlaces relacionados dentro de la referencia del programa, podemos seguir el
1058 flujo de información dentro del programa:
1059
1060 @itemize
1061
1062 @item @rinternals{Fingering}:
1063 los objetos @rinternals{Fingering} se crean por parte de:
1064 @rinternals{Fingering_engraver}
1065
1066 @item @rinternals{Fingering_engraver}:
1067 Tipos de música aceptados: @rinternals{fingering-event}
1068
1069 @item @rinternals{fingering-event}:
1070 El tipo de evento musical @code{fingering-event} está descrito en Expresiones musicales con el nombre de
1071 @rinternals{FingerEvent}
1072 @end itemize
1073
1074 Este camino se recorre en contra de la corriente de información del programa: comienza
1075 por la salida y acaba en el evento de entrada.  También podríamos haber
1076 empezado por un evento de la entrada, y leído siguiendo el flujo de información
1077 terminando en su caso en el objeto (u objetos) de la salida.
1078
1079 La referencia del programa también se puede examinar como un documento normal.  Contiene
1080 capítulos que tratan de
1081 @ifhtml
1082 @rinternals{Music definitions},
1083 @end ifhtml
1084 @ifnothtml
1085 @code{Music definitions}
1086 @end ifnothtml
1087 de la @rinternals{Translation}, y del @rinternals{Backend}.  Cada uno de los capítulos
1088 relaciona todas las definiciones utilizadas y todas las propiedades que se pueden
1089 ajustar.
1090
1091
1092 @node Layout interfaces
1093 @subsection Layout interfaces
1094
1095 @cindex interfaz de la presentación
1096 @cindex presentación, interfaz de la
1097 @cindex grob
1098
1099 La página HTML que pudimos ver en la sección anterior describe el
1100 objeto de presentación llamado @rinternals{Fingering}.  Dicho objeto es un
1101 símbolo dentro de la partitura.  Tiene propiedades que guardan números (como
1102 grosores y direcciones), pero también punteros a objetos relacionados.  Un
1103 objeto de presentación también se llama un @emph{Grob}, que es una abreviatura de Graphical
1104 Object (objeto gráfico).  Para ver más detalles acerca de los objetos gráficos o Grobs, consulte @rinternals{grob-interface}.
1105
1106 La página dedicada a @code{Fingering} relaciona las definiciones del objeto
1107 @code{Fingering}.  Por ejemplo, la página dice
1108
1109 @quotation
1110 @code{relleno} (dimensión, en espacios de pentagrama):
1111
1112 @code{0.5}
1113 @end quotation
1114
1115 @noindent
1116 lo que significa que el número se mantendrá a una distancia de al menos 0.5
1117 de la cabeza de la nota.
1118
1119
1120 Cada objeto de presentación puede tener varias funciones como elemento notacional o
1121 tipográfico.  Por ejemplo, el objeto de digitación Fingering tiene
1122 los siguientes aspectos
1123
1124 @itemize
1125 @item
1126 Su tamaño es independiente del espaciado horizontal, al contrario de las ligaduras o las barras de las figuras.
1127
1128 @item
1129 Es un elemento de texto.  Casi seguro que es un texto muy corto.
1130
1131 @item
1132 este elemento de texto se tipografía con un tipo de letra, no como las ligaduras o las barras de las figuras.
1133
1134 @item
1135 Horizontalmente, el centro del símbolo se debe alinear con el centro de la cabeza
1136 de la nota.
1137
1138 @item
1139 Verticalmente, el símbolo se coloca cerca de la nota y del pentagrama.
1140
1141 @item
1142 La posición vertical también está coordinada con otros símbolos de superíndice
1143 y de subíndice.
1144 @end itemize
1145
1146 Cada uno de estos aspectos se capta en lo que se llaman @emph{interface}s,
1147 que se relacionan al final de la página dedicada a @rinternals{Fingering}
1148
1149 @quotation
1150 Este objeto contempla los siguientes interfaces:
1151 @rinternals{item-interface},
1152 @rinternals{self-alignment-interface},
1153 @rinternals{side-position-interface}, @rinternals{text-interface},
1154 @rinternals{text-script-interface}, @rinternals{font-interface},
1155 @rinternals{finger-interface} y @rinternals{grob-interface}.
1156 @end quotation
1157
1158 Al pulsar sobre cualquiera de los enlaces nos desplazaremos a la página del respectivo interfaz del
1159 objeto.  Cada interfaz tiene un cierto número de propiedades.  Algunas de ellas
1160 no son para que el usuario las pueda ajustar (@q{Propiedades internas}), pero otras
1161 sí se pueden modificar.
1162
1163 Hemos estado hablando de @emph{el} objeto @code{Fingering}, pero realmente esto no significa
1164 mucho.  El archivo de inicialización (véase
1165 @ref{File structure})
1166 @file{scm/@/define@/-grobs@/.scm} muestra el alma del @q{objeto},
1167
1168 @example
1169 (Fingering
1170   . ((padding . 0.5)
1171      (avoid-slur . around)
1172      (slur-padding . 0.2)
1173      (staff-padding . 0.5)
1174      (self-alignment-X . 0)
1175      (self-alignment-Y . 0)
1176      (script-priority . 100)
1177      (stencil . ,ly:text-interface::print)
1178      (direction . ,ly:script-interface::calc-direction)
1179      (font-encoding . fetaNumber)
1180      (font-size . -5)           ; don't overlap when next to heads.
1181      (meta . ((class . Item)
1182      (interfaces . (finger-interface
1183                     font-interface
1184                     text-script-interface
1185                     text-interface
1186                     side-position-interface
1187                     self-alignment-interface
1188                     item-interface))))))
1189 @end example
1190
1191 @noindent
1192 Como podemos ver, el objeto @code{Fingering} no es más que un montón de
1193 valores de variables, y la página web de la Referencia de funcionamiento interno
1194 se genera directamente a partir de esta definición.
1195
1196
1197 @node Determining the grob property
1198 @subsection Determining the grob property
1199
1200 Recordemos que queríamos cambiar la posición del @b{2} en
1201
1202 @lilypond[quote,fragment,relative=2,verbatim]
1203 c-2
1204 \stemUp
1205 f
1206 @end lilypond
1207
1208 Puesto que el @b{2} se encuentra colocado verticalmente sobre su nota, tenemos que
1209 negociar con el interfaz asociado con esta colocación.  Esto se
1210 hace usando @code{side-position-interface}.  La página que describe este interface
1211 dice:
1212
1213 @quotation
1214 @code{side-position-interface}
1215
1216 Colocar un objeto víctima (este mismo) junto a otros objetos (el
1217 soporte).  La propiedad @code{direction} significa dónde poner el objeto
1218 víctima con relación al soporte (¿a la izquierda o a la derecha, encima o debajo?)
1219 @end quotation
1220
1221 @cindex relleno
1222 @noindent
1223 Debajo de esta descripción, la variable @code{padding} (relleno) se describe como
1224
1225 @quotation
1226 @table @code
1227 @item padding
1228 (dimensión, en espacios de pentagrama)
1229
1230 Añadir esta cantidad de espacio adicional entre objetos que están unos junto a otros.
1231 @end table
1232 @end quotation
1233
1234 Aumentando el valor de @code{padding}, podemos alejar
1235 la cifra de digitación de la cabeza de la nota.  La siguiente orden inserta
1236 un espacio en blanco de 3 espacios de pentagrama
1237 entre la nota y la digitación:
1238 @example
1239 \once \override Voice.Fingering #'padding = #3
1240 @end example
1241
1242 Al insertar esta instrucción antes de que se haya creado el objeto Fingering,
1243 es decir, antes del @code{c2}, llegamos al siguiente resultado:
1244
1245 @lilypond[quote,relative=2,fragment,verbatim]
1246 \once \override Voice.Fingering #'padding = #3
1247 c-2
1248 \stemUp
1249 f
1250 @end lilypond
1251
1252
1253 En este caso, el contexto de este truco es @code{Voice}.  Este
1254 hecho se puede deducir también a partir de la referencia del programa, ya que la página dedicada al
1255 añadido @rinternals{Fingering_engraver} dice
1256
1257 @quotation
1258 El grabador Fingering_engraver es parte de los contextos: @dots{} @rinternals{Voice}
1259 @end quotation
1260
1261
1262 @node Objects connected to the input
1263 @subsection Objects connected to the input
1264
1265 @funindex \tweak
1266
1267 En ocasiones es posible tomar un atajo para realizar el ajuste fino de los objetos
1268 gráficos.  Para objetos que reusultan directamente de un elemento de código de la entrada,
1269 puede usar la función @code{\tweak}, por ejemplo
1270
1271 @lilypond[relative=2,fragment,verbatim,ragged-right]
1272 <
1273   c
1274   \tweak #'color #red d
1275   g
1276   \tweak #'duration-log #1  a
1277 >4-\tweak #'padding #10 -.
1278 @end lilypond
1279
1280 Como podemos ver, las propiedades se establecen directamente dentro de los objetos,
1281 sin hacer mención al nombre del grob ni al contexto en el que se tendría que
1282 aplicar.
1283
1284 Esta técnica sólo funciona para los objetos que están conectados directamente a
1285 un @rinternals{Event} (evento) del texto de entrada, por ejemplo
1286
1287 @itemize
1288 @item cabezas de nota, producidas por chord-pitch (p. ej.: las notas de un acorde)
1289 @item signos de articulación, producidos por instrucciones de articulación
1290 @end itemize
1291
1292 Posiblemente no funcione para plicas y alteraciones accidentales (éstos están producidos
1293 por parte de las cabezas de nota, no por los eventos musicales) ni para las claves (éstos no están producidos por
1294 ninguna entrada musical, sino más bien a causa de un cambio en el valor de una propiedad).
1295
1296 Existen muy pocos objetos que estén conectados @emph{directamente} al
1297 resultado de salida.  Una nota normal (como @code{c4}) no está conectada directamente
1298 a la salida, así que
1299
1300 @example
1301 \tweak #'color #red c4
1302 @end example
1303
1304 @noindent
1305 no cambia el color.  Consulte @ref{Displaying music expressions} para ver más
1306 detalles.
1307
1308
1309 @node Using Scheme code instead of \tweak
1310 @subsection Using Scheme code instead of @code{\tweak}
1311
1312 La principal desventaja de @code{\tweak} es su inflexibilidad
1313 sintáctica.  Por ejemplo, lo siguiente produce un error de sintaxis.
1314
1315 @example
1316 F = \tweak #'font-size #-3 -\flageolet
1317
1318 \relative c'' @{
1319   c4^\F c4_\F
1320 @}
1321 @end example
1322
1323 @noindent
1324 En otras palabras, @code{\tweak} no se comporta como una articulación en lo que respecta a la
1325 sintaxis; en concreto, no se puede adjuntar mediante
1326 @code{^} y @code{_}.
1327
1328 Utilizando el lenguaje Scheme, se puede dar un rodeo a este problema.  La ruta hacia el resultado
1329 se da en @ref{Adding articulation to notes (example)},
1330 especialmente cómo usar @code{\displayMusic} como guía de ayuda.
1331
1332 @example
1333 F = #(let ((m (make-music 'ArticulationEvent
1334                           'articulation-type "flageolet")))
1335        (set! (ly:music-property m 'tweaks)
1336              (acons 'font-size -3
1337                     (ly:music-property m 'tweaks)))
1338        m)
1339  
1340 \relative c'' @{
1341   c4^\F c4_\F
1342 @}
1343 @end example
1344
1345 @noindent
1346 Aquí las propiedades @code{tweaks} del objeto de flageolet
1347 @code{m} (creado con @code{make-music}) se extraen con
1348 @code{ly:music-property}, un nuevo par clave-valor para cambiar el
1349 tamaño de la tipografía se antepone a la lista de propiedades con la función de Scheme
1350 @code{acons}, y el resultado finalmente se escribe
1351 de nuevo con @code{set!}.  El último elemento del bloque
1352 @code{let} es el valor devuelto, el propio @code{m}.
1353
1354
1355 @node \set versus \override
1356 @subsection @code{\set} vs. @code{\override}
1357
1358 Hemos visto dos formas de cambiar las propiedades: @code{\set} y
1359 @code{\override}.  De hecho, en realidad existen dos clases diferentes de
1360 propiedades.
1361
1362 Los contextos pueden tener propiedades, que por lo general reciben nombres en
1363 @code{mayúsculasDeCamello}.  Principalmente controlan la traducción
1364 de la música a la notación, p.ej. @code{localKeySignature} (para determinar
1365 si hay que imprimir las alteraciones accidentales), @code{measurePosition} (para
1366 determinar cuándo imprimir una línea divisoria).  Las propiedades de contexto pueden
1367 ver modificado su valor con el tiempo según se interpreta una pieza de música;
1368 @code{measurePosition} es un ejemplo obvio de esto.
1369 Las propiedades de contexto se modifican con @code{\set}.
1370
1371 Hay un tipo especial de propiedad de contexto: la descripción del
1372 elemento.  Estas propiedades reciben nombres en @code{MayúsculasDeCamello}
1373 (comenzando en letra mayúscula).  Contienen los
1374 @q{ajustes por defecto} para dicho elemento gráfico como una lista
1375 asociativa.  Consulte @file{scm/@/define@/-grobs@/.scm}
1376 para ver qué tipos de ajustes hay.  Las descripciones de los elementos
1377 se pueden modificar con @code{\override}.
1378
1379 Realmente, @code{\override} es un atajo;
1380
1381 @example
1382 \override @var{contexto}.@var{nombre} #'@var{propiedad} = #@var{valor}
1383 @end example
1384
1385 @noindent
1386 es más o menos equivalente a
1387
1388 @c  leave this long line -gp
1389 @example
1390 \set @var{contexto}.@var{nombre} #'@var{propiedad} = #(cons (cons '@var{propiedad} @var{valor}) <valor previo de @var{contexto})
1391 @end example
1392
1393 El valor de @code{contexto} (la lista-a) se usa para da un valor inicial
1394 a las propiedades de los objetos gráficos individuales.  Los objetos gráficos también tienen
1395 propiedades, que reciben nombres en el estilo de Scheme, con
1396 @code{palabras-con-guiones}.  Los valores de las propiedades de objetos gráficos cambian
1397 durante el proceso de formateo: el formateo básicamente consiste en
1398 calcular las propiedades utilizando funciones de callback.
1399
1400 @code{fontSize} es una propiedad especial: equivale a
1401 escribir @code{\override ... #'font-size} para todos los objetos
1402 pertinentes.  Al ser éste un cambio muy común, se creó la propiedad especial
1403 (modificada con @code{\set}).
1404
1405
1406 @node Difficult tweaks
1407 @subsection Difficult tweaks
1408
1409 Hay ciertos tipos de ajustes difíciles.
1410
1411 @itemize
1412
1413
1414 @item
1415 Un tipo de ajuste difícil es la apariencia visual de los objetos de extensión,
1416 como las ligaduras de expresión y de unión.  Inicialmente sólo se crea uno de estos objetos,
1417 y se pueden ajustar a través del mecanismo normal.  Sin embargo, en ocasiones
1418 los objetos de extensión atraviesan los saltos de línea.  Si esto ocurre, estos objetos
1419 se clonan.  Se crea un objeto separado para cada grupo de pentagramas en el que está.
1420 Son clones del objeto original y heredan todas las
1421 propiedades, incluyendo los @code{\override}s.
1422
1423
1424 En otras palabras, un @code{\override} siempre afecta a todas las piezas de un elemento de
1425 extensión roto.  Para cambiar sólo una parte del elemento de extensión  en un salto de línea,
1426 es necesario implicarse en el proceso de formateo.  La función de callback
1427 @code{after-line-breaking} contiene el procedimiento de Scheme que
1428 se llama después de que se han determinado los saltos de línea, y de que los objetos de
1429 presentación se han dividido sobre los diferentes sistemas o grupos de pentagramas.
1430
1431 En el ejemplo siguiente, definimos un procedimiento
1432 @code{my-callback}.  Este procedimiento
1433
1434 @itemize
1435 @item
1436 determina si hemos sido divididos en un salto de línea
1437 @item
1438 si es así, recupera todos los objetos divididos
1439 @item
1440 comprueba si nosotros somos el último de los objetos divididos
1441 @item
1442 si es así, establece @code{extra-offset}.
1443 @end itemize
1444
1445 Este procedimiento se instala dentro de @rinternals{Tie} (ligadura de unión), de forma que la última parte
1446 de la ligadura dividida se traslada hacia arriba.
1447
1448 @c KEEP LY
1449 @lilypond[quote,verbatim,ragged-right]
1450 #(define (my-callback grob)
1451   (let* (
1452          ; ¿el objeto se ha dividido?
1453          (orig (ly:grob-original grob))
1454
1455          ; si es así, tomar las piezas divididas (siblings)
1456          (siblings (if (ly:grob? orig)
1457                      (ly:spanner-broken-into orig) '() )))
1458
1459    (if (and (>= (length siblings) 2)
1460              (eq? (car (last-pair siblings)) grob))
1461      (ly:grob-set-property! grob 'extra-offset '(-2 . 5)))))
1462
1463 \relative c'' {
1464   \override Tie #'after-line-breaking =
1465   #my-callback
1466   c1 ~ \break c2 ~ c
1467 }
1468 @end lilypond
1469
1470 @noindent
1471 Cuando aplicamos este truco, la nueva función de callback @code{after-line-breaking}
1472 también debe llamar a la antigua @code{after-line-breaking}, si existe.
1473 Por ejemplo, si se utiliza con @code{Hairpin} (regulador),
1474 también se debe llamar a @code{ly:hairpin::after-line-breaking}.
1475
1476
1477 @item Algunos objetos no se pueden cambiar con @code{\override} por razones
1478 técnicas.  Ejemplo de ello son @code{NonMusicalPaperColumn}
1479 y @code{PaperColumn}.  Se pueden cambiar con la función
1480 @code{\overrideProperty}, que funciona de forma parecida a @code{\once
1481 \override}, pero usa una sintaxis diferente.
1482
1483 @example
1484 \overrideProperty
1485 #"Score.NonMusicalPaperColumn"  % Nombre del Grob u objeto gráfico
1486 #'line-break-system-details     % Nombre de la propiedad
1487 #'((next-padding . 20))         % Valor
1488 @end example
1489
1490 Fíjese, sin embargo, en que @code{\override}, aplicado a
1491 @code{NoteMusicalPaperColumn} y a @code{PaperColumn}, aún funciona tal y como se espera
1492 dentro de los bloques @code{\context}.
1493
1494 @end itemize
1495