-@c -*- coding: utf-8; mode: texinfo; -*-
+@c -*- coding: utf-8; mode: texinfo; documentlanguage: es -*-
@c This file is part of lilypond.tely
@ignore
- Translation of GIT committish: 7cc6b12897031c450e3399d59cdb22ca9df4fd8c
+ Translation of GIT committish: 50b88336f4c69d7d3241cc01af98c362cd9d2b4b
When revising a translation, copy the HEAD committish of the
version that you are working on. See TRANSLATION for details.
@end ignore
-@c \version "2.11.38"
+@c \version "2.12.0"
@node Working on LilyPond projects
@chapter Working on LilyPond projects
@menu
-* Suggestions for writing LilyPond files::
-* When things don't work::
-* Scores and parts::
+* Suggestions for writing LilyPond input files::
+* When things don't work::
+* Scores and parts::
+* Make and Makefiles::
@end menu
-@node Suggestions for writing LilyPond files
-@section Suggestions for writing LilyPond files
+@node Suggestions for writing LilyPond input files
+@section Suggestions for writing LilyPond input files
En este momento está preparado para comenzar a escribir archivos de
LilyPond más grandes -- no sólo los pequeños ejemplos que aparecen en
tengan sus archivos. Sin embargo existen algunas otras cosas a tener
en cuenta cuando se escriben archivos de LilyPond.
-@itemize @bullet
+@itemize
@item ¿Qué ocurre si comete un fallo? La estructura de un archivo
de LilyPond puede hacer que ciertos errores se hagan más fáciles (o
más difíciles) de encontrar.
@code{convert-ly}, pero algunos podrían necesitar de una ayuda manual.
Los archivos de LilyPond se pueden estructurar para que sean más
fáciles (o más difíciles) de actualizar.
+
@end itemize
@menu
-* General suggestions::
-* Typesetting existing music::
-* Large projects::
-* Saving typing with variables and functions::
-* Style sheets::
+* General suggestions::
+* Typesetting existing music::
+* Large projects::
+* Saving typing with variables and functions::
+* Style sheets::
@end menu
Presentamos algunas sugerencias que le pueden servir de ayuda para evitar
o corregir problemas:
-@itemize @bullet
-@item @strong{Incluya los números de @code{\version} en todos los archivos}. Dese cuenta de que todas las
+@itemize
+@item @strong{Incluya los números de @code{\version} en todos los archivos}. Dése cuenta de que todas las
plantillas contienen información sobre la @code{\version}. Le
recomendamos mucho que siempre incluya la @code{\version}, sin
importar cuán pequeño pueda ser su archivo. Desde la experiencia
@code{convert-ly} requiere que declare qué versión de LilyPond
utilizó.
-@item @strong{Incluya comprobaciones}: @ruser{Bar and barnumber checks},
-@ruser{Octave check}. Si incluye comprobaciones de vez en cuando, en
+@item @strong{Incluya comprobaciones}: @ruser{Bar and bar number checks},
+@ruser{Octave checks}. Si incluye comprobaciones de vez en cuando, en
caso de que cometa un error podrá localizarlo mucho más rápidamente.
¿Con qué frecuencia es @q{de vez en cuando}? Depende de la
complejidad de la música. Para una música muy sencilla, quizá tan
compás.
@item @strong{Un compás por cada línea de texto}. Si hay algo muy complicado, ya sea
-en la propia música
-o en la salida que desea producir, a menudo conviene escribir un solo compás
-por cada línea. El ahorro en espacio de pantalla que se obtiene al amontonar ocho compases por línea no merece la pena
-si luego tiene que @q{depurar} los archivos.
+en la propia música o en la salida que desea producir, a menudo
+conviene escribir un solo compás por cada línea. El ahorro en espacio
+de pantalla que se obtiene al amontonar ocho compases por línea no
+merece la pena si luego tiene que @q{depurar} los archivos.
@item @strong{Comente los archivos}. Utilice o números de compás (de vez en cuando)
-o
-referencias a temas musicales (@q{segundo tema de los violines,} @q{cuarta
-variación,} etc.). Puede que no necesite comentarios cuando introduce una pieza por vez primera,
-pero si quiere volver a ella o modificar algo al cabo de dos o tres años,
-y también si le pasa la fuente a un amigo,
-será todo un desafío
-determinar sus intenciones o de qué manera estaba estructurado el archivo
-si no le añadió los comentarios.
+o referencias a temas musicales (@q{segundo tema de los violines,}
+@q{cuarta variación,} etc.). Puede que no necesite comentarios cuando
+introduce una pieza por vez primera, pero si quiere volver a ella o
+modificar algo al cabo de dos o tres años, y también si le pasa la
+fuente a un amigo, será todo un desafío determinar sus intenciones o
+de qué manera estaba estructurado el archivo si no le añadió los
+comentarios.
@item @strong{Aplique márgenes a las llaves}. Muchos problemas están causados por una
-falta de equilibrio
-en el número de @code{@{} y @code{@}}.
+falta de equilibrio en el número de @code{@{} y @code{@}}.
@item @strong{Escriba las duraciones explícitamente} al comienzo de las secciones
-e identificadores. Si especifica @code{c4 d e} al principio de una frase
-(en lugar de sólo @code{c d e}) se puede ahorrar problemas
-si reelabora la música más tarde.
+e identificadores. Si especifica @code{c4 d e} al principio de una
+frase (en lugar de sólo @code{c d e}) se puede ahorrar problemas si
+reelabora la música más tarde.
@item @strong{Separe los trucos} de las definiciones musicales. Consulte
@ref{Saving typing with variables and functions} y
@node Typesetting existing music
@subsection Typesetting existing music
-Si está introduciendo música a partir de una partitura existente (es decir, tipografiando una hoja
-de música ya impresa),
+Si está introduciendo música a partir de una partitura existente (es
+decir, tipografiando una hoja de música ya impresa),
-@itemize @bullet
+@itemize
@item Introduzca un sistema del manuscrito (la copia física) cada vez (pero mantenga
la práctica de escribir un compás por línea de texto), y compruebe
-cada sistema cuando lo haya terminado. Puede usar la instrucción
-@code{showLastLength} para acelerar el proceso -- ver @ruser{Skipping
-corrected music} -- .
+cada sistema cuando lo haya terminado. Puede usar las instrucciones
+@code{showLastLength} o @code{showFirstLength} para acelerar el
+proceso -- ver @ruser{Skipping corrected music} -- .
@item Defina @code{mBreak = @{ \break @}} e inserte @code{\mBreak}
-dentro del archivo de entrada donde el manuscrito tenga un saldo de línea. De esta forma
-le resultará mucho más fácil comparar la música de LilyPond con la original.
-Cuando haya terminado de revisar su partitura podrá
-definir @code{mBreak = @{ @}} para quitar todos esos saltos de línea. Así
-permitirá a LilyPond colocar los saltos donde éste lo estime
-más oportuno.
+dentro del archivo de entrada donde el manuscrito tenga un saldo de
+línea. De esta forma le resultará mucho más fácil comparar la música
+de LilyPond con la original. Cuando haya terminado de revisar su
+partitura podrá definir @code{mBreak = @{ @}} para quitar todos esos
+saltos de línea. Así permitirá a LilyPond colocar los saltos donde
+éste lo estime más oportuno.
+
+@item Al escribir una parte para un instrumento transpositor dentro de una
+variable, se recomienda que las notas estén envueltas dentro de
+
+@example
+\transpose c altura-natural @{...@}
+@end example
+(donde @code{altura-natural} es la afinación natural del instrumento)
+de forma que la música dentro de la variable esté realmente en Do
+mayor. Después podemos volver a transportarlas en sentido inverso
+cuando se utiliza la variable, si es necesario, pero quizá no queramos
+hacerlo (p.ej., al imprimir una partitura en afinación de concierto,
+al convertir una parte de trombón de clave de Sol a clave de Fa,
+etc.). Es menos probable cometer errores en los transportes si toda
+la música que está dentro de las variables se encuentra en un tono
+coherente.
+
+Asimismo, haga los transportes exclusivamente hacia o desde Do mayor.
+Esto significa que aparte de ésta, las únicas tonalidades que usaremos
+serán los tonos de afinación de los instrumentos transpositores: bes
+para una trompeta en Si bemol, aes para un clarinete en La bemol, etc.
@end itemize
Al trabajar en proyecto grande se hace esencial tener una estructura clara
en los archivos de LilyPond
-@itemize @bullet
+@itemize
@item @strong{Utilice un identificador para cada voz}, con un mínimo de
estructura dentro de la definición. La estructura de la sección
}
@end lilypond
-Incluso se dará cuenta de que esto puede ser útil en música minimalista:
+Incluso se dará cuenta de que esto puede ser útil en música
+minimalista:
@lilypond[quote,verbatim,ragged-right]
-fragA = \relative c'' { a4 a8. b16 }
-fragB = \relative c'' { a8. gis16 ees4 }
-violin = \new Staff { \fragA \fragA \fragB \fragA }
+fragmentA = \relative c'' { a4 a8. b16 }
+fragmentB = \relative c'' { a8. gis16 ees4 }
+violin = \new Staff { \fragmentA \fragmentA \fragmentB \fragmentA }
\score {
{
\violin
}
@end lilypond
-Sin embargo también puede usar estos identificadores (que también se conocen como
-variables, macros o instrucciones definidas por el usuario) para hacer trucos:
+Sin embargo también puede usar estos identificadores (que también se
+conocen como variables, macros o instrucciones definidas por el
+usuario) para hacer trucos:
@lilypond[quote,verbatim,ragged-right]
dolce = \markup{ \italic \bold dolce }
}
@end lilypond
-Obviamente estos identificadores son útiles para ahorrar tecleo.
-Pero son dignos de tener en cuenta incluso si se van a utilizar una sola vez:
-reducen la complejidad. Examinemos
-el ejemplo anterior reescrito sin ningún identificador.
-Encontrará que es mucho más difícil de leer, sobre todo
-la última línea.
+Obviamente estos identificadores son útiles para ahorrar tecleo. Pero
+son dignos de tener en cuenta incluso si se van a utilizar una sola
+vez: reducen la complejidad. Examinemos el ejemplo anterior reescrito
+sin ningún identificador. Encontrará que es mucho más difícil de
+leer, sobre todo la última línea.
@example
violin = \relative c'' @{
@}
@end example
+@c TODO Replace the following with a better example -td
+@c Skylining handles this correctly without padText
+
Hasta ahora hemos contemplado la sustitución estática: cuando LilyPond
se encuentra con @code{\padText}, lo sustituye con aquello que
hemos definido que sea (es decir, todo lo que está a la derecha de
@code{padtext=}).
-LilyPond también puede manejar sustituciones no estáticas (piense en ellas
-como en funciones).
+LilyPond también puede manejar sustituciones no estáticas (piense en
+ellas como en funciones).
@lilypond[quote,verbatim,ragged-right]
padText =
}
@end lilypond
-La utilización de identificadores también es una buena forma de reducir el trabajo si
-la sintaxis de entrada de LilyPond cambia (véase @ref{Updating old files}). Si
-tiene una sola definición (como p.ej. @code{\dolce}) para todos sus
-archivos (ver @ref{Style sheets}), y después la sintaxis se modifica, sólo tendrá
-que actualizar su definición @code{\dolce} única,
-en lugar de tener que hacer cambios en cada uno de los archivos @code{.ly}.
+La utilización de identificadores también es una buena forma de
+reducir el trabajo si la sintaxis de entrada de LilyPond cambia (véase
+@ref{Updating old input files}). Si tiene una sola definición (como
+p.ej. @code{\dolce}) para todos sus archivos (ver @ref{Style sheets}),
+y después la sintaxis se modifica, sólo tendrá que actualizar su
+definición @code{\dolce} única, en lugar de tener que hacer cambios en
+cada uno de los archivos @code{.ly}.
@node Style sheets
@subsection Style sheets
-La salida que produce LilyPond se puede modificar profundamente; consulte
-@ref{Tweaking output} para leer detalles sobre este asunto. Pero ¿qué ocurre si tiene muchos
-archivos a los que les quiere aplicar sus propios trucos? O ¿qué ocurre si, sencillamente,
-quiere separar los trucos de la propia música? Todo esto
-es bastante fácil de conseguir.
+La salida que produce LilyPond se puede modificar profundamente;
+consulte @ref{Tweaking output} para leer detalles sobre este asunto.
+Pero ¿qué ocurre si tiene muchos archivos a los que les quiere aplicar
+sus propios trucos? O ¿qué ocurre si, sencillamente, quiere separar
+los trucos de la propia música? Todo esto es bastante fácil de
+conseguir.
Veamos un ejemplo. No se preocupe si no entiende
las partes que tienen todos los @code{#()}. Esto se explicará en
@ref{Advanced tweaks with Scheme}.
@lilypond[quote,verbatim,ragged-right]
-mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
+mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
#:line(#:dynamic "mp" #:text #:italic "dolce" )))
-tempoMark = #(define-music-function (parser location markp) (string?)
-#{
- \once \override Score . RehearsalMark #'self-alignment-X = #left
- \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
- \mark \markup { \bold $markp }
-#})
+
+inst = #(define-music-function (parser location string) (string?)
+ (make-music
+ 'TextScriptEvent
+ 'direction UP
+ 'text (markup #:bold (#:box string))))
\relative c'' {
\tempo 4=50
a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
- \tempoMark "Poco piu mosso"
+ \inst "Clarinet"
cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
}
@end lilypond
-Existen varios problemas con la salida que se superpone; los arreglaremos utilizando
-las técnicas descritas en @ref{Moving objects}. Pero también haremos algo respecto a
-las definiciones @code{mpdolce} y @code{tempoMark}. Éstas producen la salida que
-deseamos, pero quizá las querríamos utilizar en otra pieza.
-Podríamos simplemente copiarlas y pegarlas al principio de cada archivo,
-pero sería bastante molesto. También hace que se queden las definiciones
-a la vista dentro de nuestros archivos de música, y yo personalmente encuentro
-todos los @code{#()} bastante poco estéticos. Los vamos a esconder dentro de otro archivo:
+Existen varios problemas con la salida que se superpone; los
+arreglaremos utilizando las técnicas descritas en @ref{Moving
+objects}. Pero también haremos algo respecto a las definiciones
+@code{mpdolce} e @code{inst}. Éstas producen la salida que deseamos,
+pero quizá las querríamos utilizar en otra pieza. Podríamos
+simplemente copiarlas y pegarlas al principio de cada archivo, pero
+sería bastante molesto. También hace que se queden las definiciones a
+la vista dentro de nuestros archivos de música, y yo personalmente
+encuentro todos los @code{#()} bastante poco estéticos. Los vamos a
+esconder dentro de otro archivo:
@example
-%%% guardar esto en un archivo de nombre "definiciones.ly"
-mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
+%%% guardar esto en un archivo de nombre "definiciones.ily"
+mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
#:line(#:dynamic "mp" #:text #:italic "dolce" )))
-tempoMark = #(define-music-function (parser location markp) (string?)
-#@{
- \once \override Score . RehearsalMark #'self-alignment-X = #left
- \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
- \mark \markup @{ \bold $markp @}
-#@})
+
+inst = #(define-music-function (parser location string) (string?)
+ (make-music
+ 'TextScriptEvent
+ 'direction UP
+ 'text (markup #:bold (#:box string))))
@end example
-Ahora modificaremos la música (guardemos este archivo como @file{"musica.ly"}).
+Haremos referencia a este archivo utilizando la instrucción
+@code{\include} al principio del archivo de música (la extensión
+@code{.ily} se utiliza para distinguir este archivo de inclusión --que
+se supone que no debe ser procesado de forma independiente-- del
+archivo principal). Ahora modificaremos la música (guardemos este
+archivo como @file{"musica.ly"}).
@c We have to do this awkward example/lilypond-non-verbatim
@c because we can't do the \include stuff in the manual.
@example
-\include "definiciones.ly"
+\include "definiciones.ily"
\relative c'' @{
\tempo 4=50
a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
- \once \override Score.RehearsalMark #'padding = #2.0
- \tempoMark "Poco piu mosso"
+ \inst "Clarinete"
cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
@}
@end example
@lilypond[quote,ragged-right]
-mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
+mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
#:line(#:dynamic "mp" #:text #:italic "dolce" )))
-tempoMark = #(define-music-function (parser location markp) (string?)
-#{
- \once \override Score . RehearsalMark #'self-alignment-X = #left
- \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
- \mark \markup { \bold $markp }
-#})
+
+inst = #(define-music-function (parser location string) (string?)
+ (make-music
+ 'TextScriptEvent
+ 'direction UP
+ 'text (markup #:bold (#:box string))))
\relative c'' {
\tempo 4=50
a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
- \once \override Score.RehearsalMark #'padding = #2.0
- \tempoMark "Poco piu mosso"
+ \inst "Clarinet"
cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
}
@end lilypond
nota. Y por último, mi profesor de composición odia las indicaciones de compás @q{C},
así que la convertiremos en @q{4/4}.
-Sin embargo, no debe cambiar el archivo @file{musica.ly}. Sustituya nuestro archivo @file{definiciones.ly}
-con éste:
+Sin embargo, no debemos cambiar el archivo @file{musica.ly}.
+Sustituyamos nuestro archivo @file{definiciones.ily} con éste:
@example
-%%% definiciones.ly
-mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
+%%% definiciones.ily
+mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
#:line( #:dynamic "mp" #:text #:italic "dolce" )))
-tempoMark = #(define-music-function (parser location markp) (string?)
-#@{
- \once \override Score . RehearsalMark #'self-alignment-X = #left
- \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
- \mark \markup @{ \bold $markp @}
-#@})
+
+inst = #(define-music-function (parser location string) (string?)
+ (make-music
+ 'TextScriptEvent
+ 'direction UP
+ 'text (markup #:bold (#:box string))))
\layout@{
\context @{ \Score
@end example
@lilypond[quote,ragged-right]
-mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
+mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
#:line( #:dynamic "mp" #:text #:italic "dolce" )))
-tempoMark = #(define-music-function (parser location markp) (string?)
-#{
- \once \override Score . RehearsalMark #'self-alignment-X = #left
- \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
- \mark \markup { \bold $markp }
-#})
+
+inst = #(define-music-function (parser location string) (string?)
+ (make-music
+ 'TextScriptEvent
+ 'direction UP
+ 'text (markup #:bold (#:box string))))
\layout{
\context { \Score
\relative c'' {
\tempo 4=50
a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
- \once \override Score.RehearsalMark #'padding = #2.0
- \tempoMark "Poco piu mosso"
+ \inst "Clarinet"
cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
}
@end lilypond
¡Eso tiene un aspecto mucho mejor! Ahora suponga que quiere publicar esta
pieza. A mi profesor de composición no le gustan las indicaciones de compás @q{C},
pero yo les tengo cierto cariño. Copiaremos el archivo
-actual @file{definiciones.ly} a @file{publicar-web.ly} y modificaremos
+actual @file{definiciones.ily} a @file{publicar-web.ily} y modificaremos
éste. Como el propósito de esta música es producir un PDF que va a mostrarse
en la pantalla, también vamos a aumentar el
tamaño general de la salida.
@example
-%%% definiciones.ly
-mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
+%%% definiciones.ily
+mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
#:line( #:dynamic "mp" #:text #:italic "dolce" )))
-tempoMark = #(define-music-function (parser location markp) (string?)
-#@{
- \once \override Score . RehearsalMark #'self-alignment-X = #left
- \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
- \mark \markup @{ \bold $markp @}
-#@})
+
+inst = #(define-music-function (parser location string) (string?)
+ (make-music
+ 'TextScriptEvent
+ 'direction UP
+ 'text (markup #:bold (#:box string))))
#(set-global-staff-size 23)
\layout@{
@end example
@lilypond[quote,ragged-right]
-mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
+mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
#:line( #:dynamic "mp" #:text #:italic "dolce" )))
-tempoMark = #(define-music-function (parser location markp) (string?)
-#{
- \once \override Score . RehearsalMark #'self-alignment-X = #left
- \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
- \mark \markup { \bold $markp }
-#})
+
+inst = #(define-music-function (parser location string) (string?)
+ (make-music
+ 'TextScriptEvent
+ 'direction UP
+ 'text (markup #:bold (#:box string))))
#(set-global-staff-size 23)
\layout{
\relative c'' {
\tempo 4=50
a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
- \once \override Score.RehearsalMark #'padding = #2.0
- \tempoMark "Poco piu mosso"
+ \inst "Clarinet"
cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
}
@end lilypond
-Ahora, en la música, simplemente sustituyo
-@code{\include "definiciones.ly"} por
-@code{\include "publicar-web.ly"}. Por supuesto, podríamos hacer esto aún más
-práctico. Podríamos hacer un archivo @file{definiciones.ly} que contuviera
-solamente las definiciones de @code{mpdolce} y @code{tempoMark}, un archivo
-@file{web-publish.ly} que contuviera solamente la sección @code{\layout}
-que se mostró en el ejemplo, y un archivo @file{universidad.ly} que contendría
-solamente los trucos para producir la salida que le gusta a mi
-profesor. La parte más alta de @file{musica.ly} tendría entonces este aspecto:
+Ahora, en la música, simplemente sustituyo @code{\include
+"definiciones.ily"} por @code{\include "publicar-web.ily"}. Por
+supuesto, podríamos hacer esto aún más práctico. Podríamos hacer un
+archivo @file{definiciones.ily} que contuviera solamente las
+definiciones de @code{mpdolce} y de @code{inst}, un archivo
+@file{publicar-web.ily} que contuviera solamente la sección
+@code{\layout} que se mostró en el ejemplo, y un archivo
+@file{universidad.ily} que contendría solamente los trucos para
+producir la salida que le gusta a mi profesor. El comienzo de
+@file{musica.ly} tendría entonces este aspecto:
@example
-\include "definiciones.ly"
+\include "definiciones.ily"
%%% ¡Quitar el comentario de una sola de estas líneas!
-\include "publicar-web.ly"
-%\include "universidad.ly"
+\include "publicar-web.ily"
+%\include "universidad.ily"
@end example
-Este enfoque puede ser útil incluso si va a producir sólo un conjunto de particellas.
-Yo utilizo media docena de archivos de
-@q{hojas de estilo} para mis proyectos. Comienzo todos los archivos de música con
-@code{\include "../global.ly"}, que contiene
+Este enfoque puede ser útil incluso si va a producir sólo un conjunto
+de particellas. Yo utilizo media docena de archivos de @q{hojas de
+estilo} para mis proyectos. Comienzo todos los archivos de música con
+@code{\include "../global.ily"}, que contiene
@example
-%%% global.ly
+%%% global.ily
\version @w{"@version{}"}
#(ly:set-option 'point-and-click #f)
-\include "../iniciar/iniciar-definiciones.ly"
-\include "../iniciar/iniciar-disposicion.ly"
-\include "../iniciar/iniciar-cabeceras.ly"
-\include "../iniciar/iniciar-papel.ly"
+\include "../iniciar/iniciar-definiciones.ily"
+\include "../iniciar/iniciar-disposicion.ily"
+\include "../iniciar/iniciar-cabeceras.ily"
+\include "../iniciar/iniciar-papel.ily"
@end example
+
@node When things don't work
@section When things don't work
@menu
-* Updating old files::
-* Troubleshooting (taking it all apart)::
-* Minimal examples::
+* Updating old input files::
+* Common errors::
+* Troubleshooting (taking it all apart)::
+* Minimal examples::
@end menu
-@node Updating old files
-@subsection Updating old files
+@node Updating old input files
+@subsection Updating old input files
+
+@cindex convert-ly
+@cindex actualizar archivos de entrada antiguos
-La sintaxis de la entrada de LilyPond cambia de manera ocasional. A medida que el propio
-LilyPond mejora, la sintaxis (el lenguaje de la entrada) se modifica en consonancia. A
-veces estos cambios se hacen para conseguir que la entrada sea más fácil de leer y escribir, y
-otras veces estos cambios son para dar cabida a nuevas funcionalidades de LilyPond.
+La sintaxis de la entrada de LilyPond cambia de manera ocasional. A
+medida que el propio LilyPond mejora, la sintaxis (el lenguaje de la
+entrada) se modifica en consonancia. A veces estos cambios se hacen
+para conseguir que la entrada sea más fácil de leer y escribir, y
+otras veces estos cambios son para dar cabida a nuevas funcionalidades
+de LilyPond.
LilyPond lleva incorporado un archivo que facilita esta actualización:
-@code{convert-ly}. Para ver detalles sobre cómo ejecutar este programa, consulte
-@rprogram{Updating files with convert-ly}.
+@code{convert-ly}. Para ver detalles sobre cómo ejecutar este
+programa, consulte @rprogram{Updating files with convert-ly}.
+
+Desgraciadamente @code{convert-ly} no puede tratar todos los cambios
+en la entrada. Se ocupa de los cambios sencillos de búsqueda y
+sustitución (como @code{raggedright} que se convierte en
+@code{ragged-right}), pero algunos cambios son demasiado complicados.
+Los cambios de sintaxis que @code{convert-ly} es incapaz de manejar se
+relacionan en @rprogram{Updating files with convert-ly}.
+
+Por ejemplo, en la versión 2.4 y anteriores de LilyPond, los acentos y
+las letras no inglesas se introducían utilizando LaTeX: por ejemplo,
+@code{No\"el} (que significa @q{Navidad} en francés). En LilyPond 2.6
+y siguientes, el carácter especial @code{ë} debe introducirse
+directamente en el archivo de LilyPond como un carácter UTF-8.
+@code{convert-ly} no puede cambiar todos los caracteres especiales de
+LaTeX a caracteres de UTF-8; tendrá que actualizar manualmente sus
+archivos de LilyPond antiguos.
+
+@node Common errors
+@subsection Common errors
+
+Las condiciones de error que se han descrito más arriba se producen
+con frecuencia, aunque su causa no sea obvia o no se pueda encontrar
+fácilmente. Una vez se han visto y comprendido, son fáciles de
+manejar.
-Desgraciadamente @code{convert-ly} no puede tratar todos los cambios en la entrada.
-Se ocupa de los cambios sencillos de búsqueda y sustitución (como @code{raggedright}
-que se convierte en @code{ragged-right}), pero algunos cambios son demasiado
-complicados. Los cambios de sintaxis que @code{convert-ly} es incapaz de manejar
-se relacionan en @rprogram{Updating files with convert-ly}.
-Por ejemplo, en la versión 2.4 y anteriores de LilyPond,
-los acentos y las letras no inglesas se introducían utilizando
-LaTeX: por ejemplo, @code{No\"el} (que significa @q{Navidad} en francés).
-En LilyPond 2.6 y siguientes, el carácter especial @code{ë}
-debe introducirse directamente en el archivo de LilyPond como un carácter UTF-8.
-@code{convert-ly} no puede cambiar todos los caracteres especiales
-de LaTeX a caracteres de UTF-8; tendrá que actualizar manualmente
-sus archivos de LilyPond antiguos.
+@menu
+* Music runs off the page::
+* Apparent error in ../ly/init.ly::
+* Error message Unbound variable %::
+@end menu
+
+@node Music runs off the page
+@unnumberedsubsubsec Music runs off the page
+
+La música que se sale de la página por el margen derecho o que aparece
+exageradamente comprimida está causada casi siempre por haber
+introducido una duración incorrecta para una nota, produciendo que la
+nota final de un compás se extienda más allá de la línea divisoria.
+Esto no es inválido si la nota final de un compás no termina sobre la
+línea divisoria introducida automáticamente, pues simplemente se
+supone que la nota se solapa encima del siguiente compás. Pero si se
+produce una larga secuencia tales notas solapadas, la música puede
+aparecer comprimida o salirse de la página porque los saltos de línea
+automáticos solamente se pueden insertar al final de compases
+completos, es decir, aquellos en que todas las notas terminan antes de
+o justo al final del compás.
+
+@warning{Una duración incorrecta puede hacer que se inhiban los saltos
+de línea, lo que llevaría a una sola línea de música muy comprimida o
+que se salga de la página.}
+
+La duración incorrecta se puede encontrar fácilmente si se utilizan
+comprobaciones de compás, véase @ruser{Bar and bar number checks}.
+
+Si realmente quueremos tener una serie de estos compases con notas
+solapadas, debemos insertar una línea divisoria invisible donde
+queramos el salto de línea. Para ver más detalles, consulte
+@ruser{Bar lines}.
+
+@node Apparent error in ../ly/init.ly
+@unnumberedsubsubsec Apparent error in @code{../ly/init.ly}
+
+Pueden aparecer varios mensajes de error extraños acerca de errores de
+sintaxis en @code{../ly/init.ly} si el archivo de entrada no está
+correctamente formado, por ejemplo si no contiene llaves o comillas
+correctamente emparejados.
+
+El error más común es la falta de una llave de cierre, (@code{@}}), al
+final de un bloque @code{score}. Aquí la solución es obvia: compruebe
+que el bloque @code{score} está correctamente cerrado. La estructura
+correcta de un archivo de entrada está descrita en @ref{How LilyPond
+input files work}. Usando un editor que resalte automáticamente las
+llaves correspondientes es de mucha ayuda para evitar estos errores.
+
+Este mensaje de error también puede aparecer si se omiten las comillas
+de terminación (@code{"}). En este caso, un mensaje de error
+adicional debería indicar un número de línea cercano al de aquella
+donde está el error. Las comillas desbalanceadas estarán por lo
+general una o dos líneas por encima.
+
+@node Error message Unbound variable %
+@unnumberedsubsubsec Error message Unbound variable %
+
+Este mensaje de error aparece al final de los mensajes de la consola o
+del archivo de registro junto a un mensaje @qq{GUILE señaló un error
+...} cada vez que se llame a una rutina de Scheme que
+(incorrectamente) contenga un comentario @emph{de LilyPond} en lugar
+de un comentario @emph{de Scheme}.
+
+Los comentarios de LilyPond comienzan con un símbolo de porcentaje,
+(@code{%}), y no se deben utilizar dentro de las rutinas de Scheme.
+Los comentarios de Scheme comienzan con punto y coma, (@code{;}).
@node Troubleshooting (taking it all apart)
error, pero en muchos casos tendrá que llevar a cabo algún tipo de
investigación para determinar el origen del problema.
-Las herramientas más poderosas para este cometido son el
-comentario de una sola línea (indicado por @code{%}) y el comentario de bloque
-(indicado por @code{%@{ ... %@}}). Si no sabe dónde está
-el problema, comience convirtiendo grandes secciones del
-archivo de entrada en un comentario. Después de eliminar una
-sección convirtiéndola en un comentario, pruebe a compilar el
-archivo otra vez. Si funciona, entonces el problema debía estar
-en la porción que había eliminado. Si no funciona, continúe eliminando material
-(transformándolo en comentarios) hasta que tenga algo que funcione.
+Las herramientas más poderosas para este cometido son el comentario de
+una sola línea (indicado por @code{%}) y el comentario de bloque
+(indicado por @code{%@{ ... %@}}). Si no sabe dónde está el problema,
+comience convirtiendo grandes secciones del archivo de entrada en un
+comentario. Después de eliminar una sección convirtiéndola en un
+comentario, pruebe a compilar el archivo otra vez. Si funciona,
+entonces el problema debía estar en la porción que había eliminado.
+Si no funciona, continúe eliminando material (transformándolo en
+comentarios) hasta que tenga algo que funcione.
En un caso extremo podría terminar con sólo
(en otras palabras: un archivo sin música)
Si ocurre esto, no abandone. Descomente un trozo pequeño -- digamos
-la parte del bajo -- y observe si funciona. Si no es así,
-transforme en comentarios toda la música del bajo (pero deje el
-@code{\bajo} de la sección @code{\score} no comentado.
+la parte del bajo -- y observe si funciona. Si no es así, transforme
+en comentarios toda la música del bajo (pero deje el @code{\bajo} de
+la sección @code{\score} no comentado.
@example
bajo = \relative c' @{
@subsection Minimal examples
Un ejemplo mínimo es un ejemplo tan pequeño como sea posible. Estos
-ejemplos son mucho más fáciles de comprender que los ejemplos largos. Los ejemplos
-mínimos se utilizan para
+ejemplos son mucho más fáciles de comprender que los ejemplos largos.
+Los ejemplos mínimos se utilizan para
@itemize
@item Informes de fallo
Para construir un ejemplo que sea lo más pequeño posible, la regla es
bastante simple: quite todo lo que no sea necesario. Al tratar de
-quitar partes innecesarias de un archivo, es una buena idea convertir líneas en
-comentarios en vez de borrarlas. De esta forma, si descubre que en realidad
-sí @emph{necesitaba} algunas de estas líneas, podrá descomentarlas y no tendrá que
-teclearlas de nuevo partiendo de cero.
+quitar partes innecesarias de un archivo, es una buena idea convertir
+líneas en comentarios en vez de borrarlas. De esta forma, si descubre
+que en realidad sí @emph{necesitaba} algunas de estas líneas, podrá
+descomentarlas y no tendrá que teclearlas de nuevo partiendo de cero.
Existen dos excepciones a la regla del @qq{lo más pequeño posible}:
@section Scores and parts
En música orquestal, todas las notas se imprimen dos veces. Una vez
-en las particellas para los músicos, y otra para la partitura del director.
-Los identificadores se pueden usar para evitar la duplicación del trabajo.
-La música se escribe una vez y se almacena en una variable.
-El contenido de dicha variable se usa después para generar tanto la particella como la partitura del director.
+en las particellas para los músicos, y otra para la partitura del
+director. Los identificadores se pueden usar para evitar la
+duplicación del trabajo. La música se escribe una vez y se almacena
+en una variable. El contenido de dicha variable se usa después para
+generar tanto la particella como la partitura del director.
Es muy conveniente definir las notas en un archivo especial. Por
ejemplo, supongamos que el archivo @file{trompa.ly} contiene la
}
@end lilypond
-En piezas para conjunto, con frecuencia una de las voces no suena durante muchos compases.
-Esto queda denotado por un silencio especial, el silencio multicompás.
-Se introduce con una @code{R} mayúscula seguida de una duración
-(@code{1}@tie{}en el caso de la redonda, @code{2}@tie{}en el caso de una blanca,
-etc.). Multiplicando la duración se pueden construir
-silencios más largos. Por ejemplo, este silencio ocupa
-3@tie{}compases de 2/4
+En piezas para conjunto, con frecuencia una de las voces no suena
+durante muchos compases. Esto queda denotado por un silencio
+especial, el silencio multicompás. Se introduce con una @code{R}
+mayúscula seguida de una duración (@code{1}@tie{}en el caso de la
+redonda, @code{2}@tie{}en el caso de una blanca, etc.). Multiplicando
+la duración se pueden construir silencios más largos. Por ejemplo,
+este silencio ocupa 3@tie{}compases de 2/4
@example
R2*3
@end example
Cuando se imprime la particella tienen que comprimirse los silencios
-multicompás. Esto se hace estableciendo una variable en tiempo de ejecución
+multicompás. Esto se hace estableciendo una variable en tiempo de
+ejecución
@example
\set Score.skipBars = ##t
@end example
@noindent
-Esta instrucción establece el valor de la propiedad @code{skipBars} en el
-contexto de @code{Score} a verdadero (@code{##t}). Anteponiendo el silencio y
-esta opción a la música anterior, llegamos al siguiente resultado
+Esta instrucción establece el valor de la propiedad @code{skipBars} en
+el contexto de @code{Score} a verdadero (@code{##t}). Anteponiendo el
+silencio y esta opción a la música anterior, llegamos al siguiente
+resultado
@lilypond[quote,ragged-right]
\transpose f c' \relative c {
}
>>
@end lilypond
+
+
+@node Make and Makefiles
+@section Make and Makefiles
+
+@cindex make, archivos de
+@cindex make
+
+Posiblemente todas las plataformas en que puede correr LilyPond,
+contemplan una posibilidad de software llamada @code{make}. Este
+programa lee un archivo especial llamado @code{Makefile} que define
+las relaciones de dependencia entre los archivos y qué instrucciones
+necesitamos dar al sistema operativo para producir un archivo a partir
+de otro. Por ejemplo, el archivo de make detallaría cómo obtener
+@code{balada.pdf} y @code{balada.midi} a partir de @code{balada.ly}
+mediante la ejecución de Lilypond.
+
+Existen ocasiones en las que es buena idea crear un @code{Makefile}
+para nuestro proyecto, bien sea por nuestra propia comodidad o como
+cortesía para otros que posiblemente tengan acceso a nuestros archivos
+fuente. Esto es cierto para proyectos muy grandes con muchos archivos
+de inclusión y distintas opciones de salida (p.ej. partitura completa,
+particellas, partitura del director, reducción para piano, etc.), o
+para proyectos que requieren instrucciones difíciles para montarlas
+(como los proyectos de @code{lilypond-book}). La complejidad y
+flexibilidad de los Makefiles varía enormemente según las necesidades
+y la habilidad de los autores. El programa GNU Make viene instalado
+en las distribuciones de GNU/Linux y en MacOS X, y también existe para
+Windows.
+
+Consulte el @strong{Manual de GNU Make} para ver todos los detalles
+sobre el uso de @code{make}, pues lo que sigue a continuación ofrece
+solamente una pincelada de todo lo que es capaz de hacer.
+
+Las instrucciones que definen las reglas en un archivo de make
+difieren en función de la plataforma; por ejemplo, las distintas
+formas de Linux y MacOS usan @code{bash}, mientras que Windows usa
+@code{cmd}. Observeque en MacOS X, tenemos que configurar el sistema
+para que utilice el intérprete de órdenes. A continuación presentamos
+algunos makefiles de ejemplo, con versiones tanto para Linux/MacOS
+como para Windows.
+
+El primer ejemplo es para una obra orquestal en cuatro movimientos con
+la estructura de directorios siguiente:
+
+@example
+Sinfonia/
+|-- MIDI/
+|-- Makefile
+|-- Notas/
+| |-- cello.ily
+| |-- cifras.ily
+| |-- trompa.ily
+| |-- oboe.ily
+| |-- trioCuerdas.ily
+| |-- viola.ily
+| |-- violinUno.ily
+| `-- violinDos.ily
+|-- PDF/
+|-- Particellas/
+| |-- sinfonia-cello.ly
+| |-- sinfonia-trompa.ly
+| |-- sinfonia-oboes.ly
+| |-- sinfonia-viola.ly
+| |-- sinfonia-violinUno.ly
+| `-- sinfonia-violinDos.ly
+|-- Partituras/
+| |-- sinfonia.ly
+| |-- sinfoniaI.ly
+| |-- sinfoniaII.ly
+| |-- sinfoniaIII.ly
+| `-- sinfoniaIV.ly
+`-- sinfoniaDefs.ily
+@end example
+
+Los archivos @code{.ly} de los directorios @code{Partituras} y
+@code{Particellas} obtienen las notas de archivos @code{.ily} que están en
+el directorio @code{Notas}:
+
+@example
+%%% principio del archivo "sinfonia-cello.ly"
+\include ../definiciones.ily
+\include ../Notas/cello.ily
+@end example
+
+El makefile tendrá los objetivos de @code{partitura} (la pieza
+completa en todo su esplendor), @code{movimientos} (partitura completa
+de los movimientos individuales) y @code{particellas} (partes
+individuales para los atriles). También existe un objetivo
+@code{archivo} que produce un tarball de los archivos fuente, adecuado
+para compartirlo a través de la web o por correo electrónico. A
+continuación presentamos el makefile para GNU/Linux o MacOS X. Se
+debe guardar con el nombre exacto @code{Makefile} el el directorio
+superior del proyecto:
+
+@warning{Cuando se define un objetivo o una regla de patrón, las
+líneas siguientes deben comenzar con tabuladores, no con espacios.}
+
+@example
+# nombre principal de los archivos de salida
+nombre = sinfonia
+# determinar cuántos procesadores existen
+CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//`
+# La instrucción para ejecutar lilypond
+LILY_CMD = lilypond -ddelete-intermediate-files \
+ -dno-point-and-click -djob-count=$(CPU_CORES)
+
+# Los sufijos utilizados en este Makefile.
+.SUFFIXES: .ly .ily .pdf .midi
+
+# Los archivos de entrada y salida se buscan dentro de los directorios relacionados en
+# la variable VPATH. Todos esllos son subdirectorios del directorio
+# en curso (dado por la variable de GNU make `CURDIR').
+VPATH = \
+ $(CURDIR)/Partituras \
+ $(CURDIR)/PDF \
+ $(CURDIR)/Particellas \
+ $(CURDIR)/Notas
+
+# La regla de patrón para crear archivos PDF y MIDI a partir de un archivo de entrada LY.
+# Los archivos de salida .pdf se colocan en el subdirectorio `PDF', y los archivos
+# .midi van al subdirectorio `MIDI'.
+%.pdf %.midi: %.ly
+ $(LILY_CMD) $<; \ # esta línea comienza con un salto de tabulación
+ if test -f "$*.pdf"; then \
+ mv "$*.pdf" PDF/; \
+ fi; \
+ if test -f "$*.midi"; then \
+ mv "$*.midi" MIDI/; \
+ fi
+
+notas = \
+ cello.ily \
+ trompa.ily \
+ oboe.ily \
+ viola.ily \
+ violinUno.ily \
+ violinDos.ily
+
+# Dependencias de los movimientos.
+$(nombre)I.pdf: $(nombre)I.ly $(notas)
+$(nombre)II.pdf: $(nombre)II.ly $(notas)
+$(nombre)III.pdf: $(nombre)III.ly $(notas)
+$(nombre)IV.pdf: $(nombre)IV.ly $(notas)
+
+# Dependencias de la partitura completa.
+$(nombre).pdf: $(nombre).ly $(notas)
+
+# Dependencias de las particellas.
+$(nombre)-cello.pdf: $(nombre)-cello.ly cello.ily
+$(nombre)-trompa.pdf: $(nombre)-trompa.ly trompa.ily
+$(nombre)-oboes.pdf: $(nombre)-oboes.ly oboe.ily
+$(nombre)-viola.pdf: $(nombre)-viola.ly viola.ily
+$(nombre)-violinUno.pdf: $(nombre)-violinUno.ly violinUno.ily
+$(nombre)-violinDos.pdf: $(nombre)-violinDos.ly violinDos.ily
+
+# Teclee `make partitura' para generer la partitura completa de los cuatro
+# movimientos como un archivo único.
+.PHONY: partitura
+partitura: $(nombre).pdf
+
+# Teclee `make particellas' para generar todas las particellas.
+# Teclee `make fulanito.pdf' para generar la particella del instrumento `fulanito'.
+# Ejemplo: `make sinfonia-cello.pdf'.
+.PHONY: particellas
+particellas: $(nombre)-cello.pdf \
+ $(nombre)-violinUno.pdf \
+ $(nombre)-violinDos.pdf \
+ $(nombre)-viola.pdf \
+ $(nombre)-oboes.pdf \
+ $(nombre)-trompa.pdf
+
+# Teclee `make movimientos' para generar los archivos de los
+# cuatro movimientos de forma separada.
+.PHONY: movimientos
+movimientos: $(nombre)I.pdf \
+ $(nombre)II.pdf \
+ $(nombre)III.pdf \
+ $(nombre)IV.pdf
+
+all: partitura particellas movimientos
+
+archivo:
+ tar -cvvf stamitz.tar \ # esta línea comienza con un salto de tabulación
+ --exclude=*pdf --exclude=*~ \
+ --exclude=*midi --exclude=*.tar \
+ ../Stamitz/*
+@end example
+
+
+Existen ciertas complicaciones en la plataforma Windows. Después de
+descargar e instalar el programa GNU Make para Windows, debemos
+configurar la ruta adecuada en las variables de entorno del sistema de
+forma que el shell del DOS pueda encontrar el programa Make. Para
+hacerlo, pulse con el botón derecho sobre "Mi PC", elija
+@code{Propiedades} y @code{Avanzadas}. Pulse sobre @code{Variables de
+entorno}, y luego en la pestaña @code{Variables del sistema},
+seleccione @code{Ruta}, pulse sobre @code{editar} y añada la ruta al
+archivo ejecutable de GNU Make, con lo que quedará algo parecido a lo
+siguiente:
+
+@example
+C:\Archivos de programa\GnuWin32\bin
+@end example
+
+El makefile en sí debe modificarse para que maneje distintas
+instrucciones del shell y para que pueda tratar con los espacios que
+aparecen en el nombre de algunos directorios del sistema
+predeterminados. El objetivo @code{archivo} se elimina porque Windows
+no tiene la instrucción @code{tar}, y Windows tiene también una
+extensión predeterminada distinta para los archivos MIDI.
+
+
+@example
+## VERSIÓN PARA WINDOWS
+##
+nombre = sinfonia
+LILY_CMD = lilypond -ddelete-intermediate-files \
+ -dno-point-and-click \
+ -djob-count=$(NUMBER_OF_PROCESSORS)
+
+#obtener el nombre 8.3 de CURDIR (rodeo para los espacios en PATH)
+workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \
+ do @@echo %%~sb)
+
+.SUFFIXES: .ly .ily .pdf .mid
+
+VPATH = \
+ $(workdir)/Partituras \
+ $(workdir)/PDF \
+ $(workdir)/Particellas \
+ $(workdir)/Notas
+
+%.pdf %.mid: %.ly
+ $(LILY_CMD) $< # esta línea comienza con un salto de tabulación
+ if exist "$*.pdf" move /Y "$*.pdf" PDF/ # comienzo con tab
+ if exist "$*.mid" move /Y "$*.mid" MIDI/ # comienzo con tab
+
+notas = \
+ cello.ily \
+ cifras.ily \
+ trompa.ily \
+ oboe.ily \
+ trioCuerdas.ily \
+ viola.ily \
+ violinUno.ily \
+ violinDos.ily
+
+$(nombre)I.pdf: $(nombre)I.ly $(notas)
+$(nombre)II.pdf: $(nombre)II.ly $(notas)
+$(nombre)III.pdf: $(nombre)III.ly $(notas)
+$(nombre)IV.pdf: $(nombre)IV.ly $(notas)
+
+$(nombre).pdf: $(nombre).ly $(notas)
+
+$(nombre)-cello.pdf: $(nombre)-cello.ly cello.ily
+$(nombre)-trompa.pdf: $(nombre)-trompa.ly trompa.ily
+$(nombre)-oboes.pdf: $(nombre)-oboes.ly oboe.ily
+$(nombre)-viola.pdf: $(nombre)-viola.ly viola.ily
+$(nombre)-violinUno.pdf: $(nombre)-violinUno.ly violinUno.ily
+$(nombre)-violinDos.pdf: $(nombre)-violinDos.ly violinDos.ily
+
+.PHONY: partitura
+partitura: $(nombre).pdf
+
+.PHONY: particellas
+particellas: $(nombre)-cello.pdf \
+ $(nombre)-violinUno.pdf \
+ $(nombre)-violinDos.pdf \
+ $(nombre)-viola.pdf \
+ $(nombre)-oboes.pdf \
+ $(nombre)-trompa.pdf
+
+.PHONY: movimientos
+movimientos: $(nombre)I.pdf \
+ $(nombre)II.pdf \
+ $(nombre)III.pdf \
+ $(nombre)IV.pdf
+
+all: partitura particellas movimientos
+@end example
+
+
+El Makefile siguiente es para un documento de @command{lilypond-book}
+hecho en LaTeX. Este proyecto tiene un índice, que requiere ejecutar
+la instrucción @command{latex} dos veces para actualizar los enlaces.
+Todos los archivos de salida se almacenan en el directorio
+@code{salida} para los documentos .pdf y en el directorio
+@code{salidahtml} para la salida en formato html.
+
+@example
+SHELL=/bin/sh
+NOMBRE=miproyecto
+DIR_SALIDA=salida
+DIR_WEB=salidahtml
+VISOR=acroread
+NAVEGADOR=firefox
+LILYBOOK_PDF=lilypond-book --output=$(DIR_SALIDA) --pdf $(NOMBRE).lytex
+LILYBOOK_HTML=lilypond-book --output=$(DIR_WEB) $(NOMBRE).lytex
+PDF=cd $(DIR_SALIDA) && pdflatex $(NOMBRE)
+HTML=cd $(DIR_WEB) && latex2html $(NOMBRE)
+INDICE=cd $(DIR_SALIDA) && makeindex $(NOMBRE)
+VISTA_PREVIA=$(VISOR) $(DIR_SALIDA)/$(NOMBRE).pdf &
+
+all: pdf web guardar
+
+pdf:
+ $(LILYBOOK_PDF) # comienza con un tab
+ $(PDF) # comienza con un tab
+ $(INDICE) # comienza con un tab
+ $(PDF) # comienza con un tab
+ $(VISTA_PREVIA) # comienza con un tab
+
+web:
+ $(LILYBOOK_HTML) # comienza con un tab
+ $(HTML) # comienza con un tab
+ cp -R $(DIR_WEB)/$(NOMBRE)/ ./ # comienza con un tab
+ $(NAVEGADOR) $(NOMBRE)/$(NOMBRE).html & # comienza con un tab
+
+guardar: pdf
+ cp $(DIR_SALIDA)/$(NOMBRE).pdf $(NOMBRE).pdf # comienza con un tab
+
+clean:
+ rm -rf $(DIR_SALIDA) # comienza con un tab
+
+web-clean:
+ rm -rf $(DIR_WEB) # comienza con un tab
+
+archivo:
+ tar -cvvf miproyecto.tar \ # comienza con un tab
+ --exclude=salida/* \
+ --exclude=salidahtml/* \
+ --exclude=miproyecto/* \
+ --exclude=*midi \
+ --exclude=*pdf \
+ --exclude=*~ \
+ ../MiProyecto/*
+@end example
+
+HACER: conseguir que funcione en Windows
+
+El makefile anterior no funciona en Windows. Una alternativa para los
+usuarios de Windows sería crear un archivo de lotes sencillo que
+contenga las instrucciones de montaje. Esto no rastrea las
+dependencias en la manera en que lo hace un makefile, pero al menos
+reduce el proceso de construcción a una sola instrucción. Guarde el
+código siguiente como @command{montaje.bat} o @command{montaje.cmd}.
+El archivo de lotes se puede ejecutar en la línea de comandos del DOS
+o simplemente haciendo doble click sobre su icono.
+
+@example
+lilypond-book --output=salida --pdf miproyecto.lytex
+cd salida
+pdflatex miproyecto
+makeindex miproyecto
+pdflatex miproyecto
+cd ..
+copy salida\miproyecto.pdf MiProyecto.pdf
+@end example
+
+
+@seealso
+Manual de utilización del programa:
+@rprogram{Setup for MacOS X},
+@rprogram{Command-line usage},
+@rprogram{LilyPond-book}