1 @c -*- coding: utf-8; mode: texinfo; -*-
2 @c This file is part of lilypond.tely
4 Translation of GIT committish: 7cc6b12897031c450e3399d59cdb22ca9df4fd8c
6 When revising a translation, copy the HEAD committish of the
7 version that you are working on. See TRANSLATION for details.
10 @node Working on LilyPond projects
11 @chapter Working on LilyPond projects
13 Esta sección explica cómo resolver o evitar ciertos problemas comunes.
14 Si tiene experiencia en programación muchos de estos
15 consejos pueden parecer obvios, pero aún así le recomendamos
16 que lea este capítulo.
20 * Suggestions for writing LilyPond files::
21 * When things don't work::
26 @node Suggestions for writing LilyPond files
27 @section Suggestions for writing LilyPond files
29 En este momento está preparado para comenzar a escribir archivos de
30 LilyPond más grandes -- no sólo los pequeños ejemplos que aparecen en
31 el tutorial, sino piezas completas --. Pero ¿cómo debe proceder para
34 En la medida en que LilyPond entienda sus archivos y produzca la
35 salida que usted pretendía, realmente no importa mucho qué aspecto
36 tengan sus archivos. Sin embargo existen algunas otras cosas a tener
37 en cuenta cuando se escriben archivos de LilyPond.
40 @item ¿Qué ocurre si comete un fallo? La estructura de un archivo
41 de LilyPond puede hacer que ciertos errores se hagan más fáciles (o
42 más difíciles) de encontrar.
44 @item ¿Qué ocurre si quiere compartir sus archivos con otras personas?
45 De hecho, ¿y si quiere alterar sus propios archivos después de algunos
46 años? Algunos archivos de LilyPond se comprenden a primera vista;
47 otros pueden tenerle rascándose la cabeza durante una hora.
49 @item ¿Qué ocurre si quiere actualizar su archivo de LilyPond para poderlo usar con
50 una versión más reciente del programa? La sintaxis de la entrada se
51 modifica de forma ocasional según LilyPond se va perfeccionando. Casi
52 todos los cambios se pueden hacer de forma automática con
53 @code{convert-ly}, pero algunos podrían necesitar de una ayuda manual.
54 Los archivos de LilyPond se pueden estructurar para que sean más
55 fáciles (o más difíciles) de actualizar.
59 * General suggestions::
60 * Typesetting existing music::
62 * Saving typing with variables and functions::
67 @node General suggestions
68 @subsection General suggestions
70 Presentamos algunas sugerencias que le pueden servir de ayuda para evitar
74 @item @strong{Incluya los números de @code{\version} en todos los archivos}. Dese cuenta de que todas las
75 plantillas contienen información sobre la @code{\version}. Le
76 recomendamos mucho que siempre incluya la @code{\version}, sin
77 importar cuán pequeño pueda ser su archivo. Desde la experiencia
78 personal podemos decirle que es bastante frustrante intentar recordar
79 el número de versión de LilyPond que estaba usando hace unos años.
80 @code{convert-ly} requiere que declare qué versión de LilyPond
83 @item @strong{Incluya comprobaciones}: @ruser{Bar and barnumber checks},
84 @ruser{Octave check}. Si incluye comprobaciones de vez en cuando, en
85 caso de que cometa un error podrá localizarlo mucho más rápidamente.
86 ¿Con qué frecuencia es @q{de vez en cuando}? Depende de la
87 complejidad de la música. Para una música muy sencilla, quizá tan
88 sólo una o dos veces. Para una música muy compleja, quizá a cada
91 @item @strong{Un compás por cada línea de texto}. Si hay algo muy complicado, ya sea
93 o en la salida que desea producir, a menudo conviene escribir un solo compás
94 por cada línea. El ahorro en espacio de pantalla que se obtiene al amontonar ocho compases por línea no merece la pena
95 si luego tiene que @q{depurar} los archivos.
97 @item @strong{Comente los archivos}. Utilice o números de compás (de vez en cuando)
99 referencias a temas musicales (@q{segundo tema de los violines,} @q{cuarta
100 variación,} etc.). Puede que no necesite comentarios cuando introduce una pieza por vez primera,
101 pero si quiere volver a ella o modificar algo al cabo de dos o tres años,
102 y también si le pasa la fuente a un amigo,
104 determinar sus intenciones o de qué manera estaba estructurado el archivo
105 si no le añadió los comentarios.
107 @item @strong{Aplique márgenes a las llaves}. Muchos problemas están causados por una
109 en el número de @code{@{} y @code{@}}.
111 @item @strong{Escriba las duraciones explícitamente} al comienzo de las secciones
112 e identificadores. Si especifica @code{c4 d e} al principio de una frase
113 (en lugar de sólo @code{c d e}) se puede ahorrar problemas
114 si reelabora la música más tarde.
116 @item @strong{Separe los trucos} de las definiciones musicales. Consulte
117 @ref{Saving typing with variables and functions} y
123 @node Typesetting existing music
124 @subsection Typesetting existing music
126 Si está introduciendo música a partir de una partitura existente (es decir, tipografiando una hoja
127 de música ya impresa),
131 @item Introduzca un sistema del manuscrito (la copia física) cada vez (pero mantenga
132 la práctica de escribir un compás por línea de texto), y compruebe
133 cada sistema cuando lo haya terminado. Puede usar la instrucción
134 @code{showLastLength} para acelerar el proceso -- ver @ruser{Skipping
135 corrected music} -- .
137 @item Defina @code{mBreak = @{ \break @}} e inserte @code{\mBreak}
138 dentro del archivo de entrada donde el manuscrito tenga un saldo de línea. De esta forma
139 le resultará mucho más fácil comparar la música de LilyPond con la original.
140 Cuando haya terminado de revisar su partitura podrá
141 definir @code{mBreak = @{ @}} para quitar todos esos saltos de línea. Así
142 permitirá a LilyPond colocar los saltos donde éste lo estime
149 @subsection Large projects
151 Al trabajar en proyecto grande se hace esencial tener una estructura clara
152 en los archivos de LilyPond
156 @item @strong{Utilice un identificador para cada voz}, con un mínimo de
157 estructura dentro de la definición. La estructura de la sección
158 @code{\score} es la que cambiará con mayor probabilidad; por contra, es
159 extremadamente improbable que cambie la definición de @code{violin} en
160 versiones nuevas de LilyPond.
163 violin = \relative c'' @{
176 @item @strong{Separe los trucos de las definiciones musicales}.
177 Ya se mencionó con anterioridad, pero para proyectos grandes es vital.
178 Quizá tengamos que cambiar la definición de @code{fluegop}, pero en ese
179 caso sólo lo tendremos que hacer una vez, y aún podremos evitar tocar
180 nada dentro de @code{violin}.
184 \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @}
185 violin = \relative c'' @{
193 @node Saving typing with variables and functions
194 @subsection Saving typing with variables and functions
197 @cindex identificadores
199 Llegado a este punto, usted ha visto cosas de este tipo:
201 @lilypond[quote,verbatim,ragged-right]
202 hornNotes = \relative c'' { c4 b dis c }
210 Incluso se dará cuenta de que esto puede ser útil en música minimalista:
212 @lilypond[quote,verbatim,ragged-right]
213 fragA = \relative c'' { a4 a8. b16 }
214 fragB = \relative c'' { a8. gis16 ees4 }
215 violin = \new Staff { \fragA \fragA \fragB \fragA }
223 Sin embargo también puede usar estos identificadores (que también se conocen como
224 variables, macros o instrucciones definidas por el usuario) para hacer trucos:
226 @lilypond[quote,verbatim,ragged-right]
227 dolce = \markup{ \italic \bold dolce }
228 padText = { \once \override TextScript #'padding = #5.0 }
229 fthenp=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p }
230 violin = \relative c'' {
232 c4._\dolce b8 a8 g a b |
234 c4.^"hi there!" d8 e' f g d |
235 c,4.\fthenp b8 c4 c-. |
242 \layout{ragged-right=##t}
246 Obviamente estos identificadores son útiles para ahorrar tecleo.
247 Pero son dignos de tener en cuenta incluso si se van a utilizar una sola vez:
248 reducen la complejidad. Examinemos
249 el ejemplo anterior reescrito sin ningún identificador.
250 Encontrará que es mucho más difícil de leer, sobre todo
254 violin = \relative c'' @{
256 c4._\markup@{ \italic \bold dolce @} b8 a8 g a b |
257 \once \override TextScript #'padding = #5.0
258 c4.^"hi there!" d8 e' f g d |
259 c,4.\markup@{ \dynamic f \italic \small @{ 2nd @}
260 \hspace #0.1 \dynamic p @} b8 c4 c-. |
265 Hasta ahora hemos contemplado la sustitución estática: cuando LilyPond
266 se encuentra con @code{\padText}, lo sustituye con aquello que
267 hemos definido que sea (es decir, todo lo que está a la derecha de
270 LilyPond también puede manejar sustituciones no estáticas (piense en ellas
273 @lilypond[quote,verbatim,ragged-right]
275 #(define-music-function (parser location padding) (number?)
277 \once \override TextScript #'padding = #$padding
285 c4^"piu mosso" fis a g
289 La utilización de identificadores también es una buena forma de reducir el trabajo si
290 la sintaxis de entrada de LilyPond cambia (véase @ref{Updating old files}). Si
291 tiene una sola definición (como p.ej. @code{\dolce}) para todos sus
292 archivos (ver @ref{Style sheets}), y después la sintaxis se modifica, sólo tendrá
293 que actualizar su definición @code{\dolce} única,
294 en lugar de tener que hacer cambios en cada uno de los archivos @code{.ly}.
298 @subsection Style sheets
300 La salida que produce LilyPond se puede modificar profundamente; consulte
301 @ref{Tweaking output} para leer detalles sobre este asunto. Pero ¿qué ocurre si tiene muchos
302 archivos a los que les quiere aplicar sus propios trucos? O ¿qué ocurre si, sencillamente,
303 quiere separar los trucos de la propia música? Todo esto
304 es bastante fácil de conseguir.
306 Veamos un ejemplo. No se preocupe si no entiende
307 las partes que tienen todos los @code{#()}. Esto se explicará en
308 @ref{Advanced tweaks with Scheme}.
310 @lilypond[quote,verbatim,ragged-right]
311 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
312 #:line(#:dynamic "mp" #:text #:italic "dolce" )))
313 tempoMark = #(define-music-function (parser location markp) (string?)
315 \once \override Score . RehearsalMark #'self-alignment-X = #left
316 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
317 \mark \markup { \bold $markp }
322 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
323 \tempoMark "Poco piu mosso"
324 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
328 Existen varios problemas con la salida que se superpone; los arreglaremos utilizando
329 las técnicas descritas en @ref{Moving objects}. Pero también haremos algo respecto a
330 las definiciones @code{mpdolce} y @code{tempoMark}. Éstas producen la salida que
331 deseamos, pero quizá las querríamos utilizar en otra pieza.
332 Podríamos simplemente copiarlas y pegarlas al principio de cada archivo,
333 pero sería bastante molesto. También hace que se queden las definiciones
334 a la vista dentro de nuestros archivos de música, y yo personalmente encuentro
335 todos los @code{#()} bastante poco estéticos. Los vamos a esconder dentro de otro archivo:
338 %%% guardar esto en un archivo de nombre "definiciones.ly"
339 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
340 #:line(#:dynamic "mp" #:text #:italic "dolce" )))
341 tempoMark = #(define-music-function (parser location markp) (string?)
343 \once \override Score . RehearsalMark #'self-alignment-X = #left
344 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
345 \mark \markup @{ \bold $markp @}
349 Ahora modificaremos la música (guardemos este archivo como @file{"musica.ly"}).
351 @c We have to do this awkward example/lilypond-non-verbatim
352 @c because we can't do the \include stuff in the manual.
355 \include "definiciones.ly"
359 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
360 \once \override Score.RehearsalMark #'padding = #2.0
361 \tempoMark "Poco piu mosso"
362 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
366 @lilypond[quote,ragged-right]
367 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
368 #:line(#:dynamic "mp" #:text #:italic "dolce" )))
369 tempoMark = #(define-music-function (parser location markp) (string?)
371 \once \override Score . RehearsalMark #'self-alignment-X = #left
372 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
373 \mark \markup { \bold $markp }
378 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
379 \once \override Score.RehearsalMark #'padding = #2.0
380 \tempoMark "Poco piu mosso"
381 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
385 Eso tiene mejor aspecto, pero haremos algunos cambios más. El glissando es difícil
386 de ver, así que lo haremos más grueso y lo acercaremos a las cabezas de las notas. Pondremos
387 la indicación metronómica encima de la clave, en lugar de ir encima de la primera
388 nota. Y por último, mi profesor de composición odia las indicaciones de compás @q{C},
389 así que la convertiremos en @q{4/4}.
391 Sin embargo, no debe cambiar el archivo @file{musica.ly}. Sustituya nuestro archivo @file{definiciones.ly}
396 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
397 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
398 tempoMark = #(define-music-function (parser location markp) (string?)
400 \once \override Score . RehearsalMark #'self-alignment-X = #left
401 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
402 \mark \markup @{ \bold $markp @}
407 \override MetronomeMark #'extra-offset = #'(-9 . 0)
408 \override MetronomeMark #'padding = #'3
411 \override TimeSignature #'style = #'numbered
414 \override Glissando #'thickness = #3
415 \override Glissando #'gap = #0.1
420 @lilypond[quote,ragged-right]
421 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
422 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
423 tempoMark = #(define-music-function (parser location markp) (string?)
425 \once \override Score . RehearsalMark #'self-alignment-X = #left
426 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
427 \mark \markup { \bold $markp }
432 \override MetronomeMark #'extra-offset = #'(-9 . 0)
433 \override MetronomeMark #'padding = #'3
436 \override TimeSignature #'style = #'numbered
439 \override Glissando #'thickness = #3
440 \override Glissando #'gap = #0.1
446 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
447 \once \override Score.RehearsalMark #'padding = #2.0
448 \tempoMark "Poco piu mosso"
449 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
453 ¡Eso tiene un aspecto mucho mejor! Ahora suponga que quiere publicar esta
454 pieza. A mi profesor de composición no le gustan las indicaciones de compás @q{C},
455 pero yo les tengo cierto cariño. Copiaremos el archivo
456 actual @file{definiciones.ly} a @file{publicar-web.ly} y modificaremos
457 éste. Como el propósito de esta música es producir un PDF que va a mostrarse
458 en la pantalla, también vamos a aumentar el
459 tamaño general de la salida.
463 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
464 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
465 tempoMark = #(define-music-function (parser location markp) (string?)
467 \once \override Score . RehearsalMark #'self-alignment-X = #left
468 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
469 \mark \markup @{ \bold $markp @}
472 #(set-global-staff-size 23)
475 \override MetronomeMark #'extra-offset = #'(-9 . 0)
476 \override MetronomeMark #'padding = #'3
481 \override Glissando #'thickness = #3
482 \override Glissando #'gap = #0.1
487 @lilypond[quote,ragged-right]
488 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
489 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
490 tempoMark = #(define-music-function (parser location markp) (string?)
492 \once \override Score . RehearsalMark #'self-alignment-X = #left
493 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
494 \mark \markup { \bold $markp }
497 #(set-global-staff-size 23)
500 \override MetronomeMark #'extra-offset = #'(-9 . 0)
501 \override MetronomeMark #'padding = #'3
504 \override Glissando #'thickness = #3
505 \override Glissando #'gap = #0.1
511 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
512 \once \override Score.RehearsalMark #'padding = #2.0
513 \tempoMark "Poco piu mosso"
514 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
518 Ahora, en la música, simplemente sustituyo
519 @code{\include "definiciones.ly"} por
520 @code{\include "publicar-web.ly"}. Por supuesto, podríamos hacer esto aún más
521 práctico. Podríamos hacer un archivo @file{definiciones.ly} que contuviera
522 solamente las definiciones de @code{mpdolce} y @code{tempoMark}, un archivo
523 @file{web-publish.ly} que contuviera solamente la sección @code{\layout}
524 que se mostró en el ejemplo, y un archivo @file{universidad.ly} que contendría
525 solamente los trucos para producir la salida que le gusta a mi
526 profesor. La parte más alta de @file{musica.ly} tendría entonces este aspecto:
529 \include "definiciones.ly"
531 %%% ¡Quitar el comentario de una sola de estas líneas!
532 \include "publicar-web.ly"
533 %\include "universidad.ly"
536 Este enfoque puede ser útil incluso si va a producir sólo un conjunto de particellas.
537 Yo utilizo media docena de archivos de
538 @q{hojas de estilo} para mis proyectos. Comienzo todos los archivos de música con
539 @code{\include "../global.ly"}, que contiene
543 \version @w{"@version{}"}
544 #(ly:set-option 'point-and-click #f)
545 \include "../iniciar/iniciar-definiciones.ly"
546 \include "../iniciar/iniciar-disposicion.ly"
547 \include "../iniciar/iniciar-cabeceras.ly"
548 \include "../iniciar/iniciar-papel.ly"
551 @node When things don't work
552 @section When things don't work
555 * Updating old files::
556 * Troubleshooting (taking it all apart)::
560 @node Updating old files
561 @subsection Updating old files
563 La sintaxis de la entrada de LilyPond cambia de manera ocasional. A medida que el propio
564 LilyPond mejora, la sintaxis (el lenguaje de la entrada) se modifica en consonancia. A
565 veces estos cambios se hacen para conseguir que la entrada sea más fácil de leer y escribir, y
566 otras veces estos cambios son para dar cabida a nuevas funcionalidades de LilyPond.
568 LilyPond lleva incorporado un archivo que facilita esta actualización:
569 @code{convert-ly}. Para ver detalles sobre cómo ejecutar este programa, consulte
570 @rprogram{Updating files with convert-ly}.
572 Desgraciadamente @code{convert-ly} no puede tratar todos los cambios en la entrada.
573 Se ocupa de los cambios sencillos de búsqueda y sustitución (como @code{raggedright}
574 que se convierte en @code{ragged-right}), pero algunos cambios son demasiado
575 complicados. Los cambios de sintaxis que @code{convert-ly} es incapaz de manejar
576 se relacionan en @rprogram{Updating files with convert-ly}.
578 Por ejemplo, en la versión 2.4 y anteriores de LilyPond,
579 los acentos y las letras no inglesas se introducían utilizando
580 LaTeX: por ejemplo, @code{No\"el} (que significa @q{Navidad} en francés).
581 En LilyPond 2.6 y siguientes, el carácter especial @code{ë}
582 debe introducirse directamente en el archivo de LilyPond como un carácter UTF-8.
583 @code{convert-ly} no puede cambiar todos los caracteres especiales
584 de LaTeX a caracteres de UTF-8; tendrá que actualizar manualmente
585 sus archivos de LilyPond antiguos.
588 @node Troubleshooting (taking it all apart)
589 @subsection Troubleshooting (taking it all apart)
591 Antes o después escribirá un archivo que LilyPond no podrá compilar.
592 Los mensajes que LilyPond proporciona pueden ayudarle a encontrar el
593 error, pero en muchos casos tendrá que llevar a cabo algún tipo de
594 investigación para determinar el origen del problema.
596 Las herramientas más poderosas para este cometido son el
597 comentario de una sola línea (indicado por @code{%}) y el comentario de bloque
598 (indicado por @code{%@{ ... %@}}). Si no sabe dónde está
599 el problema, comience convirtiendo grandes secciones del
600 archivo de entrada en un comentario. Después de eliminar una
601 sección convirtiéndola en un comentario, pruebe a compilar el
602 archivo otra vez. Si funciona, entonces el problema debía estar
603 en la porción que había eliminado. Si no funciona, continúe eliminando material
604 (transformándolo en comentarios) hasta que tenga algo que funcione.
606 En un caso extremo podría terminar con sólo
620 (en otras palabras: un archivo sin música)
622 Si ocurre esto, no abandone. Descomente un trozo pequeño -- digamos
623 la parte del bajo -- y observe si funciona. Si no es así,
624 transforme en comentarios toda la música del bajo (pero deje el
625 @code{\bajo} de la sección @code{\score} no comentado.
628 bajo = \relative c' @{
636 Ahora empiece poco a poco descomentando cada vez más fracciones de la
637 parte del @code{bajo} hasta que encuentre la línea del problema.
639 Otra técnica de depuración muy útil es la construcción de
640 @ref{Minimal examples}.
643 @node Minimal examples
644 @subsection Minimal examples
646 Un ejemplo mínimo es un ejemplo tan pequeño como sea posible. Estos
647 ejemplos son mucho más fáciles de comprender que los ejemplos largos. Los ejemplos
648 mínimos se utilizan para
651 @item Informes de fallo
652 @item Solicitudes de ayuda a las listas de correo
653 @item Añadir ejemplos al @uref{http://lsr@/.dsi@/.unimi@/.it/,Repositorio de Fragmentos de Código de LilyPond}
657 Para construir un ejemplo que sea lo más pequeño posible, la regla es
658 bastante simple: quite todo lo que no sea necesario. Al tratar de
659 quitar partes innecesarias de un archivo, es una buena idea convertir líneas en
660 comentarios en vez de borrarlas. De esta forma, si descubre que en realidad
661 sí @emph{necesitaba} algunas de estas líneas, podrá descomentarlas y no tendrá que
662 teclearlas de nuevo partiendo de cero.
664 Existen dos excepciones a la regla del @qq{lo más pequeño posible}:
667 @item Incluya el número de @code{\version}.
668 @item Si puede, ponga @code{\paper@{ ragged-right=##t @}} al principio del ejemplo.
672 En resumen, el objetivo de un ejemplo mínimo es que sea fácil de leer:
675 @item Evite usar notas, tonalidades o compases demasiado complicados, a no ser que quiera
676 demostrar algo sobre el comportamiento de estos elementos precisamente.
677 @item No use instrucciones @code{\override} a no ser que ése sea el propósito
682 @node Scores and parts
683 @section Scores and parts
685 En música orquestal, todas las notas se imprimen dos veces. Una vez
686 en las particellas para los músicos, y otra para la partitura del director.
687 Los identificadores se pueden usar para evitar la duplicación del trabajo.
688 La música se escribe una vez y se almacena en una variable.
689 El contenido de dicha variable se usa después para generar tanto la particella como la partitura del director.
691 Es muy conveniente definir las notas en un archivo especial. Por
692 ejemplo, supongamos que el archivo @file{trompa.ly} contiene la
693 siguiente parte de un dúo para trompa y fagot:
696 notasTrompa = \relative c @{
703 Luego se hace una particella escribiendo en un archivo lo siguiente
708 instrument = "Trompa en Fa"
712 \transpose f c' \notasTrompa
723 sustituye el contenido de @file{trompa.ly} en esta posición dentro del
724 archivo, así que @code{notasTrompa} se define con posterioridad. La
725 instrucción @code{\transpose f@tie{}c'} indica que el argumento
726 constituido por @code{\notasTrompa} se debe transponer una quinta
727 hacia arriba. Lo que suena como @code{f} se escribe como @code{c'},
728 lo que corresponde con el tono de afinación de una trompa normal
729 en@tie{}Fa. La transposición se puede ver en la siguiente salida
731 @lilypond[quote,ragged-right]
732 \transpose f c' \relative c {
738 En piezas para conjunto, con frecuencia una de las voces no suena durante muchos compases.
739 Esto queda denotado por un silencio especial, el silencio multicompás.
740 Se introduce con una @code{R} mayúscula seguida de una duración
741 (@code{1}@tie{}en el caso de la redonda, @code{2}@tie{}en el caso de una blanca,
742 etc.). Multiplicando la duración se pueden construir
743 silencios más largos. Por ejemplo, este silencio ocupa
744 3@tie{}compases de 2/4
750 Cuando se imprime la particella tienen que comprimirse los silencios
751 multicompás. Esto se hace estableciendo una variable en tiempo de ejecución
754 \set Score.skipBars = ##t
758 Esta instrucción establece el valor de la propiedad @code{skipBars} en el
759 contexto de @code{Score} a verdadero (@code{##t}). Anteponiendo el silencio y
760 esta opción a la música anterior, llegamos al siguiente resultado
762 @lilypond[quote,ragged-right]
763 \transpose f c' \relative c {
765 \set Score.skipBars = ##t
772 Esta partitura se hace combinando toda la música junta. Suponiendo
773 que la otra voz se encuentra dentro de @code{notasFagot} en el archivo
774 @file{fagot.ly}, la partitura se hace con
781 \new Staff \notasTrompa
782 \new Staff \notasFagot
789 @lilypond[quote,ragged-right]
797 r4 d,8 f | gis4 c | b bes |
798 a8 e f4 | g d | gis f