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