1 @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*-
3 Translation of GIT committish: 35dc92475b9341fbbbaf194afcc2c6e2561840ac
5 When revising a translation, copy the HEAD committish of the
6 version that you are working on. See TRANSLATION for details.
11 @c Translators: Ludovic Sardain, Jean-Charles Malahieude
12 @c Translation checkers: Jean-Yves Baudais, Valentin Villenave, John Mandereau, Jean-Charles Malahieude
14 @node Travail sur des projets LilyPond
15 @chapter Travail sur des projets LilyPond
16 @translationof 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 pour la saisie de fichiers LilyPond::
25 * Quand ça ne fonctionne pas::
26 * Conducteurs et parties::
27 * De la commande @command{make} et des fichiers @code{Makefile}::
30 @node Suggestions pour la saisie de fichiers LilyPond
31 @section Suggestions pour la saisie de fichiers LilyPond
32 @translationof Suggestions for writing LilyPond input files
34 Maintenant vous êtes prêt à travailler sur de plus gros fichiers
35 LilyPond -- des pièces entières, et plus seulement les petits
36 exemples du tutoriel. Mais comment devriez-vous vous y prendre ?
38 Tant que LilyPond parvient à comprendre vos fichiers et produit le
39 résultat que vous souhaitez, peu importe la manière dont le code est
40 organisé. Néanmoins, quelques critères doivent être pris en compte
41 lorsque l'on écrit un fichier LilyPond.
44 @item Si vous faites une erreur, la structure même du fichier LilyPond
45 peut permettre de la localiser plus ou moins facilement.
47 @item Et si vous souhaitez partager vos fichiers avec quelqu'un
48 d'autre, ou si vous souhaitez modifier vos propres fichiers dans
49 quelques années ? Si certains fichiers LilyPond sont compréhensibles
50 au premier coup d'oeil, d'autres vous feront vous arracher les cheveux
53 @item Et si vous souhaitez mettre à jour votre fichier pour
54 l'utiliser avec une version plus récente de LilyPond ? La syntaxe du
55 langage d'entrée change parfois lorsque LilyPond s'améliore. La
56 plupart des changements peuvent être appliqués automatiquement avec
57 @code{convert-ly}, mais quelques-uns peuvent requérir une intervention
58 manuelle. Vos fichiers LilyPond peuvent être structurés de manière à
59 faciliter leur mise à jour.
63 * Suggestions générales::
64 * Gravure de musique existante::
65 * Projets d'envergure::
66 * Économie de saisie grâce aux identificateurs et fonctions::
70 @node Suggestions générales
71 @subsection Suggestions générales
72 @translationof General suggestions
74 Voici quelques conseils qui peuvent vous éviter certains problèmes ou
78 @item @strong{Ajoutez le numéro de version dans chaque fichier}.
79 Notez que chaque fichier modèle contient une ligne @w{@code{\version
80 "@version{}"}}. Nous vous conseillons fortement d'inclure cette ligne,
81 même pour de petits fichiers. Par expérience, il est très difficile
82 de se rappeler quelle version de LilyPond on utilisait quelques
83 années auparavant. L'utilitaire @command{convert-ly} demande que vous
84 spécifiiez la version de LilyPond vous utilisiez alors.
86 @item @strong{Ajoutez des contrôles} : @ruser{Vérifications d'octave}
87 et @ruser{Vérification des limites et numéros de mesure}. Si vous avez
88 ajouté des contrôles de loin en loin, et que vous faites une erreur,
89 vous pourrez la retrouver plus rapidement. @qq{De loin en loin},
90 qu'est-ce à dire ? Cela dépend de la complexité de la musique. Pour de
91 la musique très simple, peut-être une ou deux fois. Pour de la musique
92 très complexe, peut-être à chaque mesure.
94 @item @strong{Une mesure par ligne de texte}. Si la musique en
95 elle-même ou le résultat que vous désirez contient quelque chose de
96 compliqué, il est souvent bon de n'écrire qu'une seule mesure par ligne.
97 Économiser de la place en tassant huit mesures par ligne, ça ne vaut pas
98 vraiment le coup si l'on doît corriger vos fichiers.
100 @item @strong{Ajoutez des commentaires}. Utilisez soit des
101 numéros de mesure (assez souvent), soit des références au contenu
102 musical -- @qq{second thème des violons}, @qq{quatrième variation}, etc.
103 Vous pouvez ne pas avoir besoin des commentaires lorsque vous écrivez
104 une pièce pour la première fois, mais si vous souhaitez y revenir deux
105 ou trois ans plus tard pour changer quelque chose, ou si vous donnez
106 le fichier source à un ami, ce sera beaucoup plus difficile de
107 déterminer vos intentions ou la manière dont votre fichier est
108 structuré si vous n'y avez pas adjoint de commentaires.
110 @item @strong{Indentez les accolades}. Beaucoup de problèmes
111 viennent d'un défaut de parité entre @code{@{} et @code{@}}.
113 @item @strong{Mentionnez les durées} au début de chaque section ou
114 variable. Si vous saisissez @code{c4 d e} au début d'une phrase, vous
115 vous épargnerez des problèmes si, plus tard, vous modifiez votre musique.
117 @item @strong{Séparez les affinages de mise en forme} de la musique
119 @ref{Économie de saisie grâce aux identificateurs et fonctions} et
120 @ref{Feuilles de style}.
125 @node Gravure de musique existante
126 @subsection Gravure de musique existante
127 @translationof Typesetting existing music
129 Si vous saisissez de la musique à partir d'une partition existante,
130 c'est-à-dire de la musique déjà écrite,
134 @item n'entrez qu'un seul système de la partition originale
135 à la fois -- mais toujours une seule mesure par ligne de texte --,
136 et vérifiez chaque système lorsqu'il est terminé. Vous pouvez
137 utiliser les commandes @code{showLastLength} et @code{showFirstLength}
138 pour accélérer la compilation -- voir
139 @ruser{Ignorer des passages de la partition} ;
141 @item définissez @code{mBreak = @{\break @}} et insérez
142 @code{\mBreak} dans le fichier d'entrée pour obtenir des sauts de
143 ligne identiques à la partition originale. Cela facilite la
144 comparaison entre la partition originale et la partition de
145 LilyPond. Lorsque vous avez fini de relire votre musique, vous pouvez
146 définir @code{mBreak = @{ @}} pour enlever tous ces sauts de ligne, et
147 laisser LilyPond placer les sauts de ligne selon son propre algorithme.
149 @item encadrez les notes d'une partie pour instrument transpositeur
153 \transpose c @var{tonalité-naturelle} @{...@}
155 (où @var{tonalité-naturelle} correspond à celle de l'instrument en
156 question) de telle sorte que la musique comprise dans cette variable se
157 retrouve en ut. Vous pourrez toujours transposer à l'inverse si besoin
158 lorsque vous ferez appel à cette variable. Des erreurs de transposition
159 seront moins susceptibles de se produire si la musique de toutes les
160 variables est dans la même et unique tonalité.
162 De la même manière, prenez toujours le do comme note de départ ou
163 d'arrivée. Ceci aura pour simple conséquence que les autres tonalités
164 que vous utiliserez seront celles propres à chacun des instruments --
165 sib pour une trompette en si bémol, ou lab pour une clarinette en la bémol.
170 @node Projets d'envergure
171 @subsection Projets d'envergure
172 @translationof Large projects
174 Lorsque l'on travaille sur un gros projet, il devient vital
175 de structurer clairement ses fichiers LilyPond.
179 @item @strong{Utilisez un identificateur pour chaque voix},
180 avec un minimum de structure dans la définition. La structure de la
181 section @code{\score} est la plus susceptible de changer, notamment
182 dans une nouvelle version de LilyPond, alors que la définition du
183 @code{violon} l'est beaucoup moins.
186 violin = \relative c'' @{
199 @item @strong{Séparez les retouches} des définitions de
200 musique. Nous vous avons déjà invité à adopter une telle pratique, qui
201 par ailleurs devient vitale pour des projets d'importance. Nous
202 pouvons avoir besoin de changer la définition de
203 @code{fpuisp}, mais dans ce cas nous n'aurons besoin de le faire
204 qu'une seule fois, et nous pourrons encore éviter de
205 modifier quoi que ce soit à l'intérieur de la définition
210 \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @}
211 violin = \relative c'' @{
219 @node Économie de saisie grâce aux identificateurs et fonctions
220 @subsection Économie de saisie grâce aux identificateurs et fonctions
221 @translationof Saving typing with variables and functions
224 @cindex identificateurs
226 Jusqu'à maintenant, vous avez vu ce type de code :
228 @lilypond[quote,verbatim,ragged-right]
229 hornNotes = \relative c'' { c4 b dis c }
237 Vous comprendrez combien cela peut être utile pour écrire de la
238 musique minimaliste :
240 @lilypond[quote,verbatim,ragged-right]
241 fragmentA = \relative c'' { a4 a8. b16 }
242 fragmentB = \relative c'' { a8. gis16 ees4 }
243 violin = \new Staff { \fragmentA \fragmentA \fragmentB \fragmentA }
251 Néanmoins vous pouvez aussi utiliser ces identificateurs
252 -- aussi connus sous le nom de variables, macros, ou commandes
253 (définies par l'utilisateur) -- pour des retouches :
255 @lilypond[quote,verbatim,ragged-right]
256 dolce = \markup{ \italic \bold dolce }
257 padText = { \once \override TextScript #'padding = #5.0 }
258 fthenp=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p }
259 violin = \relative c'' {
261 c4._\dolce b8 a8 g a b |
263 c4.^"hi there!" d8 e' f g d |
264 c,4.\fthenp b8 c4 c-. |
271 \layout{ragged-right=##t}
275 Ces identificateurs sont évidemment utiles pour économiser de la
276 frappe. Mais ils peuvent l'être même si vous ne les utilisez qu'une
277 seule fois : ils réduisent la complexité. Regardons l'exemple
278 précédent sans aucun identificateur. C'est beaucoup plus laborieux à
279 lire, et particulièrement la dernière ligne.
282 violin = \relative c'' @{
284 c4._\markup@{ \italic \bold dolce @} b8 a8 g a b |
285 \once \override TextScript #'padding = #5.0
286 c4.^"hi there!" d8 e' f g d |
287 c,4.\markup@{ \dynamic f \italic \small @{ 2nd @}
288 \hspace #0.1 \dynamic p @} b8 c4 c-. |
293 @c TODO Replace the following with a better example -td
294 @c Skylining handles this correctly without padText
296 Jusqu'ici nous avons vu des substitutions statiques : quand LilyPond
297 rencontre @code{\padText}, il le remplace par le contenu que nous lui
298 avons défini -- c'est-à-dire le contenu à droite de @code{padText=}.
300 LilyPond gère également des substitutions non-statiques -- vous
301 pouvez les voir comme des fonctions.
303 @lilypond[quote,verbatim,ragged-right]
305 #(define-music-function (parser location padding) (number?)
307 \once \override TextScript #'padding = #$padding
315 c4^"piu mosso" fis a g
319 Utiliser des identificateurs est aussi un bon moyen pour vous épargner
320 du travail si la syntaxe de LilyPond change un jour -- voir
321 @ref{Mise à jour d'anciens fichiers}. Si vous avez une seule
322 définition, par exemple @code{\dolce}, pour tous vos fichiers (voir
323 @ref{Feuilles de style}), et que la syntaxe change, alors vous n'aurez
324 qu'à mettre à jour votre seule définition @code{\dolce}, au lieu de
325 devoir modifier chaque fichier @code{.ly}.
328 @node Feuilles de style
329 @subsection Feuilles de style
330 @translationof Style sheets
332 La sortie que produit LilyPond peut être largement modifiée -- voir
333 @ref{Retouche de partition} pour plus de détails. Mais que faire si
334 vous avez beaucoup de fichiers auxquels vous souhaitez appliquer vos
335 retouches ? Ou si vous souhaitez simplement séparer les retouches de
336 la musique elle-même ? Rien de plus facile.
338 Prenons un exemple. Ne vous inquiétez pas si vous ne comprenez pas
339 les parties avec tous les @code{#()}. Celles-ci sont expliquées dans
340 @ref{Retouches avancées avec Scheme}.
342 @lilypond[quote,verbatim,ragged-right]
343 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
344 #:line(#:dynamic "mp" #:text #:italic "dolce" )))
346 inst = #(define-music-function (parser location string) (string?)
350 'text (markup #:bold (#:box string))))
354 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
356 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
360 Il y a quelques problèmes de chevauchement ; nous allons arranger
361 cela en utilisant les techniques de @ref{Déplacement d'objets}. On peut
362 aussi faire quelque chose pour les définitions de @code{mpdolce}
363 et @code{inst}. Elles produisent le résultat que nous désirons,
364 mais nous pourrions aussi vouloir les utiliser dans une autre pièce.
365 Il suffirait de les copier et coller au début de chaque
366 fichier, mais c'est fastidieux. De plus, cela laisse les définitions
367 dans nos fichiers de musique, et je trouve personnellement tous ces
368 @code{#()} assez laids. Stockons-les dans un autre fichier :
371 %%% enregistrez ceci dans un fichier nommé "definitions.ily"
372 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
373 #:line(#:dynamic "mp" #:text #:italic "dolce" )))
375 inst = #(define-music-function (parser location string) (string?)
379 'text (markup #:bold (#:box string))))
382 Nous rappellerons ce fichier par une simple commande @code{\include} au
383 début de notre fichier de musique. Lui attribuer l'extension
384 @code{.ily} nous permet de distinguer aisément qu'il s'agit d'un fichier
385 voué à être inclus dans un fichier maître ; il n'est pas destiné à être
387 Maintenant, modifions notre musique (enregistrez ce fichier
388 sous @code{musique.ly}).
390 @c We have to do this awkward example/lilypond-non-verbatim
391 @c because we can't do the \include stuff in the manual.
394 \include "definitions.ily"
398 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
400 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
404 @lilypond[quote,ragged-right]
405 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
406 #:line(#:dynamic "mp" #:text #:italic "dolce" )))
408 inst = #(define-music-function (parser location string) (string?)
412 'text (markup #:bold (#:box string))))
416 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
418 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
422 C'est mieux, mais effectuons encore quelques retouches. Le glissando
423 est peu visible, c'est pourquoi nous allons l'épaissir et le
424 rapprocher des têtes de note. Déplaçons l'indication métronomique
425 au-dessus de la clef, au lieu de la laisser au-dessus de la première
426 note. Et pour finir, mon professeur de composition déteste les
427 chiffrages de mesure en @qq{C}, nous allons donc le transformer en
430 Cependant, ne changez pas le fichier @file{musique.ly}. Remplacez le
431 fichier @file{definitions.ily} par ceci :
435 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
436 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
438 inst = #(define-music-function (parser location string) (string?)
442 'text (markup #:bold (#:box string))))
446 \override MetronomeMark #'extra-offset = #'(-9 . 0)
447 \override MetronomeMark #'padding = #'3
450 \override TimeSignature #'style = #'numbered
453 \override Glissando #'thickness = #3
454 \override Glissando #'gap = #0.1
459 @lilypond[quote,ragged-right]
460 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
461 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
463 inst = #(define-music-function (parser location string) (string?)
467 'text (markup #:bold (#:box string))))
471 \override MetronomeMark #'extra-offset = #'(-9 . 0)
472 \override MetronomeMark #'padding = #'3
475 \override TimeSignature #'style = #'numbered
478 \override Glissando #'thickness = #3
479 \override Glissando #'gap = #0.1
485 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
487 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
491 C'est encore mieux ! Mais supposons maintenant que je veuille publier
492 cette pièce. Mon professeur de composition n'aime pas les chiffrages
493 de mesure en @qq{C}, mais moi je les aime bien. Copions l'actuel
494 @file{definitions.ily} dans le fichier @file{publication-web.ily}, et
495 modifions ce dernier. Puisque la musique est destinée à produire un
496 fichier PDF affiché sur écran, nous allons aussi augmenter la taille
501 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
502 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
504 inst = #(define-music-function (parser location string) (string?)
508 'text (markup #:bold (#:box string))))
510 #(set-global-staff-size 23)
513 \override MetronomeMark #'extra-offset = #'(-9 . 0)
514 \override MetronomeMark #'padding = #'3
519 \override Glissando #'thickness = #3
520 \override Glissando #'gap = #0.1
525 @lilypond[quote,ragged-right]
526 mpdolce = #(make-dynamic-script (markup #:hspace 0 #:translate '(5 . 0)
527 #:line( #:dynamic "mp" #:text #:italic "dolce" )))
529 inst = #(define-music-function (parser location string) (string?)
533 'text (markup #:bold (#:box string))))
535 #(set-global-staff-size 23)
538 \override MetronomeMark #'extra-offset = #'(-9 . 0)
539 \override MetronomeMark #'padding = #'3
542 \override Glissando #'thickness = #3
543 \override Glissando #'gap = #0.1
549 a4.\mpdolce d8 cis4--\glissando a | b4 bes a2
551 cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2
555 Il ne nous reste plus qu'à remplacer @code{\include "definitions.ily"}
556 par @code{\include "publication-web.ily"} dans notre fichier de musique.
558 Il est possible, bien sûr, de rendre cela encore plus pratique. Nous
559 pourrions créer un fichier @file{definitions.ily} qui ne contiendrait
560 que les définitions de @code{mpdolce} et de @code{inst}, un
561 fichier @file{publication-web.ily} qui ne contiendrait que la section
562 @code{layout} décrite ci-dessus et un fichier @file{universite.ily} qui
563 ne contiendrait que les retouches pour produire le résultat que mon
564 professeur préfère. Le début du fichier @file{musique.ly} ressemblerait
568 \include "definitions.ily"
570 %%% Décommentez seulement une de ces deux lignes !
571 \include "publication-web.ily"
572 %\include "universite.ily"
575 Cette approche peut être utile même si vous ne produisez qu'un seul
576 jeu de partitions. J'utilise personnellement une demi-douzaine de
577 fichiers de @qq{feuille de style} pour mes projets. Je commence
578 chaque fichier de musique par @code{\include "../global.ily"} qui contient :
582 \version @w{"@version{}"}
583 #(ly:set-option 'point-and-click #f)
584 \include "../init/init-defs.ly"
585 \include "../init/init-mise-en-page.ly"
586 \include "../init/init-en-tetes.ly"
587 \include "../init/init-papier.ly"
590 @node Quand ça ne fonctionne pas
591 @section Quand ça ne fonctionne pas
592 @translationof When things don't work
595 * Mise à jour d'anciens fichiers::
596 * Résolution de problèmes -- tout remettre à plat::
597 * Exemples minimalistes::
600 @node Mise à jour d'anciens fichiers
601 @subsection Mise à jour d'anciens fichiers
602 @translationof Updating old input files
605 @cindex mise à jour d'anciens fichiers
607 La syntaxe de LilyPond change de temps en temps. Ces changements de
608 syntaxe du langage d'entrée accompagnent les améliorations du
609 logiciel. Ces changements sont parfois destinés à rendre les fichiers
610 plus faciles à lire et à écrire, ou permettent d'intégrer de nouvelles
613 LilyPond est fourni avec un utilitaire qui facilite cette mise à
614 jour : @command{convert-ly}. Pour savoir comment utiliser ce programme,
615 voir @rprogram{Mise à jour des fichiers avec convert-ly}.
617 Malheureusement, @command{convert-ly} ne peut pas réaliser toutes les
618 modifications. Il s'occupe des changements qui ne requièrent qu'une
619 simple substitution de texte -- comme @code{raggedright} devenant
620 @code{ragged-right} --, les autres étant trop compliqués à effectuer.
621 Les changements de syntaxe qui ne sont pas gérés par
622 @command{convert-ly} sont énumérés dans
623 @rprogram{Mise à jour des fichiers avec convert-ly}.
625 Par exemple, dans les versions 2.4 et antérieures de LilyPond,
626 les accents et les lettres non anglaises étaient entrées en
627 utilisant LaTeX -- par exemple, @code{No\"el}. À partir de la
628 version 2.6, le caratère @code{ë} doit être entré directement
629 dans le fichier LilyPond comme caractère UTF-8.
630 @code{convert-ly} ne peut pas changer tous les caractères
631 LaTeX en caractères UTF-8 ; vous devez mettre à jour vos vieux
632 fichiers LilyPond manuellement.
636 @node Quelques erreurs des plus courantes
637 @subsection Quelques erreurs des plus courantes
638 @translationof Common errors
640 Les conditions amenant aux erreurs qui suivent sont fréquentes, bien
641 qu'elles ne soient pas évidentes ni facilement localisables. Nous
642 espérons que ces explications vous aideront à les résoudre plus
647 * La musique déborde de la page::
648 * Apparition d'une portée supplémentaire::
649 * Erreur renvoyant à ../ly/init.ly::
650 * Message d'erreur « Unbound variable % »::
653 @node La musique déborde de la page
654 @unnumberedsubsubsec La musique déborde de la page
655 @translationof Music runs off the page
657 Lorsque la musique s'épanche au delà de la marge droite ou bien semble
658 anormalement comprimée, la raison en est le plus souvent une note à la
659 durée erronée ; cela finit par provoquer le débordement de la dernière
660 note d'une mesure. Rien ne s'oppose à ce que la dernière note d'une
661 mesure ne s'arrête avant la barre de mesure ; on considère simplement
662 qu'elle se prolonge sur la mesure suivante. Des débordements à
663 répétition finissent par générer une musique comprimée ou qui sort de la
664 page, pour la simple et bonne raison que les sauts de ligne automatiques
665 ne peuvent intervenir qu'à la fin d'une mesure complète, autrement dit
666 lorsque toutes les notes sont terminées avant la fin de la mesure.
668 @warning{Une durée erronée peut empêcher les sauts de ligne, ce qui
669 conduit à une musique compressée, voire à un débordement de la page.}
671 Une erreur de durée sera bien plus facilement localisable si vous
672 positionnez régulièrement des contrôles de barre de mesure -- voir
673 @ruser{Vérification des limites et numéros de mesure}.
675 Si vous tenez absolument à enchainer de tels débordements, vous devrez
676 insérer des barres de mesure invisibles là où vous souhaitez positionner
677 un saut de ligne. Consultez le chapitre @ruser{Barres de mesure} pour
681 @node Apparition d'une portée supplémentaire
682 @unnumberedsubsubsec Apparition d'une portée supplémentaire
683 @translationof An extra staff appears
685 Lorsque les contextes ne sont pas créés explicitement par la commande
686 @code{\new}, ils le seront si la commande à exécuter n'est pas censée
687 s'appliquer au contexte en cours. Pour des partitions simples, les fait
688 que les contextes soient automatiquement créés rend bien des services,
689 et c'est d'ailleurs le cas pour la majorité des exemples contenus dans
690 les manuels de LilyPond. Cependant, la création implicite d'un contexte
691 peut aboutir à l'apparition d'une portée @qq{parasite}. On s'attend par
692 exemple, en lisant le code qui suit, à ce que toutes les têtes de notes
693 soient en rouge, alors que le résultat nous présente deux portées et que
694 les notes, placées sur la portée inférieure, restent en noir.
696 @lilypond[quote,verbatim,relative=2]
697 \override Staff.NoteHead #'color = #red
701 Étant donné qu'aucun contexte @code{Staff} n'existe lorsque la
702 dérogation est introduite, LilyPond le crée implicitement pour lui
703 appliquer la directive considérée. Survient alors la commande
704 @w{@code{\new Staff}} qui, à son tour, crée une nouvelle portée pour
705 contenir les notes qui suivent. Voici la syntaxe correcte pour obtenir
708 @lilypond[quote,verbatim,relative=2]
710 \override Staff.NoteHead #'color = #red
715 Autre exemple : la présence d'une commande @code{\relative} à
716 l'intérieur d'une section @code{\repeat} génèrera obligatoirement une
717 portée intempestive. Cela tient au fait que la commande @code{\repeat}
718 va créer deux blocs @code{\relative} qui, chacun à leur tour, créeront
719 implicitement un bloc @code{Staff} assorti d'un bloc @code{Voice}.
721 @lilypond[quote,verbatim]
722 \repeat unfold 2 \relative { c d e f }
725 La manière adéquate de procéder consiste à inverser les commandes
726 @code{\repeat} et @code{\relative}, comme ceci :
728 @lilypond[quote,verbatim]
730 \repeat unfold 2 { c d e f }
735 @node Erreur renvoyant à ../ly/init.ly
736 @unnumberedsubsubsec Erreur renvoyant à @code{../ly/init.ly}
737 @translationof Apparent error in ../ly/init.ly
739 Certains messages d'erreur relatifs à une erreur de syntaxe dans le
740 fichier @code{../ly/init.ly} peuvent survenir lorsque le fichier est mal
741 formaté. Cela se produit notamment lors d'un défaut de parité de
742 bornages ou de guillemets.
744 L'erreur la plus courante est la simple omission d'une accolade
745 fermante (@code{@}} à la fin du bloc @code{Score}. La solution est
746 évidente en pareil cas : il suffit de vérifier que le bloc @code{Score}
747 est bien clôturé. La structure des fichiers LilyPond est abordée plus
748 en détails au chapitre @ref{Organisation des fichiers LilyPond}. C'est la
749 raison pour laquelle nous vous invitons à utiliser un éditeur de texte
750 qui prenne en charge le contrôle de parité des parenthèses, crochets et
751 accolades afin de vous éviter de telles erreurs.
753 Lorsqu'il s'agit d'un guillemet fermant (@code{"}) omis, le message
754 d'erreur devrait vous indiquer un numéro de ligne avoisinant. L'erreur
755 se situe la plupart du temps une ou deux lignes au-dessus de celle
759 @node Message d'erreur « Unbound variable % »
760 @unnumberedsubsubsec Message d'erreur « Unbound variable % »
761 @translationof Error message Unbound variable %
763 Ce message d'erreur, qu'il apparaisse sur le terminal ou en fin de
764 fichier journal, est associé à un message du type @qq{GUILE a signalé
765 une erreur @dots{}}, survient à chaque fois qu'un commentaire
766 @emph{LilyPond} est indûment placé dans une routine @emph{Scheme}.
768 Un commentaire LilyPond est introduit par le signe pourcent (@code{%})
769 et ne doit en aucun cas se trouver dans une routine Scheme. En Scheme,
770 les commentaires s'introduisent par un point-virgule (@code{;}).
773 @node Résolution de problèmes -- tout remettre à plat
774 @subsection Résolution de problèmes -- tout remettre à plat
775 @translationof Troubleshooting (taking it all apart)
777 Tôt ou tard, vous écrirez un fichier que LilyPond ne peut pas
778 compiler. Les messages que LilyPond affiche peuvent vous aider à
779 trouver l'erreur, mais dans beaucoup de cas vous aurez besoin de faire
780 quelques recherches pour déterminer la source du problème.
782 Pour ce faire, les outils les plus puissants sont le commentaire de
783 fin de ligne, indiqué par @code{%}, et le commentaire multilignes (ou
784 bloc de commentaire), indiqué par @code{%@{ ... %@}}. Si vous ne
785 pouvez localiser le problème, commencez par mettre en commentaire de
786 grandes parties de votre fichier source. Après avoir mis en
787 commentaire une section, essayez de compiler à nouveau. Si cela
788 fonctionne, c'est que le problème se situe dans cette partie du
789 fichier. Si cela ne fonctionne pas, continuez à mettre en commentaire
790 d'autres sections, jusqu'à ce que vous ayez quelque chose qui compile.
792 Dans un cas extrême, vous pourriez en arriver à
806 c'est-à-dire un fichier sans aucune musique.
808 Si cela se produit, ne vous découragez pas. Décommentez un peu, la
809 partie de basse par exemple, et voyez si ça fonctionne. Si ce n'est pas
810 le cas, placez en commentaire toute la partie de basse, mais laissez
811 @code{\basse} décommenté dans le bloc @code{\score}.
814 basse = \relative c' @{
822 Maintenant commencez à décommenter petit à petit le partie de
823 @code{basse} jusqu'à ce que vous localisiez la ligne qui pose
826 Une autre technique de déboguage très utile est la construction
827 d'@ref{Exemples minimalistes}.
830 @node Exemples minimalistes
831 @subsection Exemples minimalistes
832 @translationof Minimal examples
834 Un exemple minimal est un exemple de code aussi court que possible.
835 De tels exemples sont bien plus compréhensibles que des exemples
836 longs. Les exemples minimalises sont utilisés pour
839 @item les rapports de bogue,
840 @item les demandes d'aide sur les listes de diffusion,
842 @uref{http://lsr.dsi.unimi.it/,LilyPond Snippet Repository}.
845 Pour construire un exemple minimal, la règle est très simple : enlevez
846 tout ce qui n'est pas nécessaire. Il est préférable de commenter les
847 lignes non nécessaires plutôt que de les effacer : ainsi, si vous vous
848 apercevez que certaines étaient @emph{réellement} nécessaires, vous
849 pouvez les décommenter au lieu de les resaisir.
851 Il y a deux exceptions à cette règle du strict nécessaire :
854 @item incluez le numéro de @code{\version} en début de fichier
855 @item si possible, utilisez @code{\paper@{ ragged-right=##t @}} au
856 début de votre exemple.
859 Tout l'intérêt d'un exemple minimal réside dans sa facilité de lecture :
862 @item évitez d'utiliser des notes, armures ou métriques compliquées, à
863 moins que vous ne vouliez montrer quelque chose en rapport avec
865 @item n'utilisez pas de commandes @code{\override} sauf si elles font
866 l'intérêt de l'exemple.
870 @node Conducteurs et parties
871 @section Conducteurs et parties
872 @translationof Scores and parts
874 Dans la musique d'orchestre, toutes les notes sont imprimées deux fois.
875 D'abord dans les parties séparées destinées aux musiciens, et ensuite
876 dans le conducteur destiné au chef. Les variables sont là pour vous
877 éviter un double travail. La musique n'est entrée qu'une seule fois, et
878 stockée dans une variable, dont le contenu servira à imprimer à la fois
879 la partie séparée et la partition d'orchestre.
881 Il est judicieux de définir les notes dans un fichier séparé. Par
882 exemple, supposons que le fichier @code{musique-Cor.ly} contienne la
883 partie suivante pour un duo cor/@/basson.
886 notesCor = \relative c @{
893 On établira alors une partie séparée en constituant un nouveau fichier :
896 \include "musique-Cor.ly"
898 instrument = "Cor en Fa"
902 \transpose f c' \notesCor
909 \include "musique-Cor.ly"
913 sera substitué le contenu du fichier @code{musique-Cor.ly}, et de ce
914 fait la variable @code{notesCor} se trouvera définie. La commande
915 @w{@code{\transpose f c'}} indique que son argument @code{\notesCor}
916 sera transposé à la quinte supérieure : le son réel @code{f} s'écrit
917 @code{c'}, ce qui est la caractéristique d'un Cor en fa. La
918 transposition est visible comme suit :
920 @lilypond[quote,ragged-right]
921 \transpose f c' \relative c {
927 Dans les pièces d'ensemble, il arrive souvent qu'une voix ne joue pas
928 pendant plusieurs mesures. Un silence spécial, appelé silence
929 multimesures, l'indique alors. On l'obtient par un @code{R} majuscule,
930 suivi d'une durée : @code{1}@tie{}pour une pause, @code{2}@tie{}pour une
931 demi-pause, etc. Cette durée peut être multipliée pour établir de plus
932 longs silences. Par exemple, le silence suivant dure 3@tie{}mesures à 2/4.
938 Dans une partie séparée, les silences multimesure sont compressés.
939 Il faut pour cela définir la propriété @code{skipBars} à @qq{vrai} :
942 \set Score.skipBars = ##t
946 Cette commande assigne la valeur @qq{vrai} -- @emph{true} en anglais, et
947 @code{#t} dans le langage Scheme -- à cette propriété dans le
948 contexte @code{Score}. Si l'on ajoute dans la musique ci-dessus le
949 silence multimesure et cette option, on obtient le résultat suivant :
951 @lilypond[quote,ragged-right]
952 \transpose f c' \relative c {
954 \set Score.skipBars = ##t
960 Le conducteur rassemble toute la musique. Si l'on suppose que l'autre
961 voix de notre duo se trouve dans le fichier @code{musique-Basson.ly} en
962 tant que variable @code{notesBasson}, on établira un conducteur avec
965 \include "musique-Basson.ly"
966 \include "musique-Cor.ly"
970 \new Staff \notesBasson
977 @lilypond[quote,ragged-right]
985 r4 d,8 f | gis4 c | b bes |
986 a8 e f4 | g d | gis f
991 Des informations plus détaillées sur la mise en place de conducteurs
992 et de parties séparées se trouvent dans le manuel de notation : voir
993 @ruser{Écriture de parties séparées}.
995 Les variables (@qq{propriétés}) réglables sont abordées en détail dans
996 @ruser{La commande de fixation (set)}.
1000 @node De la commande @command{make} et des fichiers @code{Makefile}
1001 @section De la commande @command{make} et des fichiers @code{Makefile}
1002 @translationof Make and Makefiles
1007 La plupart des plates-formes sur lesquelles tourne LilyPond disposent
1008 d'un logiciel appelé @code{make}. Ce logiciel va lire un fichier
1009 spécial, nommé de @code{Makefile}, qui contient tout ce qu'il
1010 faut -- les dépendances entre certains fichiers, les instructions
1011 successives à traiter par le système -- pour aboutir au fichier que
1012 vous désirez obtenir. Il pourrait par exemple contenir tout ce qu'il
1013 faut pour produire @code{ballade.pdf} et @code{ballade.midi} à partir de
1014 @code{ballade.ly} en lançant LilyPond.
1016 La création d'un @code{Makefile} peut se révéler pertinente pour
1017 certains projets, que ce soit par simple goût personnel ou bien par
1018 respect de ceux qui pourront accéder à vos sources. Cette manière de
1019 procéder est particulièrement indiquée lorsque vous travaillez sur un
1020 projet de grande envergure impliquant de nombreuses inclusions de
1021 fichiers et différentes éditions -- par exemple un conducteur et un
1022 matériel d'orchestre complet avec la partition pour le chef et une
1023 partition séparée pour chacun des pupitres -- ou bien si votre projet
1024 requiert certaines commandes particulières comme @code{lilypond-book}.
1025 Les @emph{Makefiles} varient tant en complexité qu'en flexibilité selon
1026 les besoin et les aptitudes de celui qui les crée. Le programme GNU Make
1027 est installé par défaut sur les distributions Linux et sur MacOS@tie{}X,
1028 et il en existe une version pour les environnements Windows.
1030 Consultez le @strong{GNU Make Manual} pour plus de détails sur ce dont
1031 @code{make} est capable -- vous pourrez même en trouver des versions
1032 françaises à l'aide des moteurs de recherche --, dans la mesure où ce
1033 qui suit ne donne qu'un bref apperçu de ses possibilités.
1035 Les commandes permettant de définir les règles diffèrent selon la
1036 plate-forme : si les différents Linux et MacOS@tie{}X utilisent
1037 @code{bash}, Windows utilise @code{cmd}. Dans le cas de MacOS@tie{}X,
1038 vous devrez toutefois configurer votre système de telle sorte qu'il
1039 utilise l'interpréteur en ligne de commande. Voici quelques exemples de
1040 fichier @emph{Makefile}, avec une version pour Linux ou MacOS et une
1043 Pour commencer, une pièce à quatre mouvements pour orchestre et dont les
1044 fichiers sont répartis selon l'arborescence suivante :
1056 | |-- trioCordes.ily
1062 | |-- symphonieII.ly
1063 | |-- symphonieIII.ly
1064 | `-- symphonieIV.ly
1067 | |-- symphon-alto.ly
1068 | |-- symphonie-cello.ly
1069 | |-- symphonie-cor.ly
1070 | |-- symphonie-hautbois.ly
1071 | |-- symphonie-violonUn.ly
1072 | `-- symphonie-violonDeux.ly
1073 `-- symphonieDefs.ily
1076 Les fichiers @code{.ly} des répertoires @code{Partitions} et
1077 @code{Pupitres} récupèreront la notation des fichiers @code{.ily}
1078 contenus dans le répertoire @code{Notes} :
1081 %%% début du fichier "symphone-cello.ly"
1082 \include ../symphonieDefs.ily
1083 \include ../Notes/cello.ily
1086 Le @emph{Makefile} répertorie des cibles correspondant à @code{score}
1087 (l'intégrale au format conducteur), @code{mouvements} (chacun des
1088 mouvements au format conducteur) et @code{pupitres} (une partition par
1089 pupitre). Il contient aussi une cible @code{archive} chargée de générer
1090 une archive des fichiers source qui pourra être diffusée sur la toile ou
1091 transmise par courriel. Voici ce que contiendrait ce @emph{Makefile}
1092 pour Linux ou MacOS@tie{}X. Ce fichier doit être enregistré sous le nom
1093 de @code{Makefile} à la racine du projet -- ici @code{Symphonie}.
1095 @warning{Lorsque vous définissez une cible ou une règle sur plusieurs
1096 lignes, les lignes à partir de la deuxième @strong{doivent} débuter par
1097 une tabulation, non pas par des espaces.}
1100 # Le préfixe au nom des fichiers résultants
1102 # Détermination du nombre de processeurs
1103 CPU_CORES=`cat /proc/cpuinfo | grep -m1 "cpu cores" | sed s/".*: "//`
1104 # La commande d'appel à lilypond
1105 LILY_CMD = lilypond -ddelete-intermediate-files \
1106 -dno-point-and-click -djob-count=$(CPU_CORES)
1108 # Les suffixes utilisés dans ce Makefile
1109 .SUFFIXES: .ly .ily .pdf .midi
1111 # Les fichiers sources et résultants sont recherchés dans les répertoires
1112 # listés dans la variable VPATH. Ceux-ci sont tous des sous-répertoires
1113 # du répertoire courant (fourni par la variable de GNU make `CURDIR').
1115 $(CURDIR)/Partitions \
1117 $(CURDIR)/Pupitres \
1120 # La règle type pour créer un PDF et un MIDI à partir d'un fichier
1122 # Les .pdf résultants iront dans le sous-répertoire "PDF" et les fichiers
1123 # .midi dans le sous-répertoire "MIDI".
1125 $(LILY_CMD) $<; \ # cette ligne commence par une tabulation
1126 if test -f "$*.pdf"; then \
1129 if test -f "$*.midi"; then \
1130 mv "$*.midi" MIDI/; \
1141 # Les dépendances selon le mouvement.
1142 $(piece)I.pdf: $(piece)I.ly $(notes)
1143 $(piece)II.pdf: $(piece)II.ly $(notes)
1144 $(piece)III.pdf: $(piece)III.ly $(notes)
1145 $(piece)IV.pdf: $(piece)IV.ly $(notes)
1147 # Les dépendances pour la partition intégrale.
1148 $(piece).pdf: $(piece).ly $(notes)
1150 # Les dépendances pour les pupitres.
1151 $(piece)-alto.pdf: $(piece)-alto.ly alto.ily
1152 $(piece)-cello.pdf: $(piece)-cello.ly cello.ily
1153 $(piece)-cor.pdf: $(piece)-cor.ly cor.ily
1154 $(piece)-hautbois.pdf: $(piece)-hautbois.ly hautbois.ily
1155 $(piece)-violonUn.pdf: $(piece)-violonUn.ly violonUn.ily
1156 $(piece)-violonDeux.pdf: $(piece)-violonDeux.ly violonDeux.ily
1158 # Lancer `make score' pour générer l'intégrale des quatre mouvements en
1163 # Lancer `make parties' pour obtenir tous les pupitres.
1164 # Lancer `make toto.pdf' pour obtenir la partie instrumentale de toto.
1165 # Par exemple : `make symphonie-cello.pdf'.
1167 parties: $(piece)-cello.pdf \
1168 $(piece)-violonUn.pdf \
1169 $(piece)-violonDeux.pdf \
1171 $(piece)-hautbois.pdf \
1174 # Lancer `make mouvements' pour générer un fichier séparé pour chacun
1177 mouvements: $(piece)I.pdf \
1182 all: score parties mouvements
1185 tar -cvvf symphonie.tar \ # cette ligne commence par une tabulation
1186 --exclude=*pdf --exclude=*~ \
1187 --exclude=*midi --exclude=*.tar \
1192 Les choses se compliquent sous Windows. Une fois GNU Make pour Windows
1193 téléchargé et installé, il vous faudra correctement définir le chemin
1194 d'accès au programme @emph{Make} -- dans les variables d'environnement
1195 du système -- afin que l'interpréteur de commandes DOS puisse le
1196 localiser. Pour cela, faites un clic droite sur @qq{Poste de travail},
1197 choisissez @code{Propriétés} puis @code{Avancées}. Cliquez sur
1198 @code{Variables d'environnement} puis, dans l'onglet @w{@code{Variables
1199 système}}, mettez @code{path} en surbrillance et cliquez sur
1200 @code{Modifier}. Ajoutez alors le chemin d'accès complet à l'exécutable
1201 de GNU Make, qui devrait ressembler à :
1204 C:\Program Files\GnuWin32\bin
1207 Il va également falloir adapter le @emph{makefile} aux particularités de
1208 l'interpréteur de commandes et à la présence d'espaces dans le nom de
1209 certains répertoire de ce système.
1210 La cible @code{archive} est tout bonnement supprimée, puisque Windows ne
1211 dispose pas de la commande @code{tar}. Enfin, les fichiers MIDI ont une
1212 extension par défaut propre à Windows.
1216 ## VERSION POUR WINDOWS
1219 LILY_CMD = lilypond -ddelete-intermediate-files \
1220 -dno-point-and-click \
1221 -djob-count=$(NUMBER_OF_PROCESSORS)
1223 #get the 8.3 name of CURDIR (workaround for spaces in PATH)
1224 workdir = $(shell for /f "tokens=*" %%b in ("$(CURDIR)") \
1227 .SUFFIXES: .ly .ily .pdf .mid
1230 $(workdir)/Partitions \
1232 $(workdir)/Pupitress \
1236 $(LILY_CMD) $< # cette ligne commence par une tabulation
1237 if exist "$*.pdf" move /Y "$*.pdf" PDF/ # tabulation au début
1238 if exist "$*.mid" move /Y "$*.mid" MIDI/ # tabulation au début
1250 $(piece)I.pdf: $(piece)I.ly $(notes)
1251 $(piece)II.pdf: $(piece)II.ly $(notes)
1252 $(piece)III.pdf: $(piece)III.ly $(notes)
1253 $(piece)IV.pdf: $(piece)IV.ly $(notes)
1255 $(piece).pdf: $(piece).ly $(notes)
1257 $(piece)-cello.pdf: $(piece)-cello.ly cello.ily
1258 $(piece)-cor.pdf: $(piece)-cor.ly cor.ily
1259 $(piece)-hautbois.pdf: $(piece)-hautbois.ly hautbois.ily
1260 $(piece)-alto.pdf: $(piece)-alto.ly alto.ily
1261 $(piece)-violonUn.pdf: $(piece)-violonUn.ly violonUn.ily
1262 $(piece)-violonDeux.pdf: $(piece)-violonDeux.ly violonDeux.ily
1268 parties: $(piece)-cello.pdf \
1269 $(piece)-violonUn.pdf \
1270 $(piece)-violonDeux.pdf \
1272 $(piece)-hautbois.pdf \
1276 mouvements: $(piece)I.pdf \
1281 all: score parties mouvements
1285 Le @emph{Makefile} suivant convient pour un document
1286 @command{lilypond-book} réalisé avec @LaTeX{}. Ce projet contiendra un
1287 index, ce qui nécessitera de lancer une deuxième fois @command{latex}
1288 pour mettre à jour les liens. Les fichiers résultants iront dans le
1289 répertoire @code{out} pour ce qui est des .pdf et dans le répertoire
1290 @code{htmlout} pour ce qui est du html.
1299 LILYBOOK_PDF=lilypond-book --output=$(OUTDIR) --pdf $(FILE).lytex
1300 LILYBOOK_HTML=lilypond-book --output=$(WEBDIR) $(FILE).lytex
1301 PDF=cd $(OUTDIR) && pdflatex $(FILE)
1302 HTML=cd $(WEBDIR) && latex2html $(FILE)
1303 INDEX=cd $(OUTDIR) && makeindex $(FILE)
1304 PREVIEW=$(VIEWER) $(OUTDIR)/$(FILE).pdf &
1309 $(LILYBOOK_PDF) # tabulation en début de ligne
1310 $(PDF) # tabulation en début de ligne
1311 $(INDEX) # tabulation en début de ligne
1312 $(PDF) # tabulation en début de ligne
1313 $(PREVIEW) # tabulation en début de ligne
1316 $(LILYBOOK_HTML) # tabulation en début de ligne
1317 $(HTML) # tabulation en début de ligne
1318 cp -R $(WEBDIR)/$(FILE)/ ./ # tabulation en début de ligne
1319 $(BROWSER) $(FILE)/$(FILE).html & # tabulation en début de ligne
1322 cp $(OUTDIR)/$(FILE).pdf $(FILE).pdf # tabulation en début de ligne
1325 rm -rf $(OUTDIR) # tabulation en début de ligne
1328 rm -rf $(WEBDIR) # tabulation en début de ligne
1331 tar -cvvf monprojet.tar \ # tabulation en début de ligne
1333 --exclude=htmlout/* \
1334 --exclude=monprojet/* \
1341 AVENIR: faire que ça marche sous Windows
1343 Ce @emph{makefile} n'est malheureusement pas opérationnel sous Windows.
1344 La seule alternative qui s'offre aux utilisateurs de Windows consiste à
1345 créer un fichier de traitement par lot (@code{.bat}) qui contienne les
1346 différentes commandes successives. Bien que cette manière de procéder
1347 ne tienne aucun compte des dépendances entre fichiers, elle permet de
1348 réduire le nombre de processus à lancer dans une seule commande. Vous
1349 devrez enregistrer les lignes suivantes dans un fichier
1350 @code{construire.bat} ou @code{construire.cmd}. Ce fichier pourra être
1351 exécuté soit en ligne de commande, soit par un double clic sur son
1355 lilypond-book --output=out --pdf monprojet.lytex
1361 copy out\monprojet.pdf MonProjet.pdf
1366 Manuel d'utilisation :
1367 @rprogram{Spécificités pour MacOS X},
1368 @rprogram{Utilisation en ligne de commande},
1369 @rprogram{LilyPond-book}