@c -*- coding: utf-8; mode: texinfo; documentlanguage: fr -*- @ignore Translation of GIT committish: 97ecad3753202d0b887c669c05a4ced18bca5acb When revising a translation, copy the HEAD committish of the version that you are working on. For details, see the Contributors' Guide, node Updating translation committishes.. @end ignore @c \version "2.13.36" @c Translators: Jean-Charles Malahieude, Valentin Villenave @node Généralités en matière d'entrée et sortie @chapter Généralités en matière d'entrée et sortie @translationof General input and output Nous n'allons pas, dans ce chapitre, parler directement de notation, mais plutôt du contenu des fichiers source et du résultat produit par LilyPond. @menu * Agencement du code:: * Titres et entêtes:: * Travail sur des fichiers texte:: * Contrôle des sorties:: * Sortie MIDI:: @end menu @node Agencement du code @section Agencement du code @translationof Input structure LilyPond traite des fichiers textuels. Ces fichiers portent par convention une extension @code{.ly}. @menu * Structure d'une partition:: * Plusieurs partitions dans un même ouvrage:: * Plusieurs éditions pour une même source:: * Nom des fichiers de sortie:: * Structure de fichier:: @end menu @node Structure d'une partition @subsection Structure d'une partition @translationof Structure of a score @funindex \score Un bloc @code{\score} contient obligatoirement une seule expression musicale délimitée par des accolades@tie{}: @example \score @{ ... @} @end example @warning{Il ne doit y avoir qu'@strong{une seule} expression musicale globale dans un bloc @code{@bs{}score}, et elle @strong{doit} être bornée par une paire d'accolades.} Cette unique expression musicale peut être de n'importe quelle taille et contenir d'autres expressions musicales aussi complexes soient elles. Voici quelques exemples d'expression musicale@tie{}: @example @{ c'4 c' c' c' @} @end example @lilypond[verbatim,quote] { { c'4 c' c' c' } { d'4 d' d' d' } } @end lilypond @lilypond[verbatim,quote] << \new Staff { c'4 c' c' c' } \new Staff { d'4 d' d' d' } >> @end lilypond @example @{ \new GrandStaff << \new StaffGroup << \new Staff @{ \flute @} \new Staff @{ \hautbois @} >> \new StaffGroup << \new Staff @{ \violonI @} \new Staff @{ \violonII @} >> >> @} @end example Les commentaires constituent l'une des rares exceptions à cette règle immuable -- voir @ref{Structure de fichier} pour les autres. Qu'il s'agisse d'une seule ligne ou de tout un bloc -- délimité par @code{%@{ .. %@}} -- un commentaire peut se placer n'importe où dans le fichier source, aussi bien à l'intérieur qu'à l'extérieur du bloc @code{\score}, ou encore à l'intérieur ou à l'extérieur de l'expression musicale contenue dans un bloc @code{\score}. Lorsqu'un fichier ne comprend qu'un bloc @code{\score}, celui-ci est implicitement inclus dans un bloc @code{\book}. Le bloc @code{\book} d'un fichier source permet la production d'au moins un fichier dont le nom sera, par défaut, déduit du fichier source@tie{}: le traitement de @file{fandangopourelephants.ly} produira donc @file{fandangopourelephants.pdf}. Pour de plus amples informations à propos du bloc @code{\book}, lisez @ref{Plusieurs partitions dans un même ouvrage}, @ref{Plusieurs éditions pour une même source} et @ref{Structure de fichier}. @seealso Manuel d'initiation : @rlearning{Travail sur les fichiers d'entrée}, @rlearning{Les expressions musicales en clair}, @rlearning{La partition est une (unique) expression musicale composée}. @node Plusieurs partitions dans un même ouvrage @subsection Plusieurs partitions dans un même ouvrage @translationof Multiple scores in a book @cindex mouvements, plusieurs @cindex plusieurs mouvements @funindex \book Un ouvrage peut se composer de plusieurs morceaux et de texte. C'est le cas des cahiers d'exercices ou d'une partie d'orchestre avec ses différents mouvements. Chaque mouvement fait l'objet d'un bloc @code{\score}, @example \score @{ @var{..musique..} @} @end example et le texte est contenu dans un bloc @code{\markup}, @example \markup @{ @var{..texte..} @} @end example @funindex \book Les différents mouvements et textes qui apparaissent dans un même fichier @file{.ly} ne composeront en principe qu'un seul fichier résultant. @example \score @{ @var{..} @} \markup @{ @var{..} @} \score @{ @var{..} @} @end example Attention cependant si vous travaillez avec lilypond-book@tie{}: il vous faudra explicitement mentionner le bloc @code{\book}, en l'absence de quoi seul le premier @code{\score} ou @code{\markup} apparaîtra après traitement. L'entête de chaque pièce peut se placer au sein du bloc @code{\score}@tie{}; le contenu du champ @code{piece} viendra s'imprimer avant chaque mouvement. De même, le titre de l'ouvrage peut se placer au sein du bloc @code{\book}. Dans le cas contraire, le contenu du bloc @code{\header} placé en début de fichier sera utilisé. @example \header @{ title = "Huit miniatures" composer = "Igor Stravinsky" @} \score @{ @dots{} \header @{ piece = "Romance" @} @} \markup @{ ..texte du second couplet.. @} \markup @{ ..texte du troisième couplet.. @} \score @{ @dots{} \header @{ piece = "Menuet" @} @} @end example @funindex \bookpart Plusieurs pièces seront regroupées dans un même @qq{chapitre} à l'aide d'un bloc @code{\bookpart}. Les différentes parties sont séparées par un saut de page et peuvent comporter un titre à l'instar de l'ouvrage dès lors que vous y insérez un bloc @code{\header}. @example \bookpart @{ \header @{ title = "Titre de l'ouvrage" subtitle = "Première partie" @} \score @{ @dots{} @} @dots{} @} \bookpart @{ \header @{ subtitle = "Deuxième partie" @} \score @{ @dots{} @} @dots{} @} @end example @node Plusieurs éditions pour une même source @subsection Plusieurs éditions pour une même source @translationof Multiple output files from one input file Dès lors que vous inscrivez plusieurs blocs @code{\book} dans un même fichier @file{.ly}, chacun d'eux donnera lieu à un résultat indépendant. Lorsqu'aucun bloc @code{\book} n'est spécifié dans le fichier source, LilyPond considère que l'intégralité du fichier constitue un bloc @code{\book} unique, comme indiqué à la rubrique @ref{Structure de fichier}. LilyPond fait en sorte, lorsque plusieurs fichiers sont produits à partir d'une même source, qu'aucun résultat d'un bloc @code{\book} n'écrase celui qui a été généré pour un bloc @code{\book} précédent. Dans les faits, et si le nom du fichier produit est repris de sa source -- comportement par défaut --, un suffixe lui sera ajouté pour chaque @code{\book}. Il s'agit en principe d'un pseudo numéro de version. Ainsi, le fichier @file{huitminiatures.ly} qui contiendrait @example \book @{ \score @{ @dots{} @} \layout @{ @dots{} @} @} \book @{ \score @{ @dots{} @} \layout @{ @dots{} @} @} \book @{ \score @{ @dots{} @} \layout @{ @dots{} @} @} @end example génèrera @itemize @item @file{huitminiatures.pdf}, @item @file{huitminiatures-1.pdf} et @item @file{huitminiatures-2.pdf}. @end itemize @node Nom des fichiers de sortie @subsection Nom des fichiers de sortie @translationof Output file names LilyPond vous permet de prendre le contrôle dans la dénomination des fichiers que vous voulez générer, quel que soit le moteur de rendu utilisé. Nous avons vu dans la rubrique précédente que LilyPond évite les conflits de nom des fichiers qu'il génère à partir d'une même source. Vous pouvez même définir vous-même le suffixe qui sera appliqué à chacun des blocs @code{\book}. Ainsi, en reprenant l'exemple ci-avant, vous obtiendrez les fichiers @file{huitminiatures-Romance.pdf}, @file{huitminiatures-Menuet.pdf} et @file{huitminiatures-Nocturne.pdf} en ajoutant simplement une déclaration @code{\bookOutputSuffix} au sein de chaque bloc @code{\book}. @example \book @{ \bookOutputSuffix "Romance" \score @{ @dots{} @} \layout @{ @dots{} @} @} \book @{ \bookOutputSuffix "Menuet" \score @{ @dots{} @} \layout @{ @dots{} @} @} \book @{ \bookOutputSuffix "Nocturne" \score @{ @dots{} @} \layout @{ @dots{} @} @} @end example La déclaration @code{\bookOutputName} vous permet de définir vous-même le nom du fichier généré pour un bloc @code{\book}@tie{}: @example \book @{ \bookOutputName "Romance" \score @{ @dots{} @} \layout @{ @dots{} @} @} \book @{ \bookOutputName "Menuet" \score @{ @dots{} @} \layout @{ @dots{} @} @} \book @{ \bookOutputName "Nocturne" \score @{ @dots{} @} \layout @{ @dots{} @} @} @end example Le traitement de ce fichier produira@tie{}: @itemize @item @file{Romance.pdf}, @item @file{Menuet.pdf} et @item @file{Nocturne.pdf}. @end itemize @node Structure de fichier @subsection Structure de fichier @translationof File structure @funindex \paper @funindex \midi @funindex \layout @funindex \header @funindex \score @funindex \book @funindex \bookpart Un fichier @code{.ly} peut contenir un certain nombre d'expression de haut niveau. Les expressions de haut niveau sont les suivantes@tie{}: @itemize @item Une définition de sortie, comme @code{\paper}, @code{\midi} et @code{\layout}. Ces définitions, lorsqu'elles se trouvent à un niveau supérieur, s'appliqueront à l'intégralité de l'ouvrage. Si l'une de ces expression apparaît à plusieurs reprises, la dernière aura préséance. @item Une expression scheme pure, telle que @w{@code{#(set-default-paper-size@tie{}"a7"@tie{}'landscape)}} ou @w{@code{#(ly:set-option@tie{}'point-and-click@tie{}#f)}}. @item Un bloc @code{\header}, dont le contenu sera de portée globale -- ce qui est le cas en général pour le titre ou l'auteur entre autres. @item Un bloc @code{\score} pour la partition. Cette partition sera assemblée avec les autres partitions se trouvant au même niveau pour composer le @code{\book}. Vous pouvez modifier ce comportement à l'aide de la variable @code{toplevel-score-handler} placée en tête. @ignore @c FIXME - I cannot read "toplevel-score-handler" in scm/lily.scm -jcm The default handler is defined in the init file @file{../scm/lily.scm}. @end ignore @item Un bloc @code{\book} permet de regrouper naturellement plusieurs mouvements -- autrement dit plusieurs blocs @code{\score} -- dans un même document. Lorsqu'il y a plusieurs @code{\score}s, LilyPond génère un seul fichier dans lequel les mouvements sont mis les uns à la suite des autres, ce pour chacun des blocs @code{\book} rencontrés. La seule raison qui peut vous demander d'expliciter plusieurs blocs @code{\book} dans un fichier @file{.ly} est lorsque vous avez besoin de générer différents documents à partir d'une même source. La présence explicite d'un bloc @code{\book} est aussi nécessaire lorsque vous travaillez sur un document lilypond-book qui reprendrait plusieurs @code{\score}s ou @code{\markup}s dans un même extrait. Vous pouvez modifier ce comportement à l'aide de la variable @code{toplevel-score-handler} placée en tête. @ignore @c FIXME - I cannot read "toplevel-book-handler" in scm/lily.scm -jcm The default handler is defined in the init file @file{../scm/lily.scm}. @end ignore @item Un bloc @code{\bookpart}. Un ouvrage peut se découper en plusieurs parties à l'aide de blocs @code{\bookpart}, aussi bien pour alléger le travail de l'algorithme de calcul des sauts de page, que si les réglages du bloc @code{\paper} diffèrent d'une partie à l'autre. @item Une expression musicale telle que @example @{ c'4 d' e'2 @} @end example Ce bout de code sera placé dans un @code{\score} et intégré à l'ouvrage en même temps que tous les autres @code{\score}s ou expressions musicales. En d'autres termes, un fichier qui ne contiendrait que cette simple expression musicale sera traduit en @example \book @{ \score @{ \new Staff @{ \new Voice @{ @{ c'4 d' e'2 @} @} @} @} \layout @{ @} \header @{ @} @} @end example Vous pouvez modifier ce comportement à l'aide de la variable @code{toplevel-music-handler} placée en tête. @ignore @c FIXME - I cannot read "toplevel-music-handler" in scm/lily.scm -jcm The default handler is defined in the init file @file{../scm/lily.scm}. @end ignore @item Du texte sous forme de @emph{markup} comme les paroles d'un couplet @example \markup @{ 2. Le première ligne du deuxième couplet. @} @end example De tels @emph{markups} seront imprimés là où ils apparaissent, avant, après ou entre les expressions musicales. @cindex variables @cindex identificateurs @item Une variable, ou identificateur, telle que @example toto = @{ c4 d e d @} @end example Vous pourrez la réutiliser plus loin dans votre fichier en saisissant simplement @code{\toto}. Le nom des indentificateurs ne doit être formés que de caractères alphabétiques -- sans chiffre ni caractère souligné ou tiret. @end itemize Voici trois éléments que vous pouvez placer à un niveau supérieur@tie{}: @example \layout @{ % pas en pleine largeur ragged-right = ##t @} \header @{ title = "Do-re-mi" @} @{ c'4 d' e2 @} @end example Vous pouvez placer, n'importe où dans votre fichier, les instruction suivantes@tie{}: @itemize @item @code{\version} @item @code{\include} @item @code{\sourcefilename} @item @code{\sourcefileline} @item Une ligne de commentaire, introduite par le signe @code{%}. @item Un bloc de commentaire, délimité par @code{%@{ .. %@}}. @end itemize @cindex espace @cindex blanc Vous pouvez insérer des espaces dans votre fichier source afin de lui apporter une meilleure lisibilité. Les espaces superflus sont normalement ignorés. Notez cependant qu'il est des cas où l'espace est requis pour éviter tout risque d'erreur@tie{}: @itemize @item Autour d'une accolade, qu'elle soit ouvrant ou fermante ; @item Après chaque commande ou variable, autrement dit tout élément qui commence par un @code{\}@tie{}; @item Après tout élément qui sera interprété comme une expression Scheme, autrement dit tout élément qui commence par un @code{#}@tie{}; @item Pour séparer les éléments d'une expression Scheme ; @item En mode parole -- @code{lyricmode} -- pour séparer les termes des commandes @code{\override} et @code{\set}. Précisons à ce sujet qu'en plus d'ajouter une espace avant et après l'intégralité de la commande, vous devrez encadrer d'espace le point et le signe égal qu'elle peut contenir, comme dans @w{@code{\override Score . LyricText #'font-size = #5}}. @end itemize @seealso Manuel d'initiation : @rlearning{Organisation des fichiers LilyPond}. @node Titres et entêtes @section Titres et entêtes @translationof Titles and headers La plupart de la musique qui est éditée comporte un titre et le nom de son compositeur@tie{}; certains ouvrages divulguent beaucoup plus d'information. @menu * Création de titres:: * Titrages personnalisés:: * Référencement des numéros de page:: * Table des matières:: @end menu @node Création de titres @subsection Création de titres @translationof Creating titles Des éléments de titrage peuvent s'attacher à un bloc @code{\score}, une partie -- créée par un bloc @code{\bookpart} -- ou bien un ouvrage entier créé par un bloc @code{\book}. Les différents éléments du titrage sont contenus dans un bloc @code{\header}. Un ouvrage complet peut comporter@tie{}: @table @code @funindex dedication @item dedication Le dédicataire de l'œuvre, centré en haut de la première page. @funindex title @item title Le titre de l'œuvre, centré en dessous de la dédicace. @funindex subtitle @item subtitle Le sous-titre, centré sous le titre. @funindex subsubtitle @item subsubtitle Un niveau supplémentaire de sous-titre, centré en dessous du sous-titre. @funindex poet @item poet Le poète, parolier ou librétiste, aligné à gauche en dessous du deuxième sous-titre. @funindex instrument @item instrument L'instrument, centré en dessous du deuxième sous-titre. Il sera rappelé sur les pages suivant la première, centré sur la ligne d'entête. @funindex composer @item composer Le compositeur, aligné à droite en dessous du deuxième sous-titre. @funindex meter @item meter Le libellé du tempo, aligné à gauche sous le poète. @funindex arranger @item arranger L'arrangeur, aligné à droite sous le compositeur. @funindex piece @item piece La pièce ou le mouvement, aligné à gauche sous le tempo. @funindex opus @item opus L'opus ou le numéro au catalogue, aligné à droite sous l'arrangeur. @cindex page breaks, forcing @funindex breakbefore @item breakbefore Ce commutateur (activé par ##t@tie{}; ##f pour le désactiver) permet de forcer le saut de page avant d'afficher les titres. @funindex copyright @item copyright La notice de droits d'auteur, centrée en pied de la première page. Pour imprimer le symbole @emph{copyright}, consultez la rubrique @ref{Codage du texte}. @funindex tagline @item tagline Mention spéciale imprimée en pied de la dernière page. @end table Voici ce que cela peut donner lorsque tout ces champs sont utilisés. Les différentes commandes mentionnées à la rubrique @ref{Mise en forme du texte} sont opérationnelles pour tous ces éléments. @c KEEP LY @lilypond[quote,verbatim,line-width=11.0\cm] \paper { line-width = 9.0\cm paper-height = 10.0\cm } \book { \header { dedication = "dédié à moi-même" title = \markup \center-column { "Première ligne de titre" "Deuxième ligne de titre, plus longue" } subtitle = "un sous-titre," subsubtitle = #(string-append "sous-sous-titre LilyPond version " (lilypond-version)) poet = "Auteur" composer = \markup \center-column { "compositeur" \small "(1847-1973)" } texttranslator = "Traduit par" meter = \markup { \teeny "m" \tiny "e" \normalsize "t" \large "e" \huge "r" } arranger = \markup { \fontsize #8.5 "a" \fontsize #2.5 "r" \fontsize #-2.5 "r" \fontsize #-5.3 "a" \fontsize #7.5 "ngeur" } instrument = \markup \bold \italic "instrument" piece = "Pièce" } \score { { c'1 } \header { piece = "pièce1" opus = "opus1" } } \markup { et puis... } \score { { c'1 } \header { piece = "pièce2" opus = "opus2" } } } @end lilypond Comme nous venons de la voir, vous pouvez multiplier les blocs @code{\header}. Lorsqu'un même champ apparaît dans plusieurs blocs, LilyPond utilisera le dernier mentionné@tie{}: @example \header @{ composer = "Compositeur" @} \header @{ piece = "Morceau" @} \score @{ \new Staff @{ c'4 @} \header @{ piece = "Nouveau morceau" % remplace le précédent @} @} @end example Lorsque le bloc @code{\header} est défini à l'intérieur du bloc @code{\score}, seul les champs @code{piece} et @code{opus} seront imprimés. Attention cependant à toujours placer le bloc @code{\header} après l'expression musicale. @lilypond[quote,verbatim,line-width=11.0\cm] \score { { c'4 } \header { title = "title" % not printed piece = "piece" opus = "opus" } } @end lilypond @funindex print-all-headers @noindent Vous pouvez modifer ce comportement et imprimer tous les champs d'un bloc @code{\header} défini dans un bloc @code{\score} en ajoutant @example \paper@{ print-all-headers = ##t @} @end example @cindex copyright @cindex tagline Les pieds de page sont vides, hormis pour la première page qui portera la champ @code{copyright} du @code{\header}, et pour la dernière page où apparaîtra le @code{tagline}. Celui-ci est par défaut @qq{Music engraving by LilyPond (@var{version})}.@footnote{Afin que l'on sache qui est capable d'une telle qualité, nous vous saurons gré de ne pas suprimer cette mention spéciale, autant que faire se peut.} Un champ de titrage peut être désactivé@tie{}: @example \header @{ tagline = ##f composer = ##f @} @end example @node Titrages personnalisés @subsection Titrages personnalisés @translationof Custom headers footers and titles Vous pouvez personnaliser, dans le bloc @code{\paper}, la définition des variables listées ci-dessous. Leur mise en forme par défaut est inscrite dans le fichier d'initialisation @file{../ly/titling-init.ly}. @table @code @funindex bookTitleMarkup @item bookTitleMarkup Ce titre est apposé au début du document final. Il comprend normalement le compositeur et le titre de l'œuvre. @funindex scoreTitleMarkup @item scoreTitleMarkup Ce titre est attaché à un bloc @code{\score}. Il comprend normalement le nom du mouvement -- le champ @code{piece}. @funindex oddHeaderMarkup @item oddHeaderMarkup L'entête des pages impaires. @funindex evenHeaderMarkup @item evenHeaderMarkup L'entête des pages paires. Lorsqu'il n'est pas défini, LilyPond utilise celui des pages impaires. Les entêtes comportent par défaut le nom de l'instrument, au centre, et le numéro de page, sur le bord extérieur de la page. @funindex oddFooterMarkup @item oddFooterMarkup Le pied de page impaire. @funindex evenFooterMarkup @item evenFooterMarkup Le pied de page paire. Lorsqu'il n'est pas défini, LilyPond utilise celui des pages impaires. Par défaut, le pied de la première page comporte la notice de droits d'auteur, et celui de la dernière page la @qq{mention spéciale} -- le @code{tagline}. @end table @cindex \paper @cindex header @cindex entête @cindex footer @cindex pied de page @cindex mise en page @cindex titres La définition suivante permt d'obtenir, sur la même ligne, le titre aligné à gauche et le compositeur aligné à droite. @example \paper @{ bookTitleMarkup = \markup @{ \fill-line @{ \fromproperty #'header:title \fromproperty #'header:composer @} @} @} @end example Les entêtes et pieds de page sont créés respectivement par les fonctions @code{make-header} and @code{make-footer}, que vous pouvez définir au sein du bloc @code{\paper}. Leur implémentation est contenue dans les fichiers d'initialisation @file{ly/paper-defaults-init.ly} et @file{ly/titling-init.ly}. Voici comment centrer le numéro en pied de chaque page@tie{}: @example \paper @{ print-page-number = ##t print-first-page-number = ##t oddHeaderMarkup = \markup \fill-line @{ " " @} evenHeaderMarkup = \markup \fill-line @{ " " @} oddFooterMarkup = \markup @{ \fill-line @{ \bold \fontsize #3 \on-the-fly #print-page-number-check-first \fromproperty #'page:page-number-string @} @} evenFooterMarkup = \markup @{ \fill-line @{ \bold \fontsize #3 \on-the-fly #print-page-number-check-first \fromproperty #'page:page-number-string @} @} @} @end example @node Référencement des numéros de page @subsection Référencement des numéros de page @translationof Reference to page numbers LilyPond vous permet, à l'aide de la commande @code{\label}, d'insérer des points de référence dans un ouvrage, aussi bien en dehors qu'au fil de la musique. Ce point de référence pourra être ensuite repris à l'intérieur d'un @emph{markup}@tie{}; vous pourrez même y ajouter le numéro de page grâce à la commande de @emph{markup} @code{\page-ref}. @c KEEP LY @lilypond[verbatim,line-width=11.0\cm] \header { tagline = ##f } \book { \label #'firstScore \score { { c'1 \pageBreak \mark A \label #'markA c'1 } } \markup { Le premier mouvement débute à la page \page-ref #'firstScore "0" "?" } \markup { Le repère A est à la page \page-ref #'markA "0" "?" } } @end lilypond L'instruction @code{\page-ref} prend trois arguments@tie{}: @enumerate @item le point de référence, sous la forme d'un symbole scheme, comme par exemple @code{#'firstScore}, @item un @qq{emporte-pièce} afin d'estimer la longueur totale du @emph{markup}, @item un texte de remplacement au cas où la référence ne serait pas retrouvée. @end enumerate La présence de l'emporte-pièce est rendue nécessaire par le fait que les @emph{markups} sont générés avant que les sauts de page ne soient positionnés. Bien que le numéro de page en question ne soit pas encore déterminé, LilyPond doit connaître les dimensions de ce @emph{markup}. Vous pouvez, lorsque l'ouvrage contiendra plus de dix pages, stipuler un emporte-pièce sur deux caractères -- soit @code{"00"}. @predefined @funindex \label @code{\label}, @funindex \page-ref @code{\page-ref}. @endpredefined @node Table des matières @subsection Table des matières @translationof Table of contents La commande @code{\markuplines \table-of-contents} vous permettra de générer une table des matières. Les éléments qui la composeront sont créés par la commande @code{\tocItem}, insérée indépendamment ou au sein d'une expression musicale. @verbatim \markuplines \table-of-contents \pageBreak \tocItem \markup "Premier mouvement" \score { { c'4 % ... \tocItem \markup "Passage spécifique du premier mouvement" d'4 % ... } } \tocItem \markup "Second mouvement" \score { { e'4 % ... } } @end verbatim Les @emph{markups} dévolus à la mise en forme de la table des matières se définissent dans le bloc @code{\paper}. Il s'agit par défaut de @code{tocTitleMarkup} pour le titre de la table, et de @code{tocItemMarkup} pour ses éléments -- composés de leur libellé et numéro de page. Vous pouvez bien entendu personnaliser ces variables@tie{}: @verbatim \paper { %% Translate the toc title into French: tocTitleMarkup = \markup \huge \column { \fill-line { \null "Table des matières" \null } \hspace #1 } %% use larger font size tocItemMarkup = \markup \large \fill-line { \fromproperty #'toc:text \fromproperty #'toc:page } } @end verbatim Notez bien la manière de référencer le libellé et le numéro de page dans la définition de @code{tocItemMarkup}. N'hésitez pas à définir vous-même d'autres commandes et @emph{markups} afin de construire une table plus élaborée@tie{}: @itemize @item commencez par définir une nouvelle variable de type @code{markup} au sein du bloc @code{\paper}, @item puis définissez une fonction musicale chargée d'insérer un élément de la table à partir de cette variable. @end itemize Dans l'exemple qui suit, nous avons créé un nouveau style d'élément dans le but de mentionner les actes dans la table des matières d'un opéra@tie{}: @verbatim \paper { tocActMarkup = \markup \large \column { \hspace #1 \fill-line { \null \italic \fromproperty #'toc:text \null } \hspace #1 } } tocAct = #(define-music-function (parser location text) (markup?) (add-toc-item! 'tocActMarkup text)) @end verbatim @lilypond[line-width=11.0\cm] \header { tagline = ##f } \paper { tocActMarkup = \markup \large \column { \hspace #1 \fill-line { \null \italic \fromproperty #'toc:text \null } \hspace #1 } } tocAct = #(define-music-function (parser location text) (markup?) (add-toc-item! 'tocActMarkup text)) \book { \markuplines \table-of-contents \tocAct \markup { Atto Primo } \tocItem \markup { Coro. Viva il nostro Alcide } \tocItem \markup { Cesare. Presti omai l'Egizzia terra } \tocAct \markup { Atto Secondo } \tocItem \markup { Sinfonia } \tocItem \markup { Cleopatra. V'adoro, pupille, saette d'Amore } \markup \null } @end lilypond @seealso Fichiers d'initialisation : @file{../ly/toc-init.ly}. @predefined @funindex \table-of-contents @code{\table-of-contents}, @funindex \tocItem @code{\tocItem}. @endpredefined @node Travail sur des fichiers texte @section Travail sur des fichiers texte @translationof Working with input files @menu * Insertion de fichiers LilyPond:: * Différentes éditions à partir d'une même source:: * Codage du texte:: * Affichage de notation au format LilyPond:: @end menu @node Insertion de fichiers LilyPond @subsection Insertion de fichiers LilyPond @translationof Including LilyPond files @funindex \include @cindex inclusion de fichiers Lorsqu'un projet prend de l'importance en volume, il est judicieux de le scinder en plusieurs fichiers, auxquels vous fereez référence avec un simple @example \include "autrefichier.ly" @end example Une ligne @code{\include "autrefichier.ly"} dans un fichier revient à recopier intégralement le contenu de @file{autrefichier.ly} à l'endroit même ou est placée l'instruction @code{\include}. Vous pouvez par exemple écrire un fichier individuel par instrument, puis les regrouper pour former le fichier @qq{conducteur}. Les différentes variables définies dans les fichiers séparés seront normalement reprises et utilisables dans le fichier formant le conducteur. Les sections balisées dans les fichiers individuels peuvent être réutilisées en différents endroit de la partition , comme expliqué à la rubrique @ref{Différentes éditions à partir d'une même source}. Lorsque le fichier auquel il est fait référence se trouve dans le même répertoire, donner seulement son nom en argument à la commande @code{\include} suffit. S'il se trouve ailleurs, vous devrez indiquer le chemin d'accès, absolu ou relatif, en respectant toutefois la syntaxe UNIX -- autrement dit, le séparateur de répertoire est une oblique normale @code{/} et non l'oblique inverse @code{\} de DOS/Windows. Par exemple, si le fichier @file{truc.ly} se trouve dans le répertoire supérieur au répertoire de travail, la ligne devra être @example \include "../stuff.ly" @end example @noindent ou bien, si les fichiers correspondant aux parties d'orchestre se trouvent dans le sous-répertoire @file{parties} relativement au répertoire courant, vous devrez mentionner @example \include "parties/VI.ly" \include "parties/VII.ly" ... etc. @end example Les fichiers à inclure peuvent eux-même contenir des instructions @code{\include}. Ces instructions @code{\include} de second niveau ne pourront, par défaut, être interprétées qu'une fois intégrées dans le fichier principal@tie{}; leur argument doit donc comporter le chemin relativement au fichier principal et non par rapport au fichier dan lesquel cette inclusion est mentionnée. Vous pouvez toutefois influer sur ce comportement à l'aide de l'option @code{-drelative-includes} en ligne de commande ou en ajoutant une clause @code{@w{#(ly:set-option 'relative-includes #t)}} en tête du fichier principal. Une fois @code{relative-include} activé, le chemin à suivre pour chacune des commandes @code{\include} sera pris relativement au fichier qui la contient. Vous pouvez inclure des fichiers dont vous spécifierez le chemin d'accès sur la ligne de commande au moment de lancer la compilation. L'appel à ces fichiers ne mentionnerra alors que leur nom. Par exemple, si vous voulez compiler avec cette méthode le fichier @file{principal.ly} qui inclut des fichiers situés dans le sous-répertoire @file{parties}, placez vous dans le répertoire contenant @file{principal.ly}, puis tapez @example lilypond --include=parties principal.ly @end example tout en ayant bien dans @file{principal.ly} @example \include "VI.ly" \include "VII.ly" ... etc @end example Lorsqu'un fichier est voué à être inclus dans nombre de partitions, vous pouvez le placer dans le répertoire de LilyPond @file{../ly}. Attention@tie{}: ce répertoire varie selon votre installation, comme indiqué au chapitre @rlearning{Autres sources de documentation}. Ce fichier sera inclus dès lors que vous fournirez uniquement son nom en argument à la fonction @code{\include}. C'est par exemple le cas du fichier de définition particulier @file{gregorian.ly}. Au moment où vous lancez LilyPond, un certain nombre de fichiers se retrouvent inclus par défaut@tie{}; il suffit d'activer le mode verbeux en faisant @code{lilypond --verbose} pour s'en rendre compte. Vous verrez ainsi défiler, en plus de nombreuses informations, le nom d'un certain nombre de fichier et de chemins d'accès. Les fichiers les plus important sont mentionnés au chapitre @rlearning{Autres sources de documentation}. Si vous venez à les modifier, rappelez-vous qu'ils seront écrasés à l'installation d'une nouvelle version de LilyPond. Vous trouverez quelques exemples simples d'utilisation de la commande @code{\include} au chapitre @rlearning{Conducteurs et parties}. @seealso Manuel d'initiation : @rlearning{Autres sources de documentation}, @rlearning{Conducteurs et parties}. @knownissues Lorsque vous incluez un fichier qui porte le même nom que l'un des fichiers d'initialisation de LilyPond, le fichier de la distribution de LilyPond aura préséance. @node Différentes éditions à partir d'une même source @subsection Différentes éditions à partir d'une même source @translationof Different editions from one source Différents mécanismes permettent de générer plusieurs versions d'une partition à partir d'une même source. Les variables -- ou idendificateurs -- sont sûrement le moyen le plus simple de combiner de différente manière des passages relativement longs, alors que les balises permettront de sélectionner de courts fragments selon leur utilisation. Quelle que soit la méthode utilisée, séparer la notation de la structure de la partition vous donnera plus de liberté dans l'agencement de l'ouvrage final, puisque vous ne reviendrez pas sur la musique qui le compose. @menu * Utilisation de variables:: * Utilisation de balises:: @end menu @node Utilisation de variables @unnumberedsubsubsec Utilisation de variables @translationof Using variables @cindex variables, utilisation de Un fragment musical identifié par une variable est réutilisable à divers endroits de la partition, comme nous l'avons vu à la rubrique @rlearning{Organisation du code source avec des variables}. Par exemple, une partition pour chœur @notation{a cappella} comporte souvent une réduction pour piano reprenant toutes les voix@tie{}; il s'agit de la même musique, et vous ne devrez donc la saisir qu'une seule fois. D'autre part, la musique issue de deux variables peut se combiner sur une seule portée, comme nous l'avons vu à la rubrique @ref{Regroupement automatique de parties}. Prenons l'exemple suivant@tie{}: @lilypond[verbatim,quote] sopranoMusic = \relative c'' { a4 b c b8( a) } altoMusic = \relative g' { e4 e e f } tenorMusic = \relative c' { c4 b e d8( c) } bassMusic = \relative c' { a4 gis a d, } allLyrics = \lyricmode {King of glo -- ry } << \new Staff = "Soprano" \sopranoMusic \new Lyrics \allLyrics \new Staff = "Alto" \altoMusic \new Lyrics \allLyrics \new Staff = "Tenor" { \clef "treble_8" \tenorMusic } \new Lyrics \allLyrics \new Staff = "Bass" { \clef "bass" \bassMusic } \new Lyrics \allLyrics \new PianoStaff << \new Staff = "RH" { \set Staff.printPartCombineTexts = ##f \partcombine \sopranoMusic \altoMusic } \new Staff = "LH" { \set Staff.printPartCombineTexts = ##f \clef "bass" \partcombine \tenorMusic \bassMusic } >> >> @end lilypond Générer une partition chorale ou la réduction pour piano ne requiert que de modifier la structure des éléments, sans aucunement toucher à la musique. Dans le cas d'une partition relativement longue, vous pouvez isoler la définition des différentes variables dans des fichiers séparés que vous rappellerez ensuite, comme indiqué à la rubrique @ref{Insertion de fichiers LilyPond}. @node Utilisation de balises @unnumberedsubsubsec Utilisation de balises @translationof Using tags @funindex \tag @funindex \keepWithTag @funindex \removeWithTag @cindex tag @cindex balise La commande @code{\tag #'@var{partieA}} affecte à une expression musicale le nom @var{partieA}. Les expressions ainsi balisées pourront être filtrées par la suite, à l'aide de @code{\keepWithTag@tie{}#'@var{nom}} ou @code{\removeWithTag@tie{}#'@var{nom}}. Ces filtres fonctionnent de la manière suivante@tie{}: @multitable @columnfractions .5 .5 @headitem Filtre @tab Résultat @item Musique balisée précédée de @code{\keepWithTag #'@var{nom}} @tab Musique non balisée et musique balisée par @var{nom} seront incluses@tie{}; la musique balisée autrement est exclue. @item Musique balisée précédée de @code{\removeWithTag #'@var{nom}} @tab Musique non balisée et fragments appelés autrement que @var{nom} seront inclus@tie{}; la musique balisée par @var{nom} est exclue. @item Musiqeu balisée non précédée de @code{\keepWithTag} ou @code{\removeWithTag} @tab Musique balisée et non balisée seront incluses. @end multitable Les arguments des commandes @code{\tag}, @code{\keepWithTag} et @code{\removeWithTag} doivent être un symbole (tel que @code{#'conducteur} ou @code{#'partie}), suivi d'une expression musicale. Dans l'exemple qui suit, nous obtenons deux versions du même extrait, l'une pour le conducteur, l'autre pour l'instrumentiste, et qui comportera les ornements développés. @lilypond[verbatim,quote] music = \relative g' { g8. c32 d \tag #'trills { d8.\trill } \tag #'expand { \repeat unfold 3 { e32 d } } c32 d } \score { \keepWithTag #'trills \music } \score { \keepWithTag #'expand \music } @end lilypond @noindent Il est parfois plus aisé d'exclure des fragments@tie{}: @lilypond[verbatim,quote] music = \relative g' { g8. c32 d \tag #'trills { d8.\trill } \tag #'expand {\repeat unfold 3 { e32 d } } c32 d } \score { \removeWithTag #'expand \music } \score { \removeWithTag #'trills \music } @end lilypond Ce principe de filtrage peut s'appliquer aux articulations, textes, etc. Il suffit de positionner @example -\tag #@var{ma-balise} @end example @noindent avant l'articulation ou le texte, comme ici : @example c1-\tag #'doigt ^4 c1-\tag #'gaffe ^"Attention !" @end example @noindent Ceci définira une note avec une indication conditionnelle de doigté ou un texte. Vous pouvez baliser différemment la même expression musicale en saisissant plusieurs @code{\tag}@tie{}: @lilypond[quote,verbatim] music = \relative c'' { \tag #'a \tag #'both { a4 a a a } \tag #'b \tag #'both { b4 b b b } } << \keepWithTag #'a \music \keepWithTag #'b \music \keepWithTag #'both \music >> @end lilypond L'application concomitante de plusieurs filtres @code{\removeWithTag} à la même expression musicale permet d'exclure plusieurs balisages@tie{}: @lilypond[verbatim,quote] music = \relative c'' { \tag #'A { a4 a a a } \tag #'B { b4 b b b } \tag #'C { c4 c c c } \tag #'D { d4 d d d } } { \removeWithTag #'B \removeWithTag #'C \music } @end lilypond L'application de plus d'un filtre @code{\keepWithTag} à la même expression musicale aboutit à l'exclusion de @b{tous} les balisages. En effet, si le premier filtre exclut tous les autres balisages, l'application du second exclura les effets du premier. @seealso Manuel d'initiation : @rlearning{Organisation du code source avec des variables}. Manuel de notation : @ref{Regroupement automatique de parties}, @ref{Insertion de fichiers LilyPond}. @ignore @c This warning is more general than this placement implies. @c Rests are not merged whether or not they come from tagged sections. @c Should be deleted? -td @knownissues Lorsqu'elles comportent des silences, ceux-ci ne seront pas fusionnés si vous imprimez une partition avec les deux sections balisées. @end ignore @node Codage du texte @subsection Codage du texte @translationof Text encoding @cindex Unicode @cindex UTF-8 @cindex non-ASCII characters LilyPond utilise le jeu de caractères défini par le consortium Unicode et la norme ISO/CEI@tie{}10646. Chaque caractère est identifié par un nom unique et associé à un point de code, ce qui permet dans l'absolu de couvrir tous les langages. Unicode permet de coder tous les caractères utilisés par toutes les langues écrites du monde. LilyPond utilise le codage UTF-8 (UTF pour @emph{Unicode Transformation Format}) qui permet de représenter les caractères latins sur un octet et les autres sur une longueur allant jusqu'à quatre octets. L'apparence réelle des caractères est déterminée par les glyphes ou graphèmes tels que définis dans les différentes polices disponibles. Une police, ou une fonte, définit la mise en correspondance d'un sous-ensemble de points de code unicode en glyphes. LilyPond recourt à la bibliothèque Pango pour assurer le rendu des textes multilingues. LilyPond n'effectue aucune conversion d'encodage que ce soit. Ceci implique donc que tout texte, qu'il s'agisse d'un titre, de paroles ou même d'instruction musicale, comportant des caractères non ASCII soit codé en UTF-8. Le plus sûr moyen de saisir du texte de la sorte consiste à utiliser un éditeur supportant l'unicode et à enregistrer vos fichier en UTF-8. C'est le cas pour la plupart des éditeurs actuels, que ce soit vim, Emacs, jEdit et GEdit. Tous les systèmes Windows postérieurs à NT utilisent Unicode en natif@tie{}; même Notepad est capable d'éditer et sauvegarder un fichie en UTF-8 -- sans parler de l'excellente alternative qu'est BabelPad. La compilation d'un fichier LilyPond comportant des caractères non ASCII qui n'aurait pas été enregistré dans l'encodage UTF-8 vous renverra l'erreur @example FT_Get_Glyph_Name () erreur : invalid argument @end example Voici un exemple utilisant du texte en cyrilique, en hébreux et en portugais. @lilypond[quote] %c No verbatim here as the code does not display correctly in PDF % Cyrillic bulgarian = \lyricmode { Жълтата дюля беше щастлива, че пухът, който цъфна, замръзна като гьон. } % Hebrew hebrew = \lyricmode { זה כיף סתם לשמוע איך תנצח קרפד עץ טוב בגן. } % Portuguese portuguese = \lyricmode { à vo -- cê uma can -- ção legal } \relative c' { c2 d e f g f e } \addlyrics { \bulgarian } \addlyrics { \hebrew } \addlyrics { \portuguese } @end lilypond Lorsque vous avez besoin d'un caractère dont vous connaissez le point de code mais que votre éditeur ne permet pas de saisir directement, vous pouvez utitliser les instructions @code{\char@tie{}##xhhhh} ou @code{\char@tie{}#dddd} au sein d'un bloc @code{\markup} -- @code{hhhh} et @code{dddd} correspondant respectivement à la valeur hexadécimale ou décimale. Même s'il est inutile de saisir les zéros superflus, il est de bon ton de stipuler les quatre caractères formant la représentation hexadécimale. Évitez cependant l'encodage UTF-8 d'un point de code après un @code{\char}@tie{}; les encodages UTF-8 comprennent un bit supplémentaire indiquant le nombre d'octets. Une table de correspondance entre les codes Unicode et le nom des caractères ainsi que leur code hexadécimal est disponible sur le site du consortium Unicode, @uref{http://www.unicode.org/}. Par exemple, @code{\char ##x03BE} et @code{\char #958} correspondent tous deux au caractère unicode U+03BE, dénommé @qq{Greek Small Letter Xi}. Quel que soit le point de code spécifié de cette manière, il ne vous sera alors pas nécessaire d'enregistrer votre fichier en UTF-8. Vous devrez toutefois disposer d'une fonte contenant ce caractère qui soit accessible à LilyPond. L'exemple suivant illustre la manière d'insérer un caractère sous sa forme hexadécimale, à la fois dans un repère, dans une articulation, dans des paroles et dans du texte indépendant. @lilypond[quote,verbatim] \score { \relative c'' { c1 \mark \markup { \char ##x03EE } c1_\markup { \tiny { \char ##x03B1 " to " \char ##x03C9 } } } \addlyrics { O \markup { \concat { Ph \char ##x0153 be! } } } } \markup { "Copyright 2008--2010" \char ##x00A9 } @end lilypond @cindex copyright Le signe @emph{copyright} dans le champ de titrage consacré s'inscrit de la manière suivante@tie{}: @example \header @{ copyright = \markup @{ \char ##x00A9 "2008" @} @} @end example @node Affichage de notation au format LilyPond @subsection Affichage de notation au format LilyPond @translationof Displaying LilyPond notation @funindex \displayLilyMusic La fonction musicale @code{\displayLilyMusic}, disponible uniquement pour un traitement en ligne de commande, permet d'afficher en notation LilyPond une expression musicale. Par exemple, @example @{ \displayLilyMusic \transpose c a, @{ c4 e g a bes @} @} @end example affichera @example @{ a,4 cis e fis g @} @end example LilyPond affichera le résultat sous forme de message en console, au milieu de toutes les informations de compilation. Afin d'isoler ces messages et enregistrer le résultat de la fonction @code{\display@{STUFF@}}, pensez à rediriger la sortie vers un fichier. @example lilypond fichier.ly >display.txt @end example @node Contrôle des sorties @section Contrôle des sorties @translationof Controlling output @untranslated @menu * Extraction de fragments musicaux:: * Ignorer des passages de la partition:: * Formats de sortie alternatifs:: * Changement des fontes musicales:: @end menu @node Extraction de fragments musicaux @subsection Extraction de fragments musicaux @translationof Extracting fragments of music @untranslated @node Ignorer des passages de la partition @subsection Ignorer des passages de la partition @translationof Skipping corrected music @untranslated @node Formats de sortie alternatifs @subsection Formats de sortie alternatifs @translationof Alternative output formats @untranslated @node Changement des fontes musicales @subsection Changement des fontes musicales @translationof Replacing the notation font @untranslated @subsubheading Instructions d'installation pour MacOS @translationof Installation Instructions for MacOS @untranslated @node Sortie MIDI @section Sortie MIDI @translationof MIDI output @untranslated @menu * Création de fichiers MIDI:: * Le bloc MIDI:: * Contenu de la sortie MIDI:: * Répétitions et MIDI:: * Gestion des nuances en MIDI:: * MIDI et percussions:: @end menu @node Création de fichiers MIDI @subsection Création de fichiers MIDI @translationof Creating MIDI files @untranslated @unnumberedsubsubsec Noms d'instrument @translationof Instrument names @node Le bloc MIDI @subsection Le bloc MIDI @translationof MIDI block @untranslated @node Contenu de la sortie MIDI @subsection Contenu de la sortie MIDI @translationof What goes into the MIDI output? @untranslated @unnumberedsubsubsec Éléments pris en compte dans le MIDI @translationof Supported in MIDI @unnumberedsubsubsec Éléments non pris en compte dans le MIDI @translationof Unsupported in MIDI @node Répétitions et MIDI @subsection Répétitions et MIDI @translationof Repeats in MIDI @cindex reprises développées @funindex \unfoldRepeats Au prix de quelques réglages, les reprises de toutes sortes peuvent être rendues dans le fichier MIDI. Il suffit pour cela de recourir à la fonction @code{\unfoldRepeats}, qui développe toutes les reprises. En d'autre termes, @code{\unfoldRepeats} transforme toutes les reprises en reprises de type @code{unfold}. @lilypond[quote,verbatim,fragment,line-width=8.0\cm] \unfoldRepeats { \repeat tremolo 8 {c'32 e' } \repeat percent 2 { c''8 d'' } \repeat volta 2 {c'4 d' e' f'} \alternative { { g' a' a' g' } {f' e' d' c' } } } \bar "|." @end lilypond Lorsque l'on veut utiliser @code{\unfoldRepeats} seulement pour le rendu MIDI, il faut établir deux blocs @code{\score} : un pour le MIDI, avec des reprises explicites, et l'autre pour la partition, avec des reprises notées sous forme de barres de reprise, de trémolo ou de symboles de pourcentage. Par exemple @example \score @{ @var{..musique..} \layout @{ .. @} @} \score @{ \unfoldRepeats @var{..musique..} \midi @{ .. @} @} @end example @node Gestion des nuances en MIDI @subsection Gestion des nuances en MIDI @translationof Controlling MIDI dynamics @untranslated @unnumberedsubsubsec Indications de nuance @translationof Dynamic marks @unnumberedsubsubsec Amplitude du volume en MIDI @translationof Overall MIDI volume @unnumberedsubsubsec Égalisation de plusieurs instruments (i) @translationof Equalizing different instruments (i) @unnumberedsubsubsec Égalisation de plusieurs instruments (ii) @translationof Equalizing different instruments (ii) @node MIDI et percussions @subsection MIDI et percussions @translationof Percussion in MIDI @untranslated