X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=Documentation%2Ffr%2Fuser%2Fworking.itely;h=7086f337b4cb28f473798caae59ff1836b45bd4c;hb=edf17353d89f4f6bd831466262402bb9151a26ca;hp=f3e00af868664006092e6c51182ba6d377fd902c;hpb=87eedcd59f4082cb0841528ad5bc82cb1d1191e3;p=lilypond.git diff --git a/Documentation/fr/user/working.itely b/Documentation/fr/user/working.itely index f3e00af868..7086f337b4 100644 --- a/Documentation/fr/user/working.itely +++ b/Documentation/fr/user/working.itely @@ -1,66 +1,817 @@ @c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- @c This file is part of lilypond.tely @ignore - Translation of GIT committish: 64f0d86a7c0987b311bfdfdfeddfa063e1f2d6e7 + Translation of GIT committish: bfbaf6488d99ab4cdfcb4efdc67eaca63a636106 - When revising a translation, copy the HEAD committish of the - version that you are working on. See TRANSLATION for details. + When revising a translation, copy the HEAD committish of the + version that you are working on. See TRANSLATION for details. @end ignore +@c \version "2.11.51" + +@c Translators: Ludovic Sardain +@c Translation checkers: Jean-Yves Baudais, Valentin Villenave, John Mandereau, Jean-Charles Malahieude + @node Working on LilyPond projects @chapter Working on LilyPond projects -UNTRANSLATED NODE: IGNORE ME +Cette section explique comment résoudre ou éviter certains problèmes +courants. Si vous avez de l'expérience en programmation, beaucoup de +ces astuces peuvent vous paraître évidentes, mais vous ne perdrez tout +de même pas votre temps à lire ce chapitre. + +@menu +* Suggestions for writing LilyPond files:: +* When things don't work:: +* Scores and parts:: +@end menu -@menu -* Suggestions for writing LilyPond files:: -* Saving typing with identifiers and functions:: -* Style sheets:: -* Updating old files:: -* Troubleshooting (taking it all apart):: -@end menu @node Suggestions for writing LilyPond files @section Suggestions for writing LilyPond files -UNTRANSLATED NODE: IGNORE ME +Maintenant vous êtes prêt à travailler sur de plus gros fichiers +LilyPond --- des pièces entières, et plus seulement les petits +exemples du tutoriel. Mais comment devriez-vous vous y prendre ? + +Tant que LilyPond parvient à comprendre vos fichiers et produit le +résultat que vous souhaitez, peu importe la manière dont le code est +organisé. Néanmoins, quelques critères doivent être pris en compte +lorsque l'on écrit un fichier LilyPond. + +@itemize @bullet +@item Si vous faites une erreur, la structure même du fichier LilyPond +peut permettre de la localiser plus ou moins facilement. + +@item Et si vous souhaitez partager vos fichiers avec quelqu'un +d'autre, ou si vous souhaitez modifier vos propres fichiers dans +quelques années ? Si certains fichiers LilyPond sont compréhensibles +au premier coup d'oeil, d'autres vous feront vous arracher les cheveux +pendant une heure. + +@item Et si vous souhaitez mettre à jour votre fichier pour +l'utiliser avec une version plus récente de LilyPond ? La syntaxe du +langage d'entrée change parfois lorsque LilyPond s'améliore. La +plupart des changements peuvent être appliqués automatiquement avec +@code{convert-ly}, mais quelques-uns peuvent requérir une intervention +manuelle. Vos fichiers LilyPond peuvent être structurés de manière à +faciliter leur mise à jour. +@end itemize + +@menu +* General suggestions:: +* Typesetting existing music:: +* Large projects:: +* Saving typing with variables and functions:: +* Style sheets:: +@end menu -@menu -* General suggestions:: -* Typesetting existing music:: -* Large projects:: -@end menu @node General suggestions @subsection General suggestions -UNTRANSLATED NODE: IGNORE ME +Voici quelques conseils qui peuvent vous éviter certains problèmes ou +en résoudre d'autres. + +@itemize +@item @strong{Ajoutez le numéro de version dans chaque fichier}. +Notez que chaque fichier modèle contient une ligne @code{\version +"2.11.32"}. Nous vous conseillons fortement d'inclure cette ligne, +même pour de petits fichiers. Par expérience, il est très difficile +de se rappeler quelle version de LilyPond on utilisait quelques +années auparavant. L'utilitaire @command{convert-ly} demande que vous +spécifiiez la version de LilyPond vous utilisiez alors. + +@item @strong{Ajoutez des contrôles}: @ruser{Bar check}, @ruser{Octave +check} et @ruser{Barnumber check}. Si vous avez ajouté des contrôles de +loin en loin, et que vous faites une erreur, vous pourrez la retrouver +plus rapidement. @qq{De loin en loin}, qu'est-ce à dire ? Cela +dépend de la complexité de la musique. Pour de la musique très +simple, peut-être une ou deux fois. Pour de la musique très complexe, +peut-être à chaque mesure. + +@item @strong{Une mesure par ligne de texte}. Si la musique en elle-même ou +le résultat que vous désirez contient quelque chose de compliqué, il +est souvent bon de n'écrire qu'une seule mesure par ligne. Économiser +de la place en tassant huit mesures par ligne, ça ne vaut pas vraiment +le coup si l'on doît corriger vos fichiers. + +@item @strong{Ajoutez des commentaires}. Utilisez soit des +numéros de mesure (assez souvent), soit des références au contenu +musical --- @qq{second thème des violons}, @qq{quatrième variation}, etc. +Vous pouvez ne pas avoir besoin des commentaires lorsque vous écrivez +une pièce pour la première fois, mais si vous souhaitez y revenir deux +ou trois ans plus tard pour changer quelque chose, ou si vous donnez +le fichier source à un ami, ce sera beaucoup plus difficile de +déterminer vos intentions ou la manière dont votre fichier est +structuré si vous n'y avez pas adjoint de commentaires. + +@item @strong{Indentez les accolades}. Beaucoup de problèmes +viennent d'un défaut de parité entre @code{@{} et @code{@}}. + +@item @strong{Séparez les affinages de mise en forme} de la musique +elle-même. Voyez @ref{Saving typing with variables and functions} et +@ref{Style sheets}. + +@end itemize + @node Typesetting existing music @subsection Typesetting existing music -UNTRANSLATED NODE: IGNORE ME +Si vous saisissez de la musique à partir d'une partition existante, +c'est-à-dire de la musique déjà écrite, + +@itemize @bullet + +@item n'entrez qu'un seul système de la partition originale +à la fois --- mais toujours une seule mesure par ligne de texte ---, +et vérifiez chaque système lorsqu'il est terminé. Vous pouvez +utiliser la commande @code{showLastLength} pour accélérer la +compilation --- voir @ruser{Skipping corrected music} ; + +@item définissez @code{mBreak = @{\break @}} et insérez +@code{\mBreak} dans le fichier d'entrée pour obtenir des sauts de +ligne identiques à la partition originale. Cela facilite la +comparaison entre la partition originale et la partition de +LilyPond. Lorsque vous avez fini de relire votre musique, vous pouvez +définir @code{mBreak = @{ @}} pour enlever tous ces sauts de ligne, et +laisser LilyPond placer les sauts de ligne selon son propre algorithme. + +@end itemize + @node Large projects @subsection Large projects -UNTRANSLATED NODE: IGNORE ME +Lorsque l'on travaille sur un gros projet, il devient vital +de structurer clairement ses fichiers LilyPond. + +@itemize @bullet + +@item @strong{Utilisez un identificateur pour chaque voix}, +avec un minimum de structure dans la définition. La structure de la +section @code{\score} est la plus susceptible de changer, notamment +dans une nouvelle version de LilyPond, alors que la définition du +@code{violon} l'est beaucoup moins. + +@example +violin = \relative c'' @{ +g4 c'8. e16 +@} +... +\score @{ + \new GrandStaff @{ + \new Staff @{ + \violin + @} + @} +@} +@end example + +@item @strong{Séparez les retouches} des définitions de +musique. Ce conseil a été vu dans @ref{General suggestions}, +mais pour les projets d'importance c'est absolument vital. Nous +pouvons avoir besoin de changer la définition de +@code{fthenp}, mais dans ce cas nous n'aurons besoin de le faire +qu'une seule fois, et nous pourrons encore éviter de +modifier quoi que ce soit à l'intérieur de la définition +du @code{violon}. + +@example +fthenp = _\markup@{ + \dynamic f \italic \small @{ 2nd @} \hspace #0.1 \dynamic p @} +violin = \relative c'' @{ +g4\fthenp c'8. e16 +@} +@end example + +@end itemize + + +@node Saving typing with variables and functions +@subsection Saving typing with variables and functions + +@cindex variables +@cindex identificateurs -@node Saving typing with identifiers and functions -@section Saving typing with identifiers and functions +Jusqu'à maintenant, vous avez vu ce type de code : + +@lilypond[quote,verbatim,ragged-right] +hornNotes = \relative c'' { c4 b dis c } +\score { + { + \hornNotes + } +} +@end lilypond + +Vous comprendrez combien cela peut être utile pour écrire de la +musique minimaliste : + +@lilypond[quote,verbatim,ragged-right] +fragA = \relative c'' { a4 a8. b16 } +fragB = \relative c'' { a8. gis16 ees4 } +violin = \new Staff { \fragA \fragA \fragB \fragA } +\score { + { + \violin + } +} +@end lilypond + +Cependant, vous pouvez aussi utiliser ces identificateurs +--- aussi connus sous le nom de variables, macros, ou commandes +(définies par l'utilisateur) --- pour des retouches : + +@lilypond[quote,verbatim,ragged-right] +dolce = \markup{ \italic \bold dolce } +padText = { \once \override TextScript #'padding = #5.0 } +fthenp=_\markup{ \dynamic f \italic \small { 2nd } \hspace #0.1 \dynamic p } +violin = \relative c'' { + \repeat volta 2 { + c4._\dolce b8 a8 g a b | + \padText + c4.^"hi there!" d8 e' f g d | + c,4.\fthenp b8 c4 c-. | + } +} +\score { + { + \violin + } +\layout{ragged-right=##t} +} +@end lilypond + +Ces identificateurs sont évidemment utiles pour économiser de la +frappe. Mais ils peuvent l'être même si vous ne les utilisez qu'une +seule fois : ils réduisent la complexité. Regardons l'exemple +précédent sans aucun identificateur. C'est beaucoup plus laborieux à +lire, et particulièrement la dernière ligne. + +@example +violin = \relative c'' @{ + \repeat volta 2 @{ + c4._\markup@{ \italic \bold dolce @} b8 a8 g a b | + \once \override TextScript #'padding = #5.0 + c4.^"hi there!" d8 e' f g d | + c,4.\markup@{ \dynamic f \italic \small @{ 2nd @} + \hspace #0.1 \dynamic p @} b8 c4 c-. | + @} +@} +@end example + +Jusqu'ici nous avons vu des substitutions statiques : quand LilyPond +rencontre @code{\padText}, il le remplace par le contenu que nous lui +avons défini --- c'est-à-dire le contenu à droite de @code{padText=}. + +LilyPond gère également des substitutions non-statiques --- vous +pouvez les voir comme des fonctions. + +@lilypond[quote,verbatim,ragged-right] +padText = +#(define-music-function (parser location padding) (number?) + #{ + \once \override TextScript #'padding = #$padding + #}) + +\relative c''' { + c4^"piu mosso" b a b + \padText #1.8 + c4^"piu mosso" d e f + \padText #2.6 + c4^"piu mosso" fis a g +} +@end lilypond + +Utiliser les identificateurs est aussi un bon moyen pour vous épargner +du travail si la syntaxe de LilyPond change un jour --- voir +@ref{Updating old files}. Si vous avez une seule définition, par +exemple @code{\dolce}, pour tous vos fichiers (voir @ref{Style +sheets}), et que la syntaxe change, alors vous n'aurez qu'à mettre à +jour votre seule définition @code{\dolce}, au lieu de devoir modifier +chaque fichier @code{.ly}. -UNTRANSLATED NODE: IGNORE ME @node Style sheets -@section Style sheets +@subsection Style sheets + +La sortie que produit LilyPond peut être largement modifiée --- voir +@ref{Tweaking output} pour plus de détails. Mais que faire si vous +avez beaucoup de fichiers auxquels vous souhaitez appliquer vos +retouches ? Ou si vous souhaitez simplement séparer les retouches de +la musique elle-même ? Rien de plus facile. + +Prenons un exemple. Ne vous inquiétez pas si vous ne comprenez pas +les parties avec tous les @code{#()}. Celles-ci sont expliquées dans +@ref{Advanced tweaks with Scheme}. + +@lilypond[quote,verbatim,ragged-right] +mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) + #:line(#:dynamic "mp" #:text #:italic "dolce" ))) +tempoMark = #(define-music-function (parser location markp) (string?) +#{ + \once \override Score . RehearsalMark #'self-alignment-X = #left + \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) + \mark \markup { \bold $markp } +#}) + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 + \tempoMark "Poco piu mosso" + cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 +} +@end lilypond + +Il y a quelques problèmes de chevauchement ; nous allons arranger +cela en utilisant les techniques de @ref{Moving objects}. On peut +aussi faire quelque chose pour les définitions de @code{mpdolce} +et @code{tempoMark}. Elles produisent le résultat que nous désirons, +mais nous pourrions aussi vouloir les utiliser dans une autre pièce. +Il suffirait de les copier et les coller au début de chaque +fichier, mais c'est fastidieux. De plus, cela laisse les définitions +dans nos fichiers de musique, et je trouve personnellement tous ces +@code{#()} assez laids. Stockons-les dans un autre fichier : + +@example +%%% enregistrez ceci dans un fichier nommé "definitions.ly" +mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) + #:line(#:dynamic "mp" #:text #:italic "dolce" ))) +tempoMark = #(define-music-function (parser location markp) (string?) +#@{ + \once \override Score . RehearsalMark #'self-alignment-X = #left + \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) + \mark \markup @{ \bold $markp @} +#@}) +@end example + +Maintenant, modifions notre musique (enregistrez ce fichier +sous @file{"musique.ly"}). + +@c We have to do this awkward example/lilypond-non-verbatim +@c because we can't do the \include stuff in the manual. + +@example +\include "definitions.ly" + +\relative c'' @{ + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 + \once \override Score.RehearsalMark #'padding = #2.0 + \tempoMark "Poco piu mosso" + cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) + #:line(#:dynamic "mp" #:text #:italic "dolce" ))) +tempoMark = #(define-music-function (parser location markp) (string?) +#{ + \once \override Score . RehearsalMark #'self-alignment-X = #left + \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) + \mark \markup { \bold $markp } +#}) + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 + \once \override Score.RehearsalMark #'padding = #2.0 + \tempoMark "Poco piu mosso" + cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 +} +@end lilypond + +C'est mieux, mais effectuons encore quelques retouches. Le glissando +est peu visible, c'est pourquoi nous allons l'épaissir et le +rapprocher des têtes de notes. Déplaçons l'indication métronomique +au-dessus de la clef, au lieu de la laisser au-dessus de la première +note. Et pour finir, mon professeur de composition déteste les +chiffrages de mesure en @qq{C}, nous allons donc le transformer en @qq{4/4}. + +Cependant, ne changez pas le fichier @file{musique.ly}. Remplacez le +fichier @file{definitions.ly} par ceci : + +@example +%%% definitions.ly +mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) + #:line( #:dynamic "mp" #:text #:italic "dolce" ))) +tempoMark = #(define-music-function (parser location markp) (string?) +#@{ + \once \override Score . RehearsalMark #'self-alignment-X = #left + \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) + \mark \markup @{ \bold $markp @} +#@}) + +\layout@{ + \context @{ \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + @} + \context @{ \Staff + \override TimeSignature #'style = #'numbered + @} + \context @{ \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + @} +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) + #:line( #:dynamic "mp" #:text #:italic "dolce" ))) +tempoMark = #(define-music-function (parser location markp) (string?) +#{ + \once \override Score . RehearsalMark #'self-alignment-X = #left + \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) + \mark \markup { \bold $markp } +#}) -UNTRANSLATED NODE: IGNORE ME +\layout{ + \context { \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + } + \context { \Staff + \override TimeSignature #'style = #'numbered + } + \context { \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + } +} + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 + \once \override Score.RehearsalMark #'padding = #2.0 + \tempoMark "Poco piu mosso" + cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 +} +@end lilypond + +C'est encore mieux ! Mais supposons maintenant que je veuille publier +cette pièce. Mon professeur de composition n'aime pas les chiffrages +de mesure en @qq{C}, mais moi je les aime bien. Copions l'actuel +@file{definitions.ly} dans le fichier @file{publication-web.ly}, et +modifions ce dernier. Puisque la musique est destinée à produire un +fichier PDF affiché sur écran, nous allons aussi augmenter la taille +globale de police. + +@example +%%% definitions.ly +mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) + #:line( #:dynamic "mp" #:text #:italic "dolce" ))) +tempoMark = #(define-music-function (parser location markp) (string?) +#@{ + \once \override Score . RehearsalMark #'self-alignment-X = #left + \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) + \mark \markup @{ \bold $markp @} +#@}) + +#(set-global-staff-size 23) +\layout@{ + \context @{ \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + @} + \context @{ \Staff + @} + \context @{ \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + @} +@} +@end example + +@lilypond[quote,ragged-right] +mpdolce = #(make-dynamic-script (markup #:hspace 1 #:translate (cons 5 0) + #:line( #:dynamic "mp" #:text #:italic "dolce" ))) +tempoMark = #(define-music-function (parser location markp) (string?) +#{ + \once \override Score . RehearsalMark #'self-alignment-X = #left + \once \override Score . RehearsalMark #'extra-spacing-width = #'(+inf.0 . -inf.0) + \mark \markup { \bold $markp } +#}) + +#(set-global-staff-size 23) +\layout{ + \context { \Score + \override MetronomeMark #'extra-offset = #'(-9 . 0) + \override MetronomeMark #'padding = #'3 + } + \context { \Voice + \override Glissando #'thickness = #3 + \override Glissando #'gap = #0.1 + } +} + +\relative c'' { + \tempo 4=50 + a4.\mpdolce d8 cis4--\glissando a | b4 bes a2 + \once \override Score.RehearsalMark #'padding = #2.0 + \tempoMark "Poco piu mosso" + cis4.\< d8 e4 fis | g8(\! fis)-. e( d)-. cis2 +} +@end lilypond + +Il ne nous reste plus qu'à remplacer @code{\include "definitions.ly"} +par @code{\include "publication-web.ly"} dans notre fichier de musique. + +Il est possible, bien sûr, de rendre cela encore plus pratique. Nous +pourrions créer un fichier @file{definitions.ly} qui ne contiendrait +que les définitions de @code{mpdolce} et de @code{tempoMark}, un +fichier @file{publication-web.ly} qui ne contiendrait que la section +@code{layout} décrite ci-dessus et un fichier @file{universite.ly} qui +ne contiendrait que les retouches pour produire le résultat que mon +professeur préfère. Le début du fichier @file{musique.ly} ressemblerait +alors à + +@example +\include "definitions.ly" + +%%% Décommentez seulement une de ces deux lignes ! +\include "publication-web.ly" +%\include "universite.ly" +@end example + +Cette approche peut être utile même si vous ne produisez qu'un seul +jeu de partitions. J'utilise personnellement une demi-douzaine de +fichiers de @qq{feuille de style} pour mes projets. Je commence +chaque fichier de musique par @code{\include "../global.ly"} qui contient : + +@example +%%% global.ly +\version @w{"@version{}"} +#(ly:set-option 'point-and-click #f) +\include "../init/init-defs.ly" +\include "../init/init-mise-en-page.ly" +\include "../init/init-en-tetes.ly" +\include "../init/init-papier.ly" +@end example + +@node When things don't work +@section When things don't work + +@menu +* Updating old files:: +* Troubleshooting (taking it all apart):: +* Minimal examples:: +@end menu @node Updating old files -@section Updating old files +@subsection Updating old files + +La syntaxe de LilyPond change de temps en temps. Ces changements de +syntaxe du langage d'entrée accompagnent les améliorations du +logiciel. Ces changements sont parfois destinés à rendre les fichiers +plus faciles à lire et à écrire, ou permettent d'intégrer de nouvelles +fonctionnalités. + +LilyPond est fourni avec un utilitaire qui facilite cette mise à +jour : @command{convert-ly}. Pour savoir comment utiliser ce programme, +voir @rprogram{Updating files with convert-ly}. + +Malheureusement, @command{convert-ly} ne peut pas réaliser toutes les +modifications. Il s'occupe des changements qui ne requièrent qu'une +simple substitution de texte --- comme @code{raggedright} devenant +@code{ragged-right} ---, les autres étant trop compliqués à effectuer. +Les changements de syntaxe qui ne sont pas gérés par @command{convert-ly} +sont énumérés dans @rprogram{Updating files with convert-ly}. + +Par exemple, dans les versions 2.4 et antérieures de LilyPond, +les accents et les lettres non anglaises étaient entrées en +utilisant LaTeX --- par exemple, @samp{No\"el}. À partir de la +version 2.6, le caratère @samp{ë} doit être entré directement +dans le fichier LilyPond comme caractère UTF-8. +@code{convert-ly} ne peut pas changer tous les caractères +LaTeX en caractères UTF-8 ; vous devez mettre à jour vos vieux +fichiers LilyPond manuellement. + -UNTRANSLATED NODE: IGNORE ME @node Troubleshooting (taking it all apart) -@section Troubleshooting (taking it all apart) +@subsection Troubleshooting (taking it all apart) + +Tôt ou tard, vous écrirez un fichier que LilyPond ne peut pas +compiler. Les messages que LilyPond affiche peuvent vous aider à +trouver l'erreur, mais dans beaucoup de cas vous aurez besoin de faire +quelques recherches pour déterminer la source du problème. + +Pour ce faire, les outils les plus puissants sont le commentaire de +fin de ligne, indiqué par @code{%}, et le commentaire multilignes (ou +bloc de commentaire), indiqué par @code{%@{ ... %@}}. Si vous ne +pouvez localiser le problème, commencez par mettre en commentaire de +grandes parties de votre fichier d'entrée. Après avoir mis en +commentaire une section, essayez de compiler à nouveau. Si cela +fonctionne, c'est que le problème se situe dans cette partie du +fichier. Si cela ne fonctionne pas, continuez à mettre en commentaire +d'autres sections, jusqu'à ce que vous ayez quelque chose qui compile. + +Dans un cas extrême, vous pourriez en arriver à + +@example +\score @{ + << + % \melodie + % \harmonie + % \basse + >> + \layout@{@} +@} +@end example + +@noindent +c'est-à-dire un fichier sans aucune musique. + +Si cela arrive, ne vous découragez pas. Décommentez un peu, la partie +de basse par exemple, et voyez si ça fonctionne. Si ce n'est pas le +cas, placez en commentaire toute la partie de basse, mais laissez +@code{\basse} décommenté dans le bloc @code{\score}. + +@example +basse = \relative c' @{ +%@{ + c4 c c c + d d d d +%@} +@} +@end example + +Maintenant commencez à décommenter petit à petit le partie de +@code{basse} jusqu'à ce que vous localisiez la ligne qui pose +problème. + +Une autre technique de déboguage très utile est la construction +@iftex +de @ref{Minimal examples}. +@end iftex +@ifnottex +d'@ref{Minimal examples}. +@end ifnottex + + +@node Minimal examples +@subsection Minimal examples + +Un exemple minimal est un exemple de code aussi court que possible. +De tels exemples sont bien plus compréhensibles que des exemples +longs. Les exemples minimaux sont utilisés pour + +@itemize +@item les rapports de bogue, +@item les demandes d'aide sur les listes de diffusion, +@item un ajout à +@uref{http://lsr@/.dsi@/.unimi@/.it/,LilyPond Snippet Repository}. +@end itemize + +Pour construire un exemple minimal, la règle est très simple : enlevez +tout ce qui n'est pas nécessaire. Il est préférable de commenter les +lignes non nécessaires plutôt que de les effacer : ainsi, si vous vous +apercevez que certaines étaient @emph{réellement} nécessaires, vous +pouvez les décommenter au lieu de les resaisir. + +Il y a deux exceptions à cette règle du strict nécessaire : + +@itemize +@item incluez le numéro de @code{\version} en début de fichier +@item si possible, utilisez @code{\paper@{ ragged-right=##t @}} au +début de votre exemple. +@end itemize + +Tout l'intérêt d'un exemple minimal réside dans sa facilité de lecture : +@itemize +@item évitez d'utiliser des notes, armures ou métriques compliquées, à +moins que vous ne vouliez montrer quelque chose en rapport avec +celles-ci, +@item n'utilisez pas de commandes @code{\override} sauf si elles font +l'intérêt de l'exemple. +@end itemize + +@node Scores and parts +@section Scores and parts + +Dans la musique d'orchestre, toutes les notes sont imprimées deux fois. +D'abord dans les parties séparées destinées aux musiciens, et ensuite +dans le conducteur destiné au chef. Les variables sont là pour vous éviter +un double travail. La musique n'est entrée qu'une seule fois, et stockée dans +une variable, dont le contenu servira à imprimer à la fois la partie +séparée et la partition d'orchestre. + +Il est judicieux de définir les notes dans un fichier séparé. Par +exemple, supposons que le fichier @file{musique-Cor.ly} contienne la +partie suivante pour un duo cor/@/basson. + +@example +notesCor = \relative c @{ + \time 2/4 + r4 f8 a cis4 f e d +@} +@end example + +@noindent +On établira alors une partie séparée en constituant un nouveau fichier : + +@example +\include "musique-Cor.ly" +\header @{ + instrument = "Cor en Fa" +@} + +@{ + \transpose f c' \notesCor +@} +@end example + +À la ligne + +@example +\include "musique-Cor.ly" +@end example + +@noindent +sera substitué le contenu du fichier @file{musique-Cor.ly}, et de ce +fait la variable @code{notesCor} se trouvera définie. La commande +@code{\transpose f@tie{}c'} indique que son argument @code{\notesCor} +sera transposé à la quinte supérieure : le son réel @samp{f} s'écrit +@code{c'}, ce qui est la caractéristique d'un Cor en Fa. La transposition +est visible comme suit : + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + r4 f8 a cis4 f e d +} +@end lilypond + +Dans les pièces d'ensemble, il arrive souvent qu'une voix ne joue pas +pendant plusieurs mesures. Un silence spécial, appelé silence multi-mesures, +l'indique alors. On l'obtient par un @samp{R} majuscule, suivi d'une +durée : @code{1}@tie{}pour une pause, @code{2}@tie{}pour une demi-pause, +etc. Cette durée peut être multipliée pour établir de plus longs silences. +Par exemple, le silence suivant dure 3@tie{}mesures à 2/4. + +@example +R2*3 +@end example + +Dans une partie séparée, les silences multi-mesures sont compressés. +Il faut pour cela définir la propriété @code{skipBars} à @q{vrai} : + +@example +\set Score.skipBars = ##t +@end example + +@noindent +Cette commande assigne la valeur @q{vrai} --- @q{true} en anglais, et +@samp{#t} dans le langage Scheme --- à cette propriété dans le +contexte @code{Score}. Si l'on ajoute dans la musique ci-dessus le +silence multi-mesures et cette option, on obtient le résultat suivant : + +@lilypond[quote,ragged-right] +\transpose f c' \relative c { + \time 2/4 + \set Score.skipBars = ##t + R2*3 + r4 f8 a cis4 f e d +} +@end lilypond + +Le conducteur rassemble toute la musique. Si l'on suppose que l'autre +voix de notre duo se trouve dans le fichier @file{musique-Basson.ly} en +tant que variable @code{notesBasson}, on établira un conducteur avec + +@example +\include "musique-Basson.ly" +\include "musique-Cor.ly" + +<< + \new Staff \notesCor + \new Staff \notesBasson +>> +@end example + +@noindent +ce qui équivaut à + +@lilypond[quote,ragged-right] +\relative c << + \new Staff { + \time 2/4 R2*3 + r4 f8 a cis4 f e d + } + \new Staff { + \clef bass + r4 d,8 f | gis4 c | b bes | + a8 e f4 | g d | gis f + } +>> +@end lilypond -UNTRANSLATED NODE: IGNORE ME +Des informations plus détaillées sur la mise en place de conducteurs +et de parties séparées se trouvent dans le manuel : voir +@ruser{Writing parts}. +Les variables (@q{propriétés}) réglables sont abordées en détail dans +@ruser{Changing context properties on the fly}.