| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Working with input files
| 3.3.1 Insertion de fichiers LilyPond | ||
| 3.3.2 Différentes éditions à partir d’une même source | ||
| 3.3.3 Caractères spéciaux |
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Including LilyPond files
Lorsqu’un projet prend de l’importance en volume, il est judicieux de le scinder en plusieurs fichiers, auxquels vous ferez référence avec un simple
\include "autrefichier.ly" |
Une ligne \include "autrefichier.ly" dans un fichier revient à
recopier intégralement le contenu de ‘autrefichier.ly’ à l’endroit
même ou est placée l’instruction \include. Vous pouvez par
exemple écrire un fichier individuel par instrument, puis les regrouper
pour former le fichier « 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
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
\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 / et non l’oblique inverse \ de DOS ou Windows.
Par exemple, si le fichier ‘truc.ly’ se trouve dans le répertoire
supérieur au répertoire de travail, la ligne devra être
\include "../truc.ly" |
ou bien, si les fichiers correspondant aux parties d’orchestre se trouvent dans le sous-répertoire ‘parties’ relativement au répertoire courant, vous devrez mentionner
\include "parties/VI.ly" \include "parties/VII.ly" etc. |
Les fichiers à inclure peuvent eux-mêmes contenir des instructions
\include. Ces instructions \include de second niveau
seront, par défaut, interprétées par rapport à leur situation dans
l’arborescence. Tel sera, par exemple, le cas d’une biblothèque générale
libA créée pour utiliser des sous-fichiers à l’aide d’inclusions dans un
fichier catalogue, comme ici :
libA/ libA.ly A1.ly A2.ly … |
puis le fichier catalogue, libA.ly, qui contient
\include "A1.ly" \include "A2.ly" … |
Tout fichier .ly peut désormais consulter l’intégralité de cette
bibliothèque grâce à un simple
\include "~/libA/libA.ly" |
Vous pouvez toutefois influer sur ce comportement de manière globale à
l’aide de l’option ‘-drelative-includes=#f’ en ligne de
commande ou en ajoutant une clause
#(ly:set-option 'relative-includes #f) en tête du fichier
principal. En pareil cas, le chemin à suivre pour chacune des commandes
\include sera pris relativement au fichier principal. Selon
l’endroit où relative-includes est valorisé à #t ou
#f, la commande \include permettra d’incorporer des
fichiers contenus dans l’arborescence du répertoire principal et des
fichiers situés ailleurs.
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 mentionnera alors que leur nom. Par exemple, si vous voulez compiler avec cette méthode le fichier ‘principal.ly’ qui inclut des fichiers situés dans le sous-répertoire ‘parties’, placez vous dans le répertoire contenant ‘principal.ly’, puis tapez
lilypond --include=parties principal.ly |
tout en ayant bien dans ‘principal.ly’
\include "VI.ly" \include "VII.ly" etc. |
Lorsqu’un fichier est voué à être inclus dans nombre de partitions, vous
pouvez le placer dans le répertoire de LilyPond ‘../ly’.
Attention : ce répertoire varie selon votre installation, comme
indiqué au chapitre
(learning)Autres sources de documentation section ‘Autres sources de documentation’ dans Manuel d’initiation. Ce
fichier sera inclus dès lors que vous fournirez uniquement son nom en
argument à la fonction \include. C’est par exemple le cas du
fichier de définition particulier ‘gregorian.ly’.
Au moment où vous lancez LilyPond, un certain nombre de fichiers se
retrouvent inclus par défaut ; il suffit d’activer le mode verbeux
en faisant lilypond --verbose pour s’en rendre compte. Vous
verrez ainsi défiler, en plus de nombreuses informations, le nom d’un
certain nombre de fichiers et de chemins d’accès. Les fichiers les plus
important sont mentionnés au chapitre
(learning)Autres sources de documentation section ‘Autres sources de documentation’ dans Manuel d’initiation. 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
\include au chapitre
(learning)Conducteurs et parties section ‘Conducteurs et parties’ dans Manuel d’initiation.
Manuel d’initiation : (learning)Autres sources de documentation section ‘Autres sources de documentation’ dans Manuel d’initiation, (learning)Conducteurs et parties section ‘Conducteurs et parties’ dans Manuel d’initiation.
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.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Different editions from one source
Plusieurs méthodes permettent de générer différentes versions d’une partition à partir d’une même source. Les variables – ou identificateurs – sont sûrement le moyen le plus simple de combiner de différentes manières 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.
| Utilisation de variables | ||
| Utilisation de balises | ||
| Globalisation des réglages |
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Using variables
Un fragment musical identifié par une variable est réutilisable à divers endroits de la partition, comme nous l’avons vu à la rubrique (learning)Organisation du code source avec des variables section ‘Organisation du code source avec des variables’ dans Manuel d’initiation. Par exemple, une partition pour chœur a cappella comporte souvent une réduction pour piano reprenant toutes les voix ; 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 Regroupement automatique de parties. Prenons l’exemple suivant :
sopranoMusic = \relative { a'4 b c b8( a) } altoMusic = \relative { e'4 e e f } tenorMusic = \relative { c'4 b e d8( c) } bassMusic = \relative { 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 } >> >>
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 Insertion de fichiers LilyPond.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Using tags
La commande \tag #'partieA affecte à une expression
musicale le nom partieA. Les expressions ainsi balisées pourront
être filtrées par la suite, à l’aide de \keepWithTag #'nom
ou \removeWithTag #'nom. Ces filtres fonctionnent de la
manière suivante :
| Filtre | Résultat |
|---|---|
Musique balisée précédée de \keepWithTag #'nom ou
\keepWithTag #'(nom1 nom2…) | Musique non balisée et musique balisée par l’un des noms de balise fournis seront incluses ; la musique balisée autrement est exclue. |
Musique balisée précédée de \removeWithTag #'nom ou
\removeWithTag #'(nom1 nom2…) | Musique non balisée et fragments appelés autrement que par l’un des noms fournis seront inclus ; la musique balisée par l’un des noms mentionnés est exclue. |
Musique balisée non précédée de \keepWithTag ou
\removeWithTag | Musique balisée et non balisée seront incluses. |
L’argument des commandes \tag, \keepWithTag et
\removeWithTag doit être un symbole ou une liste de symboles
(tel que #'conducteur ou #'(violonI violonII)), suivi
d’une expression musicale. Si, et seulement si les symboles sont
des indentifiants LilyPond valides (caractères alphabétiques uniquement,
sans chiffre, souligné ou tiret) qui ne peuvent se confondre avec des
notes, le #' peut s’omettre et, pour raccourcir, une liste de
symbole peut utiliser le point en séparateur – autrement dit,
\tag #'(violinI violinII) peut s’écrire \tag
violinI.violinII. Ceci s’applique aussi bien pour \keepWithTag
que pour \removeWithTag. Les commandes de balisage sont des
fonctions musicales ; elles ne peuvent donc s’utiliser pour filtrer des
éléments qui ne sont pas des expressions musicales tels que des blocs
\book ou \score.
Dans l’exemple qui suit, nous obtenons deux versions du même extrait, l’une pour le conducteur, l’autre pour l’instrumentiste qui, elle, comportera les ornements développés.
music = \relative { g'8. c32 d \tag #'trills { d8.\trill } \tag #'expand { \repeat unfold 3 { e32 d } } c32 d } \score { \keepWithTag #'trills \music } \score { \keepWithTag #'expand \music }
Il est parfois plus aisé d’exclure des fragments :
music = \relative { g'8. c32 d \tag #'trills { d8.\trill } \tag #'expand {\repeat unfold 3 { e32 d } } c32 d } \score { \removeWithTag #'expand \music } \score { \removeWithTag #'trills \music }
Ce principe de filtrage peut s’appliquer aux articulations, textes, etc. Il suffit de positionner
-\tag #ma-balise |
avant l’articulation ou le texte, comme ici :
c1-\tag #'doigt ^4 c1-\tag #'gaffe ^"Attention !" |
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 \tag ou bien en combinant plusieurs
balises dans une liste :
music = \relative c'' { \tag #'a \tag #'both { a4 a a a } \tag #'(b both) { b4 b b b } } << \keepWithTag #'a \music \keepWithTag #'b \music \keepWithTag #'both \music >>
L’application concomitante de plusieurs filtres \removeWithTag à
la même expression musicale permet d’exclure plusieurs balisages.
Une liste fournie en argument à un unique \removeWithTag
produira le même effet :
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 } } \new Voice { \removeWithTag #'B \removeWithTag #'C \music \removeWithTag #'(B C) \music }
L’application de plus d’un filtre \keepWithTag à la même
expression musicale aboutit à l’exclusion de tous les balisages.
En effet, si le premier filtre exclut tous les autres balisages,
l’application du second exclura les effets du premier.
L’utilisation d’une unique commande \keepWithTag avec une
liste de balises est en pareil cas des plus pertinente : seront
exclus tous les fragments non concernés par l’une quelconque des
balises mentionnées.
music = \relative c'' { \tag #'violinI { a4 a a a } \tag #'violinII { b4 b b b } \tag #'viola { c4 c c c } \tag #'cello { d4 d d d } } \new Staff { \keepWithTag #'(violinI violinII) \music }
imprimera les \tags violinI et violinII, mais ni
viola ni cello.
Bien que \keepWithTag soit efficace pour gérer un jeu
d’alternatives, le rejet de musique filtrée par des balises
étrangères se révèle problématique lorsque les \tag sont
utilisés à plusieurs fins. Des « groupements de balises » peuvent
alors être déclarés :
\tagGroup #'(violinI violinII viola cello) |
Les différents filtres appartiennent désormais tous à un seul regroupement. Notez bien qu’une balise ne saurait être membre de plusieurs regroupements.
\keepWithTag #'violinI … |
ne prendra désormais en compte que la musique concernée par la balise
violinI du groupe de filtres : tout élément de la musique qui
serait balisé par l’un des autres filtres de ce jeu sera rejeté.
music = \relative { \tagGroup #'(violinI violinII viola cello) \tag #'violinI { c''4^"violinI" c c c } \tag #'violinII { a2 a } \tag #'viola { e8 e e2. } \tag #'cello { d'2 d4 d } R1^"non balisé" } \new Voice { \keepWithTag #'violinI \music }
Dans le cadre de la commande \keepWithTag, seules les balises du
regroupement mentionnées dans la commande seront visibles.
Il peut arriver que vous ayez besoin de raccorder quelque chose en un
point particulier d’une expression musicale. Les commandes
\pushToTag et \appendToTag permettent d’insérer du
matériau, qu’il soit antérieur ou postérieur, à des éléments
d’une construction musicale existante. La musique séquentielle ou
simultanée comporte assurément des éléments :
music = { \tag #'here { \tag #'here <<c''>> } } { \pushToTag #'here c' \pushToTag #'here e' \pushToTag #'here g' \music \appendToTag #'here c' \appendToTag #'here e' \appendToTag #'here g' \music }
Ces deux instructions sont affectées d’une balise, le matériau à raccorder à chaque instance de la balise, et l’expression balisée.
Manuel d’initiation : (learning)Organisation du code source avec des variables section ‘Organisation du code source avec des variables’ dans Manuel d’initiation.
Manuel de notation : Insertion de fichiers LilyPond, Regroupement automatique de parties.
L’application d’un \relative à une expression musicale
obtenue par filtrage à l’aide de \keepWithTag ou
\removeWithTag peut générer des changements d’octave,
puisque seules les hauteurs récupérées dans ce filtre seront
prises en considération. Une instruction \relative qui
précède les commandes \keepWithTag ou
\removeWithTag permet d’éviter ce risque, dans la mesure où
elle viendra « recaler » ces hauteurs récupérées.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Using global settings
Vous pouvez regrouper dans un fichier indépendant vos réglages personnels que vous inclurez au besoin :
lilypond -dinclude-settings=MES_REGLAGES.ly MA_PARTITION.ly |
Vous pouvez ainsi stocker dans un fichier séparé vos réglages en matière de format de papier, de fontes utilisées ou vos définitions particulières. Selon le fichier de réglages que vous mentionnerez, vous obtiendrez facilement différentes éditions à partir d’une même source quelle qu’elle soit.
Cette technique peut s’utiliser en combinaison avec des feuilles de styles, comme indiqué au chapitre (learning)Feuilles de style section ‘Feuilles de style’ dans Manuel d’initiation.
Manuel d’initiation : (learning)Feuilles de style section ‘Feuilles de style’ dans Manuel d’initiation, (learning)Organisation du code source avec des variables section ‘Organisation du code source avec des variables’ dans Manuel d’initiation.
Manuel de notation : Insertion de fichiers LilyPond.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Special characters
| Codage du texte | ||
| Unicode | ||
| Équivalents ASCII |
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Text encoding
LilyPond utilise le jeu de caractères défini par le consortium Unicode et la norme ISO/CEI 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 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 – un titre, des paroles ou même une 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 ; même Notepad est capable d’éditer et sauvegarder un fichier 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
FT_Get_Glyph_Name () erreur : invalid argument |
Voici un exemple utilisant du texte en cyrillique, en hébreux et en portugais.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof Unicode
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 utiliser les instructions \char ##xhhhh ou
\char #dddd au sein d’un bloc \markup – hhhh
et 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 \char ; 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, http://www.unicode.org/.
Par exemple, \char ##x03BE et \char #958 correspondent
tous deux au caractère unicode U+03BE, dénommé « 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.
\score { \relative { c''1 \mark \markup { \char ##x03EE } c1_\markup { \tiny { \char ##x03B1 " to " \char ##x03C9 } } } \addlyrics { O \markup { \concat { Ph \char ##x0153 be! } } } } \markup { "Copyright 2008--2020" \char ##x00A9 }
Le signe copyright dans le champ de titrage consacré s’inscrit de la manière suivante :
\header {
copyright = \markup { \char ##x00A9 "2008" }
}
|
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] | [Racine] | [Table des matières] | [Index] | [ ? ] |
@translationof ASCII aliases
Dès lors que vous aurez inclus la liste de leur équivalent ASCII, LilyPond reconnaîtra un certain nombre de caractères spéciaux :
\paper { #(include-special-characters) } \markup "&flqq; – &OE;uvre incomplète… &frqq;" \score { \new Staff { \repeat unfold 9 a'4 } \addlyrics { This is al -- so wor -- kin'~in ly -- rics: –_&OE;… } } \markup \column { "The replacement can be disabled:" "– &OE; …" \override #'(replacement-alist . ()) "– &OE; …" }
L’extension de cette liste est possible aussi bien de manière globale :
\paper { #(add-text-replacements! '(("100" . "hundred") ("dpi" . "dots per inch"))) } \markup "A 100 dpi."
qu’en un point particulier de votre source :
\markup \replace #'(("100" . "hundred") ("dpi" . "dots per inch")) "A 100 dpi."
Manuel de notation : Liste des caractères spéciaux.
Fichiers d’initialisation : ‘ly/text-replacements.ly’.
| [ < ] | [ > ] | [ << ] | [Plus haut] | [ >> ] |
Ce document a été généré le le 13 juillet 2020 par gub en utilisant texi2html 1.82.
Autres langues : English, català, deutsch, español, italiano, 日本語.
À propos de la sélection automatique de la langue.