1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
2 @c This file is part of lilypond.tely
4 Translation of GIT committish: 50b88336f4c69d7d3241cc01af98c362cd9d2b4b
6 When revising a translation, copy the HEAD committish of the
7 version that you are working on. See TRANSLATION for details.
12 @node Working on LilyPond projects
13 @chapter Working on LilyPond projects
15 Esta sección explica cómo resolver o evitar ciertos problemas comunes.
16 Si tiene experiencia en programación muchos de estos
17 consejos pueden parecer obvios, pero aún así le recomendamos
18 que lea este capítulo.
22 * Suggestions for writing LilyPond input files::
23 * When things don't work::
25 * Make and Makefiles::
29 @node Suggestions for writing LilyPond input files
30 @section Suggestions for writing LilyPond input files
32 En este momento está preparado para comenzar a escribir archivos de
33 LilyPond más grandes -- no sólo los pequeños ejemplos que aparecen en
34 el tutorial, sino piezas completas --. Pero ¿cómo debe proceder para
37 En la medida en que LilyPond entienda sus archivos y produzca la
38 salida que usted pretendía, realmente no importa mucho qué aspecto
39 tengan sus archivos. Sin embargo existen algunas otras cosas a tener
40 en cuenta cuando se escriben archivos de LilyPond.
43 @item ¿Qué ocurre si comete un fallo? La estructura de un archivo
44 de LilyPond puede hacer que ciertos errores se hagan más fáciles (o
45 más difíciles) de encontrar.
47 @item ¿Qué ocurre si quiere compartir sus archivos con otras personas?
48 De hecho, ¿y si quiere alterar sus propios archivos después de algunos
49 años? Algunos archivos de LilyPond se comprenden a primera vista;
50 otros pueden tenerle rascándose la cabeza durante una hora.
52 @item ¿Qué ocurre si quiere actualizar su archivo de LilyPond para poderlo usar con
53 una versión más reciente del programa? La sintaxis de la entrada se
54 modifica de forma ocasional según LilyPond se va perfeccionando. Casi
55 todos los cambios se pueden hacer de forma automática con
56 @code{convert-ly}, pero algunos podrían necesitar de una ayuda manual.
57 Los archivos de LilyPond se pueden estructurar para que sean más
58 fáciles (o más difíciles) de actualizar.
63 * General suggestions::
64 * Typesetting existing music::
66 * Saving typing with variables and functions::
71 @node General suggestions
72 @subsection General suggestions
74 Presentamos algunas sugerencias que le pueden servir de ayuda para evitar
78 @item @strong{Incluya los números de @code{\version} en todos los archivos}. Dése cuenta de que todas las
79 plantillas contienen información sobre la @code{\version}. Le
80 recomendamos mucho que siempre incluya la @code{\version}, sin
81 importar cuán pequeño pueda ser su archivo. Desde la experiencia
82 personal podemos decirle que es bastante frustrante intentar recordar
83 el número de versión de LilyPond que estaba usando hace unos años.
84 @code{convert-ly} requiere que declare qué versión de LilyPond
87 @item @strong{Incluya comprobaciones}: @ruser{Bar and bar number checks},
88 @ruser{Octave checks}. Si incluye comprobaciones de vez en cuando, en
89 caso de que cometa un error podrá localizarlo mucho más rápidamente.
90 ¿Con qué frecuencia es @q{de vez en cuando}? Depende de la
91 complejidad de la música. Para una música muy sencilla, quizá tan
92 sólo una o dos veces. Para una música muy compleja, quizá a cada
95 @item @strong{Un compás por cada línea de texto}. Si hay algo muy complicado, ya sea
96 en la propia música o en la salida que desea producir, a menudo
97 conviene escribir un solo compás por cada línea. El ahorro en espacio
98 de pantalla que se obtiene al amontonar ocho compases por línea no
99 merece la pena si luego tiene que @q{depurar} los archivos.
101 @item @strong{Comente los archivos}. Utilice o números de compás (de vez en cuando)
102 o referencias a temas musicales (@q{segundo tema de los violines,}
103 @q{cuarta variación,} etc.). Puede que no necesite comentarios cuando
104 introduce una pieza por vez primera, pero si quiere volver a ella o
105 modificar algo al cabo de dos o tres años, y también si le pasa la
106 fuente a un amigo, será todo un desafío determinar sus intenciones o
107 de qué manera estaba estructurado el archivo si no le añadió los
110 @item @strong{Aplique márgenes a las llaves}. Muchos problemas están causados por una
111 falta de equilibrio en el número de @code{@{} y @code{@}}.
113 @item @strong{Escriba las duraciones explícitamente} al comienzo de las secciones
114 e identificadores. Si especifica @code{c4 d e} al principio de una
115 frase (en lugar de sólo @code{c d e}) se puede ahorrar problemas si
116 reelabora la música más tarde.
118 @item @strong{Separe los trucos} de las definiciones musicales. Consulte
119 @ref{Saving typing with variables and functions} y
125 @node Typesetting existing music
126 @subsection Typesetting existing music
128 Si está introduciendo música a partir de una partitura existente (es
129 decir, tipografiando una hoja de música ya impresa),
133 @item Introduzca un sistema del manuscrito (la copia física) cada vez (pero mantenga
134 la práctica de escribir un compás por línea de texto), y compruebe
135 cada sistema cuando lo haya terminado. Puede usar las instrucciones
136 @code{showLastLength} o @code{showFirstLength} para acelerar el
137 proceso -- ver @ruser{Skipping corrected music} -- .
139 @item Defina @code{mBreak = @{ \break @}} e inserte @code{\mBreak}
140 dentro del archivo de entrada donde el manuscrito tenga un saldo de
141 línea. De esta forma le resultará mucho más fácil comparar la música
142 de LilyPond con la original. Cuando haya terminado de revisar su
143 partitura podrá definir @code{mBreak = @{ @}} para quitar todos esos
144 saltos de línea. Así permitirá a LilyPond colocar los saltos donde
145 éste lo estime más oportuno.
147 @item Al escribir una parte para un instrumento transpositor dentro de una
148 variable, se recomienda que las notas estén envueltas dentro de
151 \transpose c altura-natural @{...@}
153 (donde @code{altura-natural} es la afinación natural del instrumento)
154 de forma que la música dentro de la variable esté realmente en Do
155 mayor. Después podemos volver a transportarlas en sentido inverso
156 cuando se utiliza la variable, si es necesario, pero quizá no queramos
157 hacerlo (p.ej., al imprimir una partitura en afinación de concierto,
158 al convertir una parte de trombón de clave de Sol a clave de Fa,
159 etc.). Es menos probable cometer errores en los transportes si toda
160 la música que está dentro de las variables se encuentra en un tono
163 Asimismo, haga los transportes exclusivamente hacia o desde Do mayor.
164 Esto significa que aparte de ésta, las únicas tonalidades que usaremos
165 serán los tonos de afinación de los instrumentos transpositores: bes
166 para una trompeta en Si bemol, aes para un clarinete en La bemol, etc.
172 @subsection Large projects
174 Al trabajar en proyecto grande se hace esencial tener una estructura clara
175 en los archivos de LilyPond
179 @item @strong{Utilice un identificador para cada voz}, con un mínimo de
180 estructura dentro de la definición. La estructura de la sección
181 @code{\score} es la que cambiará con mayor probabilidad; por contra, es
182 extremadamente improbable que cambie la definición de @code{violin} en
183 versiones nuevas de LilyPond.
186 violin = \relative c'' @{
199 @item @strong{Separe los trucos de las definiciones musicales}.
200 Ya se mencionó con anterioridad, pero para proyectos grandes es vital.
201 Quizá tengamos que cambiar la definición de @code{fluegop}, pero en ese
202 caso sólo lo tendremos que hacer una vez, y aún podremos evitar tocar
203 nada dentro de @code{violin}.
207 \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @}
208 violin = \relative c'' @{
216 @node Saving typing with variables and functions
217 @subsection Saving typing with variables and functions
220 @cindex identificadores
222 Llegado a este punto, usted ha visto cosas de este tipo:
224 @lilypond[quote,verbatim,ragged-right]
225 hornNotes = \relative c'' { c4 b dis c }
233 Incluso se dará cuenta de que esto puede ser útil en música
236 @lilypond[quote,verbatim,ragged-right]
237 fragmentA = \relative c'' { a4 a8. b16 }
238 fragmentB = \relative c'' { a8. gis16 ees4 }
239 violin = \new Staff { \fragmentA \fragmentA \fragmentB \fragmentA }
247 Sin embargo también puede usar estos identificadores (que también se
248 conocen como variables, macros o instrucciones definidas por el
249 usuario) para hacer trucos:
251 @lilypond[quote,verbatim,ragged-right]
252 dolce = \markup{ \italic \bold dolce }
253 padText = { \once \override TextScript #'padding = #5.0 }
254 fthenp=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p }
255 violin = \relative c'' {
257 c4._\dolce b8 a8 g a b |
259 c4.^"hi there!" d8 e' f g d |
260 c,4.\fthenp b8 c4 c-. |
267 \layout{ragged-right=##t}
271 Obviamente estos identificadores son útiles para ahorrar tecleo. Pero
272 son dignos de tener en cuenta incluso si se van a utilizar una sola
273 vez: reducen la complejidad. Examinemos el ejemplo anterior reescrito
274 sin ningún identificador. Encontrará que es mucho más difícil de
275 leer, sobre todo la última línea.
278 violin = \relative c'' @{
280 c4._\markup@{ \italic \bold dolce @} b8 a8 g a b |
281 \once \override TextScript #'padding = #5.0
282 c4.^"hi there!" d8 e' f g d |
283 c,4.\markup@{ \dynamic f \italic \small @{ 2nd @}
284 \hspace #0.1 \dynamic p @} b8 c4 c-. |
289 @c TODO Replace the following with a better example -td
290 @c Skylining handles this correctly without padText
292 Hasta ahora hemos contemplado la sustitución estática: cuando LilyPond
293 se encuentra con @code{\padText}, lo sustituye con aquello que
294 hemos definido que sea (es decir, todo lo que está a la derecha de
297 LilyPond también puede manejar sustituciones no estáticas (piense en
298 ellas como en funciones).
300 @lilypond[quote,verbatim,ragged-right]
302 #(define-music-function (parser location padding) (number?)
304 \once \override TextScript #'padding = #$padding
312 c4^"piu mosso" fis a g
316 La utilización de identificadores también es una buena forma de
317 reducir el trabajo si la sintaxis de entrada de LilyPond cambia (véase
318 @ref{Updating old input files}). Si tiene una sola definición (como
319 p.ej. @code{\dolce}) para todos sus archivos (ver @ref{Style sheets}),
320 y después la sintaxis se modifica, sólo tendrá que actualizar su
321 definición @code{\dolce} única, en lugar de tener que hacer cambios en
322 cada uno de los archivos @code{.ly}.
326 @subsection Style sheets
328 La salida que produce LilyPond se puede modificar profundamente;
329 consulte @ref{Tweaking output} para leer detalles sobre este asunto.
330 Pero ¿qué ocurre si tiene muchos archivos a los que les quiere aplicar
331 sus propios trucos? O ¿qué ocurre si, sencillamente, quiere separar
332 los trucos de la propia música? Todo esto es bastante fácil de
335 Veamos un ejemplo. No se preocupe si no entiende
336 las partes que tienen todos los @code{#()}. Esto se explicará en
337 @ref{Advanced tweaks with Scheme}.
339 @lilypond[quote,verbatim,ragged-right]
340 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
341 #:line(#:dynamic "mp" #:text #:italic "dolce" )))
343 inst = #(define-music-function (parser location string) (string?)
347 'text (markup #:bold (#:box string))))
351 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
353 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
357 Existen varios problemas con la salida que se superpone; los
358 arreglaremos utilizando las técnicas descritas en @ref{Moving
359 objects}. Pero también haremos algo respecto a las definiciones
360 @code{mpdolce} e @code{inst}. Éstas producen la salida que deseamos,
361 pero quizá las querríamos utilizar en otra pieza. Podríamos
362 simplemente copiarlas y pegarlas al principio de cada archivo, pero
363 sería bastante molesto. También hace que se queden las definiciones a
364 la vista dentro de nuestros archivos de música, y yo personalmente
365 encuentro todos los @code{#()} bastante poco estéticos. Los vamos a
366 esconder dentro de otro archivo:
369 %%% guardar esto en un archivo de nombre "definiciones.ily"
370 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
371 #:line(#:dynamic "mp" #:text #:italic "dolce" )))
373 inst = #(define-music-function (parser location string) (string?)
377 'text (markup #:bold (#:box string))))
380 Haremos referencia a este archivo utilizando la instrucción
381 @code{\include} al principio del archivo de música (la extensión
382 @code{.ily} se utiliza para distinguir este archivo de inclusión --que
383 se supone que no debe ser procesado de forma independiente-- del
384 archivo principal). Ahora modificaremos la música (guardemos este
385 archivo como @file{"musica.ly"}).
387 @c We have to do this awkward example/lilypond-non-verbatim
388 @c because we can't do the \include stuff in the manual.
391 \include "definiciones.ily"
395 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
397 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
401 @lilypond[quote,ragged-right]
402 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
403 #:line(#:dynamic "mp" #:text #:italic "dolce" )))
405 inst = #(define-music-function (parser location string) (string?)
409 'text (markup #:bold (#:box string))))
413 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
415 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
419 Eso tiene mejor aspecto, pero haremos algunos cambios más. El glissando es difícil
420 de ver, así que lo haremos más grueso y lo acercaremos a las cabezas de las notas. Pondremos
421 la indicación metronómica encima de la clave, en lugar de ir encima de la primera
422 nota. Y por último, mi profesor de composición odia las indicaciones de compás @q{C},
423 así que la convertiremos en @q{4/4}.
425 Sin embargo, no debemos cambiar el archivo @file{musica.ly}.
426 Sustituyamos nuestro archivo @file{definiciones.ily} con éste:
430 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
431 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
433 inst = #(define-music-function (parser location string) (string?)
437 'text (markup #:bold (#:box string))))
441 \override MetronomeMark #'extra-offset = #'(-9 . 0)
442 \override MetronomeMark #'padding = #'3
445 \override TimeSignature #'style = #'numbered
448 \override Glissando #'thickness = #3
449 \override Glissando #'gap = #0.1
454 @lilypond[quote,ragged-right]
455 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
456 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
458 inst = #(define-music-function (parser location string) (string?)
462 'text (markup #:bold (#:box string))))
466 \override MetronomeMark #'extra-offset = #'(-9 . 0)
467 \override MetronomeMark #'padding = #'3
470 \override TimeSignature #'style = #'numbered
473 \override Glissando #'thickness = #3
474 \override Glissando #'gap = #0.1
480 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
482 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
486 ¡Eso tiene un aspecto mucho mejor! Ahora suponga que quiere publicar esta
487 pieza. A mi profesor de composición no le gustan las indicaciones de compás @q{C},
488 pero yo les tengo cierto cariño. Copiaremos el archivo
489 actual @file{definiciones.ily} a @file{publicar-web.ily} y modificaremos
490 éste. Como el propósito de esta música es producir un PDF que va a mostrarse
491 en la pantalla, también vamos a aumentar el
492 tamaño general de la salida.
496 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
497 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
499 inst = #(define-music-function (parser location string) (string?)
503 'text (markup #:bold (#:box string))))
505 #(set-global-staff-size 23)
508 \override MetronomeMark #'extra-offset = #'(-9 . 0)
509 \override MetronomeMark #'padding = #'3
514 \override Glissando #'thickness = #3
515 \override Glissando #'gap = #0.1
520 @lilypond[quote,ragged-right]
521 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
522 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
524 inst = #(define-music-function (parser location string) (string?)
528 'text (markup #:bold (#:box string))))
530 #(set-global-staff-size 23)
533 \override MetronomeMark #'extra-offset = #'(-9 . 0)
534 \override MetronomeMark #'padding = #'3
537 \override Glissando #'thickness = #3
538 \override Glissando #'gap = #0.1
544 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
546 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
550 Ahora, en la música, simplemente sustituyo @code{\include
551 "definiciones.ily"} por @code{\include "publicar-web.ily"}. Por
552 supuesto, podríamos hacer esto aún más práctico. Podríamos hacer un
553 archivo @file{definiciones.ily} que contuviera solamente las
554 definiciones de @code{mpdolce} y de @code{inst}, un archivo
555 @file{publicar-web.ily} que contuviera solamente la sección
556 @code{\layout} que se mostró en el ejemplo, y un archivo
557 @file{universidad.ily} que contendría solamente los trucos para
558 producir la salida que le gusta a mi profesor. El comienzo de
559 @file{musica.ly} tendría entonces este aspecto:
562 \include "definiciones.ily"
564 %%% ¡Quitar el comentario de una sola de estas líneas!
565 \include "publicar-web.ily"
566 %\include "universidad.ily"
569 Este enfoque puede ser útil incluso si va a producir sólo un conjunto
570 de particellas. Yo utilizo media docena de archivos de @q{hojas de
571 estilo} para mis proyectos. Comienzo todos los archivos de música con
572 @code{\include "../global.ily"}, que contiene
576 \version @w{"@version{}"}
577 #(ly:set-option 'point-and-click #f)
578 \include "../iniciar/iniciar-definiciones.ily"
579 \include "../iniciar/iniciar-disposicion.ily"
580 \include "../iniciar/iniciar-cabeceras.ily"
581 \include "../iniciar/iniciar-papel.ily"
585 @node When things don't work
586 @section When things don't work
589 * Updating old input files::
591 * Troubleshooting (taking it all apart)::
595 @node Updating old input files
596 @subsection Updating old input files
599 @cindex actualizar archivos de entrada antiguos
601 La sintaxis de la entrada de LilyPond cambia de manera ocasional. A
602 medida que el propio LilyPond mejora, la sintaxis (el lenguaje de la
603 entrada) se modifica en consonancia. A veces estos cambios se hacen
604 para conseguir que la entrada sea más fácil de leer y escribir, y
605 otras veces estos cambios son para dar cabida a nuevas funcionalidades
608 LilyPond lleva incorporado un archivo que facilita esta actualización:
609 @code{convert-ly}. Para ver detalles sobre cómo ejecutar este
610 programa, consulte @rprogram{Updating files with convert-ly}.
612 Desgraciadamente @code{convert-ly} no puede tratar todos los cambios
613 en la entrada. Se ocupa de los cambios sencillos de búsqueda y
614 sustitución (como @code{raggedright} que se convierte en
615 @code{ragged-right}), pero algunos cambios son demasiado complicados.
616 Los cambios de sintaxis que @code{convert-ly} es incapaz de manejar se
617 relacionan en @rprogram{Updating files with convert-ly}.
619 Por ejemplo, en la versión 2.4 y anteriores de LilyPond, los acentos y
620 las letras no inglesas se introducían utilizando LaTeX: por ejemplo,
621 @code{No\"el} (que significa @q{Navidad} en francés). En LilyPond 2.6
622 y siguientes, el carácter especial @code{ë} debe introducirse
623 directamente en el archivo de LilyPond como un carácter UTF-8.
624 @code{convert-ly} no puede cambiar todos los caracteres especiales de
625 LaTeX a caracteres de UTF-8; tendrá que actualizar manualmente sus
626 archivos de LilyPond antiguos.
629 @subsection Common errors
631 Las condiciones de error que se han descrito más arriba se producen
632 con frecuencia, aunque su causa no sea obvia o no se pueda encontrar
633 fácilmente. Una vez se han visto y comprendido, son fáciles de
638 * Music runs off the page::
639 * Apparent error in ../ly/init.ly::
640 * Error message Unbound variable %::
643 @node Music runs off the page
644 @unnumberedsubsubsec Music runs off the page
646 La música que se sale de la página por el margen derecho o que aparece
647 exageradamente comprimida está causada casi siempre por haber
648 introducido una duración incorrecta para una nota, produciendo que la
649 nota final de un compás se extienda más allá de la línea divisoria.
650 Esto no es inválido si la nota final de un compás no termina sobre la
651 línea divisoria introducida automáticamente, pues simplemente se
652 supone que la nota se solapa encima del siguiente compás. Pero si se
653 produce una larga secuencia tales notas solapadas, la música puede
654 aparecer comprimida o salirse de la página porque los saltos de línea
655 automáticos solamente se pueden insertar al final de compases
656 completos, es decir, aquellos en que todas las notas terminan antes de
657 o justo al final del compás.
659 @warning{Una duración incorrecta puede hacer que se inhiban los saltos
660 de línea, lo que llevaría a una sola línea de música muy comprimida o
661 que se salga de la página.}
663 La duración incorrecta se puede encontrar fácilmente si se utilizan
664 comprobaciones de compás, véase @ruser{Bar and bar number checks}.
666 Si realmente quueremos tener una serie de estos compases con notas
667 solapadas, debemos insertar una línea divisoria invisible donde
668 queramos el salto de línea. Para ver más detalles, consulte
671 @node Apparent error in ../ly/init.ly
672 @unnumberedsubsubsec Apparent error in @code{../ly/init.ly}
674 Pueden aparecer varios mensajes de error extraños acerca de errores de
675 sintaxis en @code{../ly/init.ly} si el archivo de entrada no está
676 correctamente formado, por ejemplo si no contiene llaves o comillas
677 correctamente emparejados.
679 El error más común es la falta de una llave de cierre, (@code{@}}), al
680 final de un bloque @code{score}. Aquí la solución es obvia: compruebe
681 que el bloque @code{score} está correctamente cerrado. La estructura
682 correcta de un archivo de entrada está descrita en @ref{How LilyPond
683 input files work}. Usando un editor que resalte automáticamente las
684 llaves correspondientes es de mucha ayuda para evitar estos errores.
686 Este mensaje de error también puede aparecer si se omiten las comillas
687 de terminación (@code{"}). En este caso, un mensaje de error
688 adicional debería indicar un número de línea cercano al de aquella
689 donde está el error. Las comillas desbalanceadas estarán por lo
690 general una o dos líneas por encima.
692 @node Error message Unbound variable %
693 @unnumberedsubsubsec Error message Unbound variable %
695 Este mensaje de error aparece al final de los mensajes de la consola o
696 del archivo de registro junto a un mensaje @qq{GUILE señaló un error
697 ...} cada vez que se llame a una rutina de Scheme que
698 (incorrectamente) contenga un comentario @emph{de LilyPond} en lugar
699 de un comentario @emph{de Scheme}.
701 Los comentarios de LilyPond comienzan con un símbolo de porcentaje,
702 (@code{%}), y no se deben utilizar dentro de las rutinas de Scheme.
703 Los comentarios de Scheme comienzan con punto y coma, (@code{;}).
706 @node Troubleshooting (taking it all apart)
707 @subsection Troubleshooting (taking it all apart)
709 Antes o después escribirá un archivo que LilyPond no podrá compilar.
710 Los mensajes que LilyPond proporciona pueden ayudarle a encontrar el
711 error, pero en muchos casos tendrá que llevar a cabo algún tipo de
712 investigación para determinar el origen del problema.
714 Las herramientas más poderosas para este cometido son el comentario de
715 una sola línea (indicado por @code{%}) y el comentario de bloque
716 (indicado por @code{%@{ ... %@}}). Si no sabe dónde está el problema,
717 comience convirtiendo grandes secciones del archivo de entrada en un
718 comentario. Después de eliminar una sección convirtiéndola en un
719 comentario, pruebe a compilar el archivo otra vez. Si funciona,
720 entonces el problema debía estar en la porción que había eliminado.
721 Si no funciona, continúe eliminando material (transformándolo en
722 comentarios) hasta que tenga algo que funcione.
724 En un caso extremo podría terminar con sólo
738 (en otras palabras: un archivo sin música)
740 Si ocurre esto, no abandone. Descomente un trozo pequeño -- digamos
741 la parte del bajo -- y observe si funciona. Si no es así, transforme
742 en comentarios toda la música del bajo (pero deje el @code{\bajo} de
743 la sección @code{\score} no comentado.
746 bajo = \relative c' @{
754 Ahora empiece poco a poco descomentando cada vez más fracciones de la
755 parte del @code{bajo} hasta que encuentre la línea del problema.
757 Otra técnica de depuración muy útil es la construcción de
758 @ref{Minimal examples}.
761 @node Minimal examples
762 @subsection Minimal examples
764 Un ejemplo mínimo es un ejemplo tan pequeño como sea posible. Estos
765 ejemplos son mucho más fáciles de comprender que los ejemplos largos.
766 Los ejemplos mínimos se utilizan para
769 @item Informes de fallo
770 @item Solicitudes de ayuda a las listas de correo
771 @item Añadir ejemplos al @uref{http://lsr@/.dsi@/.unimi@/.it/,Repositorio de Fragmentos de Código de LilyPond}
775 Para construir un ejemplo que sea lo más pequeño posible, la regla es
776 bastante simple: quite todo lo que no sea necesario. Al tratar de
777 quitar partes innecesarias de un archivo, es una buena idea convertir
778 líneas en comentarios en vez de borrarlas. De esta forma, si descubre
779 que en realidad sí @emph{necesitaba} algunas de estas líneas, podrá
780 descomentarlas y no tendrá que teclearlas de nuevo partiendo de cero.
782 Existen dos excepciones a la regla del @qq{lo más pequeño posible}:
785 @item Incluya el número de @code{\version}.
786 @item Si puede, ponga @code{\paper@{ ragged-right=##t @}} al principio del ejemplo.
790 En resumen, el objetivo de un ejemplo mínimo es que sea fácil de leer:
793 @item Evite usar notas, tonalidades o compases demasiado complicados, a no ser que quiera
794 demostrar algo sobre el comportamiento de estos elementos precisamente.
795 @item No use instrucciones @code{\override} a no ser que ése sea el propósito
800 @node Scores and parts
801 @section Scores and parts
803 En música orquestal, todas las notas se imprimen dos veces. Una vez
804 en las particellas para los músicos, y otra para la partitura del
805 director. Los identificadores se pueden usar para evitar la
806 duplicación del trabajo. La música se escribe una vez y se almacena
807 en una variable. El contenido de dicha variable se usa después para
808 generar tanto la particella como la partitura del director.
810 Es muy conveniente definir las notas en un archivo especial. Por
811 ejemplo, supongamos que el archivo @file{trompa.ly} contiene la
812 siguiente parte de un dúo para trompa y fagot:
815 notasTrompa = \relative c @{
822 Luego se hace una particella escribiendo en un archivo lo siguiente
827 instrument = "Trompa en Fa"
831 \transpose f c' \notasTrompa
842 sustituye el contenido de @file{trompa.ly} en esta posición dentro del
843 archivo, así que @code{notasTrompa} se define con posterioridad. La
844 instrucción @code{\transpose f@tie{}c'} indica que el argumento
845 constituido por @code{\notasTrompa} se debe transponer una quinta
846 hacia arriba. Lo que suena como @code{f} se escribe como @code{c'},
847 lo que corresponde con el tono de afinación de una trompa normal
848 en@tie{}Fa. La transposición se puede ver en la siguiente salida
850 @lilypond[quote,ragged-right]
851 \transpose f c' \relative c {
857 En piezas para conjunto, con frecuencia una de las voces no suena
858 durante muchos compases. Esto queda denotado por un silencio
859 especial, el silencio multicompás. Se introduce con una @code{R}
860 mayúscula seguida de una duración (@code{1}@tie{}en el caso de la
861 redonda, @code{2}@tie{}en el caso de una blanca, etc.). Multiplicando
862 la duración se pueden construir silencios más largos. Por ejemplo,
863 este silencio ocupa 3@tie{}compases de 2/4
869 Cuando se imprime la particella tienen que comprimirse los silencios
870 multicompás. Esto se hace estableciendo una variable en tiempo de
874 \set Score.skipBars = ##t
878 Esta instrucción establece el valor de la propiedad @code{skipBars} en
879 el contexto de @code{Score} a verdadero (@code{##t}). Anteponiendo el
880 silencio y esta opción a la música anterior, llegamos al siguiente
883 @lilypond[quote,ragged-right]
884 \transpose f c' \relative c {
886 \set Score.skipBars = ##t
893 Esta partitura se hace combinando toda la música junta. Suponiendo
894 que la otra voz se encuentra dentro de @code{notasFagot} en el archivo
895 @file{fagot.ly}, la partitura se hace con
902 \new Staff \notasTrompa
903 \new Staff \notasFagot
910 @lilypond[quote,ragged-right]
918 r4 d,8 f | gis4 c | b bes |
919 a8 e f4 | g d | gis f
925 @node Make and Makefiles
926 @section Make and Makefiles
928 @cindex make, archivos de
931 Posiblemente todas las plataformas en que puede correr LilyPond,
932 contemplan una posibilidad de software llamada @code{make}. Este
933 programa lee un archivo especial llamado @code{Makefile} que define
934 las relaciones de dependencia entre los archivos y qué instrucciones
935 necesitamos dar al sistema operativo para producir un archivo a partir
936 de otro. Por ejemplo, el archivo de make detallaría cómo obtener
937 @code{balada.pdf} y @code{balada.midi} a partir de @code{balada.ly}
938 mediante la ejecución de Lilypond.
940 Existen ocasiones en las que es buena idea crear un @code{Makefile}
941 para nuestro proyecto, bien sea por nuestra propia comodidad o como
942 cortesía para otros que posiblemente tengan acceso a nuestros archivos
943 fuente. Esto es cierto para proyectos muy grandes con muchos archivos
944 de inclusión y distintas opciones de salida (p.ej. partitura completa,
945 particellas, partitura del director, reducción para piano, etc.), o
946 para proyectos que requieren instrucciones difíciles para montarlas
947 (como los proyectos de @code{lilypond-book}). La complejidad y
948 flexibilidad de los Makefiles varía enormemente según las necesidades
949 y la habilidad de los autores. El programa GNU Make viene instalado
950 en las distribuciones de GNU/Linux y en MacOS X, y también existe para
953 Consulte el @strong{Manual de GNU Make} para ver todos los detalles
954 sobre el uso de @code{make}, pues lo que sigue a continuación ofrece
955 solamente una pincelada de todo lo que es capaz de hacer.
957 Las instrucciones que definen las reglas en un archivo de make
958 difieren en función de la plataforma; por ejemplo, las distintas
959 formas de Linux y MacOS usan @code{bash}, mientras que Windows usa
960 @code{cmd}. Observeque en MacOS X, tenemos que configurar el sistema
961 para que utilice el intérprete de órdenes. A continuación presentamos
962 algunos makefiles de ejemplo, con versiones tanto para Linux/MacOS
965 El primer ejemplo es para una obra orquestal en cuatro movimientos con
966 la estructura de directorios siguiente:
977 | |-- trioCuerdas.ily
983 | |-- sinfonia-cello.ly
984 | |-- sinfonia-trompa.ly
985 | |-- sinfonia-oboes.ly
986 | |-- sinfonia-viola.ly
987 | |-- sinfonia-violinUno.ly
988 | `-- sinfonia-violinDos.ly
998 Los archivos @code{.ly} de los directorios @code{Partituras} y
999 @code{Particellas} obtienen las notas de archivos @code{.ily} que están en
1000 el directorio @code{Notas}:
1003 %%% principio del archivo "sinfonia-cello.ly"
1004 \include ../definiciones.ily
1005 \include ../Notas/cello.ily
1008 El makefile tendrá los objetivos de @code{partitura} (la pieza
1009 completa en todo su esplendor), @code{movimientos} (partitura completa
1010 de los movimientos individuales) y @code{particellas} (partes
1011 individuales para los atriles). También existe un objetivo
1012 @code{archivo} que produce un tarball de los archivos fuente, adecuado
1013 para compartirlo a través de la web o por correo electrónico. A
1014 continuación presentamos el makefile para GNU/Linux o MacOS X. Se
1015 debe guardar con el nombre exacto @code{Makefile} el el directorio
1016 superior del proyecto:
1018 @warning{Cuando se define un objetivo o una regla de patrón, las
1019 líneas siguientes deben comenzar con tabuladores, no con espacios.}
1022 # nombre principal de los archivos de salida
1024 # determinar cuántos procesadores existen
1025 CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//`
1026 # La instrucción para ejecutar lilypond
1027 LILY_CMD = lilypond -ddelete-intermediate-files \
1028 -dno-point-and-click -djob-count=$(CPU_CORES)
1030 # Los sufijos utilizados en este Makefile.
1031 .SUFFIXES: .ly .ily .pdf .midi
1033 # Los archivos de entrada y salida se buscan dentro de los directorios relacionados en
1034 # la variable VPATH. Todos esllos son subdirectorios del directorio
1035 # en curso (dado por la variable de GNU make `CURDIR').
1037 $(CURDIR)/Partituras \
1039 $(CURDIR)/Particellas \
1042 # La regla de patrón para crear archivos PDF y MIDI a partir de un archivo de entrada LY.
1043 # Los archivos de salida .pdf se colocan en el subdirectorio `PDF', y los archivos
1044 # .midi van al subdirectorio `MIDI'.
1046 $(LILY_CMD) $<; \ # esta línea comienza con un salto de tabulación
1047 if test -f "$*.pdf"; then \
1050 if test -f "$*.midi"; then \
1051 mv "$*.midi" MIDI/; \
1062 # Dependencias de los movimientos.
1063 $(nombre)I.pdf: $(nombre)I.ly $(notas)
1064 $(nombre)II.pdf: $(nombre)II.ly $(notas)
1065 $(nombre)III.pdf: $(nombre)III.ly $(notas)
1066 $(nombre)IV.pdf: $(nombre)IV.ly $(notas)
1068 # Dependencias de la partitura completa.
1069 $(nombre).pdf: $(nombre).ly $(notas)
1071 # Dependencias de las particellas.
1072 $(nombre)-cello.pdf: $(nombre)-cello.ly cello.ily
1073 $(nombre)-trompa.pdf: $(nombre)-trompa.ly trompa.ily
1074 $(nombre)-oboes.pdf: $(nombre)-oboes.ly oboe.ily
1075 $(nombre)-viola.pdf: $(nombre)-viola.ly viola.ily
1076 $(nombre)-violinUno.pdf: $(nombre)-violinUno.ly violinUno.ily
1077 $(nombre)-violinDos.pdf: $(nombre)-violinDos.ly violinDos.ily
1079 # Teclee `make partitura' para generer la partitura completa de los cuatro
1080 # movimientos como un archivo único.
1082 partitura: $(nombre).pdf
1084 # Teclee `make particellas' para generar todas las particellas.
1085 # Teclee `make fulanito.pdf' para generar la particella del instrumento `fulanito'.
1086 # Ejemplo: `make sinfonia-cello.pdf'.
1088 particellas: $(nombre)-cello.pdf \
1089 $(nombre)-violinUno.pdf \
1090 $(nombre)-violinDos.pdf \
1091 $(nombre)-viola.pdf \
1092 $(nombre)-oboes.pdf \
1093 $(nombre)-trompa.pdf
1095 # Teclee `make movimientos' para generar los archivos de los
1096 # cuatro movimientos de forma separada.
1098 movimientos: $(nombre)I.pdf \
1103 all: partitura particellas movimientos
1106 tar -cvvf stamitz.tar \ # esta línea comienza con un salto de tabulación
1107 --exclude=*pdf --exclude=*~ \
1108 --exclude=*midi --exclude=*.tar \
1113 Existen ciertas complicaciones en la plataforma Windows. Después de
1114 descargar e instalar el programa GNU Make para Windows, debemos
1115 configurar la ruta adecuada en las variables de entorno del sistema de
1116 forma que el shell del DOS pueda encontrar el programa Make. Para
1117 hacerlo, pulse con el botón derecho sobre "Mi PC", elija
1118 @code{Propiedades} y @code{Avanzadas}. Pulse sobre @code{Variables de
1119 entorno}, y luego en la pestaña @code{Variables del sistema},
1120 seleccione @code{Ruta}, pulse sobre @code{editar} y añada la ruta al
1121 archivo ejecutable de GNU Make, con lo que quedará algo parecido a lo
1125 C:\Archivos de programa\GnuWin32\bin
1128 El makefile en sí debe modificarse para que maneje distintas
1129 instrucciones del shell y para que pueda tratar con los espacios que
1130 aparecen en el nombre de algunos directorios del sistema
1131 predeterminados. El objetivo @code{archivo} se elimina porque Windows
1132 no tiene la instrucción @code{tar}, y Windows tiene también una
1133 extensión predeterminada distinta para los archivos MIDI.
1137 ## VERSIÓN PARA WINDOWS
1140 LILY_CMD = lilypond -ddelete-intermediate-files \
1141 -dno-point-and-click \
1142 -djob-count=$(NUMBER_OF_PROCESSORS)
1144 #obtener el nombre 8.3 de CURDIR (rodeo para los espacios en PATH)
1145 workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \
1148 .SUFFIXES: .ly .ily .pdf .mid
1151 $(workdir)/Partituras \
1153 $(workdir)/Particellas \
1157 $(LILY_CMD) $< # esta línea comienza con un salto de tabulación
1158 if exist "$*.pdf" move /Y "$*.pdf" PDF/ # comienzo con tab
1159 if exist "$*.mid" move /Y "$*.mid" MIDI/ # comienzo con tab
1171 $(nombre)I.pdf: $(nombre)I.ly $(notas)
1172 $(nombre)II.pdf: $(nombre)II.ly $(notas)
1173 $(nombre)III.pdf: $(nombre)III.ly $(notas)
1174 $(nombre)IV.pdf: $(nombre)IV.ly $(notas)
1176 $(nombre).pdf: $(nombre).ly $(notas)
1178 $(nombre)-cello.pdf: $(nombre)-cello.ly cello.ily
1179 $(nombre)-trompa.pdf: $(nombre)-trompa.ly trompa.ily
1180 $(nombre)-oboes.pdf: $(nombre)-oboes.ly oboe.ily
1181 $(nombre)-viola.pdf: $(nombre)-viola.ly viola.ily
1182 $(nombre)-violinUno.pdf: $(nombre)-violinUno.ly violinUno.ily
1183 $(nombre)-violinDos.pdf: $(nombre)-violinDos.ly violinDos.ily
1186 partitura: $(nombre).pdf
1189 particellas: $(nombre)-cello.pdf \
1190 $(nombre)-violinUno.pdf \
1191 $(nombre)-violinDos.pdf \
1192 $(nombre)-viola.pdf \
1193 $(nombre)-oboes.pdf \
1194 $(nombre)-trompa.pdf
1197 movimientos: $(nombre)I.pdf \
1202 all: partitura particellas movimientos
1206 El Makefile siguiente es para un documento de @command{lilypond-book}
1207 hecho en LaTeX. Este proyecto tiene un índice, que requiere ejecutar
1208 la instrucción @command{latex} dos veces para actualizar los enlaces.
1209 Todos los archivos de salida se almacenan en el directorio
1210 @code{salida} para los documentos .pdf y en el directorio
1211 @code{salidahtml} para la salida en formato html.
1220 LILYBOOK_PDF=lilypond-book --output=$(DIR_SALIDA) --pdf $(NOMBRE).lytex
1221 LILYBOOK_HTML=lilypond-book --output=$(DIR_WEB) $(NOMBRE).lytex
1222 PDF=cd $(DIR_SALIDA) && pdflatex $(NOMBRE)
1223 HTML=cd $(DIR_WEB) && latex2html $(NOMBRE)
1224 INDICE=cd $(DIR_SALIDA) && makeindex $(NOMBRE)
1225 VISTA_PREVIA=$(VISOR) $(DIR_SALIDA)/$(NOMBRE).pdf &
1227 all: pdf web guardar
1230 $(LILYBOOK_PDF) # comienza con un tab
1231 $(PDF) # comienza con un tab
1232 $(INDICE) # comienza con un tab
1233 $(PDF) # comienza con un tab
1234 $(VISTA_PREVIA) # comienza con un tab
1237 $(LILYBOOK_HTML) # comienza con un tab
1238 $(HTML) # comienza con un tab
1239 cp -R $(DIR_WEB)/$(NOMBRE)/ ./ # comienza con un tab
1240 $(NAVEGADOR) $(NOMBRE)/$(NOMBRE).html & # comienza con un tab
1243 cp $(DIR_SALIDA)/$(NOMBRE).pdf $(NOMBRE).pdf # comienza con un tab
1246 rm -rf $(DIR_SALIDA) # comienza con un tab
1249 rm -rf $(DIR_WEB) # comienza con un tab
1252 tar -cvvf miproyecto.tar \ # comienza con un tab
1253 --exclude=salida/* \
1254 --exclude=salidahtml/* \
1255 --exclude=miproyecto/* \
1262 HACER: conseguir que funcione en Windows
1264 El makefile anterior no funciona en Windows. Una alternativa para los
1265 usuarios de Windows sería crear un archivo de lotes sencillo que
1266 contenga las instrucciones de montaje. Esto no rastrea las
1267 dependencias en la manera en que lo hace un makefile, pero al menos
1268 reduce el proceso de construcción a una sola instrucción. Guarde el
1269 código siguiente como @command{montaje.bat} o @command{montaje.cmd}.
1270 El archivo de lotes se puede ejecutar en la línea de comandos del DOS
1271 o simplemente haciendo doble click sobre su icono.
1274 lilypond-book --output=salida --pdf miproyecto.lytex
1277 makeindex miproyecto
1280 copy salida\miproyecto.pdf MiProyecto.pdf
1285 Manual de utilización del programa:
1286 @rprogram{Setup for MacOS X},
1287 @rprogram{Command-line usage},
1288 @rprogram{LilyPond-book}