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