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