]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/es/user/working.itely
Refine check-translation error message
[lilypond.git] / Documentation / es / user / working.itely
1 @c -*- coding: utf-8; mode: texinfo; -*-
2 @c This file is part of lilypond.tely
3 @ignore
4     Translation of GIT committish: dc78324e8424699ec17df064941c0c787d4eb91c
5
6     When revising a translation, copy the HEAD committish of the
7     version that you are working on.  See TRANSLATION for details.
8 @end ignore
9
10 @node Working on LilyPond projects
11 @chapter Working on LilyPond projects
12
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.
17
18
19 @menu
20 * Suggestions for writing LilyPond files::  
21 * Saving typing with identifiers and functions::  
22 * Style sheets::                
23 * Updating old files::          
24 * Troubleshooting (taking it all apart)::  
25 * Minimal examples::            
26 @end menu
27
28
29 @node Suggestions for writing LilyPond files
30 @section Suggestions for writing LilyPond files
31
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
34 para hacerlo?
35
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.
39
40 @itemize @bullet
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.
43
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 durante una hora.
48
49 @item ¿Qué ocurre si quiere actualizar su archivo de lilypond para poderlo usar con
50 una versión más reciente del programa?  La sintaxis de la entrada se modifica
51 de forma ocasional según lilypond se va perfeccionando.  Casi todos los cambios se pueden
52 hacer de forma automática con @code{convert-ly}, pero algunos podrían necesitar de una
53 ayuda manual.  Los archivos de LilyPond se pueden estructurar para que sean
54 más fáciles (o más difíciles) de actualizar.
55 @end itemize
56
57 @menu
58 * General suggestions::         
59 * Typesetting existing music::  
60 * Large projects::              
61 @end menu
62
63
64 @node General suggestions
65 @subsection General suggestions
66
67 Presentamos algunas sugerencias que pueden serle de ayuda para evitar
68 o corregir problemas:
69
70 @itemize @bullet
71 @item @strong{Incluya los números de @code{\version} en todos los archivos}.  Dése cuenta de que todas las
72 plantillas contienen una cadena como @code{\version "2.11.15"}.  Le recomendamos
73 mucho que siempre incluya la @code{\version}, sin importar cuán
74 pequeño pueda ser su archivo.  Desde la experiencia personal podemos decirle que es bastante frustrante
75 intentar recordar el número de versión de LilyPond que estaba usando hace unos años.
76 @code{convert-ly} requiere que declare qué versión de LilyPond utilizó.
77
78 @item @strong{Incluya comprobaciones}: @ref{Bar check}, @ref{Octave check} y
79 @ref{Barnumber check}.  Si
80 incluye comprobaciones de vez en cuando, en caso de que cometa un error podrá localizarlo mucho más rápidamente.
81 ¿Con qué frecuencia es @q{de vez en cuando}?  Depende de la complejidad
82 de la música.  Para una música muy sencilla, quizá tan sólo una o dos veces.  Para
83 una música muy compleja, quizá a cada compás.
84
85 @item @strong{Un compás por cada línea de texto}.  Si hay algo muy complicado, ya sea
86 en la propia música
87 o en la salida que desea producir, a menudo conviene escribir un solo compás
88 por cada línea.  El ahorro en espacio de pantalla que se obtiene al amontonar ocho compases por línea no merece la pena
89 si luego tiene que @q{depurar} los archivos.
90
91 @item @strong{Comente los archivos}.  Utilice o números de compás (de vez en cuando)
92 o referencias a temas musicales (@q{segundo tema de los violines,} @q{cuarta
93 variación,} etc.).  Puede que no necesite comentarios cuando introduce una pieza por vez primera,
94 pero si quiere volver a ella o modificar algo al cabo de dos o tres años,
95 y también si le pasa la fuente a un amigo, será
96 todo un desafío determinar sus intenciones o de qué manera estaba estructurado el archivo si no le añadió los comentarios.
97
98 @item @strong{Aplique márgenes a las llaves}.  Muchos problemas están causados por una falta de
99 equilibrio en el número de @code{@{} y @code{@}}.
100
101 @item @strong{Escriba las duraciones explícitamente} al comienzo de las secciones
102 e identificadores.  Si especifica @code{c4 d e} al principio de una frase
103 (en lugar de sólo @code{c d e}) se puede ahorrar problemas
104 si reelabora la música más tarde.
105
106 @item @strong{Separe los trucos} de las definiciones musicales.  Consulte
107 @ref{Saving typing with identifiers and functions} y
108 @ref{Style sheets}.
109
110 @end itemize
111
112
113 @node Typesetting existing music
114 @subsection Typesetting existing music
115
116 Si está introduciendo música a partir de una partitura existente (es decir, tipografiando una hoja
117 de música ya impresa),
118
119 @itemize @bullet
120
121 @item Introduzca un sistema del manuscrito (la copia física) cada vez (pero mantenga
122 la práctica de escibir un compás por línea de texto), y
123 compruebe cada sistema cuando lo haya terminado.  Puede usar el comando
124 @code{showLastLength} para acelerar el proceso -- ver
125 @ref{Skipping corrected music} -- .
126
127 @item Defina @code{mBreak = @{ \break @}} e inserte @code{\mBreak}
128 dentro del archivo de entrada donde el manuscrito tenga un saldo de línea.  De esta forma
129 le resultará mucho más fácil comparar la música de LilyPond con la original.
130 Cuando haya terminado de revisar su partitura podrá
131 definir @code{mBreak = @{ @}} para quitar todos esos saltos de línea.  Así
132 permitirá a LilyPond colocar los saltos donde éste lo estime más oportuno.
133
134 @end itemize
135
136
137 @node Large projects
138 @subsection Large projects
139
140 Al trabajar en proyecto grande se hace esencial tener una estructura clara en los archivos de lilypond.
141
142 @itemize @bullet
143
144 @item @strong{Utilice un identificador para cada voz}, con un mínimo de
145 estructura dentro de la definición.  La estructura de la sección
146 @code{\score} es la que cambiará con mayor probabilidad; por contra, es
147 extremadamente improbable que cambie la definición de @code{violin} en
148 versiones nuevas de LilyPond.
149
150 @example
151 violin = \relative c'' @{
152 g4 c'8. e16
153 @}
154 ...
155 \score @{
156   \new GrandStaff @{
157     \new Staff @{
158       \violin
159     @}
160   @}
161 @}
162 @end example
163
164 @item @strong{Separe los trucos de las definiciones musicales}.  Ya se mencionó
165 en @ref{General suggestions}, pero para proyectos
166 grandes es vital.  Quizá tengamos que cambiar la
167 definición de @code{fthenp}, pero en ese caso sólo lo tendremos que
168 hacer una vez, y aún podremos evitar tocar nada dentro de @code{violin}.
169
170 @example
171 fthenp = _\markup@{
172   \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @}
173 violin = \relative c'' @{
174 g4\fthenp c'8. e16
175 @}
176 @end example
177
178 @end itemize
179
180
181 @node Saving typing with identifiers and functions
182 @section Saving typing with identifiers and functions
183
184 @cindex variables
185 @cindex identificadores
186
187 Llegado a este punto, usted ha visto cosas de este tipo:
188
189 @lilypond[quote,verbatim,ragged-right]
190 hornNotes = \relative c'' { c4 b dis c }
191 \score {
192   {
193     \hornNotes
194   }
195 }
196 @end lilypond
197
198 Incluso se dará cuenta de que esto puede ser útil en música minimalista:
199
200 @lilypond[quote,verbatim,ragged-right]
201 fragA = \relative c'' { a4 a8. b16 }
202 fragB = \relative c'' { a8. gis16 ees4 }
203 violin = \new Staff { \fragA \fragA \fragB \fragA }
204 \score {
205   {
206     \violin
207   }
208 }
209 @end lilypond
210
211 Sin embargo también puede usar estos identificadores (que también se conocen como
212 variables, macros o comandos definidos por el usuario) para hacer trucos:
213
214 @lilypond[quote,verbatim,ragged-right]
215 dolce = \markup{ \italic \bold dolce }
216 padText = { \once \override TextScript #'padding = #5.0 }
217 fthenp=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p }
218 violin = \relative c'' {
219   \repeat volta 2 {
220     c4._\dolce b8 a8 g a b |
221     \padText
222     c4.^"hi there!" d8 e' f g d |
223     c,4.\fthenp b8 c4 c-. |
224   }
225 }
226 \score {
227   {
228     \violin
229   }
230 \layout{ragged-right=##t}
231 }
232 @end lilypond
233
234 Obviamente estos identificadores son útiles para ahorrar tecleo.
235 Pero son dignos de tener en cuenta incluso si se van a utilizar una sola vez:
236 reducen la complejidad.  Examinemos
237 el ejemplo anterior reescrito sin ningún identificador.
238 Encontrará que es mucho más difícil de leer, sobre todo la última línea.
239
240 @example
241 violin = \relative c'' @{
242   \repeat volta 2 @{
243     c4._\markup@{ \italic \bold dolce @} b8 a8 g a b |
244     \once \override TextScript #'padding = #5.0
245     c4.^"hi there!" d8 e' f g d |
246     c,4.\markup@{ \dynamic f \italic \small @{ 2nd @}
247       \hspace #0.1 \dynamic p @} b8 c4 c-. |
248   @}
249 @}
250 @end example
251
252 Hasta ahora hemos contemplado la sustitucion estática: cuando LilyPond
253 se encuentra con @code{\padText}, lo sustituye con aquello que
254 hemos definido que sea (es decir, todo lo que está a la derecha de
255 @code{padtext=}).
256
257 LilyPond también puede manejar sustituciones no estáticas (piense en ellas
258 como en funciones).
259
260 @lilypond[quote,verbatim,ragged-right]
261 padText =
262 #(define-music-function (parser location padding) (number?)
263   #{
264     \once \override TextScript #'padding = #$padding
265   #})
266
267 \relative c''' {
268   c4^"piu mosso" b a b
269   \padText #1.8
270   c4^"piu mosso" d e f
271   \padText #2.6
272   c4^"piu mosso" fis a g
273 }
274 @end lilypond
275
276 La utilización de identificadores también es una buena forma de reducir el trabajo si
277 la sintaxis de entrada de LilyPond cambia (ver @ref{Updating old files}).  Si
278 tiene una sola definición (como p.ej. @code{\dolce}) para todos sus
279 archivos (ver @ref{Style sheets}), y después la sintaxis se modifica, sólo tendrá
280 que actualizar su definición @code{\dolce} única,
281 en lugar de tener que hacer cambios en cada uno de los archivos @code{.ly}.
282
283
284 @node Style sheets
285 @section Style sheets
286
287 La salida que produce LilyPond se puede modificar profundamente; consulte
288 @ref{Tweaking output} para leer detalles sobre este asunto.  Pero ¿qué ocurre si tiene muchos
289 archivos a los que les quiere aplicar sus porpios trucos?  O ¿qué ocurre si, sencillamente,
290 quiere separar los trucos de la propia música?  Todo esto es bastante fácil de conseguir.
291
292 Veamos un ejemplo.  No se preocupe si no entiende
293 las partes que tienen todos los @code{#()}.  Esto se explicará en
294 @ref{Advanced tweaks with Scheme}.
295
296 @lilypond[quote,verbatim,ragged-right]
297 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
298   #:line(#:dynamic "mp" #:text #:italic "dolce" )))
299 tempoMark = #(define-music-function (parser location markp) (string?)
300 #{
301   \once \override Score . RehearsalMark #'self-alignment-X = #left
302   \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
303   \mark \markup { \bold $markp }
304 #})
305
306 \relative c'' {
307   \tempo 4=50
308   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
309   \tempoMark "Poco piu mosso"
310   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
311 }
312 @end lilypond
313
314 Existen varios problemas con la salida que se superpone; los arreglaremos utilizando
315 las técnicas descritas en @ref{Moving objects}.  Pero también haremos algo respecto a
316 las definiciones @code{mpdolce} y @code{tempoMark}.  Éstas producen la salida que
317 deseamos, pero quizá las querríamos utilizar en otra pieza.
318 Podríamos simplemente copiarlas y pegarlas al principio de cada archivo,
319 pero sería bastente molesto.  También hace que se queden las definiciones
320 a la vista dentro de nuestros archivos de música, y yo personalmente encuentro
321 todos los @code{#()} bastante poco estéticos.  Los vamos a esconder dentro de otro archivo:
322
323 @example
324 %%% guardar esto en un archivo de nombre "definiciones.ly"
325 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
326   #:line(#:dynamic "mp" #:text #:italic "dolce" )))
327 tempoMark = #(define-music-function (parser location markp) (string?)
328 #@{
329   \once \override Score . RehearsalMark #'self-alignment-X = #left
330   \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
331   \mark \markup @{ \bold $markp @}
332 #@})
333 @end example
334
335 Ahora modificaremos la música (guardemos este archivo como @file{"musica.ly"}).
336
337 @c  We have to do this awkward example/lilypond-non-verbatim
338 @c  because we can't do the \include stuff in the manual.
339
340 @example
341 \include "definiciones.ly"
342
343 \relative c'' @{
344   \tempo 4=50
345   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
346   \once \override Score.RehearsalMark #'padding = #2.0
347   \tempoMark "Poco piu mosso"
348   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
349 @}
350 @end example
351
352 @lilypond[quote,ragged-right]
353 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
354   #:line(#:dynamic "mp" #:text #:italic "dolce" )))
355 tempoMark = #(define-music-function (parser location markp) (string?)
356 #{
357   \once \override Score . RehearsalMark #'self-alignment-X = #left
358   \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
359   \mark \markup { \bold $markp }
360 #})
361
362 \relative c'' {
363   \tempo 4=50
364   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
365   \once \override Score.RehearsalMark #'padding = #2.0
366   \tempoMark "Poco piu mosso"
367   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
368 }
369 @end lilypond
370
371 Eso tiene mejor aspecto, pero haremos algunos cambios más.  El glissando es difícil
372 de ver, así que lo haremos más grueso y lo acercaremos a las cabezas de las notas.  Pondremos
373 la indicación metronómica encima de la clave, en lugar de ir encima de la primera
374 nota.  Y por último, mi profesor de composición odia las indicaciones de compás @q{C},
375 así que la convertiremos en @q{4/4}.
376
377 Sin embargo, no debe cambiar el archivo @file{musica.ly}.  Sustituya nuestro archivo @file{definiciones.ly}
378 con éste:
379
380 @example
381 %%%  definiciones.ly
382 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
383   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
384 tempoMark = #(define-music-function (parser location markp) (string?)
385 #@{
386   \once \override Score . RehearsalMark #'self-alignment-X = #left
387   \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
388   \mark \markup @{ \bold $markp @}
389 #@})
390
391 \layout@{
392   \context @{ \Score
393     \override MetronomeMark #'extra-offset = #'(-9 . 0)
394     \override MetronomeMark #'padding = #'3
395   @}
396   \context @{ \Staff
397     \override TimeSignature #'style = #'numbered
398   @}
399   \context @{ \Voice
400     \override Glissando #'thickness = #3
401     \override Glissando #'gap = #0.1
402   @}
403 @}
404 @end example
405
406 @lilypond[quote,ragged-right]
407 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
408   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
409 tempoMark = #(define-music-function (parser location markp) (string?)
410 #{
411   \once \override Score . RehearsalMark #'self-alignment-X = #left
412   \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
413   \mark \markup { \bold $markp }
414 #})
415
416 \layout{
417   \context { \Score
418     \override MetronomeMark #'extra-offset = #'(-9 . 0)
419     \override MetronomeMark #'padding = #'3
420   }
421   \context { \Staff
422     \override TimeSignature #'style = #'numbered
423   }
424   \context { \Voice
425     \override Glissando #'thickness = #3
426     \override Glissando #'gap = #0.1
427   }
428 }
429
430 \relative c'' {
431   \tempo 4=50
432   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
433   \once \override Score.RehearsalMark #'padding = #2.0
434   \tempoMark "Poco piu mosso"
435   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
436 }
437 @end lilypond
438
439 ¡Eso tiene un aspecto mucho mejor!  Ahora suponga que quier publicar esta
440 pieza.  A mi profesor de composición no le gustan las indicaciones de compás @q{C},
441 pero yo les tengo cierto cariño.  Copiaremos el archivo
442 actual @file{definiciones.ly} a @file{publicar-web.ly} y modificaremos
443 éste.  Como el propósito de esta música es producir un PDF que va a mostrarse
444 en la pantalla, también vamos a aumentar el
445 tamaño general de la salida.
446
447 @example
448 %%%  definiciones.ly
449 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
450   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
451 tempoMark = #(define-music-function (parser location markp) (string?)
452 #@{
453   \once \override Score . RehearsalMark #'self-alignment-X = #left
454   \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
455   \mark \markup @{ \bold $markp @}
456 #@})
457
458 #(set-global-staff-size 23)
459 \layout@{
460   \context @{ \Score
461     \override MetronomeMark #'extra-offset = #'(-9 . 0)
462     \override MetronomeMark #'padding = #'3
463   @}
464   \context @{ \Staff
465   @}
466   \context @{ \Voice
467     \override Glissando #'thickness = #3
468     \override Glissando #'gap = #0.1
469   @}
470 @}
471 @end example
472
473 @lilypond[quote,ragged-right]
474 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
475   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
476 tempoMark = #(define-music-function (parser location markp) (string?)
477 #{
478   \once \override Score . RehearsalMark #'self-alignment-X = #left
479   \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
480   \mark \markup { \bold $markp }
481 #})
482
483 #(set-global-staff-size 23)
484 \layout{
485   \context { \Score
486     \override MetronomeMark #'extra-offset = #'(-9 . 0)
487     \override MetronomeMark #'padding = #'3
488   }
489   \context { \Voice
490     \override Glissando #'thickness = #3
491     \override Glissando #'gap = #0.1
492   }
493 }
494
495 \relative c'' {
496   \tempo 4=50
497   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
498   \once \override Score.RehearsalMark #'padding = #2.0
499   \tempoMark "Poco piu mosso"
500   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
501 }
502 @end lilypond
503
504 Ahora, en la música, simplemente sustituyo
505 @code{\include "definiciones.ly"} por
506 @code{\include "publicar-web.ly"}.  Por supuesto, podríamos hacer esto aún más
507 práctico.  Podríamos hacer un archivo @file{definiciones.ly} que contuviera
508 solamente las definiciones de @code{mpdolce} y @code{tempoMark}, un archivo
509 @file{web-publish.ly} que contuviera solamente la sección @code{\layout}
510 que se mostró en el ejemplo, y un archivo @file{universidad.ly} que contendría
511 solamente los trucos para producir la salida que le gusta a mi
512 profesor.  La parte más alta de @file{musica.ly} tendría entonces este aspecto:
513
514 @example
515 \include "definiciones.ly"
516
517 %%%  ¡Quitar el comentario de una sola de estas líneas!
518 \include "publicar-web.ly"
519 %\include "universidad.ly"
520 @end example
521
522 Este enfoque puede ser útil incluso si va a producir sólo un conjunto de particellas.
523 Yo utilizo media docena de archivos de
524 @q{hojas de estilo} para mis proyectos.  Comienzo todos los archivos de música con
525 @code{\include "../global.ly"}, que contiene
526
527 @example
528 %%%   global.ly
529 \version "2.11.15"
530 #(ly:set-option 'point-and-click #f)
531 \include "../iniciar/iniciar-definiciones.ly"
532 \include "../iniciar/iniciar-disposicion.ly"
533 \include "../iniciar/iniciar-cabeceras.ly"
534 \include "../iniciar/iniciar-papel.ly"
535 @end example
536
537
538 @node Updating old files
539 @section Updating old files
540
541 La sintaxis de la entrada de LilyPond cambia de manera ocasional.  A
542 medida que el propio LilyPond mejora, la sintaxis (el lenguaje de la
543 entrada) se modifica en consonancia.  A veces estos cambios se hacen
544 para conseguir que la entrada sea más fácil de leer y escribir, y
545 otras veces estos cambios son para dar cabida a nuevas funcionalidades
546 de LilyPond.
547
548 LilyPond lleva incorporado un archivo que facilita esta actualización:
549 @code{convert-ly}.  Para ver detalles sobre cómo ejecutar este programa, consulte
550 @ref{Updating files with convert-ly}.
551
552 Desgraciadamente @code{convert-ly} no puede tratar todos los cambios en la entrada.
553 Se ocupa de los cambios sencillos de búsqueda y sustitución (como @code{raggedright}
554 que se convierte en @code{ragged-right}), pero algunos cambios son demasiado
555 complicados.  Los cambios de sintaxis que @code{convert-ly} es incapaz de manejar
556 se relacionan en @ref{Updating files with convert-ly}.
557
558 Por ejemplo, en la versión 2.4 y anteriores de LilyPond, los acentos y las letras no inglesas
559 se introducían utilizando LaTeX: por ejemplo,
560 @samp{No\"el} (que significa @q{Navidad} en francés).  En LilyPond 2.6 y siguientes, el carácter especial
561 @samp{ë} debe introducirse directamente en el archivo de LilyPond como un carácter
562 UTF-8.  @code{convert-ly} no puede cambiar todos los caracteres especiales de LaTeX
563 a caracteres de UTF-8; tendrá que actualizar manualmente
564 sus archivos de LilyPond antiguos.
565
566
567 @node Troubleshooting (taking it all apart)
568 @section Troubleshooting (taking it all apart)
569
570 Antes o después escribirá un archivo que LilyPond no podrá compilar.
571 Los mensajes que LilyPond proporciona pueden ayudarle a encontrar el
572 error, pero en muchos casos tendrá que llevar a cabo algún tipo de
573 investigación para determinar el origen del problema.
574
575 Las herramientas más poderosas para este cometido son el
576 comentario de una sola línea (indicado por @code{%}) y el comentario de bloque
577 (indicado por @code{%@{ ... %@}}).  Si no sabe dónde está
578 el problema, comience coviertiendo grandes secciones del
579 archivo de entrada en un comentario.  Después de eliminar una
580 sección convirtiéndola en un comentario, pruebe a compilar el
581 archivo otra vez.  Si funciona, entonces el problema debía estar
582 en la porción que había eliminado.  Si no funciona,
583 continúe eliminando material (transformándolo en comentarios)
584 hasta que tenga algo que funcione.
585
586 En un caso extremo podría terminar con sólo
587
588 @example
589 \score @{
590   <<
591     % \melodia
592     % \harmonia
593     % \bajo
594   >>
595   \layout@{@}
596 @}
597 @end example
598
599 @noindent
600 (en otras palabras: un archivo sin música)
601
602 Si ocurre esto, no abandone.  Descomente un trozo pequeño -- digamos
603 la parte del bajo -- y observe si funciona.  Si no es así,
604 transforme en comentarios toda la música del bajo (pero deje el
605 @code{\bajo} de la sección @code{\score} no comentado.
606
607 @example
608 bajo = \relative c' @{
609 %@{
610   c4 c c c
611   d d d d
612 %@}
613 @}
614 @end example
615
616 Ahora empiece poco a poco descomentando cada vez más fracciones de la
617 parte del @code{bajo} hasta que encuentre la línea del problema.
618
619 Otra técnica de depuración muy útil es la construcción de
620 @ref{Minimal examples}.
621
622
623 @node Minimal examples
624 @section Minimal examples
625
626 Un ejemplo mínimo es un ejemplo tan pequeño como sea posible.  Estos
627 ejemplos son mucho más fáciles de comprender que los ejemplos largos.  Los ejemplos
628 mínimos se utilizan para
629
630 @itemize
631 @item Informes de fallo
632 @item Solicitudes de ayuda a las listas de correo
633 @item Añadir ejemplos al @uref{http://lsr@/.dsi@/.unimi@/.it/,Repositorio de Fragmentos de Código de LilyPond}
634 @end itemize
635
636 Para construir un ejemplo que sea lo más pequeño posible, la regla es
637 bastante simple: quite todo lo que no sea necesario.  Al tratar de
638 quitar partes innecesarias de un archivo, es una buena idea convertir líneas en
639 comentarios en vez de borrarlas.  De esta forma, si descubre que en realidad
640 sí @emph{necesitaba} algunas de estas líneas, podrá descomentarlas y no tendrá que
641 teclearlas de nuevo partiendo de cero.
642
643 Existen dos excepciones a la regla del @qq{lo más pequeño posible}:
644
645 @itemize
646 @item Incluya el número de @code{\version}.
647 @item Si puede, ponga @code{\paper@{ ragged-right=##t @}} al principio del ejemplo.
648 @end itemize
649
650 En resumen, el objetivo de un ejemplo mínimo es que sea fácil de leer:
651
652 @itemize
653 @item Evite usar notas, tonalidades o compases demasiado complicados, a no ser que quiera
654 demostrar algo sobre el comportamiento de estos elementos precisamente.
655 @item No use comandos @code{\override} a no ser que ése sea el propósito del ejemplo.
656 @end itemize
657
658