]> git.donarmstrong.com Git - lilypond.git/blob - Documentation/fr/learning/working.itely
Docs: reorganize documentation directory structure
[lilypond.git] / Documentation / fr / learning / working.itely
1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
2
3 @ignore
4    Translation of GIT committish: 148e80b8992a7fb9d59ec439c00b79decbbe3bad
5
6    When revising a translation, copy the HEAD committish of the
7    version that you are working on.  See TRANSLATION for details.
8 @end ignore
9
10 @c \version "2.12.0"
11
12 @c Translators: Ludovic Sardain
13 @c Translation checkers: Jean-Yves Baudais, Valentin Villenave, John Mandereau, Jean-Charles Malahieude
14
15 @node Working on LilyPond projects
16 @chapter Working on LilyPond projects
17
18 Cette section explique comment résoudre ou éviter certains problèmes
19 courants.  Si vous avez de l'expérience en programmation, beaucoup de
20 ces astuces peuvent vous paraître évidentes, mais vous ne perdrez tout
21 de même pas votre temps à lire ce chapitre.
22
23 @menu
24 * Suggestions for writing LilyPond input files::
25 * When things don't work::      
26 * Scores and parts::            
27 @end menu
28
29 @node Suggestions for writing LilyPond input files
30 @section Suggestions for writing LilyPond input files
31
32 Maintenant vous êtes prêt à travailler sur de plus gros fichiers
33 LilyPond --- des pièces entières, et plus seulement les petits
34 exemples du tutoriel.  Mais comment devriez-vous vous y prendre ?
35
36 Tant que LilyPond parvient à comprendre vos fichiers et produit le
37 résultat que vous souhaitez, peu importe la manière dont le code est
38 organisé.  Néanmoins, quelques critères doivent être pris en compte
39 lorsque l'on écrit un fichier LilyPond.
40
41 @itemize
42 @item Si vous faites une erreur, la structure même du fichier LilyPond
43 peut permettre de la localiser plus ou moins facilement.
44
45 @item Et si vous souhaitez partager vos fichiers avec quelqu'un
46 d'autre, ou si vous souhaitez modifier vos propres fichiers dans
47 quelques années ?  Si certains fichiers LilyPond sont compréhensibles
48 au premier coup d'oeil, d'autres vous feront vous arracher les cheveux
49 pendant une heure.
50
51 @item Et si vous souhaitez mettre à jour votre fichier pour
52 l'utiliser avec une version plus récente de LilyPond ?  La syntaxe du
53 langage d'entrée change parfois lorsque LilyPond s'améliore.  La
54 plupart des changements peuvent être appliqués automatiquement avec
55 @code{convert-ly}, mais quelques-uns peuvent requérir une intervention
56 manuelle.  Vos fichiers LilyPond peuvent être structurés de manière à
57 faciliter leur mise à jour.
58 @end itemize
59
60 @menu
61 * General suggestions::         
62 * Typesetting existing music::  
63 * Large projects::              
64 * Saving typing with variables and functions::  
65 * Style sheets::                
66 @end menu
67
68 @node General suggestions
69 @subsection General suggestions
70
71 Voici quelques conseils qui peuvent vous éviter certains problèmes ou
72 en résoudre d'autres.
73
74 @itemize
75 @item @strong{Ajoutez le numéro de version dans chaque fichier}.
76 Notez que chaque fichier modèle contient une ligne @code{\version
77 "2.11.32"}.  Nous vous conseillons fortement d'inclure cette ligne,
78 même pour de petits fichiers.  Par expérience, il est très difficile
79 de se rappeler quelle version de LilyPond on utilisait quelques
80 années auparavant.  L'utilitaire @command{convert-ly} demande que vous
81 spécifiiez la version de LilyPond vous utilisiez alors.
82
83 @item @strong{Ajoutez des contrôles}: @ruser{Octave checks}, et
84 @ruser{Bar and bar number checks}.  Si vous avez ajouté des contrôles
85 de loin en loin, et que vous faites une erreur, vous pourrez la
86 retrouver plus rapidement.  @qq{De loin en loin}, qu'est-ce à dire ?
87 Cela dépend de la complexité de la musique.  Pour de la musique très
88 simple, peut-être une ou deux fois.  Pour de la musique très complexe,
89 peut-être à chaque mesure.
90
91 @item @strong{Une mesure par ligne de texte}.  Si la musique en elle-même ou
92 le résultat que vous désirez contient quelque chose de compliqué, il
93 est souvent bon de n'écrire qu'une seule mesure par ligne.  Économiser
94 de la place en tassant huit mesures par ligne, ça ne vaut pas vraiment
95 le coup si l'on doît corriger vos fichiers.
96
97 @item @strong{Ajoutez des commentaires}.  Utilisez soit des
98 numéros de mesure (assez souvent), soit des références au contenu
99 musical --- @qq{second thème des violons}, @qq{quatrième variation}, etc.
100 Vous pouvez ne pas avoir besoin des commentaires lorsque vous écrivez
101 une pièce pour la première fois, mais si vous souhaitez y revenir deux
102 ou trois ans plus tard pour changer quelque chose, ou si vous donnez
103 le fichier source à un ami, ce sera beaucoup plus difficile de
104 déterminer vos intentions ou la manière dont votre fichier est
105 structuré si vous n'y avez pas adjoint de commentaires.
106
107 @item @strong{Indentez les accolades}.  Beaucoup de problèmes
108 viennent d'un défaut de parité entre @code{@{} et @code{@}}.
109
110 @item @strong{Mentionnez les durées} au début de chaque section ou
111 variable.  Si vous saisissez @code{c4 d e} au début d'une phrase, vous
112 vous épargnerez des problèmes si, plus tard, vous modifiez votre musique.
113
114 @item @strong{Séparez les affinages de mise en forme} de la musique
115 elle-même. Voyez @ref{Saving typing with variables and functions} et
116 @ref{Style sheets}.
117
118 @end itemize
119
120
121 @node Typesetting existing music
122 @subsection Typesetting existing music
123
124 Si vous saisissez de la musique à partir d'une partition existante,
125 c'est-à-dire de la musique déjà écrite,
126
127 @itemize
128
129 @item n'entrez qu'un seul système de la partition originale
130 à la fois --- mais toujours une seule mesure par ligne de texte ---,
131 et vérifiez chaque système lorsqu'il est terminé.  Vous pouvez
132 utiliser les commandes @code{showLastLength} et @code{showFirstLength}
133 pour accélérer la compilation --- voir @ruser{Skipping corrected music} ;
134
135 @item définissez @code{mBreak = @{\break @}} et insérez
136 @code{\mBreak} dans le fichier d'entrée pour obtenir des sauts de
137 ligne identiques à la partition originale.  Cela facilite la
138 comparaison entre la partition originale et la partition de 
139 LilyPond.  Lorsque vous avez fini de relire votre musique, vous pouvez
140 définir @code{mBreak = @{ @}} pour enlever tous ces sauts de ligne, et
141 laisser LilyPond placer les sauts de ligne selon son propre algorithme.
142
143 @item encadrez les notes d'une partie pour instrument transpositeur
144 dans un 
145
146 @example
147 \transpose c tonalite-naturelle @{...@}
148 @end example
149 (où @code{tonatilte-naturelle} correspond à celle de l'instrument en
150 question) de telle sorte que la musique comprise dans cette variable se
151 retrouve en ut.  Vous pourrez toujours transposer à l'inverse si besoin
152 lorsque vous ferez appel à cette variable.  Des erreurs de transposition
153 seront moins susceptibles de se produire si la musique de toutes les
154 variables est dans la même et unique tonalité.
155
156 De la même manière, prénez toujours le do comme note de départ ou
157 d'arrivée.  Ceci aura pour simple conséquence que les autres tonalités
158 que vous utiliserez seront celles propres à chacun des instruments --
159 sib pour une trompette en si bémol, ou lab pour une clarinette en la bémol.
160
161 @end itemize
162
163
164 @node Large projects
165 @subsection Large projects
166
167 Lorsque l'on travaille sur un gros projet, il devient vital
168 de structurer clairement ses fichiers LilyPond.
169
170 @itemize @bullet
171
172 @item @strong{Utilisez un identificateur pour chaque voix},
173 avec un minimum de structure dans la définition.  La structure de la
174 section @code{\score} est la plus susceptible de changer, notamment
175 dans une nouvelle version de LilyPond, alors que la définition du
176 @code{violon} l'est beaucoup moins.
177
178 @example
179 violin = \relative c'' @{
180 g4 c'8. e16
181 @}
182 ...
183 \score @{
184  \new GrandStaff @{
185    \new Staff @{
186      \violin
187    @}
188  @}
189 @}
190 @end example
191
192 @item @strong{Séparez les retouches} des définitions de
193 musique.  Nous vous avons déjà invité à adopter une telle pratique, qui
194 par ailleurs devient vitale pour des projets d'importance.  Nous
195 pouvons avoir besoin de changer la définition de
196 @code{fpuisp}, mais dans ce cas nous n'aurons besoin de le faire
197 qu'une seule fois, et nous pourrons encore éviter de
198 modifier quoi que ce soit à l'intérieur de la définition
199 du @code{violon}.
200
201 @example
202 fthenp = _\markup@{
203  \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @}
204 violin = \relative c'' @{
205 g4\fthenp c'8. e16
206 @}
207 @end example
208
209 @end itemize
210
211
212 @node Saving typing with variables and functions
213 @subsection Saving typing with variables and functions
214
215 @cindex variables
216 @cindex identificateurs
217
218 Jusqu'à maintenant, vous avez vu ce type de code :
219
220 @lilypond[quote,verbatim,ragged-right]
221 hornNotes = \relative c'' { c4 b dis c }
222 \score {
223   {
224     \hornNotes
225   }
226 }
227 @end lilypond
228
229 Vous comprendrez combien cela peut être utile pour écrire de la
230 musique minimaliste :
231
232 @lilypond[quote,verbatim,ragged-right]
233 fragmentA = \relative c'' { a4 a8. b16 }
234 fragmentB = \relative c'' { a8. gis16 ees4 }
235 violin = \new Staff { \fragmentA \fragmentA \fragmentB \fragmentA }
236 \score {
237   {
238     \violin
239   }
240 }
241 @end lilypond
242
243 Néanmoins vous pouvez aussi utiliser ces identificateurs
244 --- aussi connus sous le nom de variables, macros, ou commandes
245 (définies par l'utilisateur) --- pour des retouches :
246
247 @lilypond[quote,verbatim,ragged-right]
248 dolce = \markup{ \italic \bold dolce }
249 padText = { \once \override TextScript #'padding = #5.0 }
250 fthenp=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p }
251 violin = \relative c'' {
252   \repeat volta 2 {
253     c4._\dolce b8 a8 g a b |
254     \padText
255     c4.^"hi there!" d8 e' f g d |
256     c,4.\fthenp b8 c4 c-. |
257   }
258 }
259 \score {
260   {
261     \violin
262   }
263 \layout{ragged-right=##t}
264 }
265 @end lilypond
266
267 Ces identificateurs sont évidemment utiles pour économiser de la
268 frappe.  Mais ils peuvent l'être même si vous ne les utilisez qu'une
269 seule fois : ils réduisent la complexité.  Regardons l'exemple
270 précédent sans aucun identificateur.  C'est beaucoup plus laborieux à
271 lire, et particulièrement la dernière ligne.
272
273 @example
274 violin = \relative c'' @{
275   \repeat volta 2 @{
276     c4._\markup@{ \italic \bold dolce @} b8 a8 g a b |
277     \once \override TextScript #'padding = #5.0
278     c4.^"hi there!" d8 e' f g d |
279     c,4.\markup@{ \dynamic f \italic \small @{ 2nd @}
280       \hspace #0.1 \dynamic p @} b8 c4 c-. |
281   @}
282 @}
283 @end example
284
285 @c TODO Replace the following with a better example  -td
286 @c Skylining handles this correctly without padText
287
288 Jusqu'ici nous avons vu des substitutions statiques : quand LilyPond
289 rencontre @code{\padText}, il le remplace par le contenu que nous lui
290 avons défini --- c'est-à-dire le contenu à droite de @code{padText=}.
291
292 LilyPond gère également des substitutions non-statiques --- vous
293 pouvez les voir comme des fonctions.
294
295 @lilypond[quote,verbatim,ragged-right]
296 padText =
297 #(define-music-function (parser location padding) (number?)
298   #{
299     \once \override TextScript #'padding = #$padding
300   #})
301
302 \relative c''' {
303   c4^"piu mosso" b a b
304   \padText #1.8
305   c4^"piu mosso" d e f
306   \padText #2.6
307   c4^"piu mosso" fis a g
308 }
309 @end lilypond
310
311 Utiliser les identificateurs est aussi un bon moyen pour vous épargner
312 du travail si la syntaxe de LilyPond change un jour --- voir
313 @ref{Updating old input files}.  Si vous avez une seule définition, par
314 exemple @code{\dolce}, pour tous vos fichiers (voir @ref{Style sheets}),
315 et que la syntaxe change, alors vous n'aurez qu'à mettre à 
316 jour votre seule définition @code{\dolce}, au lieu de devoir modifier
317 chaque fichier @code{.ly}.
318
319
320 @node Style sheets
321 @subsection Style sheets
322
323 La sortie que produit LilyPond peut être largement modifiée --- voir
324 @ref{Tweaking output} pour plus de détails.  Mais que faire si vous
325 avez beaucoup de fichiers auxquels vous souhaitez appliquer vos
326 retouches ? Ou si vous souhaitez simplement séparer les retouches de
327 la musique elle-même ?  Rien de plus facile.
328
329 Prenons un exemple.  Ne vous inquiétez pas si vous ne comprenez pas
330 les parties avec tous les @code{#()}.  Celles-ci sont expliquées dans
331 @ref{Advanced tweaks with Scheme}.
332
333 @lilypond[quote,verbatim,ragged-right]
334 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
335   #:line(#:dynamic "mp" #:text #:italic "dolce" )))
336 tempoMark = #(define-music-function (parser location markp) (string?)
337 #{
338   \once \override Score . RehearsalMark #'self-alignment-X = #left
339   \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
340   \mark \markup { \bold $markp }
341 #})
342
343 \relative c'' {
344   \tempo 4=50
345   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
346   \tempoMark "Poco piu mosso"
347   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
348 }
349 @end lilypond
350
351 Il y a quelques problèmes de chevauchement ; nous allons arranger
352 cela en utilisant les techniques de @ref{Moving objects}.  On peut
353 aussi faire quelque chose pour les définitions de @code{mpdolce}
354 et @code{tempoMark}.  Elles produisent le résultat que nous désirons,
355 mais nous pourrions aussi vouloir les utiliser dans une autre pièce.
356 Il suffirait de les copier et coller au début de chaque
357 fichier, mais c'est fastidieux.  De plus, cela laisse les définitions
358 dans nos fichiers de musique, et je trouve personnellement tous ces
359 @code{#()} assez laids.  Stockons-les dans un autre fichier :
360
361 @example
362 %%% enregistrez ceci dans un fichier nommé "definitions.ly"
363 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
364   #:line(#:dynamic "mp" #:text #:italic "dolce" )))
365 tempoMark = #(define-music-function (parser location markp) (string?)
366 #@{
367   \once \override Score . RehearsalMark #'self-alignment-X = #left
368   \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
369   \mark \markup @{ \bold $markp @}
370 #@})
371 @end example
372
373 Maintenant, modifions notre musique (enregistrez ce fichier
374 sous @file{"musique.ly"}).
375
376 @c  We have to do this awkward example/lilypond-non-verbatim
377 @c  because we can't do the \include stuff in the manual.
378
379 @example
380 \include "definitions.ly"
381
382 \relative c'' @{
383   \tempo 4=50
384   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
385   \once \override Score.RehearsalMark #'padding = #2.0
386   \tempoMark "Poco piu mosso"
387   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
388 @}
389 @end example
390
391 @lilypond[quote,ragged-right]
392 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
393   #:line(#:dynamic "mp" #:text #:italic "dolce" )))
394 tempoMark = #(define-music-function (parser location markp) (string?)
395 #{
396   \once \override Score . RehearsalMark #'self-alignment-X = #left
397   \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
398   \mark \markup { \bold $markp }
399 #})
400
401 \relative c'' {
402   \tempo 4=50
403   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
404   \once \override Score.RehearsalMark #'padding = #2.0
405   \tempoMark "Poco piu mosso"
406   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
407 }
408 @end lilypond
409
410 C'est mieux, mais effectuons encore quelques retouches.  Le glissando
411 est peu visible, c'est pourquoi nous allons l'épaissir et le
412 rapprocher des têtes de note.  Déplaçons l'indication métronomique
413 au-dessus de la clef, au lieu de la laisser au-dessus de la première
414 note.  Et pour finir, mon professeur de composition déteste les
415 chiffrages de mesure en @qq{C}, nous allons donc le transformer en @qq{4/4}.
416
417 Cependant, ne changez pas le fichier @file{musique.ly}.  Remplacez le
418 fichier @file{definitions.ly} par ceci :
419
420 @example
421 %%%  definitions.ly
422 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
423   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
424 tempoMark = #(define-music-function (parser location markp) (string?)
425 #@{
426   \once \override Score . RehearsalMark #'self-alignment-X = #left
427   \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
428   \mark \markup @{ \bold $markp @}
429 #@})
430
431 \layout@{
432   \context @{ \Score
433     \override MetronomeMark #'extra-offset = #'(-9 . 0)
434     \override MetronomeMark #'padding = #'3
435   @}
436   \context @{ \Staff
437     \override TimeSignature #'style = #'numbered
438   @}
439   \context @{ \Voice
440     \override Glissando #'thickness = #3
441     \override Glissando #'gap = #0.1
442   @}
443 @}
444 @end example
445
446 @lilypond[quote,ragged-right]
447 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
448   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
449 tempoMark = #(define-music-function (parser location markp) (string?)
450 #{
451   \once \override Score . RehearsalMark #'self-alignment-X = #left
452   \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
453   \mark \markup { \bold $markp }
454 #})
455
456 \layout{
457   \context { \Score
458     \override MetronomeMark #'extra-offset = #'(-9 . 0)
459     \override MetronomeMark #'padding = #'3
460   }
461   \context { \Staff
462     \override TimeSignature #'style = #'numbered
463   }
464   \context { \Voice
465     \override Glissando #'thickness = #3
466     \override Glissando #'gap = #0.1
467   }
468 }
469
470 \relative c'' {
471   \tempo 4=50
472   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
473   \once \override Score.RehearsalMark #'padding = #2.0
474   \tempoMark "Poco piu mosso"
475   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
476 }
477 @end lilypond
478
479 C'est encore mieux !  Mais supposons maintenant que je veuille publier
480 cette pièce.  Mon professeur de composition n'aime pas les chiffrages
481 de mesure en @qq{C}, mais moi je les aime bien.  Copions l'actuel
482 @file{definitions.ly} dans le fichier @file{publication-web.ly}, et
483 modifions ce dernier.  Puisque la musique est destinée à produire un
484 fichier PDF affiché sur écran, nous allons aussi augmenter la taille
485 globale de police.
486
487 @example
488 %%%  definitions.ly
489 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
490   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
491 tempoMark = #(define-music-function (parser location markp) (string?)
492 #@{
493   \once \override Score . RehearsalMark #'self-alignment-X = #left
494   \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
495   \mark \markup @{ \bold $markp @}
496 #@})
497
498 #(set-global-staff-size 23)
499 \layout@{
500   \context @{ \Score
501     \override MetronomeMark #'extra-offset = #'(-9 .  0)
502     \override MetronomeMark #'padding = #'3
503   @}
504   \context @{ \Staff
505   @}
506   \context @{ \Voice
507     \override Glissando #'thickness = #3
508     \override Glissando #'gap = #0.1
509   @}
510 @}
511 @end example
512
513 @lilypond[quote,ragged-right]
514 mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0)
515   #:line( #:dynamic "mp" #:text #:italic "dolce" )))
516 tempoMark = #(define-music-function (parser location markp) (string?)
517 #{
518   \once \override Score . RehearsalMark #'self-alignment-X = #left
519   \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0)
520   \mark \markup { \bold $markp }
521 #})
522
523 #(set-global-staff-size 23)
524 \layout{
525   \context { \Score
526     \override MetronomeMark #'extra-offset = #'(-9 . 0)
527     \override MetronomeMark #'padding = #'3
528   }
529   \context { \Voice
530     \override Glissando #'thickness = #3
531     \override Glissando #'gap = #0.1
532   }
533 }
534
535 \relative c'' {
536   \tempo 4=50
537   a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
538   \once \override Score.RehearsalMark #'padding = #2.0
539   \tempoMark "Poco piu mosso"
540   cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
541 }
542 @end lilypond
543
544 Il ne nous reste plus qu'à remplacer @code{\include "definitions.ly"}
545 par @code{\include "publication-web.ly"} dans notre fichier de musique.
546
547 Il est possible, bien sûr, de rendre cela encore plus pratique.  Nous
548 pourrions créer un fichier @file{definitions.ly} qui ne contiendrait
549 que les définitions de @code{mpdolce} et de @code{tempoMark}, un
550 fichier @file{publication-web.ly} qui ne contiendrait que la section
551 @code{layout} décrite ci-dessus et un fichier @file{universite.ly} qui
552 ne contiendrait que les retouches pour produire le résultat que mon
553 professeur préfère.  Le début du fichier @file{musique.ly} ressemblerait
554 alors à
555
556 @example
557 \include "definitions.ly"
558
559 %%%  Décommentez seulement une de ces deux lignes !
560 \include "publication-web.ly"
561 %\include "universite.ly"
562 @end example
563
564 Cette approche peut être utile même si vous ne produisez qu'un seul
565 jeu de partitions.  J'utilise personnellement une demi-douzaine de
566 fichiers de @qq{feuille de style} pour mes projets.  Je commence
567 chaque fichier de musique par @code{\include "../global.ly"} qui contient :
568
569 @example
570 %%%   global.ly
571 \version @w{"@version{}"}
572 #(ly:set-option 'point-and-click #f)
573 \include "../init/init-defs.ly"
574 \include "../init/init-mise-en-page.ly"
575 \include "../init/init-en-tetes.ly"
576 \include "../init/init-papier.ly"
577 @end example
578
579 @node When things don't work
580 @section When things don't work
581
582 @menu
583 * Updating old files::          
584 * Troubleshooting (taking it all apart)::  
585 * Minimal examples::            
586 @end menu
587
588 @node Updating old input files
589 @subsection Updating old input files
590
591 La syntaxe de LilyPond change de temps en temps.  Ces changements de
592 syntaxe du langage d'entrée accompagnent les améliorations du
593 logiciel.  Ces changements sont parfois destinés à rendre les fichiers
594 plus faciles à lire et à écrire, ou permettent d'intégrer de nouvelles
595 fonctionnalités.
596
597 LilyPond est fourni avec un utilitaire qui facilite cette mise à
598 jour : @command{convert-ly}.  Pour savoir comment utiliser ce programme,
599 voir @rprogram{Updating files with convert-ly}.
600
601 Malheureusement, @command{convert-ly} ne peut pas réaliser toutes les
602 modifications.  Il s'occupe des changements qui ne requièrent qu'une
603 simple substitution de texte --- comme @code{raggedright} devenant
604 @code{ragged-right} ---, les autres étant trop compliqués à effectuer.
605 Les changements de syntaxe qui ne sont pas gérés par @command{convert-ly}
606 sont énumérés dans @rprogram{Updating files with convert-ly}.
607
608 Par exemple, dans les versions 2.4 et antérieures de LilyPond,
609 les accents et les lettres non anglaises étaient entrées en
610 utilisant LaTeX --- par exemple, @samp{No\"el}.  À partir de la
611 version 2.6, le caratère @samp{ë} doit être entré directement
612 dans le fichier LilyPond comme caractère UTF-8.
613 @code{convert-ly} ne peut pas changer tous les caractères
614 LaTeX en caractères UTF-8 ; vous devez mettre à jour vos vieux
615 fichiers LilyPond manuellement.
616
617
618
619 @node Troubleshooting (taking it all apart)
620 @subsection Troubleshooting (taking it all apart)
621
622 Tôt ou tard, vous écrirez un fichier que LilyPond ne peut pas
623 compiler.  Les messages que LilyPond affiche peuvent vous aider à
624 trouver l'erreur, mais dans beaucoup de cas vous aurez besoin de faire
625 quelques recherches pour déterminer la source du problème.
626
627 Pour ce faire, les outils les plus puissants sont le commentaire de
628 fin de ligne, indiqué par @code{%}, et le commentaire multilignes (ou
629 bloc de commentaire), indiqué par @code{%@{ ... %@}}.  Si vous ne
630 pouvez localiser le problème, commencez par mettre en commentaire de
631 grandes parties de votre fichier d'entrée.  Après avoir mis en
632 commentaire une section, essayez de compiler à nouveau.  Si cela
633 fonctionne, c'est que le problème se situe dans cette partie du
634 fichier.  Si cela ne fonctionne pas, continuez à mettre en commentaire
635 d'autres sections, jusqu'à ce que vous ayez quelque chose qui compile.
636
637 Dans un cas extrême, vous pourriez en arriver à
638
639 @example
640 \score @{
641   <<
642     % \melodie
643     % \harmonie
644     % \basse
645   >>
646   \layout@{@}
647 @}
648 @end example
649
650 @noindent
651 c'est-à-dire un fichier sans aucune musique.
652
653 Si cela arrive, ne vous découragez pas.  Décommentez un peu, la partie
654 de basse par exemple, et voyez si ça fonctionne.  Si ce n'est pas le
655 cas, placez en commentaire toute la partie de basse, mais laissez
656 @code{\basse} décommenté dans le bloc @code{\score}.
657
658 @example
659 basse = \relative c' @{
660 %@{
661   c4 c c c
662   d d d d
663 %@}
664 @}
665 @end example
666
667 Maintenant commencez à décommenter petit à petit le partie de
668 @code{basse} jusqu'à ce que vous localisiez la ligne qui pose
669 problème.
670
671 Une autre technique de déboguage très utile est la construction
672 @iftex
673 de @ref{Minimal examples}.
674 @end iftex
675 @ifnottex
676 d'@ref{Minimal examples}.
677 @end ifnottex
678
679
680 @node Minimal examples
681 @subsection Minimal examples
682
683 Un exemple minimal est un exemple de code aussi court que possible.
684 De tels exemples sont bien plus compréhensibles que des exemples
685 longs.  Les exemples minimaux sont utilisés pour
686
687 @itemize
688 @item les rapports de bogue,
689 @item les demandes d'aide sur les listes de diffusion,
690 @item un ajout à
691 @uref{http://lsr@/.dsi@/.unimi@/.it/,LilyPond Snippet Repository}.
692 @end itemize
693
694 Pour construire un exemple minimal, la règle est très simple : enlevez
695 tout ce qui n'est pas nécessaire.  Il est préférable de commenter les
696 lignes non nécessaires plutôt que de les effacer : ainsi, si vous vous
697 apercevez que certaines étaient @emph{réellement} nécessaires, vous
698 pouvez les décommenter au lieu de les resaisir.
699
700 Il y a deux exceptions à cette règle du strict nécessaire :
701
702 @itemize
703 @item incluez le numéro de @code{\version} en début de fichier
704 @item si possible, utilisez @code{\paper@{ ragged-right=##t @}} au
705 début de votre exemple.
706 @end itemize
707
708 Tout l'intérêt d'un exemple minimal réside dans sa facilité de lecture :
709
710 @itemize
711 @item évitez d'utiliser des notes, armures ou métriques compliquées, à
712 moins que vous ne vouliez montrer quelque chose en rapport avec
713 celles-ci,
714 @item n'utilisez pas de commandes @code{\override} sauf si elles font
715 l'intérêt de l'exemple.
716 @end itemize
717
718 @node Scores and parts
719 @section Scores and parts
720
721 Dans la musique d'orchestre, toutes les notes sont imprimées deux fois.
722 D'abord dans les parties séparées destinées aux musiciens, et ensuite
723 dans le conducteur destiné au chef.  Les variables sont là pour vous éviter
724 un double travail.  La musique n'est entrée qu'une seule fois, et stockée dans
725 une variable, dont le contenu servira à imprimer à la fois la partie
726 séparée et la partition d'orchestre.
727
728 Il est judicieux de définir les notes dans un fichier séparé. Par
729 exemple, supposons que le fichier @file{musique-Cor.ly} contienne la
730 partie suivante pour un duo cor/@/basson.
731
732 @example
733 notesCor = \relative c @{
734   \time 2/4
735   r4 f8 a cis4 f e d
736 @}
737 @end example
738
739 @noindent
740 On établira alors une partie séparée en constituant un nouveau fichier :
741
742 @example
743 \include "musique-Cor.ly"
744 \header @{
745   instrument = "Cor en Fa"
746 @}
747
748 @{
749  \transpose f c' \notesCor
750 @}
751 @end example
752
753 À la ligne
754
755 @example
756 \include "musique-Cor.ly"
757 @end example
758
759 @noindent
760 sera substitué le contenu du fichier @file{musique-Cor.ly}, et de ce
761 fait la variable @code{notesCor} se trouvera définie.  La commande
762 @code{\transpose f@tie{}c'} indique que son argument @code{\notesCor}
763 sera transposé à la quinte supérieure : le son réel @samp{f} s'écrit
764 @code{c'}, ce qui est la caractéristique d'un Cor en fa.  La
765 transposition est visible comme suit :
766
767 @lilypond[quote,ragged-right]
768 \transpose f c' \relative c {
769   \time 2/4
770   r4 f8 a cis4 f e d
771 }
772 @end lilypond
773
774 Dans les pièces d'ensemble, il arrive souvent qu'une voix ne joue pas
775 pendant plusieurs mesures.  Un silence spécial, appelé silence multi-mesures,
776 l'indique alors. On l'obtient par un @samp{R} majuscule, suivi d'une
777 durée : @code{1}@tie{}pour une pause, @code{2}@tie{}pour une demi-pause,
778 etc.  Cette durée peut être multipliée pour établir de plus longs silences.
779 Par exemple, le silence suivant dure 3@tie{}mesures à 2/4.
780
781 @example
782 R2*3
783 @end example
784
785 Dans une partie séparée, les silences multi-mesures sont compressés.
786 Il faut pour cela définir la propriété @code{skipBars} à @q{vrai} :
787
788 @example
789 \set Score.skipBars = ##t
790 @end example
791
792 @noindent
793 Cette commande assigne la valeur @q{vrai} --- @emph{true} en anglais, et
794 @samp{#t} dans le langage Scheme --- à cette propriété dans le
795 contexte @code{Score}.  Si l'on ajoute dans la musique ci-dessus le
796 silence multi-mesures et cette option, on obtient le résultat suivant :
797
798 @lilypond[quote,ragged-right]
799 \transpose f c' \relative c {
800   \time 2/4
801   \set Score.skipBars = ##t
802   R2*3
803   r4 f8 a cis4 f e d
804 }
805 @end lilypond
806
807 Le conducteur rassemble toute la musique. Si l'on suppose que l'autre
808 voix de notre duo se trouve dans le fichier @file{musique-Basson.ly} en
809 tant que variable @code{notesBasson}, on établira un conducteur avec
810
811 @example
812 \include "musique-Basson.ly"
813 \include "musique-Cor.ly"
814
815 <<
816   \new Staff \notesCor
817   \new Staff \notesBasson
818 >>
819 @end example
820
821 @noindent
822 ce qui équivaut à
823
824 @lilypond[quote,ragged-right]
825 \relative c <<
826   \new Staff {
827     \time 2/4 R2*3
828     r4 f8 a cis4 f e d
829   }
830   \new Staff {
831     \clef bass
832     r4 d,8 f | gis4 c | b bes |
833     a8 e f4 | g d | gis f
834   }
835 >>
836 @end lilypond
837
838 Des informations plus détaillées sur la mise en place de conducteurs
839 et de parties séparées se trouvent dans le manuel : voir
840 @ruser{Writing parts}.
841
842 Les variables (@q{propriétés}) réglables sont abordées en détail dans
843 @ruser{The set command}.