]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/fr/user/working.itely
Doc-fr: Learning Manual full update
[lilypond.git] / Documentation / fr / user / working.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
2 @c This file is part of lilypond-learning.tely
3 @ignore
4    Translation of GIT committish: 7eee2a7382029cc29cc069f93a431758ae8a13b7
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 @c Translators: Ludovic Sardain, Jean-Charles Malahieude
13 @c Translation checkers: Jean-Yves Baudais, Valentin Villenave, John Mandereau, Jean-Charles Malahieude
14
15 @node Working on LilyPond projects
16 @chapter Working on LilyPond projects
17
18 Cette section explique comment résoudre ou éviter certains problèmes
19 courants.  Si vous avez de l'expérience en programmation, beaucoup de
20 ces astuces peuvent vous paraître évidentes, mais vous ne perdrez tout
21 de même pas votre temps à lire ce chapitre.
22
23 @menu
24 * Suggestions for writing LilyPond input files::
25 * When things don't work::      
26 * Scores and parts::            
27 * Make and Makefiles::
28 @end menu
29
30 @node Suggestions for writing LilyPond input files
31 @section Suggestions for writing LilyPond input files
32
33 Maintenant vous êtes prêt à travailler sur de plus gros fichiers
34 LilyPond --- des pièces entières, et plus seulement les petits
35 exemples du tutoriel.  Mais comment devriez-vous vous y prendre ?
36
37 Tant que LilyPond parvient à comprendre vos fichiers et produit le
38 résultat que vous souhaitez, peu importe la manière dont le code est
39 organisé.  Néanmoins, quelques critères doivent être pris en compte
40 lorsque l'on écrit un fichier LilyPond.
41
42 @itemize
43 @item Si vous faites une erreur, la structure même du fichier LilyPond
44 peut permettre de la localiser plus ou moins facilement.
45
46 @item Et si vous souhaitez partager vos fichiers avec quelqu'un
47 d'autre, ou si vous souhaitez modifier vos propres fichiers dans
48 quelques années ?  Si certains fichiers LilyPond sont compréhensibles
49 au premier coup d'oeil, d'autres vous feront vous arracher les cheveux
50 pendant une heure.
51
52 @item Et si vous souhaitez mettre à jour votre fichier pour
53 l'utiliser avec une version plus récente de LilyPond ?  La syntaxe du
54 langage d'entrée change parfois lorsque LilyPond s'améliore.  La
55 plupart des changements peuvent être appliqués automatiquement avec
56 @code{convert-ly}, mais quelques-uns peuvent requérir une intervention
57 manuelle.  Vos fichiers LilyPond peuvent être structurés de manière à
58 faciliter leur mise à jour.
59 @end itemize
60
61 @menu
62 * General suggestions::         
63 * Typesetting existing music::  
64 * Large projects::              
65 * Saving typing with variables and functions::  
66 * Style sheets::                
67 @end menu
68
69 @node General suggestions
70 @subsection General suggestions
71
72 Voici quelques conseils qui peuvent vous éviter certains problèmes ou
73 en résoudre d'autres.
74
75 @itemize
76 @item @strong{Ajoutez le numéro de version dans chaque fichier}.
77 Notez que chaque fichier modèle contient une ligne @w{@code{\version
78 "@version{}"}}.  Nous vous conseillons fortement d'inclure cette ligne,
79 même pour de petits fichiers.  Par expérience, il est très difficile
80 de se rappeler quelle version de LilyPond on utilisait quelques
81 années auparavant.  L'utilitaire @command{convert-ly} demande que vous
82 spécifiiez la version de LilyPond vous utilisiez alors.
83
84 @item @strong{Ajoutez des contrôles} : @ruser{Octave checks}  et
85 @ruser{Bar and bar number checks}.  Si vous avez ajouté des contrôles
86 de loin en loin, et que vous faites une erreur, vous pourrez la
87 retrouver plus rapidement.  @qq{De loin en loin}, qu'est-ce à dire ?
88 Cela dépend de la complexité de la musique.  Pour de la musique très
89 simple, peut-être une ou deux fois.  Pour de la musique très complexe,
90 peut-être à chaque mesure.
91
92 @item @strong{Une mesure par ligne de texte}.  Si la musique en elle-même ou
93 le résultat que vous désirez contient quelque chose de compliqué, il
94 est souvent bon de n'écrire qu'une seule mesure par ligne.  Économiser
95 de la place en tassant huit mesures par ligne, ça ne vaut pas vraiment
96 le coup si l'on doît corriger vos fichiers.
97
98 @item @strong{Ajoutez des commentaires}.  Utilisez soit des
99 numéros de mesure (assez souvent), soit des références au contenu
100 musical --- @qq{second thème des violons}, @qq{quatrième variation}, etc.
101 Vous pouvez ne pas avoir besoin des commentaires lorsque vous écrivez
102 une pièce pour la première fois, mais si vous souhaitez y revenir deux
103 ou trois ans plus tard pour changer quelque chose, ou si vous donnez
104 le fichier source à un ami, ce sera beaucoup plus difficile de
105 déterminer vos intentions ou la manière dont votre fichier est
106 structuré si vous n'y avez pas adjoint de commentaires.
107
108 @item @strong{Indentez les accolades}.  Beaucoup de problèmes
109 viennent d'un défaut de parité entre @code{@{} et @code{@}}.
110
111 @item @strong{Mentionnez les durées} au début de chaque section ou
112 variable.  Si vous saisissez @code{c4 d e} au début d'une phrase, vous
113 vous épargnerez des problèmes si, plus tard, vous modifiez votre musique.
114
115 @item @strong{Séparez les affinages de mise en forme} de la musique
116 elle-même. Voyez @ref{Saving typing with variables and functions} et
117 @ref{Style sheets}.
118
119 @end itemize
120
121
122 @node Typesetting existing music
123 @subsection Typesetting existing music
124
125 Si vous saisissez de la musique à partir d'une partition existante,
126 c'est-à-dire de la musique déjà écrite,
127
128 @itemize
129
130 @item n'entrez qu'un seul système de la partition originale
131 à la fois --- mais toujours une seule mesure par ligne de texte ---,
132 et vérifiez chaque système lorsqu'il est terminé.  Vous pouvez
133 utiliser les commandes @code{showLastLength} et @code{showFirstLength}
134 pour accélérer la compilation --- voir @ruser{Skipping corrected music} ;
135
136 @item définissez @code{mBreak = @{\break @}} et insérez
137 @code{\mBreak} dans le fichier d'entrée pour obtenir des sauts de
138 ligne identiques à la partition originale.  Cela facilite la
139 comparaison entre la partition originale et la partition de 
140 LilyPond.  Lorsque vous avez fini de relire votre musique, vous pouvez
141 définir @code{mBreak = @{ @}} pour enlever tous ces sauts de ligne, et
142 laisser LilyPond placer les sauts de ligne selon son propre algorithme.
143
144 @item encadrez les notes d'une partie pour instrument transpositeur
145 dans un 
146
147 @example
148 \transpose c tonalité-naturelle @{...@}
149 @end example
150 (où @code{tonalité-naturelle} correspond à celle de l'instrument en
151 question) de telle sorte que la musique comprise dans cette variable se
152 retrouve en ut.  Vous pourrez toujours transposer à l'inverse si besoin
153 lorsque vous ferez appel à cette variable.  Des erreurs de transposition
154 seront moins susceptibles de se produire si la musique de toutes les
155 variables est dans la même et unique tonalité.
156
157 De la même manière, prénez toujours le do comme note de départ ou
158 d'arrivée.  Ceci aura pour simple conséquence que les autres tonalités
159 que vous utiliserez seront celles propres à chacun des instruments ---
160 sib pour une trompette en si bémol, ou lab pour une clarinette en la bémol.
161
162 @end itemize
163
164
165 @node Large projects
166 @subsection Large projects
167
168 Lorsque l'on travaille sur un gros projet, il devient vital
169 de structurer clairement ses fichiers LilyPond.
170
171 @itemize @bullet
172
173 @item @strong{Utilisez un identificateur pour chaque voix},
174 avec un minimum de structure dans la définition.  La structure de la
175 section @code{\score} est la plus susceptible de changer, notamment
176 dans une nouvelle version de LilyPond, alors que la définition du
177 @code{violon} l'est beaucoup moins.
178
179 @example
180 violin = \relative c'' @{
181 g4 c'8. e16
182 @}
183 ...
184 \score @{
185  \new GrandStaff @{
186    \new Staff @{
187      \violin
188    @}
189  @}
190 @}
191 @end example
192
193 @item @strong{Séparez les retouches} des définitions de
194 musique.  Nous vous avons déjà invité à adopter une telle pratique, qui
195 par ailleurs devient vitale pour des projets d'importance.  Nous
196 pouvons avoir besoin de changer la définition de
197 @code{fpuisp}, mais dans ce cas nous n'aurons besoin de le faire
198 qu'une seule fois, et nous pourrons encore éviter de
199 modifier quoi que ce soit à l'intérieur de la définition
200 du @code{violon}.
201
202 @example
203 fpuisp = _\markup@{
204  \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @}
205 violin = \relative c'' @{
206 g4\fpuisp c'8. e16
207 @}
208 @end example
209
210 @end itemize
211
212
213 @node Saving typing with variables and functions
214 @subsection Saving typing with variables and functions
215
216 @cindex variables
217 @cindex identificateurs
218
219 Jusqu'à maintenant, vous avez vu ce type de code :
220
221 @lilypond[quote,verbatim,ragged-right]
222 hornNotes = \relative c'' { c4 b dis c }
223 \score {
224   {
225     \hornNotes
226   }
227 }
228 @end lilypond
229
230 Vous comprendrez combien cela peut être utile pour écrire de la
231 musique minimaliste :
232
233 @lilypond[quote,verbatim,ragged-right]
234 fragmentA = \relative c'' { a4 a8. b16 }
235 fragmentB = \relative c'' { a8. gis16 ees4 }
236 violin = \new Staff { \fragmentA \fragmentA \fragmentB \fragmentA }
237 \score {
238   {
239     \violin
240   }
241 }
242 @end lilypond
243
244 Néanmoins vous pouvez aussi utiliser ces identificateurs
245 --- aussi connus sous le nom de variables, macros, ou commandes
246 (définies par l'utilisateur) --- pour des retouches :
247
248 @lilypond[quote,verbatim,ragged-right]
249 dolce = \markup{ \italic \bold dolce }
250 padText = { \once \override TextScript #'padding = #5.0 }
251 fthenp=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p }
252 violin = \relative c'' {
253   \repeat volta 2 {
254     c4._\dolce b8 a8 g a b |
255     \padText
256     c4.^"hi there!" d8 e' f g d |
257     c,4.\fthenp b8 c4 c-. |
258   }
259 }
260 \score {
261   {
262     \violin
263   }
264 \layout{ragged-right=##t}
265 }
266 @end lilypond
267
268 Ces identificateurs sont évidemment utiles pour économiser de la
269 frappe.  Mais ils peuvent l'être même si vous ne les utilisez qu'une
270 seule fois : ils réduisent la complexité.  Regardons l'exemple
271 précédent sans aucun identificateur.  C'est beaucoup plus laborieux à
272 lire, et particulièrement la dernière ligne.
273
274 @example
275 violin = \relative c'' @{
276   \repeat volta 2 @{
277     c4._\markup@{ \italic \bold dolce @} b8 a8 g a b |
278     \once \override TextScript #'padding = #5.0
279     c4.^"hi there!" d8 e' f g d |
280     c,4.\markup@{ \dynamic f \italic \small @{ 2nd @}
281       \hspace #0.1 \dynamic p @} b8 c4 c-. |
282   @}
283 @}
284 @end example
285
286 @c TODO Replace the following with a better example  -td
287 @c Skylining handles this correctly without padText
288
289 Jusqu'ici nous avons vu des substitutions statiques : quand LilyPond
290 rencontre @code{\padText}, il le remplace par le contenu que nous lui
291 avons défini --- c'est-à-dire le contenu à droite de @code{padText=}.
292
293 LilyPond gère également des substitutions non-statiques --- vous
294 pouvez les voir comme des fonctions.
295
296 @lilypond[quote,verbatim,ragged-right]
297 padText =
298 #(define-music-function (parser location padding) (number?)
299   #{
300     \once \override TextScript #'padding = #$padding
301   #})
302
303 \relative c''' {
304   c4^"piu mosso" b a b
305   \padText #1.8
306   c4^"piu mosso" d e f
307   \padText #2.6
308   c4^"piu mosso" fis a g
309 }
310 @end lilypond
311
312 Utiliser les identificateurs est aussi un bon moyen pour vous épargner
313 du travail si la syntaxe de LilyPond change un jour --- voir
314 @ref{Updating old input files}.  Si vous avez une seule définition, par
315 exemple @code{\dolce}, pour tous vos fichiers (voir @ref{Style sheets}),
316 et que la syntaxe change, alors vous n'aurez qu'à mettre à 
317 jour votre seule définition @code{\dolce}, au lieu de devoir modifier
318 chaque fichier @code{.ly}.
319
320
321 @node Style sheets
322 @subsection Style sheets
323
324 La sortie que produit LilyPond peut être largement modifiée --- voir
325 @ref{Tweaking output} pour plus de détails.  Mais que faire si vous
326 avez beaucoup de fichiers auxquels vous souhaitez appliquer vos
327 retouches ? Ou si vous souhaitez simplement séparer les retouches de
328 la musique elle-même ?  Rien de plus facile.
329
330 Prenons un exemple.  Ne vous inquiétez pas si vous ne comprenez pas
331 les parties avec tous les @code{#()}.  Celles-ci sont expliquées dans
332 @ref{Advanced tweaks with Scheme}.
333
334 @lilypond[quote,verbatim,ragged-right]
335 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
336   #:line(#:dynamic "mp" #:text #:italic "dolce" )))
337
338 inst = #(define-music-function (parser location string) (string?)
339   (make-music
340     'TextScriptEvent
341     'direction UP
342     'text (markup #:bold (#:box string))))
343
344 \relative c'' {
345   \tempo 4=50
346   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
347   \inst "Clarinet"
348   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
349 }
350 @end lilypond
351
352 Il y a quelques problèmes de chevauchement ; nous allons arranger
353 cela en utilisant les techniques de @ref{Moving objects}.  On peut
354 aussi faire quelque chose pour les définitions de @code{mpdolce}
355 et @code{inst}.  Elles produisent le résultat que nous désirons,
356 mais nous pourrions aussi vouloir les utiliser dans une autre pièce.
357 Il suffirait de les copier et coller au début de chaque
358 fichier, mais c'est fastidieux.  De plus, cela laisse les définitions
359 dans nos fichiers de musique, et je trouve personnellement tous ces
360 @code{#()} assez laids.  Stockons-les dans un autre fichier :
361
362 @example
363 %%% enregistrez ceci dans un fichier nommé "definitions.ily"
364 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
365   #:line(#:dynamic "mp" #:text #:italic "dolce" )))
366
367 inst = #(define-music-function (parser location string) (string?)
368   (make-music
369     'TextScriptEvent
370     'direction UP
371     'text (markup #:bold (#:box string))))
372 @end example
373
374 Nous rappellerons ce fichier par une simple commande @code{\include} au
375 début de notre fichier de musique.  Lui attribuer l'extension
376 @code{.ily} nous permet de distinguer aisément qu'il s'agit d'un fichier
377 voué à être inclus dans un fichier maître ; il n'est pas destiné à être
378 compilé isolément.
379 Maintenant, modifions notre musique (enregistrez ce fichier
380 sous @file{musique.ly}).
381
382 @c  We have to do this awkward example/lilypond-non-verbatim
383 @c  because we can't do the \include stuff in the manual.
384
385 @example
386 \include "definitions.ily"
387
388 \relative c'' @{
389   \tempo 4=50
390   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
391   \inst "Clarinet"
392   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
393 @}
394 @end example
395
396 @lilypond[quote,ragged-right]
397 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
398   #:line(#:dynamic "mp" #:text #:italic "dolce" )))
399
400 inst = #(define-music-function (parser location string) (string?)
401   (make-music
402     'TextScriptEvent
403     'direction UP
404     'text (markup #:bold (#:box string))))
405
406 \relative c'' {
407   \tempo 4=50
408   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
409   \inst "Clarinet"
410   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
411 }
412 @end lilypond
413
414 C'est mieux, mais effectuons encore quelques retouches.  Le glissando
415 est peu visible, c'est pourquoi nous allons l'épaissir et le
416 rapprocher des têtes de note.  Déplaçons l'indication métronomique
417 au-dessus de la clef, au lieu de la laisser au-dessus de la première
418 note.  Et pour finir, mon professeur de composition déteste les
419 chiffrages de mesure en @qq{C}, nous allons donc le transformer en @qq{4/4}.
420
421 Cependant, ne changez pas le fichier @file{musique.ly}.  Remplacez le
422 fichier @file{definitions.ily} par ceci :
423
424 @example
425 %%%  definitions.ily
426 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
427   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
428
429 inst = #(define-music-function (parser location string) (string?)
430   (make-music
431     'TextScriptEvent
432     'direction UP
433     'text (markup #:bold (#:box string))))
434
435 \layout@{
436   \context @{ \Score
437     \override MetronomeMark #'extra-offset = #'(-9 . 0)
438     \override MetronomeMark #'padding = #'3
439   @}
440   \context @{ \Staff
441     \override TimeSignature #'style = #'numbered
442   @}
443   \context @{ \Voice
444     \override Glissando #'thickness = #3
445     \override Glissando #'gap = #0.1
446   @}
447 @}
448 @end example
449
450 @lilypond[quote,ragged-right]
451 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
452   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
453
454 inst = #(define-music-function (parser location string) (string?)
455   (make-music
456     'TextScriptEvent
457     'direction UP
458     'text (markup #:bold (#:box string))))
459
460 \layout{
461   \context { \Score
462     \override MetronomeMark #'extra-offset = #'(-9 . 0)
463     \override MetronomeMark #'padding = #'3
464   }
465   \context { \Staff
466     \override TimeSignature #'style = #'numbered
467   }
468   \context { \Voice
469     \override Glissando #'thickness = #3
470     \override Glissando #'gap = #0.1
471   }
472 }
473
474 \relative c'' {
475   \tempo 4=50
476   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
477   \inst "Clarinet"
478   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
479 }
480 @end lilypond
481
482 C'est encore mieux !  Mais supposons maintenant que je veuille publier
483 cette pièce.  Mon professeur de composition n'aime pas les chiffrages
484 de mesure en @qq{C}, mais moi je les aime bien.  Copions l'actuel
485 @file{definitions.ily} dans le fichier @file{publication-web.ily}, et
486 modifions ce dernier.  Puisque la musique est destinée à produire un
487 fichier PDF affiché sur écran, nous allons aussi augmenter la taille
488 globale de police.
489
490 @example
491 %%%  definitions.ily
492 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
493   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
494
495 inst = #(define-music-function (parser location string) (string?)
496   (make-music
497     'TextScriptEvent
498     'direction UP
499     'text (markup #:bold (#:box string))))
500
501 #(set-global-staff-size 23)
502 \layout@{
503   \context @{ \Score
504     \override MetronomeMark #'extra-offset = #'(-9 . 0)
505     \override MetronomeMark #'padding = #'3
506   @}
507   \context @{ \Staff
508   @}
509   \context @{ \Voice
510     \override Glissando #'thickness = #3
511     \override Glissando #'gap = #0.1
512   @}
513 @}
514 @end example
515
516 @lilypond[quote,ragged-right]
517 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
518   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
519
520 inst = #(define-music-function (parser location string) (string?)
521   (make-music
522     'TextScriptEvent
523     'direction UP
524     'text (markup #:bold (#:box string))))
525
526 #(set-global-staff-size 23)
527 \layout{
528   \context { \Score
529     \override MetronomeMark #'extra-offset = #'(-9 . 0)
530     \override MetronomeMark #'padding = #'3
531   }
532   \context { \Voice
533     \override Glissando #'thickness = #3
534     \override Glissando #'gap = #0.1
535   }
536 }
537
538 \relative c'' {
539   \tempo 4=50
540   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
541   \inst "Clarinet"
542   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
543 }
544 @end lilypond
545
546 Il ne nous reste plus qu'à remplacer @code{\include "definitions.ily"}
547 par @code{\include "publication-web.ily"} dans notre fichier de musique.
548
549 Il est possible, bien sûr, de rendre cela encore plus pratique.  Nous
550 pourrions créer un fichier @file{definitions.ily} qui ne contiendrait
551 que les définitions de @code{mpdolce} et de @code{inst}, un
552 fichier @file{publication-web.ily} qui ne contiendrait que la section
553 @code{layout} décrite ci-dessus et un fichier @file{universite.ily} qui
554 ne contiendrait que les retouches pour produire le résultat que mon
555 professeur préfère.  Le début du fichier @file{musique.ly} ressemblerait
556 alors à
557
558 @example
559 \include "definitions.ily"
560
561 %%%  Décommentez seulement une de ces deux lignes !
562 \include "publication-web.ily"
563 %\include "universite.ily"
564 @end example
565
566 Cette approche peut être utile même si vous ne produisez qu'un seul
567 jeu de partitions.  J'utilise personnellement une demi-douzaine de
568 fichiers de @qq{feuille de style} pour mes projets.  Je commence
569 chaque fichier de musique par @code{\include "../global.ily"} qui contient :
570
571 @example
572 %%%   global.ily
573 \version @w{"@version{}"}
574 #(ly:set-option 'point-and-click #f)
575 \include "../init/init-defs.ly"
576 \include "../init/init-mise-en-page.ly"
577 \include "../init/init-en-tetes.ly"
578 \include "../init/init-papier.ly"
579 @end example
580
581 @node When things don't work
582 @section When things don't work
583
584 @menu
585 * Updating old files::          
586 * Troubleshooting (taking it all apart)::  
587 * Minimal examples::            
588 @end menu
589
590 @node Updating old input files
591 @subsection Updating old input files
592
593 @cindex convert-ly
594 @cindex mise à jour d'anciens fichiers
595
596 La syntaxe de LilyPond change de temps en temps.  Ces changements de
597 syntaxe du langage d'entrée accompagnent les améliorations du
598 logiciel.  Ces changements sont parfois destinés à rendre les fichiers
599 plus faciles à lire et à écrire, ou permettent d'intégrer de nouvelles
600 fonctionnalités.
601
602 LilyPond est fourni avec un utilitaire qui facilite cette mise à
603 jour : @command{convert-ly}.  Pour savoir comment utiliser ce programme,
604 voir @rprogram{Updating files with convert-ly}.
605
606 Malheureusement, @command{convert-ly} ne peut pas réaliser toutes les
607 modifications.  Il s'occupe des changements qui ne requièrent qu'une
608 simple substitution de texte --- comme @code{raggedright} devenant
609 @code{ragged-right} ---, les autres étant trop compliqués à effectuer.
610 Les changements de syntaxe qui ne sont pas gérés par @command{convert-ly}
611 sont énumérés dans @rprogram{Updating files with convert-ly}.
612
613 Par exemple, dans les versions 2.4 et antérieures de LilyPond,
614 les accents et les lettres non anglaises étaient entrées en
615 utilisant LaTeX --- par exemple, @code{No\"el}.  À partir de la
616 version 2.6, le caratère @code{ë} doit être entré directement
617 dans le fichier LilyPond comme caractère UTF-8.
618 @code{convert-ly} ne peut pas changer tous les caractères
619 LaTeX en caractères UTF-8 ; vous devez mettre à jour vos vieux
620 fichiers LilyPond manuellement.
621
622
623
624 @node Common errors
625 @subsection Common errors
626
627 The error conditions described below occur often, yet the cause
628 is not obvious or easily found.  Once seen and understood, they
629 are easily handled.
630
631
632 @menu
633 * Music runs off the page::
634 * Apparent error in ../ly/init.ly::
635 * Error message Unbound variable %::
636 @end menu
637
638 @node Music runs off the page
639 @unnumberedsubsubsec Music runs off the page
640
641 Lorsque la musique s'épanche au delà de la marge droite ou bien semble
642 anormalement comprimée, la raison en est le plus souvent une note à la
643 durée erronée ; cela finit par provoquer le débordement de la dernière
644 note d'une mesure.  Rien ne s'oppose à ce que la dernière note d'une
645 mesure ne s'arrête avant la barre de mesure ; on considère simplement
646 qu'elle se prolonge sur la mesure suivante.  Des débordements à
647 répétition finissent par générer une musique comprimée ou qui sort de la
648 page, pour la simple et bonne raison que les sauts de ligne automatiques
649 ne peuvent intervenir qu'à la fin d'une mesure complète, autrement dit
650 lorsque toutes les notes sont terminées avant la fin de la mesure.
651
652 @warning{Une durée erronée peut empêcher les sauts de ligne, ce qui
653 conduit à une musique compressée, voire à un débordement de la page.}
654
655 Une erreur de durée sera bien plus facilement localisable si vous
656 positionnez régulièrement des contrôles de barre de mesure --- voir 
657 @ruser{Bar and bar number checks}.
658
659 Si vous tenez absolument à enchainer de tels débordements, vous devrez
660 insérer des barres de mesure invisibles là où vous souhaitez positionner
661 un saut de ligne.  Consultez le chapitre @ruser{Bar lines} pour plus de
662 détails. 
663
664 @node Apparent error in ../ly/init.ly
665 @unnumberedsubsubsec Apparent error in @code{../ly/init.ly}
666
667 Certains messages d'erreur relatifs à une erreur de syntaxe dans le
668 fichier @code{../ly/init.ly} peuvent survenir lorsque le fichier est mal
669 formaté.  Cela se produit notamment lors d'un défaut de parité de
670 bornage ou de guillemets.
671
672 L'erreur la plus courante est la simple omission d'une accolade
673 fermante (@code{@}} à la fin du bloc @code{Score}.  La solution est
674 évidente en pareil cas : i lsuffit de vérifier que le bloc @code{Score}
675 est bien clôturé.  La structure des fichiers LilyPond est abordée plus
676 en détails au chapitre @ref{How LilyPond input files work}.  C'est la
677 raison pour laquelle nous vous invitons à utiliser un éditeur de texte
678 qui prenne en charge le contrôle de parité des parnthèses, crochets et
679 accolades afin de vous éviter de telles erreurs.
680
681 Lorsqu'il s'agit d'un guillemet fermant (@code{"}) omis, le message
682 d'erreur devrait vous indiquer un numéro de ligne avoisinant.  L'erreur
683 se situe la plupart du temps une ou deux lignes au-dessus de celle
684 indiquée. 
685
686
687 @node Error message Unbound variable %
688 @unnumberedsubsubsec Error message Unbound variable %
689
690 Ce message d'erreur, qu'il apparaisse sur le terminal ou en fin de
691 fichier journal, est associé à un message du type @qq{GUILE a signalé
692 une erreur @dots{}} survient à chaque fois qu'un commentaire
693 @emph{LilyPond} est indûment placé dans une routine @emph{Scheme}.
694
695 Un commentaire LilyPond est introduit par le signe pourcent (@code{%})
696 et de doit en aucun cas se trouver dans une routine Scheme.  En Scheme,
697 les commentaire s'introduisent par un point-virgule (@code{;}).
698
699
700 @node Troubleshooting (taking it all apart)
701 @subsection Troubleshooting (taking it all apart)
702
703 Tôt ou tard, vous écrirez un fichier que LilyPond ne peut pas
704 compiler.  Les messages que LilyPond affiche peuvent vous aider à
705 trouver l'erreur, mais dans beaucoup de cas vous aurez besoin de faire
706 quelques recherches pour déterminer la source du problème.
707
708 Pour ce faire, les outils les plus puissants sont le commentaire de
709 fin de ligne, indiqué par @code{%}, et le commentaire multilignes (ou
710 bloc de commentaire), indiqué par @code{%@{ ... %@}}.  Si vous ne
711 pouvez localiser le problème, commencez par mettre en commentaire de
712 grandes parties de votre fichier d'entrée.  Après avoir mis en
713 commentaire une section, essayez de compiler à nouveau.  Si cela
714 fonctionne, c'est que le problème se situe dans cette partie du
715 fichier.  Si cela ne fonctionne pas, continuez à mettre en commentaire
716 d'autres sections, jusqu'à ce que vous ayez quelque chose qui compile.
717
718 Dans un cas extrême, vous pourriez en arriver à
719
720 @example
721 \score @{
722   <<
723     % \melodie
724     % \harmonie
725     % \basse
726   >>
727   \layout@{@}
728 @}
729 @end example
730
731 @noindent
732 c'est-à-dire un fichier sans aucune musique.
733
734 Si cela arrive, ne vous découragez pas.  Décommentez un peu, la partie
735 de basse par exemple, et voyez si ça fonctionne.  Si ce n'est pas le
736 cas, placez en commentaire toute la partie de basse, mais laissez
737 @code{\basse} décommenté dans le bloc @code{\score}.
738
739 @example
740 basse = \relative c' @{
741 %@{
742   c4 c c c
743   d d d d
744 %@}
745 @}
746 @end example
747
748 Maintenant commencez à décommenter petit à petit le partie de
749 @code{basse} jusqu'à ce que vous localisiez la ligne qui pose
750 problème.
751
752 Une autre technique de déboguage très utile est la construction
753 de @ref{Minimal examples}.
754
755
756 @node Minimal examples
757 @subsection Minimal examples
758
759 Un exemple minimal est un exemple de code aussi court que possible.
760 De tels exemples sont bien plus compréhensibles que des exemples
761 longs.  Les exemples minimaux sont utilisés pour
762
763 @itemize
764 @item les rapports de bogue,
765 @item les demandes d'aide sur les listes de diffusion,
766 @item un ajout au
767 @uref{http://lsr.dsi.unimi.it/,LilyPond Snippet Repository}.
768 @end itemize
769
770 Pour construire un exemple minimal, la règle est très simple : enlevez
771 tout ce qui n'est pas nécessaire.  Il est préférable de commenter les
772 lignes non nécessaires plutôt que de les effacer : ainsi, si vous vous
773 apercevez que certaines étaient @emph{réellement} nécessaires, vous
774 pouvez les décommenter au lieu de les resaisir.
775
776 Il y a deux exceptions à cette règle du strict nécessaire :
777
778 @itemize
779 @item incluez le numéro de @code{\version} en début de fichier
780 @item si possible, utilisez @code{\paper@{ ragged-right=##t @}} au
781 début de votre exemple.
782 @end itemize
783
784 Tout l'intérêt d'un exemple minimal réside dans sa facilité de lecture :
785
786 @itemize
787 @item évitez d'utiliser des notes, armures ou métriques compliquées, à
788 moins que vous ne vouliez montrer quelque chose en rapport avec
789 celles-ci,
790 @item n'utilisez pas de commandes @code{\override} sauf si elles font
791 l'intérêt de l'exemple.
792 @end itemize
793
794
795 @node Scores and parts
796 @section Scores and parts
797
798 Dans la musique d'orchestre, toutes les notes sont imprimées deux fois.
799 D'abord dans les parties séparées destinées aux musiciens, et ensuite
800 dans le conducteur destiné au chef.  Les variables sont là pour vous éviter
801 un double travail.  La musique n'est entrée qu'une seule fois, et stockée dans
802 une variable, dont le contenu servira à imprimer à la fois la partie
803 séparée et la partition d'orchestre.
804
805 Il est judicieux de définir les notes dans un fichier séparé. Par
806 exemple, supposons que le fichier @file{musique-Cor.ly} contienne la
807 partie suivante pour un duo cor/@/basson.
808
809 @example
810 notesCor = \relative c @{
811   \time 2/4
812   r4 f8 a cis4 f e d
813 @}
814 @end example
815
816 @noindent
817 On établira alors une partie séparée en constituant un nouveau fichier :
818
819 @example
820 \include "musique-Cor.ly"
821 \header @{
822   instrument = "Cor en Fa"
823 @}
824
825 @{
826  \transpose f c' \notesCor
827 @}
828 @end example
829
830 À la ligne
831
832 @example
833 \include "musique-Cor.ly"
834 @end example
835
836 @noindent
837 sera substitué le contenu du fichier @code{musique-Cor.ly}, et de ce
838 fait la variable @code{notesCor} se trouvera définie.  La commande
839 @code{\transpose f@tie{}c'} indique que son argument @code{\notesCor}
840 sera transposé à la quinte supérieure : le son réel @code{f} s'écrit
841 @code{c'}, ce qui est la caractéristique d'un Cor en fa.  La
842 transposition est visible comme suit :
843
844 @lilypond[quote,ragged-right]
845 \transpose f c' \relative c {
846   \time 2/4
847   r4 f8 a cis4 f e d
848 }
849 @end lilypond
850
851 Dans les pièces d'ensemble, il arrive souvent qu'une voix ne joue pas
852 pendant plusieurs mesures.  Un silence spécial, appelé silence multi-mesures,
853 l'indique alors. On l'obtient par un @samp{R} majuscule, suivi d'une
854 durée : @code{1}@tie{}pour une pause, @code{2}@tie{}pour une demi-pause,
855 etc.  Cette durée peut être multipliée pour établir de plus longs silences.
856 Par exemple, le silence suivant dure 3@tie{}mesures à 2/4.
857
858 @example
859 R2*3
860 @end example
861
862 Dans une partie séparée, les silences multimesure sont compressés.
863 Il faut pour cela définir la propriété @code{skipBars} à @qq{vrai} :
864
865 @example
866 \set Score.skipBars = ##t
867 @end example
868
869 @noindent
870 Cette commande assigne la valeur @qq{vrai} --- @emph{true} en anglais, et
871 @code{#t} dans le langage Scheme --- à cette propriété dans le
872 contexte @code{Score}.  Si l'on ajoute dans la musique ci-dessus le
873 silence multimesure et cette option, on obtient le résultat suivant :
874
875 @lilypond[quote,ragged-right]
876 \transpose f c' \relative c {
877   \time 2/4
878   \set Score.skipBars = ##t
879   R2*3
880   r4 f8 a cis4 f e d
881 }
882 @end lilypond
883
884 Le conducteur rassemble toute la musique. Si l'on suppose que l'autre
885 voix de notre duo se trouve dans le fichier @code{musique-Basson.ly} en
886 tant que variable @code{notesBasson}, on établira un conducteur avec
887
888 @example
889 \include "musique-Basson.ly"
890 \include "musique-Cor.ly"
891
892 <<
893   \new Staff \notesCor
894   \new Staff \notesBasson
895 >>
896 @end example
897
898 @noindent
899 ce qui équivaut à
900
901 @lilypond[quote,ragged-right]
902 \relative c <<
903   \new Staff {
904     \time 2/4 R2*3
905     r4 f8 a cis4 f e d
906   }
907   \new Staff {
908     \clef bass
909     r4 d,8 f | gis4 c | b bes |
910     a8 e f4 | g d | gis f
911   }
912 >>
913 @end lilypond
914
915 Des informations plus détaillées sur la mise en place de conducteurs
916 et de parties séparées se trouvent dans le manuel de notation : voir
917 @ruser{Writing parts}.
918
919 Les variables (@qq{propriétés}) réglables sont abordées en détail dans
920 @ruser{The set command}.
921
922
923
924 @node Make and Makefiles
925 @section Make and Makefiles
926
927 @cindex makefiles
928 @cindex make
929
930 La plupart des plates-formes sur lesquelles tourne LilyPond disposent
931 d'un logiciel appelé @code{make}.  Ce logiciel va lire un fichier
932 spécial, nommé de @code{Makefile}, qui contient tout ce qu'il
933 faut --- les dépendances entre certains fichiers, les instructions
934 successives à traiter par le système --- pour aboutir au fichier que
935 vous désirez obtenir.  Il pourrait par exemple contenir tout ce qu'il
936 faut pour produire @code{ballade.pdf} et @code{ballade.midi} à partir de 
937 @code{ballade.ly} en lançant LilyPond.
938
939 La création d'un @code{Makefile} peut se révéler pertinente pour
940 certains projets, que ce soit par simple goût personnel ou bien par
941 respect de ceux qui pourront accéder à vos sources.  Cette manière de
942 procéder est particulièrement indiquée lorsque vous travaillez sur un
943 projet de grande envergure impliquant de nombreuses inclusions de
944 fichiers et différentes éditions --- par exemple un conducteur et un
945 matériel d'orchestre complet avec la partition pour le chef et une
946 partition séparée pour chacun des pupitres --- ou bien si votre projet
947 requiert certaines commandes particulières comme @code{lilypond-book}.
948 Les @emph{Makefiles} varient tant en complexité qu'en flexibilité selon
949 les besoin et les aptitudes de celui qui les crée.  Le programme GNU Make
950 est installé par défaut sur les distributions Linux et sur MacOS@tie{}X,
951 et il en existe une version pour les environnements Windows.
952
953 Consultez le @strong{GNU Make Manual} pour plus de détails sur ce dont 
954 @code{make} est capable --- vous pourrez même en trouver des versions
955 françaises à l'aide des moteurs de recherche ---, dans la mesure où ce
956 qui suit ne donne qu'un bref apperçu de ses possibilités.
957
958 Les commandes permettant de définir les règles diffèrent selon la
959 plate-forme : si les différents Linux et MacOS@tie{}X utilisent
960 @code{bash}, Windows utilise @code{cmd}.  Dans le cas de MacOS@tie{}X,
961 vous devrez toutefois configurer votre système de telle sorte qu'il
962 utilise l'interpréteur en ligne de commande.  Voici quelques exemples de
963 fichier @emph{Makefile}, avec une version pour Linux ou MacOS et une
964 pour Windows.
965
966 Pour commencer, une pièce à quatre mouvements pour orchestre et dont les 
967 fichiers sont répartis selon l'arborescence suivante :
968
969 @example
970 Symphonie/
971 |-- MIDI/
972 |-- Makefile
973 |-- Notes/
974 |   |-- alto.ily
975 |   |-- cor.ily
976 |   |-- cello.ily
977 |   |-- figures.ily
978 |   |-- hautbois.ily
979 |   |-- trioCordes.ily
980 |   |-- violonOne.ily
981 |   `-- violonTwo.ily
982 |-- Partitions/
983 |   |-- symphonie.ly
984 |   |-- symphonieI.ly
985 |   |-- symphonieII.ly
986 |   |-- symphonieIII.ly
987 |   `-- symphonieIV.ly
988 |-- PDF/
989 |-- Pupitres/
990 |   |-- symphon-alto.ly
991 |   |-- symphonie-cello.ly
992 |   |-- symphonie-cor.ly
993 |   |-- symphonie-hautbois.ly
994 |   |-- symphonie-violonUn.ly
995 |   `-- symphonie-violonDeux.ly
996 `-- symphonieDefs.ily
997 @end example
998
999 Les fichiers @code{.ly} des répertoires @code{Partitions} et
1000 @code{Pupitres} récupèreront la notation des fichiers @code{.ily}
1001 contenus dans le répertoire @code{Notes} :
1002
1003 @example
1004 %%% début du fichier "symphone-cello.ly"
1005 \include ../definitions.ily
1006 \include ../Notes/cello.ily
1007 @end example
1008
1009 Le @emph{Makefile} répertorie des cibles correspondant à @code{score}
1010 (l'intégrale au format conducteur), @code{mouvements} (chacun des
1011 mouvements au format conducteur) et @code{pupitres} (une partition par
1012 pupitre).  Il contient aussi une cible @code{archive} chargée de générer
1013 une archive des fichiers sources qui pourra être diffusée sur la toile ou
1014 transmise par courriel.  Voici ce que contiendrait ce @emph{Makefile}
1015 pour Linux ou MacOS@tie{}X.  Ce fichier doit être enregistré sous le nom
1016 de @code{Makefile} à la racine du projet --- ici @code{Symphonie}.
1017
1018 @warning{Lorsque vous définissez une cible ou une règle sur plusieurs
1019 lignes, les lignes à partir de la deuxième @strong{doivent} débuter par
1020 une tabulation, non pas par des espaces.}
1021
1022 @example
1023 # Le préfixe au nom des fichiers résultants
1024 piece = symphonie
1025 # Détermination du nombre de processeurs
1026 CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//`
1027 # La commande d'appel à lilypond
1028 LILY_CMD = lilypond -ddelete-intermediate-files \
1029                     -dno-point-and-click -djob-count=$(CPU_CORES)
1030
1031 # Les suffixes utilisés dans ce Makefile
1032 .SUFFIXES: .ly .ily .pdf .midi
1033
1034 # Les fichiers sources et résultants sont recherchés dans les répertoires
1035 # listés dans la variable VPATH.  Ceux-ci sont tous des sous-répertoires
1036 # du répertoire courant (fourni par la variable de GNU make `CURDIR').
1037 VPATH = \
1038   $(CURDIR)/Partitions \
1039   $(CURDIR)/PDF \
1040   $(CURDIR)/Pupitres \
1041   $(CURDIR)/Notes
1042
1043 # La règle type pour créer un PDF et un MIDI à partir d'un fichier
1044 # source LY.
1045 # Les .pdf résultants iront dans le sous-répertoire "PDF" et les fichiers
1046 # .midi dans le sous-répertoire "MIDI".
1047 %.pdf %.midi: %.ly
1048         $(LILY_CMD) $<; \           # cette ligne commence par une tabulation
1049         if test -f "$*.pdf"; then \
1050             mv "$*.pdf" PDF/; \
1051         fi; \
1052         if test -f "$*.midi"; then \
1053             mv "$*.midi" MIDI/; \
1054         fi
1055
1056 notes = \
1057   alto.ily \
1058   cello.ily \
1059   cor.ily \
1060   hautbois.ily \
1061   violonUn.ily \
1062   violonDeux.ily
1063
1064 # Les dépendances selon le mouvement.
1065 $(piece)I.pdf: $(piece)I.ly $(notes)
1066 $(piece)II.pdf: $(piece)II.ly $(notes)
1067 $(piece)III.pdf: $(piece)III.ly $(notes)
1068 $(piece)IV.pdf: $(piece)IV.ly $(notes)
1069
1070 # Les dépendances pour la partition intégrale.
1071 $(piece).pdf: $(piece).ly $(notes)
1072
1073 # Les dépendances pour les pupitres.
1074 $(piece)-alto.pdf: $(piece)-alto.ly alto.ily
1075 $(piece)-cello.pdf: $(piece)-cello.ly cello.ily
1076 $(piece)-cor.pdf: $(piece)-cor.ly cor.ily
1077 $(piece)-hautbois.pdf: $(piece)-hautbois.ly hautbois.ily
1078 $(piece)-violonUn.pdf: $(piece)-violonUn.ly violonUn.ily
1079 $(piece)-violonDeux.pdf: $(piece)-violonDeux.ly violonDeux.ily
1080
1081 # Lancer `make score' pour générer l'intégrale des quatre mouvements en
1082 # un seul fichier.
1083 .PHONY: score
1084 score: $(piece).pdf
1085
1086 # Lancer `make parties' pour obtenir tous les pupitres.
1087 # Lancer `make toto.pdf' pour obtenir la partie instrumentale de toto.
1088 # Par exemple : `make symphonie-cello.pdf'.
1089 .PHONY: parties
1090 parties: $(piece)-cello.pdf \
1091          $(piece)-violonUn.pdf \
1092          $(piece)-violonDeux.pdf \
1093          $(piece)-alto.pdf \
1094          $(piece)-hautbois.pdf \
1095          $(piece)-cor.pdf
1096
1097 # Lancer `make mouvements' pour générer un fichier séparé pour chacun
1098 # des mouvements.
1099 .PHONY: mouvements
1100 mouvements: $(piece)I.pdf \
1101             $(piece)II.pdf \
1102             $(piece)III.pdf \
1103             $(piece)IV.pdf
1104
1105 all: score parties mouvements
1106
1107 archive:
1108         tar -cvvf symphonie.tar \      # cette ligne commence par une tabulation
1109         --exclude=*pdf --exclude=*~ \
1110         --exclude=*midi --exclude=*.tar \
1111         ../Symphonie/*
1112 @end example
1113
1114
1115 Les choses se compliquent sous Windows.  Une fois GNU Make pour Windows
1116 téléchargé et installé, il vous faudra correctement définir le chemin
1117 d'accès au programme @emph{Make} --- dans les variables d'environnement
1118 du système ---  afin que l'interpréteur de commandes DOS puisse le
1119 localiser.  Pour cela, faites un clic droite sur @qq{Poste de travail},
1120 choisissez @code{Propriétés} puis @code{Avancées}.  Cliquez sur
1121 @code{Variables d'environnement} puis, dans l'onglet @w{@code{Variables
1122 système}}, mettez @code{path} en surbrillance et cliquez sur
1123 @code{Modifier}.  Ajoutez alors le chemin d'accès complet à l'exécutable
1124 de GNU Make, qui devrait ressembler à :
1125
1126 @example
1127 C:\Program Files\GnuWin32\bin
1128 @end example
1129
1130 Il va également falloir adapter le @emph{makefile} aux particularités de
1131 l'interpréteur de commandes et à la présence d'espaces dans le nom de
1132 certains répertoire de ce système.
1133 La cible @code{archive} est tout bonnement supprimée, puisque Windows ne
1134 dispose pas de la commande @code{tar}.  Enfin, les fichiers MIDI ont une
1135 extension par défaut propre à Windows.
1136
1137
1138 @example
1139 ## VERSION POUR WINDOWS
1140 ##
1141 piece = symphonie
1142 LILY_CMD = lilypond -ddelete-intermediate-files \
1143                     -dno-point-and-click \
1144                     -djob-count=$(NUMBER_OF_PROCESSORS)
1145
1146 #get the 8.3 name of CURDIR (workaround for spaces in PATH)
1147 workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \
1148           do @@echo %%~sb)
1149
1150 .SUFFIXES: .ly .ily .pdf .mid
1151
1152 VPATH = \
1153   $(workdir)/Partitions \
1154   $(workdir)/PDF \
1155   $(workdir)/Pupitress \
1156   $(workdir)/Notes
1157
1158 %.pdf %.mid: %.ly
1159         $(LILY_CMD) $<      # cette ligne commence par une tabulation
1160         if exist "$*.pdf"  move /Y "$*.pdf"  PDF/ # tabulation au début
1161         if exist "$*.mid" move /Y "$*.mid" MIDI/  # tabulation au début
1162
1163 notes = \
1164   cello.ily \
1165   figures.ily \
1166   cor.ily \
1167   hautbois.ily \
1168   trioCordes.ily \
1169   alto.ily \
1170   violonUn.ily \
1171   violonDeux.ily
1172
1173 $(piece)I.pdf: $(piece)I.ly $(notes)
1174 $(piece)II.pdf: $(piece)II.ly $(notes)
1175 $(piece)III.pdf: $(piece)III.ly $(notes)
1176 $(piece)IV.pdf: $(piece)IV.ly $(notes)
1177
1178 $(piece).pdf: $(piece).ly $(notes)
1179
1180 $(piece)-cello.pdf: $(piece)-cello.ly cello.ily
1181 $(piece)-cor.pdf: $(piece)-cor.ly cor.ily
1182 $(piece)-hautbois.pdf: $(piece)-hautbois.ly hautbois.ily
1183 $(piece)-alto.pdf: $(piece)-alto.ly alto.ily
1184 $(piece)-violonUn.pdf: $(piece)-violonUn.ly violonUn.ily
1185 $(piece)-violonDeux.pdf: $(piece)-violonDeux.ly violonDeux.ily
1186
1187 .PHONY: score
1188 score: $(piece).pdf
1189
1190 .PHONY: parties
1191 parties: $(piece)-cello.pdf \
1192          $(piece)-violonUn.pdf \
1193          $(piece)-violonDeux.pdf \
1194          $(piece)-alto.pdf \
1195          $(piece)-hautbois.pdf \
1196          $(piece)-cor.pdf
1197
1198 .PHONY: mouvements
1199 mouvements: $(piece)I.pdf \
1200            $(piece)II.pdf \
1201            $(piece)III.pdf \
1202            $(piece)IV.pdf
1203
1204 all: score parties mouvements
1205 @end example
1206
1207
1208 Le @emph{Makefile} suivant convient pour un document
1209 @command{lilypond-book} réalisé avec @LaTeX{}.  Ce projet contiendra un
1210 index, ce qui nécessitera de lancer une deuxième fois @command{latex}
1211 pour mettre à jour les liens.  Les fichiers résultants iront dans le
1212 répertoire @code{out} pour ce qui est des .pdf et dans le répertoire
1213 @code{htmlout} pour ce qui est du html.
1214
1215 @example
1216 SHELL=/bin/sh
1217 FILE=monprojet
1218 OUTDIR=out
1219 WEBDIR=htmlout
1220 VIEWER=acroread
1221 BROWSER=firefox
1222 LILYBOOK_PDF=lilypond-book --output=$(OUTDIR) --pdf $(FILE).lytex
1223 LILYBOOK_HTML=lilypond-book --output=$(WEBDIR) $(FILE).lytex
1224 PDF=cd $(OUTDIR) && pdflatex $(FILE)
1225 HTML=cd $(WEBDIR) && latex2html $(FILE)
1226 INDEX=cd $(OUTDIR) && makeindex $(FILE)
1227 PREVIEW=$(VIEWER) $(OUTDIR)/$(FILE).pdf &
1228
1229 all: pdf web keep
1230
1231 pdf:
1232         $(LILYBOOK_PDF)  # tabulation en début de ligne
1233         $(PDF)           # tabulation en début de ligne
1234         $(INDEX)         # tabulation en début de ligne
1235         $(PDF)           # tabulation en début de ligne
1236         $(PREVIEW)       # tabulation en début de ligne
1237
1238 web:
1239         $(LILYBOOK_HTML) # tabulation en début de ligne
1240         $(HTML)          # tabulation en début de ligne
1241         cp -R $(WEBDIR)/$(FILE)/ ./  # tabulation en début de ligne
1242         $(BROWSER) $(FILE)/$(FILE).html &  # tabulation en début de ligne
1243
1244 keep: pdf
1245         cp $(OUTDIR)/$(FILE).pdf $(FILE).pdf  # tabulation en début de ligne
1246
1247 clean:
1248         rm -rf $(OUTDIR) # tabulation en début de ligne
1249
1250 web-clean:
1251         rm -rf $(WEBDIR) # tabulation en début de ligne
1252
1253 archive:
1254         tar -cvvf monprojet.tar \ # tabulation en début de ligne
1255         --exclude=out/* \
1256         --exclude=htmlout/* \
1257         --exclude=monprojet/* \
1258         --exclude=*midi \
1259         --exclude=*pdf \
1260         --exclude=*~ \
1261         ../MonProjet/*
1262 @end example
1263
1264 AVENIR: faire que ça marche sous Windows
1265
1266 Ce @emph{makefile} n'est malheureusement pas opérationnel sous Windows.
1267 La seule alternative qui s'offre aux utilisateurs de Windows consiste à
1268 créer un fichier de traitement par lot (@code{.bat}) qui contienne les
1269 différentes commandes successives.  Bien que cette manière de procéder
1270 ne tienne aucun compte des dépendances entre fichiers, elle permet de
1271 réduire le nombre de processus à lancer dans une seule commande.  Vous
1272 devrez enregistrer les lignes suivantes dans un fichier
1273 @code{construire.bat} ou @code{construire.cmd}.  Ce fichier pourra être
1274 exécuté soit en ligne de commande, soit par un double clic sur son
1275 icone. 
1276
1277 @example
1278 lilypond-book --output=out --pdf monprojet.lytex
1279 cd out
1280 pdflatex monprojet
1281 makeindex monprojet
1282 pdflatex monprojet
1283 cd ..
1284 copy out\monprojet.pdf MonProjet.pdf
1285 @end example
1286
1287
1288 @seealso
1289 Manuel d'utilisation :
1290 @rprogram{Setup for MacOS X},
1291 @rprogram{Command-line usage},
1292 @rprogram{LilyPond-book}