1 @c -*- coding: utf-8; mode: texinfo; -*-
2 @c This file is part of lilypond.tely
4 Translation of GIT committish: 5d9a6604876b66b860e78363521edc770ac5b455
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 * Saving typing with identifiers and functions::
23 * Updating old files::
24 * Troubleshooting (taking it all apart)::
29 @node Suggestions for writing LilyPond files
30 @section Suggestions for writing LilyPond files
32 En este momento está preparado para comenzar a escribir archivos de LilyPond más grandes -- no sólo los
33 pequeños ejemplos que aparecen en el tutorial, sino piezas completas --. Pero ¿cómo debe proceder
36 En la medida en que LilyPond entienda sus archivos y produzca la salida que usted
37 pretendía, realmente no importa mucho qué aspecto tengan sus archivos. Sin embargo
38 existen algunas otras cosas a tener en cuenta cuando se escriben archivos de LilyPond.
41 @item ¿Qué ocurre si comete un fallo? La estructura de un archivo
42 lilypond puede hacer que ciertos errores se hagan más fáciles (o 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 años?
46 Algunos archivos de lilypond se comprenden a primera vista;
47 otros pueden tenerle rascándose la cabeza
50 @item ¿Qué ocurre si quiere actualizar su archivo de lilypond para poderlo usar con
51 una versión más reciente del programa? La sintaxis de la entrada se modifica
52 de forma ocasional según lilypond se va perfeccionando. Casi todos los cambios se pueden
53 hacer de forma automática con @code{convert-ly}, pero algunos podrían necesitar de una
54 ayuda manual. Los archivos de LilyPond se pueden estructurar para que sean
55 más fáciles (o más difíciles) de actualizar.
59 * General suggestions::
60 * Typesetting existing music::
65 @node General suggestions
66 @subsection General suggestions
68 Presentamos algunas sugerencias que pueden serle de ayuda para evitar
72 @item @strong{Incluya los números de @code{\version} en todos los archivos}. Dése cuenta de que todas las
73 plantillas contienen una cadena como @code{\version "2.11.15"}. Le recomendamos
74 mucho que siempre incluya la @code{\version}, sin importar cuán
75 pequeño pueda ser su archivo. Desde la experiencia personal podemos decirle que es bastante frustrante
76 intentar recordar el número de versión de LilyPond que estaba usando hace unos años.
77 @code{convert-ly} requiere que declare
78 qué versión de LilyPond utilizó.
80 @item @strong{Incluya comprobaciones}: @ref{Bar check}, @ref{Octave check} y
81 @ref{Barnumber check}. Si
82 incluye comprobaciones de vez en cuando, en caso de que cometa un error podrá localizarlo mucho más rápidamente.
83 ¿Con qué frecuencia es @q{de vez en cuando}? Depende de la complejidad
84 de la música. Para una música muy sencilla, quizá tan sólo una o dos veces. Para
85 una música muy compleja, quizá a cada compás.
87 @item @strong{Un compás por cada línea de texto}. Si hay algo muy complicado, ya sea
89 o en la salida que desea producir, a menudo conviene escribir un solo compás
90 por cada línea. El ahorro en espacio de pantalla que se obtiene al amontonar ocho compases por línea no merece la pena
91 si luego tiene que @q{depurar} los archivos.
93 @item @strong{Comente los archivos}. Utilice o números de compás (de vez en cuando)
95 referencias a temas musicales (@q{segundo tema de los violines,} @q{cuarta
96 variación,} etc.). Puede que no necesite comentarios cuando introduce una pieza por vez primera,
97 pero si quiere volver a ella o modificar algo al cabo de dos o tres años,
98 y también si le pasa la fuente a un amigo,
100 determinar sus intenciones o de qué manera estaba estructurado el archivo
101 si no le añadió los comentarios.
103 @item @strong{Aplique márgenes a las llaves}. Muchos problemas están causados por una
105 en el número de @code{@{} y @code{@}}.
107 @item @strong{Escriba las duraciones explícitamente} al comienzo de las secciones
108 e identificadores. Si especifica @code{c4 d e} al principio de una frase
109 (en lugar de sólo @code{c d e}) se puede ahorrar problemas
110 si reelabora la música más tarde.
112 @item @strong{Separe los trucos} de las definiciones musicales. Consulte
113 @ref{Saving typing with identifiers and functions} y
119 @node Typesetting existing music
120 @subsection Typesetting existing music
122 Si está introduciendo música a partir de una partitura existente (es decir, tipografiando una hoja
123 de música ya impresa),
127 @item Introduzca un sistema del manuscrito (la copia física) cada vez (pero mantenga
128 la práctica de escibir un compás por línea de texto), y
129 compruebe cada sistema cuando lo haya terminado. Puede usar el comando
130 @code{showLastLength} para acelerar el proceso -- ver
131 @ref{Skipping corrected music} -- .
133 @item Defina @code{mBreak = @{ \break @}} e inserte @code{\mBreak}
134 dentro del archivo de entrada donde el manuscrito tenga un saldo de línea. De esta forma
135 le resultará mucho más fácil comparar la música de LilyPond con la original.
136 Cuando haya terminado de revisar su partitura podrá
137 definir @code{mBreak = @{ @}} para quitar todos esos saltos de línea. Así
138 permitirá a LilyPond colocar los saltos donde éste lo estime
145 @subsection Large projects
147 Al trabajar en proyecto grande se hace esencial tener una estructura clara
148 en los archivos de lilypond.
152 @item @strong{Utilice un identificador para cada voz}, con un mínimo de
153 estructura dentro de la definición. La estructura de la sección
154 @code{\score} es la que cambiará con mayor probabilidad; por contra, es
155 extremadamente improbable que cambie la definición de @code{violin} en
156 versiones nuevas de LilyPond.
159 violin = \relative c'' @{
172 @item @strong{Separe los trucos de las definiciones musicales}. Ya se mencionó
173 en @ref{General suggestions}, pero para proyectos
174 grandes es vital. Quizá tengamos que cambiar la
175 definición de @code{fthenp}, pero en ese caso sólo lo tendremos que
176 hacer una vez, y aún podremos evitar tocar nada
177 dentro de @code{violin}.
181 \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @}
182 violin = \relative c'' @{
190 @node Saving typing with identifiers and functions
191 @section Saving typing with identifiers and functions
194 @cindex identificadores
196 Llegado a este punto, usted ha visto cosas de este tipo:
198 @lilypond[quote,verbatim,ragged-right]
199 hornNotes = \relative c'' { c4 b dis c }
207 Incluso se dará cuenta de que esto puede ser útil en música minimalista:
209 @lilypond[quote,verbatim,ragged-right]
210 fragA = \relative c'' { a4 a8. b16 }
211 fragB = \relative c'' { a8. gis16 ees4 }
212 violin = \new Staff { \fragA \fragA \fragB \fragA }
220 Sin embargo también puede usar estos identificadores (que también se conocen como
221 variables, macros o comandos definidos por el usuario) para hacer trucos:
223 @lilypond[quote,verbatim,ragged-right]
224 dolce = \markup{ \italic \bold dolce }
225 padText = { \once \override TextScript #'padding = #5.0 }
226 fthenp=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p }
227 violin = \relative c'' {
229 c4._\dolce b8 a8 g a b |
231 c4.^"hi there!" d8 e' f g d |
232 c,4.\fthenp b8 c4 c-. |
239 \layout{ragged-right=##t}
243 Obviamente estos identificadores son útiles para ahorrar tecleo.
244 Pero son dignos de tener en cuenta incluso si se van a utilizar una sola vez:
245 reducen la complejidad. Examinemos
246 el ejemplo anterior reescrito sin ningún identificador.
247 Encontrará que es mucho más difícil de leer, sobre todo
251 violin = \relative c'' @{
253 c4._\markup@{ \italic \bold dolce @} b8 a8 g a b |
254 \once \override TextScript #'padding = #5.0
255 c4.^"hi there!" d8 e' f g d |
256 c,4.\markup@{ \dynamic f \italic \small @{ 2nd @}
257 \hspace #0.1 \dynamic p @} b8 c4 c-. |
262 Hasta ahora hemos contemplado la sustitucion estática: cuando LilyPond
263 se encuentra con @code{\padText}, lo sustituye con aquello que
264 hemos definido que sea (es decir, todo lo que está a la derecha de
267 LilyPond también puede manejar sustituciones no estáticas (piense en ellas
270 @lilypond[quote,verbatim,ragged-right]
272 #(define-music-function (parser location padding) (number?)
274 \once \override TextScript #'padding = #$padding
282 c4^"piu mosso" fis a g
286 La utilización de identificadores también es una buena forma de reducir el trabajo si
287 la sintaxis de entrada de LilyPond cambia (ver @ref{Updating old files}). Si
288 tiene una sola definición (como p.ej. @code{\dolce}) para todos sus
289 archivos (ver @ref{Style sheets}), y después la sintaxis se modifica, sólo tendrá
290 que actualizar su definición @code{\dolce} única,
291 en lugar de tener que hacer cambios en cada uno de los archivos @code{.ly}.
295 @section Style sheets
297 La salida que produce LilyPond se puede modificar profundamente; consulte
298 @ref{Tweaking output} para leer detalles sobre este asunto. Pero ¿qué ocurre si tiene muchos
299 archivos a los que les quiere aplicar sus porpios trucos? O ¿qué ocurre si, sencillamente,
300 quiere separar los trucos de la propia música? Todo esto
301 es bastante fácil de conseguir.
303 Veamos un ejemplo. No se preocupe si no entiende
304 las partes que tienen todos los @code{#()}. Esto se explicará en
305 @ref{Advanced tweaks with Scheme}.
307 @lilypond[quote,verbatim,ragged-right]
308 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
309 #:line(#:dynamic "mp" #:text #:italic "dolce" )))
310 tempoMark = #(define-music-function (parser location markp) (string?)
312 \once \override Score . RehearsalMark #'self-alignment-X = #left
313 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
314 \mark \markup { \bold $markp }
319 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
320 \tempoMark "Poco piu mosso"
321 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
325 Existen varios problemas con la salida que se superpone; los arreglaremos utilizando
326 las técnicas descritas en @ref{Moving objects}. Pero también haremos algo respecto a
327 las definiciones @code{mpdolce} y @code{tempoMark}. Éstas producen la salida que
328 deseamos, pero quizá las querríamos utilizar en otra pieza.
329 Podríamos simplemente copiarlas y pegarlas al principio de cada archivo,
330 pero sería bastente molesto. También hace que se queden las definiciones
331 a la vista dentro de nuestros archivos de música, y yo personalmente encuentro
332 todos los @code{#()} bastante poco estéticos. Los vamos a esconder dentro de otro archivo:
335 %%% guardar esto en un archivo de nombre "definiciones.ly"
336 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
337 #:line(#:dynamic "mp" #:text #:italic "dolce" )))
338 tempoMark = #(define-music-function (parser location markp) (string?)
340 \once \override Score . RehearsalMark #'self-alignment-X = #left
341 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
342 \mark \markup @{ \bold $markp @}
346 Ahora modificaremos la música (guardemos este archivo como @file{"musica.ly"}).
348 @c We have to do this awkward example/lilypond-non-verbatim
349 @c because we can't do the \include stuff in the manual.
352 \include "definiciones.ly"
356 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
357 \once \override Score.RehearsalMark #'padding = #2.0
358 \tempoMark "Poco piu mosso"
359 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
363 @lilypond[quote,ragged-right]
364 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
365 #:line(#:dynamic "mp" #:text #:italic "dolce" )))
366 tempoMark = #(define-music-function (parser location markp) (string?)
368 \once \override Score . RehearsalMark #'self-alignment-X = #left
369 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
370 \mark \markup { \bold $markp }
375 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
376 \once \override Score.RehearsalMark #'padding = #2.0
377 \tempoMark "Poco piu mosso"
378 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
382 Eso tiene mejor aspecto, pero haremos algunos cambios más. El glissando es difícil
383 de ver, así que lo haremos más grueso y lo acercaremos a las cabezas de las notas. Pondremos
384 la indicación metronómica encima de la clave, en lugar de ir encima de la primera
385 nota. Y por último, mi profesor de composición odia las indicaciones de compás @q{C},
386 así que la convertiremos en @q{4/4}.
388 Sin embargo, no debe cambiar el archivo @file{musica.ly}. Sustituya nuestro archivo @file{definiciones.ly}
393 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
394 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
395 tempoMark = #(define-music-function (parser location markp) (string?)
397 \once \override Score . RehearsalMark #'self-alignment-X = #left
398 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
399 \mark \markup @{ \bold $markp @}
404 \override MetronomeMark #'extra-offset = #'(-9 . 0)
405 \override MetronomeMark #'padding = #'3
408 \override TimeSignature #'style = #'numbered
411 \override Glissando #'thickness = #3
412 \override Glissando #'gap = #0.1
417 @lilypond[quote,ragged-right]
418 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
419 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
420 tempoMark = #(define-music-function (parser location markp) (string?)
422 \once \override Score . RehearsalMark #'self-alignment-X = #left
423 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
424 \mark \markup { \bold $markp }
429 \override MetronomeMark #'extra-offset = #'(-9 . 0)
430 \override MetronomeMark #'padding = #'3
433 \override TimeSignature #'style = #'numbered
436 \override Glissando #'thickness = #3
437 \override Glissando #'gap = #0.1
443 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
444 \once \override Score.RehearsalMark #'padding = #2.0
445 \tempoMark "Poco piu mosso"
446 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
450 ¡Eso tiene un aspecto mucho mejor! Ahora suponga que quier publicar esta
451 pieza. A mi profesor de composición no le gustan las indicaciones de compás @q{C},
452 pero yo les tengo cierto cariño. Copiaremos el archivo
453 actual @file{definiciones.ly} a @file{publicar-web.ly} y modificaremos
454 éste. Como el propósito de esta música es producir un PDF que va a mostrarse
455 en la pantalla, también vamos a aumentar el
456 tamaño general de la salida.
460 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
461 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
462 tempoMark = #(define-music-function (parser location markp) (string?)
464 \once \override Score . RehearsalMark #'self-alignment-X = #left
465 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
466 \mark \markup @{ \bold $markp @}
469 #(set-global-staff-size 23)
472 \override MetronomeMark #'extra-offset = #'(-9 . 0)
473 \override MetronomeMark #'padding = #'3
478 \override Glissando #'thickness = #3
479 \override Glissando #'gap = #0.1
484 @lilypond[quote,ragged-right]
485 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
486 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
487 tempoMark = #(define-music-function (parser location markp) (string?)
489 \once \override Score . RehearsalMark #'self-alignment-X = #left
490 \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
491 \mark \markup { \bold $markp }
494 #(set-global-staff-size 23)
497 \override MetronomeMark #'extra-offset = #'(-9 . 0)
498 \override MetronomeMark #'padding = #'3
501 \override Glissando #'thickness = #3
502 \override Glissando #'gap = #0.1
508 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
509 \once \override Score.RehearsalMark #'padding = #2.0
510 \tempoMark "Poco piu mosso"
511 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
515 Ahora, en la música, simplemente sustituyo
516 @code{\include "definiciones.ly"} por
517 @code{\include "publicar-web.ly"}. Por supuesto, podríamos hacer esto aún más
518 práctico. Podríamos hacer un archivo @file{definiciones.ly} que contuviera
519 solamente las definiciones de @code{mpdolce} y @code{tempoMark}, un archivo
520 @file{web-publish.ly} que contuviera solamente la sección @code{\layout}
521 que se mostró en el ejemplo, y un archivo @file{universidad.ly} que contendría
522 solamente los trucos para producir la salida que le gusta a mi
523 profesor. La parte más alta de @file{musica.ly} tendría entonces este aspecto:
526 \include "definiciones.ly"
528 %%% ¡Quitar el comentario de una sola de estas líneas!
529 \include "publicar-web.ly"
530 %\include "universidad.ly"
533 Este enfoque puede ser útil incluso si va a producir sólo un conjunto de particellas.
534 Yo utilizo media docena de archivos de
535 @q{hojas de estilo} para mis proyectos. Comienzo todos los archivos de música con
536 @code{\include "../global.ly"}, que contiene
541 #(ly:set-option 'point-and-click #f)
542 \include "../iniciar/iniciar-definiciones.ly"
543 \include "../iniciar/iniciar-disposicion.ly"
544 \include "../iniciar/iniciar-cabeceras.ly"
545 \include "../iniciar/iniciar-papel.ly"
549 @node Updating old files
550 @section Updating old files
552 La sintaxis de la entrada de LilyPond cambia de manera ocasional. A medida que el propio
553 LilyPond mejora, la sintaxis (el lenguaje de la entrada) se modifica en consonancia. A
554 veces estos cambios se hacen para conseguir que la entrada sea más fácil de leer y escribir, y
555 otras veces estos cambios son para dar cabida a nuevas funcionalidades de LilyPond.
557 LilyPond lleva incorporado un archivo que facilita esta actualización:
558 @code{convert-ly}. Para ver detalles sobre cómo ejecutar este programa, consulte
559 @rprogram{Updating files with convert-ly}.
561 Desgraciadamente @code{convert-ly} no puede tratar todos los cambios en la entrada.
562 Se ocupa de los cambios sencillos de búsqueda y sustitución (como @code{raggedright}
563 que se convierte en @code{ragged-right}), pero algunos cambios son demasiado
564 complicados. Los cambios de sintaxis que @code{convert-ly} es incapaz de manejar
565 se relacionan en @rprogram{Updating files with convert-ly}.
567 Por ejemplo, en la versión 2.4 y anteriores de LilyPond,
568 los acentos y las letras no inglesas se introducían utilizando
569 LaTeX: por ejemplo, @samp{No\"el} (que significa @q{Navidad} en francés).
570 En LilyPond 2.6 y siguientes, el carácter especial @samp{ë}
571 debe introducirse directamente en el archivo de LilyPond como un carácter UTF-8.
572 @code{convert-ly} no puede cambiar todos los caracteres especiales
573 de LaTeX a caracteres de UTF-8; tendrá que actualizar manualmente
574 sus archivos de LilyPond antiguos.
577 @node Troubleshooting (taking it all apart)
578 @section Troubleshooting (taking it all apart)
580 Antes o después escribirá un archivo que LilyPond no podrá compilar.
581 Los mensajes que LilyPond proporciona pueden ayudarle a encontrar el
582 error, pero en muchos casos tendrá que llevar a cabo algún tipo de
583 investigación para determinar el origen del problema.
585 Las herramientas más poderosas para este cometido son el
586 comentario de una sola línea (indicado por @code{%}) y el comentario de bloque
587 (indicado por @code{%@{ ... %@}}). Si no sabe dónde está
588 el problema, comience coviertiendo grandes secciones del
589 archivo de entrada en un comentario. Después de eliminar una
590 sección convirtiéndola en un comentario, pruebe a compilar el
591 archivo otra vez. Si funciona, entonces el problema debía estar
592 en la porción que había eliminado. Si no funciona, continúe eliminando material
593 (transformándolo en comentarios) hasta que tenga algo que funcione.
595 En un caso extremo podría terminar con sólo
609 (en otras palabras: un archivo sin música)
611 Si ocurre esto, no abandone. Descomente un trozo pequeño -- digamos
612 la parte del bajo -- y observe si funciona. Si no es así,
613 transforme en comentarios toda la música del bajo (pero deje el
614 @code{\bajo} de la sección @code{\score} no comentado.
617 bajo = \relative c' @{
625 Ahora empiece poco a poco descomentando cada vez más fracciones de la
626 parte del @code{bajo} hasta que encuentre la línea del problema.
628 Otra técnica de depuración muy útil es la construcción de
629 @ref{Minimal examples}.
632 @node Minimal examples
633 @section Minimal examples
635 Un ejemplo mínimo es un ejemplo tan pequeño como sea posible. Estos
636 ejemplos son mucho más fáciles de comprender que los ejemplos largos. Los ejemplos
637 mínimos se utilizan para
640 @item Informes de fallo
641 @item Solicitudes de ayuda a las listas de correo
642 @item Añadir ejemplos al @uref{http://lsr@/.dsi@/.unimi@/.it/,Repositorio de Fragmentos de Código de LilyPond}
646 Para construir un ejemplo que sea lo más pequeño posible, la regla es
647 bastante simple: quite todo lo que no sea necesario. Al tratar de
648 quitar partes innecesarias de un archivo, es una buena idea convertir líneas en
649 comentarios en vez de borrarlas. De esta forma, si descubre que en realidad
650 sí @emph{necesitaba} algunas de estas líneas, podrá descomentarlas y no tendrá que
651 teclearlas de nuevo partiendo de cero.
653 Existen dos excepciones a la regla del @qq{lo más pequeño posible}:
656 @item Incluya el número de @code{\version}.
657 @item Si puede, ponga @code{\paper@{ ragged-right=##t @}} al principio del ejemplo.
661 En resumen, el objetivo de un ejemplo mínimo es que sea fácil de leer:
664 @item Evite usar notas, tonalidades o compases demasiado complicados, a no ser que quiera
665 demostrar algo sobre el comportamiento de estos elementos precisamente.
666 @item No use comandos @code{\override} a no ser que ése sea el propósito