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