1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
2 @c This file is part of lilypond-learning.tely
4 Translation of GIT committish: 7eee2a7382029cc29cc069f93a431758ae8a13b7
6 When revising a translation, copy the HEAD committish of the
7 version that you are working on. See TRANSLATION for details.
12 @c Translators: Ludovic Sardain, Jean-Charles Malahieude
13 @c Translation checkers: Jean-Yves Baudais, Valentin Villenave, John Mandereau, Jean-Charles Malahieude
15 @node Working on LilyPond projects
16 @chapter Working on LilyPond projects
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.
24 * Suggestions for writing LilyPond input files::
25 * When things don't work::
27 * Make and Makefiles::
30 @node Suggestions for writing LilyPond input files
31 @section Suggestions for writing LilyPond input files
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 ?
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.
43 @item Si vous faites une erreur, la structure même du fichier LilyPond
44 peut permettre de la localiser plus ou moins facilement.
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
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.
62 * General suggestions::
63 * Typesetting existing music::
65 * Saving typing with variables and functions::
69 @node General suggestions
70 @subsection General suggestions
72 Voici quelques conseils qui peuvent vous éviter certains problèmes ou
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.
84 @item @strong{Ajoutez des contrôles} : @ruser{Octave checks} et
85 @ruser{Bar and bar number checks}. Si vous avez ajouté des contrôles
86 de loin en loin, et que vous faites une erreur, vous pourrez la
87 retrouver plus rapidement. @qq{De loin en loin}, qu'est-ce à dire ?
88 Cela dépend de la complexité de la musique. Pour de la musique très
89 simple, peut-être une ou deux fois. Pour de la musique très complexe,
90 peut-être à chaque mesure.
92 @item @strong{Une mesure par ligne de texte}. Si la musique en elle-même ou
93 le résultat que vous désirez contient quelque chose de compliqué, il
94 est souvent bon de n'écrire qu'une seule mesure par ligne. Économiser
95 de la place en tassant huit mesures par ligne, ça ne vaut pas vraiment
96 le coup si l'on doît corriger vos fichiers.
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.
108 @item @strong{Indentez les accolades}. Beaucoup de problèmes
109 viennent d'un défaut de parité entre @code{@{} et @code{@}}.
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.
115 @item @strong{Séparez les affinages de mise en forme} de la musique
116 elle-même. Voyez @ref{Saving typing with variables and functions} et
122 @node Typesetting existing music
123 @subsection Typesetting existing music
125 Si vous saisissez de la musique à partir d'une partition existante,
126 c'est-à-dire de la musique déjà écrite,
130 @item n'entrez qu'un seul système de la partition originale
131 à la fois --- mais toujours une seule mesure par ligne de texte ---,
132 et vérifiez chaque système lorsqu'il est terminé. Vous pouvez
133 utiliser les commandes @code{showLastLength} et @code{showFirstLength}
134 pour accélérer la compilation --- voir @ruser{Skipping corrected music} ;
136 @item définissez @code{mBreak = @{\break @}} et insérez
137 @code{\mBreak} dans le fichier d'entrée pour obtenir des sauts de
138 ligne identiques à la partition originale. Cela facilite la
139 comparaison entre la partition originale et la partition de
140 LilyPond. Lorsque vous avez fini de relire votre musique, vous pouvez
141 définir @code{mBreak = @{ @}} pour enlever tous ces sauts de ligne, et
142 laisser LilyPond placer les sauts de ligne selon son propre algorithme.
144 @item encadrez les notes d'une partie pour instrument transpositeur
148 \transpose c tonalité-naturelle @{...@}
150 (où @code{tonalité-naturelle} correspond à celle de l'instrument en
151 question) de telle sorte que la musique comprise dans cette variable se
152 retrouve en ut. Vous pourrez toujours transposer à l'inverse si besoin
153 lorsque vous ferez appel à cette variable. Des erreurs de transposition
154 seront moins susceptibles de se produire si la musique de toutes les
155 variables est dans la même et unique tonalité.
157 De la même manière, prénez toujours le do comme note de départ ou
158 d'arrivée. Ceci aura pour simple conséquence que les autres tonalités
159 que vous utiliserez seront celles propres à chacun des instruments ---
160 sib pour une trompette en si bémol, ou lab pour une clarinette en la bémol.
166 @subsection Large projects
168 Lorsque l'on travaille sur un gros projet, il devient vital
169 de structurer clairement ses fichiers LilyPond.
173 @item @strong{Utilisez un identificateur pour chaque voix},
174 avec un minimum de structure dans la définition. La structure de la
175 section @code{\score} est la plus susceptible de changer, notamment
176 dans une nouvelle version de LilyPond, alors que la définition du
177 @code{violon} l'est beaucoup moins.
180 violin = \relative c'' @{
193 @item @strong{Séparez les retouches} des définitions de
194 musique. Nous vous avons déjà invité à adopter une telle pratique, qui
195 par ailleurs devient vitale pour des projets d'importance. Nous
196 pouvons avoir besoin de changer la définition de
197 @code{fpuisp}, mais dans ce cas nous n'aurons besoin de le faire
198 qu'une seule fois, et nous pourrons encore éviter de
199 modifier quoi que ce soit à l'intérieur de la définition
204 \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @}
205 violin = \relative c'' @{
213 @node Saving typing with variables and functions
214 @subsection Saving typing with variables and functions
217 @cindex identificateurs
219 Jusqu'à maintenant, vous avez vu ce type de code :
221 @lilypond[quote,verbatim,ragged-right]
222 hornNotes = \relative c'' { c4 b dis c }
230 Vous comprendrez combien cela peut être utile pour écrire de la
231 musique minimaliste :
233 @lilypond[quote,verbatim,ragged-right]
234 fragmentA = \relative c'' { a4 a8. b16 }
235 fragmentB = \relative c'' { a8. gis16 ees4 }
236 violin = \new Staff { \fragmentA \fragmentA \fragmentB \fragmentA }
244 Néanmoins vous pouvez aussi utiliser ces identificateurs
245 --- aussi connus sous le nom de variables, macros, ou commandes
246 (définies par l'utilisateur) --- pour des retouches :
248 @lilypond[quote,verbatim,ragged-right]
249 dolce = \markup{ \italic \bold dolce }
250 padText = { \once \override TextScript #'padding = #5.0 }
251 fthenp=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p }
252 violin = \relative c'' {
254 c4._\dolce b8 a8 g a b |
256 c4.^"hi there!" d8 e' f g d |
257 c,4.\fthenp b8 c4 c-. |
264 \layout{ragged-right=##t}
268 Ces identificateurs sont évidemment utiles pour économiser de la
269 frappe. Mais ils peuvent l'être même si vous ne les utilisez qu'une
270 seule fois : ils réduisent la complexité. Regardons l'exemple
271 précédent sans aucun identificateur. C'est beaucoup plus laborieux à
272 lire, et particulièrement la dernière ligne.
275 violin = \relative c'' @{
277 c4._\markup@{ \italic \bold dolce @} b8 a8 g a b |
278 \once \override TextScript #'padding = #5.0
279 c4.^"hi there!" d8 e' f g d |
280 c,4.\markup@{ \dynamic f \italic \small @{ 2nd @}
281 \hspace #0.1 \dynamic p @} b8 c4 c-. |
286 @c TODO Replace the following with a better example -td
287 @c Skylining handles this correctly without padText
289 Jusqu'ici nous avons vu des substitutions statiques : quand LilyPond
290 rencontre @code{\padText}, il le remplace par le contenu que nous lui
291 avons défini --- c'est-à-dire le contenu à droite de @code{padText=}.
293 LilyPond gère également des substitutions non-statiques --- vous
294 pouvez les voir comme des fonctions.
296 @lilypond[quote,verbatim,ragged-right]
298 #(define-music-function (parser location padding) (number?)
300 \once \override TextScript #'padding = #$padding
308 c4^"piu mosso" fis a g
312 Utiliser les identificateurs est aussi un bon moyen pour vous épargner
313 du travail si la syntaxe de LilyPond change un jour --- voir
314 @ref{Updating old input files}. Si vous avez une seule définition, par
315 exemple @code{\dolce}, pour tous vos fichiers (voir @ref{Style sheets}),
316 et que la syntaxe change, alors vous n'aurez qu'à mettre à
317 jour votre seule définition @code{\dolce}, au lieu de devoir modifier
318 chaque fichier @code{.ly}.
322 @subsection Style sheets
324 La sortie que produit LilyPond peut être largement modifiée --- voir
325 @ref{Tweaking output} pour plus de détails. Mais que faire si vous
326 avez beaucoup de fichiers auxquels vous souhaitez appliquer vos
327 retouches ? Ou si vous souhaitez simplement séparer les retouches de
328 la musique elle-même ? Rien de plus facile.
330 Prenons un exemple. Ne vous inquiétez pas si vous ne comprenez pas
331 les parties avec tous les @code{#()}. Celles-ci sont expliquées dans
332 @ref{Advanced tweaks with Scheme}.
334 @lilypond[quote,verbatim,ragged-right]
335 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
336 #:line(#:dynamic "mp" #:text #:italic "dolce" )))
338 inst = #(define-music-function (parser location string) (string?)
342 'text (markup #:bold (#:box string))))
346 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
348 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
352 Il y a quelques problèmes de chevauchement ; nous allons arranger
353 cela en utilisant les techniques de @ref{Moving objects}. On peut
354 aussi faire quelque chose pour les définitions de @code{mpdolce}
355 et @code{inst}. Elles produisent le résultat que nous désirons,
356 mais nous pourrions aussi vouloir les utiliser dans une autre pièce.
357 Il suffirait de les copier et coller au début de chaque
358 fichier, mais c'est fastidieux. De plus, cela laisse les définitions
359 dans nos fichiers de musique, et je trouve personnellement tous ces
360 @code{#()} assez laids. Stockons-les dans un autre fichier :
363 %%% enregistrez ceci dans un fichier nommé "definitions.ily"
364 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
365 #:line(#:dynamic "mp" #:text #:italic "dolce" )))
367 inst = #(define-music-function (parser location string) (string?)
371 'text (markup #:bold (#:box string))))
374 Nous rappellerons ce fichier par une simple commande @code{\include} au
375 début de notre fichier de musique. Lui attribuer l'extension
376 @code{.ily} nous permet de distinguer aisément qu'il s'agit d'un fichier
377 voué à être inclus dans un fichier maître ; il n'est pas destiné à être
379 Maintenant, modifions notre musique (enregistrez ce fichier
380 sous @file{musique.ly}).
382 @c We have to do this awkward example/lilypond-non-verbatim
383 @c because we can't do the \include stuff in the manual.
386 \include "definitions.ily"
390 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
392 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
396 @lilypond[quote,ragged-right]
397 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
398 #:line(#:dynamic "mp" #:text #:italic "dolce" )))
400 inst = #(define-music-function (parser location string) (string?)
404 'text (markup #:bold (#:box string))))
408 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
410 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
414 C'est mieux, mais effectuons encore quelques retouches. Le glissando
415 est peu visible, c'est pourquoi nous allons l'épaissir et le
416 rapprocher des têtes de note. Déplaçons l'indication métronomique
417 au-dessus de la clef, au lieu de la laisser au-dessus de la première
418 note. Et pour finir, mon professeur de composition déteste les
419 chiffrages de mesure en @qq{C}, nous allons donc le transformer en @qq{4/4}.
421 Cependant, ne changez pas le fichier @file{musique.ly}. Remplacez le
422 fichier @file{definitions.ily} par ceci :
426 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
427 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
429 inst = #(define-music-function (parser location string) (string?)
433 'text (markup #:bold (#:box string))))
437 \override MetronomeMark #'extra-offset = #'(-9 . 0)
438 \override MetronomeMark #'padding = #'3
441 \override TimeSignature #'style = #'numbered
444 \override Glissando #'thickness = #3
445 \override Glissando #'gap = #0.1
450 @lilypond[quote,ragged-right]
451 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
452 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
454 inst = #(define-music-function (parser location string) (string?)
458 'text (markup #:bold (#:box string))))
462 \override MetronomeMark #'extra-offset = #'(-9 . 0)
463 \override MetronomeMark #'padding = #'3
466 \override TimeSignature #'style = #'numbered
469 \override Glissando #'thickness = #3
470 \override Glissando #'gap = #0.1
476 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
478 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
482 C'est encore mieux ! Mais supposons maintenant que je veuille publier
483 cette pièce. Mon professeur de composition n'aime pas les chiffrages
484 de mesure en @qq{C}, mais moi je les aime bien. Copions l'actuel
485 @file{definitions.ily} dans le fichier @file{publication-web.ily}, et
486 modifions ce dernier. Puisque la musique est destinée à produire un
487 fichier PDF affiché sur écran, nous allons aussi augmenter la taille
492 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
493 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
495 inst = #(define-music-function (parser location string) (string?)
499 'text (markup #:bold (#:box string))))
501 #(set-global-staff-size 23)
504 \override MetronomeMark #'extra-offset = #'(-9 . 0)
505 \override MetronomeMark #'padding = #'3
510 \override Glissando #'thickness = #3
511 \override Glissando #'gap = #0.1
516 @lilypond[quote,ragged-right]
517 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
518 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
520 inst = #(define-music-function (parser location string) (string?)
524 'text (markup #:bold (#:box string))))
526 #(set-global-staff-size 23)
529 \override MetronomeMark #'extra-offset = #'(-9 . 0)
530 \override MetronomeMark #'padding = #'3
533 \override Glissando #'thickness = #3
534 \override Glissando #'gap = #0.1
540 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
542 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
546 Il ne nous reste plus qu'à remplacer @code{\include "definitions.ily"}
547 par @code{\include "publication-web.ily"} dans notre fichier de musique.
549 Il est possible, bien sûr, de rendre cela encore plus pratique. Nous
550 pourrions créer un fichier @file{definitions.ily} qui ne contiendrait
551 que les définitions de @code{mpdolce} et de @code{inst}, un
552 fichier @file{publication-web.ily} qui ne contiendrait que la section
553 @code{layout} décrite ci-dessus et un fichier @file{universite.ily} qui
554 ne contiendrait que les retouches pour produire le résultat que mon
555 professeur préfère. Le début du fichier @file{musique.ly} ressemblerait
559 \include "definitions.ily"
561 %%% Décommentez seulement une de ces deux lignes !
562 \include "publication-web.ily"
563 %\include "universite.ily"
566 Cette approche peut être utile même si vous ne produisez qu'un seul
567 jeu de partitions. J'utilise personnellement une demi-douzaine de
568 fichiers de @qq{feuille de style} pour mes projets. Je commence
569 chaque fichier de musique par @code{\include "../global.ily"} qui contient :
573 \version @w{"@version{}"}
574 #(ly:set-option 'point-and-click #f)
575 \include "../init/init-defs.ly"
576 \include "../init/init-mise-en-page.ly"
577 \include "../init/init-en-tetes.ly"
578 \include "../init/init-papier.ly"
581 @node When things don't work
582 @section When things don't work
585 * Updating old files::
586 * Troubleshooting (taking it all apart)::
590 @node Updating old input files
591 @subsection Updating old input files
594 @cindex mise à jour d'anciens fichiers
596 La syntaxe de LilyPond change de temps en temps. Ces changements de
597 syntaxe du langage d'entrée accompagnent les améliorations du
598 logiciel. Ces changements sont parfois destinés à rendre les fichiers
599 plus faciles à lire et à écrire, ou permettent d'intégrer de nouvelles
602 LilyPond est fourni avec un utilitaire qui facilite cette mise à
603 jour : @command{convert-ly}. Pour savoir comment utiliser ce programme,
604 voir @rprogram{Updating files with convert-ly}.
606 Malheureusement, @command{convert-ly} ne peut pas réaliser toutes les
607 modifications. Il s'occupe des changements qui ne requièrent qu'une
608 simple substitution de texte --- comme @code{raggedright} devenant
609 @code{ragged-right} ---, les autres étant trop compliqués à effectuer.
610 Les changements de syntaxe qui ne sont pas gérés par @command{convert-ly}
611 sont énumérés dans @rprogram{Updating files with convert-ly}.
613 Par exemple, dans les versions 2.4 et antérieures de LilyPond,
614 les accents et les lettres non anglaises étaient entrées en
615 utilisant LaTeX --- par exemple, @code{No\"el}. À partir de la
616 version 2.6, le caratère @code{ë} doit être entré directement
617 dans le fichier LilyPond comme caractère UTF-8.
618 @code{convert-ly} ne peut pas changer tous les caractères
619 LaTeX en caractères UTF-8 ; vous devez mettre à jour vos vieux
620 fichiers LilyPond manuellement.
625 @subsection Common errors
627 The error conditions described below occur often, yet the cause
628 is not obvious or easily found. Once seen and understood, they
633 * Music runs off the page::
634 * Apparent error in ../ly/init.ly::
635 * Error message Unbound variable %::
638 @node Music runs off the page
639 @unnumberedsubsubsec Music runs off the page
641 Lorsque la musique s'épanche au delà de la marge droite ou bien semble
642 anormalement comprimée, la raison en est le plus souvent une note à la
643 durée erronée ; cela finit par provoquer le débordement de la dernière
644 note d'une mesure. Rien ne s'oppose à ce que la dernière note d'une
645 mesure ne s'arrête avant la barre de mesure ; on considère simplement
646 qu'elle se prolonge sur la mesure suivante. Des débordements à
647 répétition finissent par générer une musique comprimée ou qui sort de la
648 page, pour la simple et bonne raison que les sauts de ligne automatiques
649 ne peuvent intervenir qu'à la fin d'une mesure complète, autrement dit
650 lorsque toutes les notes sont terminées avant la fin de la mesure.
652 @warning{Une durée erronée peut empêcher les sauts de ligne, ce qui
653 conduit à une musique compressée, voire à un débordement de la page.}
655 Une erreur de durée sera bien plus facilement localisable si vous
656 positionnez régulièrement des contrôles de barre de mesure --- voir
657 @ruser{Bar and bar number checks}.
659 Si vous tenez absolument à enchainer de tels débordements, vous devrez
660 insérer des barres de mesure invisibles là où vous souhaitez positionner
661 un saut de ligne. Consultez le chapitre @ruser{Bar lines} pour plus de
664 @node Apparent error in ../ly/init.ly
665 @unnumberedsubsubsec Apparent error in @code{../ly/init.ly}
667 Certains messages d'erreur relatifs à une erreur de syntaxe dans le
668 fichier @code{../ly/init.ly} peuvent survenir lorsque le fichier est mal
669 formaté. Cela se produit notamment lors d'un défaut de parité de
670 bornage ou de guillemets.
672 L'erreur la plus courante est la simple omission d'une accolade
673 fermante (@code{@}} à la fin du bloc @code{Score}. La solution est
674 évidente en pareil cas : i lsuffit de vérifier que le bloc @code{Score}
675 est bien clôturé. La structure des fichiers LilyPond est abordée plus
676 en détails au chapitre @ref{How LilyPond input files work}. C'est la
677 raison pour laquelle nous vous invitons à utiliser un éditeur de texte
678 qui prenne en charge le contrôle de parité des parnthèses, crochets et
679 accolades afin de vous éviter de telles erreurs.
681 Lorsqu'il s'agit d'un guillemet fermant (@code{"}) omis, le message
682 d'erreur devrait vous indiquer un numéro de ligne avoisinant. L'erreur
683 se situe la plupart du temps une ou deux lignes au-dessus de celle
687 @node Error message Unbound variable %
688 @unnumberedsubsubsec Error message Unbound variable %
690 Ce message d'erreur, qu'il apparaisse sur le terminal ou en fin de
691 fichier journal, est associé à un message du type @qq{GUILE a signalé
692 une erreur @dots{}} survient à chaque fois qu'un commentaire
693 @emph{LilyPond} est indûment placé dans une routine @emph{Scheme}.
695 Un commentaire LilyPond est introduit par le signe pourcent (@code{%})
696 et de doit en aucun cas se trouver dans une routine Scheme. En Scheme,
697 les commentaire s'introduisent par un point-virgule (@code{;}).
700 @node Troubleshooting (taking it all apart)
701 @subsection Troubleshooting (taking it all apart)
703 Tôt ou tard, vous écrirez un fichier que LilyPond ne peut pas
704 compiler. Les messages que LilyPond affiche peuvent vous aider à
705 trouver l'erreur, mais dans beaucoup de cas vous aurez besoin de faire
706 quelques recherches pour déterminer la source du problème.
708 Pour ce faire, les outils les plus puissants sont le commentaire de
709 fin de ligne, indiqué par @code{%}, et le commentaire multilignes (ou
710 bloc de commentaire), indiqué par @code{%@{ ... %@}}. Si vous ne
711 pouvez localiser le problème, commencez par mettre en commentaire de
712 grandes parties de votre fichier d'entrée. Après avoir mis en
713 commentaire une section, essayez de compiler à nouveau. Si cela
714 fonctionne, c'est que le problème se situe dans cette partie du
715 fichier. Si cela ne fonctionne pas, continuez à mettre en commentaire
716 d'autres sections, jusqu'à ce que vous ayez quelque chose qui compile.
718 Dans un cas extrême, vous pourriez en arriver à
732 c'est-à-dire un fichier sans aucune musique.
734 Si cela arrive, ne vous découragez pas. Décommentez un peu, la partie
735 de basse par exemple, et voyez si ça fonctionne. Si ce n'est pas le
736 cas, placez en commentaire toute la partie de basse, mais laissez
737 @code{\basse} décommenté dans le bloc @code{\score}.
740 basse = \relative c' @{
748 Maintenant commencez à décommenter petit à petit le partie de
749 @code{basse} jusqu'à ce que vous localisiez la ligne qui pose
752 Une autre technique de déboguage très utile est la construction
753 de @ref{Minimal examples}.
756 @node Minimal examples
757 @subsection Minimal examples
759 Un exemple minimal est un exemple de code aussi court que possible.
760 De tels exemples sont bien plus compréhensibles que des exemples
761 longs. Les exemples minimaux sont utilisés pour
764 @item les rapports de bogue,
765 @item les demandes d'aide sur les listes de diffusion,
767 @uref{http://lsr.dsi.unimi.it/,LilyPond Snippet Repository}.
770 Pour construire un exemple minimal, la règle est très simple : enlevez
771 tout ce qui n'est pas nécessaire. Il est préférable de commenter les
772 lignes non nécessaires plutôt que de les effacer : ainsi, si vous vous
773 apercevez que certaines étaient @emph{réellement} nécessaires, vous
774 pouvez les décommenter au lieu de les resaisir.
776 Il y a deux exceptions à cette règle du strict nécessaire :
779 @item incluez le numéro de @code{\version} en début de fichier
780 @item si possible, utilisez @code{\paper@{ ragged-right=##t @}} au
781 début de votre exemple.
784 Tout l'intérêt d'un exemple minimal réside dans sa facilité de lecture :
787 @item évitez d'utiliser des notes, armures ou métriques compliquées, à
788 moins que vous ne vouliez montrer quelque chose en rapport avec
790 @item n'utilisez pas de commandes @code{\override} sauf si elles font
791 l'intérêt de l'exemple.
795 @node Scores and parts
796 @section Scores and parts
798 Dans la musique d'orchestre, toutes les notes sont imprimées deux fois.
799 D'abord dans les parties séparées destinées aux musiciens, et ensuite
800 dans le conducteur destiné au chef. Les variables sont là pour vous éviter
801 un double travail. La musique n'est entrée qu'une seule fois, et stockée dans
802 une variable, dont le contenu servira à imprimer à la fois la partie
803 séparée et la partition d'orchestre.
805 Il est judicieux de définir les notes dans un fichier séparé. Par
806 exemple, supposons que le fichier @file{musique-Cor.ly} contienne la
807 partie suivante pour un duo cor/@/basson.
810 notesCor = \relative c @{
817 On établira alors une partie séparée en constituant un nouveau fichier :
820 \include "musique-Cor.ly"
822 instrument = "Cor en Fa"
826 \transpose f c' \notesCor
833 \include "musique-Cor.ly"
837 sera substitué le contenu du fichier @code{musique-Cor.ly}, et de ce
838 fait la variable @code{notesCor} se trouvera définie. La commande
839 @code{\transpose f@tie{}c'} indique que son argument @code{\notesCor}
840 sera transposé à la quinte supérieure : le son réel @code{f} s'écrit
841 @code{c'}, ce qui est la caractéristique d'un Cor en fa. La
842 transposition est visible comme suit :
844 @lilypond[quote,ragged-right]
845 \transpose f c' \relative c {
851 Dans les pièces d'ensemble, il arrive souvent qu'une voix ne joue pas
852 pendant plusieurs mesures. Un silence spécial, appelé silence multi-mesures,
853 l'indique alors. On l'obtient par un @samp{R} majuscule, suivi d'une
854 durée : @code{1}@tie{}pour une pause, @code{2}@tie{}pour une demi-pause,
855 etc. Cette durée peut être multipliée pour établir de plus longs silences.
856 Par exemple, le silence suivant dure 3@tie{}mesures à 2/4.
862 Dans une partie séparée, les silences multimesure sont compressés.
863 Il faut pour cela définir la propriété @code{skipBars} à @qq{vrai} :
866 \set Score.skipBars = ##t
870 Cette commande assigne la valeur @qq{vrai} --- @emph{true} en anglais, et
871 @code{#t} dans le langage Scheme --- à cette propriété dans le
872 contexte @code{Score}. Si l'on ajoute dans la musique ci-dessus le
873 silence multimesure et cette option, on obtient le résultat suivant :
875 @lilypond[quote,ragged-right]
876 \transpose f c' \relative c {
878 \set Score.skipBars = ##t
884 Le conducteur rassemble toute la musique. Si l'on suppose que l'autre
885 voix de notre duo se trouve dans le fichier @code{musique-Basson.ly} en
886 tant que variable @code{notesBasson}, on établira un conducteur avec
889 \include "musique-Basson.ly"
890 \include "musique-Cor.ly"
894 \new Staff \notesBasson
901 @lilypond[quote,ragged-right]
909 r4 d,8 f | gis4 c | b bes |
910 a8 e f4 | g d | gis f
915 Des informations plus détaillées sur la mise en place de conducteurs
916 et de parties séparées se trouvent dans le manuel de notation : voir
917 @ruser{Writing parts}.
919 Les variables (@qq{propriétés}) réglables sont abordées en détail dans
920 @ruser{The set command}.
924 @node Make and Makefiles
925 @section Make and Makefiles
930 La plupart des plates-formes sur lesquelles tourne LilyPond disposent
931 d'un logiciel appelé @code{make}. Ce logiciel va lire un fichier
932 spécial, nommé de @code{Makefile}, qui contient tout ce qu'il
933 faut --- les dépendances entre certains fichiers, les instructions
934 successives à traiter par le système --- pour aboutir au fichier que
935 vous désirez obtenir. Il pourrait par exemple contenir tout ce qu'il
936 faut pour produire @code{ballade.pdf} et @code{ballade.midi} à partir de
937 @code{ballade.ly} en lançant LilyPond.
939 La création d'un @code{Makefile} peut se révéler pertinente pour
940 certains projets, que ce soit par simple goût personnel ou bien par
941 respect de ceux qui pourront accéder à vos sources. Cette manière de
942 procéder est particulièrement indiquée lorsque vous travaillez sur un
943 projet de grande envergure impliquant de nombreuses inclusions de
944 fichiers et différentes éditions --- par exemple un conducteur et un
945 matériel d'orchestre complet avec la partition pour le chef et une
946 partition séparée pour chacun des pupitres --- ou bien si votre projet
947 requiert certaines commandes particulières comme @code{lilypond-book}.
948 Les @emph{Makefiles} varient tant en complexité qu'en flexibilité selon
949 les besoin et les aptitudes de celui qui les crée. Le programme GNU Make
950 est installé par défaut sur les distributions Linux et sur MacOS@tie{}X,
951 et il en existe une version pour les environnements Windows.
953 Consultez le @strong{GNU Make Manual} pour plus de détails sur ce dont
954 @code{make} est capable --- vous pourrez même en trouver des versions
955 françaises à l'aide des moteurs de recherche ---, dans la mesure où ce
956 qui suit ne donne qu'un bref apperçu de ses possibilités.
958 Les commandes permettant de définir les règles diffèrent selon la
959 plate-forme : si les différents Linux et MacOS@tie{}X utilisent
960 @code{bash}, Windows utilise @code{cmd}. Dans le cas de MacOS@tie{}X,
961 vous devrez toutefois configurer votre système de telle sorte qu'il
962 utilise l'interpréteur en ligne de commande. Voici quelques exemples de
963 fichier @emph{Makefile}, avec une version pour Linux ou MacOS et une
966 Pour commencer, une pièce à quatre mouvements pour orchestre et dont les
967 fichiers sont répartis selon l'arborescence suivante :
986 | |-- symphonieIII.ly
990 | |-- symphon-alto.ly
991 | |-- symphonie-cello.ly
992 | |-- symphonie-cor.ly
993 | |-- symphonie-hautbois.ly
994 | |-- symphonie-violonUn.ly
995 | `-- symphonie-violonDeux.ly
996 `-- symphonieDefs.ily
999 Les fichiers @code{.ly} des répertoires @code{Partitions} et
1000 @code{Pupitres} récupèreront la notation des fichiers @code{.ily}
1001 contenus dans le répertoire @code{Notes} :
1004 %%% début du fichier "symphone-cello.ly"
1005 \include ../definitions.ily
1006 \include ../Notes/cello.ily
1009 Le @emph{Makefile} répertorie des cibles correspondant à @code{score}
1010 (l'intégrale au format conducteur), @code{mouvements} (chacun des
1011 mouvements au format conducteur) et @code{pupitres} (une partition par
1012 pupitre). Il contient aussi une cible @code{archive} chargée de générer
1013 une archive des fichiers sources qui pourra être diffusée sur la toile ou
1014 transmise par courriel. Voici ce que contiendrait ce @emph{Makefile}
1015 pour Linux ou MacOS@tie{}X. Ce fichier doit être enregistré sous le nom
1016 de @code{Makefile} à la racine du projet --- ici @code{Symphonie}.
1018 @warning{Lorsque vous définissez une cible ou une règle sur plusieurs
1019 lignes, les lignes à partir de la deuxième @strong{doivent} débuter par
1020 une tabulation, non pas par des espaces.}
1023 # Le préfixe au nom des fichiers résultants
1025 # Détermination du nombre de processeurs
1026 CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//`
1027 # La commande d'appel à lilypond
1028 LILY_CMD = lilypond -ddelete-intermediate-files \
1029 -dno-point-and-click -djob-count=$(CPU_CORES)
1031 # Les suffixes utilisés dans ce Makefile
1032 .SUFFIXES: .ly .ily .pdf .midi
1034 # Les fichiers sources et résultants sont recherchés dans les répertoires
1035 # listés dans la variable VPATH. Ceux-ci sont tous des sous-répertoires
1036 # du répertoire courant (fourni par la variable de GNU make `CURDIR').
1038 $(CURDIR)/Partitions \
1040 $(CURDIR)/Pupitres \
1043 # La règle type pour créer un PDF et un MIDI à partir d'un fichier
1045 # Les .pdf résultants iront dans le sous-répertoire "PDF" et les fichiers
1046 # .midi dans le sous-répertoire "MIDI".
1048 $(LILY_CMD) $<; \ # cette ligne commence par une tabulation
1049 if test -f "$*.pdf"; then \
1052 if test -f "$*.midi"; then \
1053 mv "$*.midi" MIDI/; \
1064 # Les dépendances selon le mouvement.
1065 $(piece)I.pdf: $(piece)I.ly $(notes)
1066 $(piece)II.pdf: $(piece)II.ly $(notes)
1067 $(piece)III.pdf: $(piece)III.ly $(notes)
1068 $(piece)IV.pdf: $(piece)IV.ly $(notes)
1070 # Les dépendances pour la partition intégrale.
1071 $(piece).pdf: $(piece).ly $(notes)
1073 # Les dépendances pour les pupitres.
1074 $(piece)-alto.pdf: $(piece)-alto.ly alto.ily
1075 $(piece)-cello.pdf: $(piece)-cello.ly cello.ily
1076 $(piece)-cor.pdf: $(piece)-cor.ly cor.ily
1077 $(piece)-hautbois.pdf: $(piece)-hautbois.ly hautbois.ily
1078 $(piece)-violonUn.pdf: $(piece)-violonUn.ly violonUn.ily
1079 $(piece)-violonDeux.pdf: $(piece)-violonDeux.ly violonDeux.ily
1081 # Lancer `make score' pour générer l'intégrale des quatre mouvements en
1086 # Lancer `make parties' pour obtenir tous les pupitres.
1087 # Lancer `make toto.pdf' pour obtenir la partie instrumentale de toto.
1088 # Par exemple : `make symphonie-cello.pdf'.
1090 parties: $(piece)-cello.pdf \
1091 $(piece)-violonUn.pdf \
1092 $(piece)-violonDeux.pdf \
1094 $(piece)-hautbois.pdf \
1097 # Lancer `make mouvements' pour générer un fichier séparé pour chacun
1100 mouvements: $(piece)I.pdf \
1105 all: score parties mouvements
1108 tar -cvvf symphonie.tar \ # cette ligne commence par une tabulation
1109 --exclude=*pdf --exclude=*~ \
1110 --exclude=*midi --exclude=*.tar \
1115 Les choses se compliquent sous Windows. Une fois GNU Make pour Windows
1116 téléchargé et installé, il vous faudra correctement définir le chemin
1117 d'accès au programme @emph{Make} --- dans les variables d'environnement
1118 du système --- afin que l'interpréteur de commandes DOS puisse le
1119 localiser. Pour cela, faites un clic droite sur @qq{Poste de travail},
1120 choisissez @code{Propriétés} puis @code{Avancées}. Cliquez sur
1121 @code{Variables d'environnement} puis, dans l'onglet @w{@code{Variables
1122 système}}, mettez @code{path} en surbrillance et cliquez sur
1123 @code{Modifier}. Ajoutez alors le chemin d'accès complet à l'exécutable
1124 de GNU Make, qui devrait ressembler à :
1127 C:\Program Files\GnuWin32\bin
1130 Il va également falloir adapter le @emph{makefile} aux particularités de
1131 l'interpréteur de commandes et à la présence d'espaces dans le nom de
1132 certains répertoire de ce système.
1133 La cible @code{archive} est tout bonnement supprimée, puisque Windows ne
1134 dispose pas de la commande @code{tar}. Enfin, les fichiers MIDI ont une
1135 extension par défaut propre à Windows.
1139 ## VERSION POUR WINDOWS
1142 LILY_CMD = lilypond -ddelete-intermediate-files \
1143 -dno-point-and-click \
1144 -djob-count=$(NUMBER_OF_PROCESSORS)
1146 #get the 8.3 name of CURDIR (workaround for spaces in PATH)
1147 workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \
1150 .SUFFIXES: .ly .ily .pdf .mid
1153 $(workdir)/Partitions \
1155 $(workdir)/Pupitress \
1159 $(LILY_CMD) $< # cette ligne commence par une tabulation
1160 if exist "$*.pdf" move /Y "$*.pdf" PDF/ # tabulation au début
1161 if exist "$*.mid" move /Y "$*.mid" MIDI/ # tabulation au début
1173 $(piece)I.pdf: $(piece)I.ly $(notes)
1174 $(piece)II.pdf: $(piece)II.ly $(notes)
1175 $(piece)III.pdf: $(piece)III.ly $(notes)
1176 $(piece)IV.pdf: $(piece)IV.ly $(notes)
1178 $(piece).pdf: $(piece).ly $(notes)
1180 $(piece)-cello.pdf: $(piece)-cello.ly cello.ily
1181 $(piece)-cor.pdf: $(piece)-cor.ly cor.ily
1182 $(piece)-hautbois.pdf: $(piece)-hautbois.ly hautbois.ily
1183 $(piece)-alto.pdf: $(piece)-alto.ly alto.ily
1184 $(piece)-violonUn.pdf: $(piece)-violonUn.ly violonUn.ily
1185 $(piece)-violonDeux.pdf: $(piece)-violonDeux.ly violonDeux.ily
1191 parties: $(piece)-cello.pdf \
1192 $(piece)-violonUn.pdf \
1193 $(piece)-violonDeux.pdf \
1195 $(piece)-hautbois.pdf \
1199 mouvements: $(piece)I.pdf \
1204 all: score parties mouvements
1208 Le @emph{Makefile} suivant convient pour un document
1209 @command{lilypond-book} réalisé avec @LaTeX{}. Ce projet contiendra un
1210 index, ce qui nécessitera de lancer une deuxième fois @command{latex}
1211 pour mettre à jour les liens. Les fichiers résultants iront dans le
1212 répertoire @code{out} pour ce qui est des .pdf et dans le répertoire
1213 @code{htmlout} pour ce qui est du html.
1222 LILYBOOK_PDF=lilypond-book --output=$(OUTDIR) --pdf $(FILE).lytex
1223 LILYBOOK_HTML=lilypond-book --output=$(WEBDIR) $(FILE).lytex
1224 PDF=cd $(OUTDIR) && pdflatex $(FILE)
1225 HTML=cd $(WEBDIR) && latex2html $(FILE)
1226 INDEX=cd $(OUTDIR) && makeindex $(FILE)
1227 PREVIEW=$(VIEWER) $(OUTDIR)/$(FILE).pdf &
1232 $(LILYBOOK_PDF) # tabulation en début de ligne
1233 $(PDF) # tabulation en début de ligne
1234 $(INDEX) # tabulation en début de ligne
1235 $(PDF) # tabulation en début de ligne
1236 $(PREVIEW) # tabulation en début de ligne
1239 $(LILYBOOK_HTML) # tabulation en début de ligne
1240 $(HTML) # tabulation en début de ligne
1241 cp -R $(WEBDIR)/$(FILE)/ ./ # tabulation en début de ligne
1242 $(BROWSER) $(FILE)/$(FILE).html & # tabulation en début de ligne
1245 cp $(OUTDIR)/$(FILE).pdf $(FILE).pdf # tabulation en début de ligne
1248 rm -rf $(OUTDIR) # tabulation en début de ligne
1251 rm -rf $(WEBDIR) # tabulation en début de ligne
1254 tar -cvvf monprojet.tar \ # tabulation en début de ligne
1256 --exclude=htmlout/* \
1257 --exclude=monprojet/* \
1264 AVENIR: faire que ça marche sous Windows
1266 Ce @emph{makefile} n'est malheureusement pas opérationnel sous Windows.
1267 La seule alternative qui s'offre aux utilisateurs de Windows consiste à
1268 créer un fichier de traitement par lot (@code{.bat}) qui contienne les
1269 différentes commandes successives. Bien que cette manière de procéder
1270 ne tienne aucun compte des dépendances entre fichiers, elle permet de
1271 réduire le nombre de processus à lancer dans une seule commande. Vous
1272 devrez enregistrer les lignes suivantes dans un fichier
1273 @code{construire.bat} ou @code{construire.cmd}. Ce fichier pourra être
1274 exécuté soit en ligne de commande, soit par un double clic sur son
1278 lilypond-book --output=out --pdf monprojet.lytex
1284 copy out\monprojet.pdf MonProjet.pdf
1289 Manuel d'utilisation :
1290 @rprogram{Setup for MacOS X},
1291 @rprogram{Command-line usage},
1292 @rprogram{LilyPond-book}