]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/es/user/working.itely
Doc-de: update macros.itely and nitpicks
[lilypond.git] / Documentation / es / user / working.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: d4f58bb3ad4e7fe1967a6b48f25e3addffc8aa14
5
6     When revising a translation, copy the HEAD committish of the
7     version that you are working on.  See TRANSLATION for details.
8 @end ignore
9
10 @c \version "2.12.0"
11
12 @node Working on LilyPond projects
13 @chapter Working on LilyPond projects
14
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.
19
20
21 @menu
22 * Suggestions for writing LilyPond input files::
23 * When things don't work::
24 * Scores and parts::
25 * Make and Makefiles::
26 @end menu
27
28
29 @node Suggestions for writing LilyPond input files
30 @section Suggestions for writing LilyPond input files
31
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
35 hacerlo?
36
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.
41
42 @itemize
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.
46
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.
51
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.
59
60 @end itemize
61
62 @menu
63 * General suggestions::
64 * Typesetting existing music::
65 * Large projects::
66 * Saving typing with variables and functions::
67 * Style sheets::
68 @end menu
69
70
71 @node General suggestions
72 @subsection General suggestions
73
74 Presentamos algunas sugerencias que le pueden servir de ayuda para evitar
75 o corregir problemas:
76
77 @itemize
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
85 utilizó.
86
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
93 compás.
94
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.
100
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
108 comentarios.
109
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{@}}.
112
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.
117
118 @item @strong{Separe los trucos} de las definiciones musicales.  Consulte
119 @ref{Saving typing with variables and functions} y
120 @ref{Style sheets}.
121
122 @end itemize
123
124
125 @node Typesetting existing music
126 @subsection Typesetting existing music
127
128 Si está introduciendo música a partir de una partitura existente (es
129 decir, tipografiando una hoja de música ya impresa),
130
131 @itemize
132
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} -- .
138
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.
146
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
149
150 @example
151 \transpose c altura-natural @{...@}
152 @end example
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
161 coherente.
162
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.
167
168 @end itemize
169
170
171 @node Large projects
172 @subsection Large projects
173
174 Al trabajar en proyecto grande se hace esencial tener una estructura clara
175 en los archivos de LilyPond
176
177 @itemize
178
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.
184
185 @example
186 violin = \relative c'' @{
187 g4 c'8. e16
188 @}
189 ...
190 \score @{
191   \new GrandStaff @{
192     \new Staff @{
193       \violin
194     @}
195   @}
196 @}
197 @end example
198
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}.
204
205 @example
206 fluegop = _\markup@{
207   \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @}
208 violin = \relative c'' @{
209 g4\fluegop c'8. e16
210 @}
211 @end example
212
213 @end itemize
214
215
216 @node Saving typing with variables and functions
217 @subsection Saving typing with variables and functions
218
219 @cindex variables
220 @cindex identificadores
221
222 Llegado a este punto, usted ha visto cosas de este tipo:
223
224 @lilypond[quote,verbatim,ragged-right]
225 hornNotes = \relative c'' { c4 b dis c }
226 \score {
227   {
228     \hornNotes
229   }
230 }
231 @end lilypond
232
233 Incluso se dará cuenta de que esto puede ser útil en música
234 minimalista:
235
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 }
240 \score {
241   {
242     \violin
243   }
244 }
245 @end lilypond
246
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:
250
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'' {
256   \repeat volta 2 {
257     c4._\dolce b8 a8 g a b |
258     \padText
259     c4.^"hi there!" d8 e' f g d |
260     c,4.\fthenp b8 c4 c-. |
261   }
262 }
263 \score {
264   {
265     \violin
266   }
267 \layout{ragged-right=##t}
268 }
269 @end lilypond
270
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.
276
277 @example
278 violin = \relative c'' @{
279   \repeat volta 2 @{
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-. |
285   @}
286 @}
287 @end example
288
289 @c TODO Replace the following with a better example  -td
290 @c Skylining handles this correctly without padText
291
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
295 @code{padtext=}).
296
297 LilyPond también puede manejar sustituciones no estáticas (piense en
298 ellas como en funciones).
299
300 @lilypond[quote,verbatim,ragged-right]
301 padText =
302 #(define-music-function (parser location padding) (number?)
303   #{
304     \once \override TextScript #'padding = #$padding
305   #})
306
307 \relative c''' {
308   c4^"piu mosso" b a b
309   \padText #1.8
310   c4^"piu mosso" d e f
311   \padText #2.6
312   c4^"piu mosso" fis a g
313 }
314 @end lilypond
315
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 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}.
323
324
325 @node Style sheets
326 @subsection Style sheets
327
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
333 conseguir.
334
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}.
338
339 @lilypond[quote,verbatim,ragged-right]
340 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
341   #:line(#:dynamic "mp" #:text #:italic "dolce" )))
342
343 inst = #(define-music-function (parser location string) (string?)
344   (make-music
345     'TextScriptEvent
346     'direction UP
347     'text (markup #:bold (#:box string))))
348
349 \relative c'' {
350   \tempo 4=50
351   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
352   \inst "Clarinet"
353   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
354 }
355 @end lilypond
356
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:
367
368 @example
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" )))
372
373 inst = #(define-music-function (parser location string) (string?)
374   (make-music
375     'TextScriptEvent
376     'direction UP
377     'text (markup #:bold (#:box string))))
378 @end example
379
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"}).
386
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.
389
390 @example
391 \include "definiciones.ily"
392
393 \relative c'' @{
394   \tempo 4=50
395   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
396   \inst "Clarinete"
397   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
398 @}
399 @end example
400
401 @lilypond[quote,ragged-right]
402 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
403   #:line(#:dynamic "mp" #:text #:italic "dolce" )))
404
405 inst = #(define-music-function (parser location string) (string?)
406   (make-music
407     'TextScriptEvent
408     'direction UP
409     'text (markup #:bold (#:box string))))
410
411 \relative c'' {
412   \tempo 4=50
413   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
414   \inst "Clarinet"
415   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
416 }
417 @end lilypond
418
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}.
424
425 Sin embargo, no debemos cambiar el archivo @file{musica.ly}.
426 Sustituyamos nuestro archivo @file{definiciones.ily} con éste:
427
428 @example
429 %%%  definiciones.ily
430 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
431   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
432
433 inst = #(define-music-function (parser location string) (string?)
434   (make-music
435     'TextScriptEvent
436     'direction UP
437     'text (markup #:bold (#:box string))))
438
439 \layout@{
440   \context @{ \Score
441     \override MetronomeMark #'extra-offset = #'(-9 . 0)
442     \override MetronomeMark #'padding = #'3
443   @}
444   \context @{ \Staff
445     \override TimeSignature #'style = #'numbered
446   @}
447   \context @{ \Voice
448     \override Glissando #'thickness = #3
449     \override Glissando #'gap = #0.1
450   @}
451 @}
452 @end example
453
454 @lilypond[quote,ragged-right]
455 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
456   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
457
458 inst = #(define-music-function (parser location string) (string?)
459   (make-music
460     'TextScriptEvent
461     'direction UP
462     'text (markup #:bold (#:box string))))
463
464 \layout{
465   \context { \Score
466     \override MetronomeMark #'extra-offset = #'(-9 . 0)
467     \override MetronomeMark #'padding = #'3
468   }
469   \context { \Staff
470     \override TimeSignature #'style = #'numbered
471   }
472   \context { \Voice
473     \override Glissando #'thickness = #3
474     \override Glissando #'gap = #0.1
475   }
476 }
477
478 \relative c'' {
479   \tempo 4=50
480   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
481   \inst "Clarinet"
482   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
483 }
484 @end lilypond
485
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.
493
494 @example
495 %%%  definiciones.ily
496 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
497   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
498
499 inst = #(define-music-function (parser location string) (string?)
500   (make-music
501     'TextScriptEvent
502     'direction UP
503     'text (markup #:bold (#:box string))))
504
505 #(set-global-staff-size 23)
506 \layout@{
507   \context @{ \Score
508     \override MetronomeMark #'extra-offset = #'(-9 . 0)
509     \override MetronomeMark #'padding = #'3
510   @}
511   \context @{ \Staff
512   @}
513   \context @{ \Voice
514     \override Glissando #'thickness = #3
515     \override Glissando #'gap = #0.1
516   @}
517 @}
518 @end example
519
520 @lilypond[quote,ragged-right]
521 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
522   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
523
524 inst = #(define-music-function (parser location string) (string?)
525   (make-music
526     'TextScriptEvent
527     'direction UP
528     'text (markup #:bold (#:box string))))
529
530 #(set-global-staff-size 23)
531 \layout{
532   \context { \Score
533     \override MetronomeMark #'extra-offset = #'(-9 . 0)
534     \override MetronomeMark #'padding = #'3
535   }
536   \context { \Voice
537     \override Glissando #'thickness = #3
538     \override Glissando #'gap = #0.1
539   }
540 }
541
542 \relative c'' {
543   \tempo 4=50
544   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
545   \inst "Clarinet"
546   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
547 }
548 @end lilypond
549
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:
560
561 @example
562 \include "definiciones.ily"
563
564 %%%  ¡Quitar el comentario de una sola de estas líneas!
565 \include "publicar-web.ily"
566 %\include "universidad.ily"
567 @end example
568
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
573
574 @example
575 %%%   global.ily
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"
582 @end example
583
584
585 @node When things don't work
586 @section When things don't work
587
588 @menu
589 * Updating old files::
590 * Troubleshooting (taking it all apart)::
591 * Minimal examples::
592 @end menu
593
594 @node Updating old files
595 @subsection Updating old files
596
597 La sintaxis de la entrada de LilyPond cambia de manera ocasional.  A
598 medida que el propio LilyPond mejora, la sintaxis (el lenguaje de la
599 entrada) se modifica en consonancia.  A veces estos cambios se hacen
600 para conseguir que la entrada sea más fácil de leer y escribir, y
601 otras veces estos cambios son para dar cabida a nuevas funcionalidades
602 de LilyPond.
603
604 LilyPond lleva incorporado un archivo que facilita esta actualización:
605 @code{convert-ly}.  Para ver detalles sobre cómo ejecutar este
606 programa, consulte @rprogram{Updating files with convert-ly}.
607
608 Desgraciadamente @code{convert-ly} no puede tratar todos los cambios
609 en la entrada.  Se ocupa de los cambios sencillos de búsqueda y
610 sustitución (como @code{raggedright} que se convierte en
611 @code{ragged-right}), pero algunos cambios son demasiado complicados.
612 Los cambios de sintaxis que @code{convert-ly} es incapaz de manejar se
613 relacionan en @rprogram{Updating files with convert-ly}.
614
615 Por ejemplo, en la versión 2.4 y anteriores de LilyPond, los acentos y
616 las letras no inglesas se introducían utilizando LaTeX: por ejemplo,
617 @code{No\"el} (que significa @q{Navidad} en francés).  En LilyPond 2.6
618 y siguientes, el carácter especial @code{ë} debe introducirse
619 directamente en el archivo de LilyPond como un carácter UTF-8.
620 @code{convert-ly} no puede cambiar todos los caracteres especiales de
621 LaTeX a caracteres de UTF-8; tendrá que actualizar manualmente sus
622 archivos de LilyPond antiguos.
623
624
625 @node Troubleshooting (taking it all apart)
626 @subsection Troubleshooting (taking it all apart)
627
628 Antes o después escribirá un archivo que LilyPond no podrá compilar.
629 Los mensajes que LilyPond proporciona pueden ayudarle a encontrar el
630 error, pero en muchos casos tendrá que llevar a cabo algún tipo de
631 investigación para determinar el origen del problema.
632
633 Las herramientas más poderosas para este cometido son el comentario de
634 una sola línea (indicado por @code{%}) y el comentario de bloque
635 (indicado por @code{%@{ ... %@}}).  Si no sabe dónde está el problema,
636 comience convirtiendo grandes secciones del archivo de entrada en un
637 comentario.  Después de eliminar una sección convirtiéndola en un
638 comentario, pruebe a compilar el archivo otra vez.  Si funciona,
639 entonces el problema debía estar en la porción que había eliminado.
640 Si no funciona, continúe eliminando material (transformándolo en
641 comentarios) hasta que tenga algo que funcione.
642
643 En un caso extremo podría terminar con sólo
644
645 @example
646 \score @{
647   <<
648     % \melodia
649     % \armonia
650     % \bajo
651   >>
652   \layout@{@}
653 @}
654 @end example
655
656 @noindent
657 (en otras palabras: un archivo sin música)
658
659 Si ocurre esto, no abandone.  Descomente un trozo pequeño -- digamos
660 la parte del bajo -- y observe si funciona.  Si no es así, transforme
661 en comentarios toda la música del bajo (pero deje el @code{\bajo} de
662 la sección @code{\score} no comentado.
663
664 @example
665 bajo = \relative c' @{
666 %@{
667   c4 c c c
668   d d d d
669 %@}
670 @}
671 @end example
672
673 Ahora empiece poco a poco descomentando cada vez más fracciones de la
674 parte del @code{bajo} hasta que encuentre la línea del problema.
675
676 Otra técnica de depuración muy útil es la construcción de
677 @ref{Minimal examples}.
678
679
680 @node Minimal examples
681 @subsection Minimal examples
682
683 Un ejemplo mínimo es un ejemplo tan pequeño como sea posible.  Estos
684 ejemplos son mucho más fáciles de comprender que los ejemplos largos.
685 Los ejemplos mínimos se utilizan para
686
687 @itemize
688 @item Informes de fallo
689 @item Solicitudes de ayuda a las listas de correo
690 @item Añadir ejemplos al @uref{http://lsr@/.dsi@/.unimi@/.it/,Repositorio de Fragmentos de Código de LilyPond}
691 @end itemize
692
693
694 Para construir un ejemplo que sea lo más pequeño posible, la regla es
695 bastante simple: quite todo lo que no sea necesario.  Al tratar de
696 quitar partes innecesarias de un archivo, es una buena idea convertir
697 líneas en comentarios en vez de borrarlas.  De esta forma, si descubre
698 que en realidad sí @emph{necesitaba} algunas de estas líneas, podrá
699 descomentarlas y no tendrá que teclearlas de nuevo partiendo de cero.
700
701 Existen dos excepciones a la regla del @qq{lo más pequeño posible}:
702
703 @itemize
704 @item Incluya el número de @code{\version}.
705 @item Si puede, ponga @code{\paper@{ ragged-right=##t @}} al principio del ejemplo.
706 @end itemize
707
708
709 En resumen, el objetivo de un ejemplo mínimo es que sea fácil de leer:
710
711 @itemize
712 @item Evite usar notas, tonalidades o compases demasiado complicados, a no ser que quiera
713 demostrar algo sobre el comportamiento de estos elementos precisamente.
714 @item No use instrucciones @code{\override} a no ser que ése sea el propósito
715 del ejemplo.
716 @end itemize
717
718
719 @node Scores and parts
720 @section Scores and parts
721
722 En música orquestal, todas las notas se imprimen dos veces.  Una vez
723 en las particellas para los músicos, y otra para la partitura del
724 director.  Los identificadores se pueden usar para evitar la
725 duplicación del trabajo.  La música se escribe una vez y se almacena
726 en una variable.  El contenido de dicha variable se usa después para
727 generar tanto la particella como la partitura del director.
728
729 Es muy conveniente definir las notas en un archivo especial.  Por
730 ejemplo, supongamos que el archivo @file{trompa.ly} contiene la
731 siguiente parte de un dúo para trompa y fagot:
732
733 @example
734 notasTrompa = \relative c @{
735   \time 2/4
736   r4 f8 a cis4 f e d
737 @}
738 @end example
739
740 @noindent
741 Luego se hace una particella escribiendo en un archivo lo siguiente
742
743 @example
744 \include "trompa.ly"
745 \header @{
746   instrument = "Trompa en Fa"
747 @}
748
749 @{
750  \transpose f c' \notasTrompa
751 @}
752 @end example
753
754 La línea
755
756 @example
757 \include "trompa.ly"
758 @end example
759
760 @noindent
761 sustituye el contenido de @file{trompa.ly} en esta posición dentro del
762 archivo, así que @code{notasTrompa} se define con posterioridad.  La
763 instrucción @code{\transpose f@tie{}c'} indica que el argumento
764 constituido por @code{\notasTrompa} se debe transponer una quinta
765 hacia arriba.  Lo que suena como @code{f} se escribe como @code{c'},
766 lo que corresponde con el tono de afinación de una trompa normal
767 en@tie{}Fa.  La transposición se puede ver en la siguiente salida
768
769 @lilypond[quote,ragged-right]
770 \transpose f c' \relative c {
771   \time 2/4
772   r4 f8 a cis4 f e d
773 }
774 @end lilypond
775
776 En piezas para conjunto, con frecuencia una de las voces no suena
777 durante muchos compases.  Esto queda denotado por un silencio
778 especial, el silencio multicompás.  Se introduce con una @code{R}
779 mayúscula seguida de una duración (@code{1}@tie{}en el caso de la
780 redonda, @code{2}@tie{}en el caso de una blanca, etc.).  Multiplicando
781 la duración se pueden construir silencios más largos.  Por ejemplo,
782 este silencio ocupa 3@tie{}compases de 2/4
783
784 @example
785 R2*3
786 @end example
787
788 Cuando se imprime la particella tienen que comprimirse los silencios
789 multicompás.  Esto se hace estableciendo una variable en tiempo de
790 ejecución
791
792 @example
793 \set Score.skipBars = ##t
794 @end example
795
796 @noindent
797 Esta instrucción establece el valor de la propiedad @code{skipBars} en
798 el contexto de @code{Score} a verdadero (@code{##t}).  Anteponiendo el
799 silencio y esta opción a la música anterior, llegamos al siguiente
800 resultado
801
802 @lilypond[quote,ragged-right]
803 \transpose f c' \relative c {
804   \time 2/4
805   \set Score.skipBars = ##t
806   R2*3
807   r4 f8 a cis4 f e d
808 }
809 @end lilypond
810
811
812 Esta partitura se hace combinando toda la música junta.  Suponiendo
813 que la otra voz se encuentra dentro de @code{notasFagot} en el archivo
814 @file{fagot.ly}, la partitura se hace con
815
816 @example
817 \include "fagot.ly"
818 \include "trompa.ly"
819
820 <<
821   \new Staff \notasTrompa
822   \new Staff \notasFagot
823 >>
824 @end example
825
826 @noindent
827 lo que nos lleva a
828
829 @lilypond[quote,ragged-right]
830 \relative c <<
831   \new Staff {
832     \time 2/4 R2*3
833     r4 f8 a cis4 f e d
834   }
835   \new Staff {
836     \clef bass
837     r4 d,8 f | gis4 c | b bes |
838     a8 e f4 | g d | gis f
839   }
840 >>
841 @end lilypond
842
843
844 @node Make and Makefiles
845 @section Make and Makefiles
846
847 @cindex make, archivos de
848 @cindex make
849
850 Posiblemente todas las plataformas en que puede correr LilyPond,
851 contemplan una posibilidad de software llamada @code{make}. Este
852 programa lee un archivo especial llamado @code{Makefile} que define
853 las relaciones de dependencia entre los archivos y qué instrucciones
854 necesitamos dar al sistema operativo para producir un archivo a partir
855 de otro.  Por ejemplo, el archivo de make detallaría cómo obtener
856 @code{balada.pdf} y @code{balada.midi} a partir de @code{balada.ly}
857 mediante la ejecución de Lilypond.
858
859 Existen ocasiones en las que es buena idea crear un @code{Makefile}
860 para nuestro proyecto, bien sea por nuestra propia comodidad o como
861 cortesía para otros que posiblemente tengan acceso a nuestros archivos
862 fuente.  Esto es cierto para proyectos muy grandes con muchos archivos
863 de inclusión y distintas opciones de salida (p.ej. partitura completa,
864 particellas, partitura del director, reducción para piano, etc.), o
865 para proyectos que requieren instrucciones difíciles para montarlas
866 (como los proyectos de @code{lilypond-book}). La complejidad y
867 flexibilidad de los Makefiles varía enormemente según las necesidades
868 y la habilidad de los autores.  El programa GNU Make viene instalado
869 en las distribuciones de GNU/Linux y en MacOS X, y también existe para
870 Windows.
871
872 Consulte el @strong{Manual de GNU Make} para ver todos los detalles
873 sobre el uso de @code{make}, pues lo que sigue a continuación ofrece
874 solamente una pincelada de todo lo que es capaz de hacer.
875
876 Las instrucciones que definen las reglas en un archivo de make
877 difieren en función de la plataforma; por ejemplo, las distintas
878 formas de Linux y MacOS usan @code{bash}, mientras que Windows usa
879 @code{cmd}.  Observeque en MacOS X, tenemos que configurar el sistema
880 para que utilice el intérprete de órdenes. A continuación presentamos
881 algunos makefiles de ejemplo, con versiones tanto para Linux/MacOS
882 como para Windows.
883
884 El primer ejemplo es para una obra orquestal en cuatro movimientos con
885 la estructura de directorios siguiente:
886
887 @example
888 Sinfonia/
889 |-- MIDI/
890 |-- Makefile
891 |-- Notas/
892 |   |-- cello.ily
893 |   |-- cifras.ily
894 |   |-- trompa.ily
895 |   |-- oboe.ily
896 |   |-- trioCuerdas.ily
897 |   |-- viola.ily
898 |   |-- violinUno.ily
899 |   `-- violinDos.ily
900 |-- PDF/
901 |-- Particellas/
902 |   |-- sinfonia-cello.ly
903 |   |-- sinfonia-trompa.ly
904 |   |-- sinfonia-oboes.ly
905 |   |-- sinfonia-viola.ly
906 |   |-- sinfonia-violinUno.ly
907 |   `-- sinfonia-violinDos.ly
908 |-- Partituras/
909 |   |-- sinfonia.ly
910 |   |-- sinfoniaI.ly
911 |   |-- sinfoniaII.ly
912 |   |-- sinfoniaIII.ly
913 |   `-- sinfoniaIV.ly
914 `-- sinfoniaDefs.ily
915 @end example
916
917 Los archivos @code{.ly} de los directorios @code{Partituras} y
918 @code{Particellas} obtienen las notas de archivos @code{.ily} que están en
919 el directorio @code{Notas}:
920
921 @example
922 %%% principio del archivo "sinfonia-cello.ly"
923 \include ../definiciones.ily
924 \include ../Notas/cello.ily
925 @end example
926
927 El makefile tendrá los objetivos de @code{partitura} (la pieza
928 completa en todo su esplendor), @code{movimientos} (partitura completa
929 de los movimientos individuales) y @code{particellas} (partes
930 individuales para los atriles). También existe un objetivo
931 @code{archivo} que produce un tarball de los archivos fuente, adecuado
932 para compartirlo a través de la web o por correo electrónico.  A
933 continuación presentamos el makefile para GNU/Linux o MacOS X.  Se
934 debe guardar con el nombre exacto @code{Makefile} el el directorio
935 superior del proyecto:
936
937 @warning{Cuando se define un objetivo o una regla de patrón, las
938 líneas siguientes deben comenzar con tabuladores, no con espacios.}
939
940 @example
941 # nombre principal de los archivos de salida
942 nombre = sinfonia
943 # determinar cuántos procesadores existen
944 CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//`
945 # La instrucción para ejecutar lilypond
946 LILY_CMD = lilypond -ddelete-intermediate-files \
947                     -dno-point-and-click -djob-count=$(CPU_CORES)
948
949 # Los sufijos utilizados en este Makefile.
950 .SUFFIXES: .ly .ily .pdf .midi
951
952 # Los archivos de entrada y salida se buscan dentro de los directorios relacionados en
953 # la variable VPATH.  Todos esllos son subdirectorios del directorio
954 # en curso (dado por la variable de GNU make `CURDIR').
955 VPATH = \
956   $(CURDIR)/Partituras \
957   $(CURDIR)/PDF \
958   $(CURDIR)/Particellas \
959   $(CURDIR)/Notas
960
961 # La regla de patrón para crear archivos PDF y MIDI a partir de un archivo de entrada LY.
962 # Los archivos de salida .pdf se colocan en el subdirectorio `PDF', y los archivos
963 # .midi van al subdirectorio `MIDI'.
964 %.pdf %.midi: %.ly
965         $(LILY_CMD) $<; \           # esta línea comienza con un salto de tabulación
966         if test -f "$*.pdf"; then \
967             mv "$*.pdf" PDF/; \
968         fi; \
969         if test -f "$*.midi"; then \
970             mv "$*.midi" MIDI/; \
971         fi
972
973 notas = \
974   cello.ily \
975   trompa.ily \
976   oboe.ily \
977   viola.ily \
978   violinUno.ily \
979   violinDos.ily
980
981 # Dependencias de los movimientos.
982 $(nombre)I.pdf: $(nombre)I.ly $(notas)
983 $(nombre)II.pdf: $(nombre)II.ly $(notas)
984 $(nombre)III.pdf: $(nombre)III.ly $(notas)
985 $(nombre)IV.pdf: $(nombre)IV.ly $(notas)
986
987 # Dependencias de la partitura completa.
988 $(nombre).pdf: $(nombre).ly $(notas)
989
990 # Dependencias de las particellas.
991 $(nombre)-cello.pdf: $(nombre)-cello.ly cello.ily
992 $(nombre)-trompa.pdf: $(nombre)-trompa.ly trompa.ily
993 $(nombre)-oboes.pdf: $(nombre)-oboes.ly oboe.ily
994 $(nombre)-viola.pdf: $(nombre)-viola.ly viola.ily
995 $(nombre)-violinUno.pdf: $(nombre)-violinUno.ly violinUno.ily
996 $(nombre)-violinDos.pdf: $(nombre)-violinDos.ly violinDos.ily
997
998 # Teclee `make partitura' para generer la partitura completa de los cuatro
999 # movimientos como un archivo único.
1000 .PHONY: partitura
1001 partitura: $(nombre).pdf
1002
1003 # Teclee `make particellas' para generar todas las particellas.
1004 # Teclee `make fulanito.pdf' para generar la particella del instrumento `fulanito'.
1005 # Ejemplo: `make sinfonia-cello.pdf'.
1006 .PHONY: particellas
1007 particellas: $(nombre)-cello.pdf \
1008        $(nombre)-violinUno.pdf \
1009        $(nombre)-violinDos.pdf \
1010        $(nombre)-viola.pdf \
1011        $(nombre)-oboes.pdf \
1012        $(nombre)-trompa.pdf
1013
1014 # Teclee `make movimientos' para generar los archivos de los
1015 # cuatro movimientos de forma separada.
1016 .PHONY: movimientos
1017 movimientos: $(nombre)I.pdf \
1018            $(nombre)II.pdf \
1019            $(nombre)III.pdf \
1020            $(nombre)IV.pdf
1021
1022 all: partitura particellas movimientos
1023
1024 archivo:
1025         tar -cvvf stamitz.tar \       # esta línea comienza con un salto de tabulación
1026         --exclude=*pdf --exclude=*~ \
1027         --exclude=*midi --exclude=*.tar \
1028         ../Stamitz/*
1029 @end example
1030
1031
1032 Existen ciertas complicaciones en la plataforma Windows. Después de
1033 descargar e instalar el programa GNU Make para Windows, debemos
1034 configurar la ruta adecuada en las variables de entorno del sistema de
1035 forma que el shell del DOS pueda encontrar el programa Make. Para
1036 hacerlo, pulse con el botón derecho sobre "Mi PC", elija
1037 @code{Propiedades} y @code{Avanzadas}. Pulse sobre @code{Variables de
1038 entorno}, y luego en la pestaña @code{Variables del sistema},
1039 seleccione @code{Ruta}, pulse sobre @code{editar} y añada la ruta al
1040 archivo ejecutable de GNU Make, con lo que quedará algo parecido a lo
1041 siguiente:
1042
1043 @example
1044 C:\Archivos de programa\GnuWin32\bin
1045 @end example
1046
1047 El makefile en sí debe modificarse para que maneje distintas
1048 instrucciones del shell y para que pueda tratar con los espacios que
1049 aparecen en el nombre de algunos directorios del sistema
1050 predeterminados. El objetivo @code{archivo} se elimina porque Windows
1051 no tiene la instrucción @code{tar}, y Windows tiene también una
1052 extensión predeterminada distinta para los archivos MIDI.
1053
1054
1055 @example
1056 ## VERSIÓN PARA WINDOWS
1057 ##
1058 nombre = sinfonia
1059 LILY_CMD = lilypond -ddelete-intermediate-files \
1060                     -dno-point-and-click \
1061                     -djob-count=$(NUMBER_OF_PROCESSORS)
1062
1063 #obtener el nombre 8.3 de CURDIR (rodeo para los espacios en PATH)
1064 workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \
1065           do @@echo %%~sb)
1066
1067 .SUFFIXES: .ly .ily .pdf .mid
1068
1069 VPATH = \
1070   $(workdir)/Partituras \
1071   $(workdir)/PDF \
1072   $(workdir)/Particellas \
1073   $(workdir)/Notas
1074
1075 %.pdf %.mid: %.ly
1076         $(LILY_CMD) $<      # esta línea comienza con un salto de tabulación
1077         if exist "$*.pdf"  move /Y "$*.pdf"  PDF/ # comienzo con tab
1078         if exist "$*.mid" move /Y "$*.mid" MIDI/  # comienzo con tab
1079
1080 notas = \
1081   cello.ily \
1082   cifras.ily \
1083   trompa.ily \
1084   oboe.ily \
1085   trioCuerdas.ily \
1086   viola.ily \
1087   violinUno.ily \
1088   violinDos.ily
1089
1090 $(nombre)I.pdf: $(nombre)I.ly $(notas)
1091 $(nombre)II.pdf: $(nombre)II.ly $(notas)
1092 $(nombre)III.pdf: $(nombre)III.ly $(notas)
1093 $(nombre)IV.pdf: $(nombre)IV.ly $(notas)
1094
1095 $(nombre).pdf: $(nombre).ly $(notas)
1096
1097 $(nombre)-cello.pdf: $(nombre)-cello.ly cello.ily
1098 $(nombre)-trompa.pdf: $(nombre)-trompa.ly trompa.ily
1099 $(nombre)-oboes.pdf: $(nombre)-oboes.ly oboe.ily
1100 $(nombre)-viola.pdf: $(nombre)-viola.ly viola.ily
1101 $(nombre)-violinUno.pdf: $(nombre)-violinUno.ly violinUno.ily
1102 $(nombre)-violinDos.pdf: $(nombre)-violinDos.ly violinDos.ily
1103
1104 .PHONY: partitura
1105 partitura: $(nombre).pdf
1106
1107 .PHONY: particellas
1108 particellas: $(nombre)-cello.pdf \
1109        $(nombre)-violinUno.pdf \
1110        $(nombre)-violinDos.pdf \
1111        $(nombre)-viola.pdf \
1112        $(nombre)-oboes.pdf \
1113        $(nombre)-trompa.pdf
1114
1115 .PHONY: movimientos
1116 movimientos: $(nombre)I.pdf \
1117            $(nombre)II.pdf \
1118            $(nombre)III.pdf \
1119            $(nombre)IV.pdf
1120
1121 all: partitura particellas movimientos
1122 @end example
1123
1124
1125 El Makefile siguiente es para un documento de @command{lilypond-book}
1126 hecho en LaTeX.  Este proyecto tiene un índice, que requiere ejecutar
1127 la instrucción @command{latex} dos veces para actualizar los enlaces.
1128 Todos los archivos de salida se almacenan en el directorio
1129 @code{salida} para los documentos .pdf y en el directorio
1130 @code{salidahtml} para la salida en formato html.
1131
1132 @example
1133 SHELL=/bin/sh
1134 NOMBRE=miproyecto
1135 DIR_SALIDA=salida
1136 DIR_WEB=salidahtml
1137 VISOR=acroread
1138 NAVEGADOR=firefox
1139 LILYBOOK_PDF=lilypond-book --output=$(DIR_SALIDA) --pdf $(NOMBRE).lytex
1140 LILYBOOK_HTML=lilypond-book --output=$(DIR_WEB) $(NOMBRE).lytex
1141 PDF=cd $(DIR_SALIDA) && pdflatex $(NOMBRE)
1142 HTML=cd $(DIR_WEB) && latex2html $(NOMBRE)
1143 INDICE=cd $(DIR_SALIDA) && makeindex $(NOMBRE)
1144 VISTA_PREVIA=$(VISOR) $(DIR_SALIDA)/$(NOMBRE).pdf &
1145
1146 all: pdf web guardar
1147
1148 pdf:
1149         $(LILYBOOK_PDF)  # comienza con un tab
1150         $(PDF)           # comienza con un tab
1151         $(INDICE)        # comienza con un tab
1152         $(PDF)           # comienza con un tab
1153         $(VISTA_PREVIA)  # comienza con un tab
1154
1155 web:
1156         $(LILYBOOK_HTML) # comienza con un tab
1157         $(HTML)          # comienza con un tab
1158         cp -R $(DIR_WEB)/$(NOMBRE)/ ./  # comienza con un tab
1159         $(NAVEGADOR) $(NOMBRE)/$(NOMBRE).html &  # comienza con un tab
1160
1161 guardar: pdf
1162         cp $(DIR_SALIDA)/$(NOMBRE).pdf $(NOMBRE).pdf  # comienza con un tab
1163
1164 clean:
1165         rm -rf $(DIR_SALIDA) # comienza con un tab
1166
1167 web-clean:
1168         rm -rf $(DIR_WEB) # comienza con un tab
1169
1170 archivo:
1171         tar -cvvf miproyecto.tar \ # comienza con un tab
1172         --exclude=salida/* \
1173         --exclude=salidahtml/* \
1174         --exclude=miproyecto/* \
1175         --exclude=*midi \
1176         --exclude=*pdf \
1177         --exclude=*~ \
1178         ../MiProyecto/*
1179 @end example
1180
1181 HACER: conseguir que funcione en Windows
1182
1183 El makefile anterior no funciona en Windows.  Una alternativa para los
1184 usuarios de Windows sería crear un archivo de lotes sencillo que
1185 contenga las instrucciones de montaje.  Esto no rastrea las
1186 dependencias en la manera en que lo hace un makefile, pero al menos
1187 reduce el proceso de construcción a una sola instrucción.  Guarde el
1188 código siguiente como @command{montaje.bat} o @command{montaje.cmd}.
1189 El archivo de lotes se puede ejecutar en la línea de comandos del DOS
1190 o simplemente haciendo doble click sobre su icono.
1191
1192 @example
1193 lilypond-book --output=salida --pdf miproyecto.lytex
1194 cd salida
1195 pdflatex miproyecto
1196 makeindex miproyecto
1197 pdflatex miproyecto
1198 cd ..
1199 copy salida\miproyecto.pdf MiProyecto.pdf
1200 @end example
1201
1202
1203 @seealso
1204 Manual de utilización del programa:
1205 @rprogram{Setup for MacOS X},
1206 @rprogram{Command-line usage},
1207 @rprogram{LilyPond-book}