Introduction à la personnalisation de LilyPond

Bonjour à tous,
Je cherche à savoir où je pourrais trouver une bonne introduction, lisible, compréhensible, pour "personnaliser" LilyPond : créer de nouvelles "commandes", et modifier celles qui existent.
Par exemple :
Mes titres de pièces sont toujours

\header { piece = \markup \fill-line \bold \large { "Entrée pour les Fleuves et les Nymphes" } }

(en grand, centrés, gras)
Je suis à peu près sûr qu'il existe un moyen pour ne pas avoir à la préciser systématiquement, mais de modifier la définition de "piece" pour que je puisse écrire directement

\header { piece = "Entrée pour les Fleuves et les Nymphes" }

Je ne vous demande pas de me le faire, mais de m'indiquer le ou les moyens qui permettent d'y arriver, pour que je puisse le refaire ensuite.
Autre exemple :
J'ai récupéré dans un fichier la commande "tempoMark" définie comme suit :

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 { \italic $markp }
#})

Mais je ne sais pas du tout comment ça se comprend, quelle est la syntaxe pour écrire ce genre de choses.

Je ne suis pas un complet béotien, vu que je suis un peu habitué à LaTeX...
Merci d'avance,
L.

···

Commander un cadeau en ligne discrètement? Voir la solution offerte par Internet Explorer8

Le 31/03/10 16:06, Loïc CHAHINE a écrit :

Bonjour à tous,
Je cherche à savoir où je pourrais trouver une bonne introduction, lisible, compréhensible, pour "personnaliser" LilyPond : créer de nouvelles "commandes", et modifier celles qui existent.
Par exemple :
Mes titres de pièces sont toujours

\header { piece = \markup \fill-line \bold \large { "Entrée pour les Fleuves et les Nymphes" } }

(en grand, centrés, gras)
Je suis à peu près sûr qu'il existe un moyen pour ne pas avoir à la préciser systématiquement, mais de modifier la définition de "piece" pour que je puisse écrire directement

\header { piece = "Entrée pour les Fleuves et les Nymphes" }

Je ne vous demande pas de me le faire, mais de m'indiquer le ou les moyens qui permettent d'y arriver, pour que je puisse le refaire ensuite.
Autre exemple :
J'ai récupéré dans un fichier la commande "tempoMark" définie comme suit :

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 { \italic $markp }
#})

Mais je ne sais pas du tout comment ça se comprend, quelle est la syntaxe pour écrire ce genre de choses.

Je ne suis pas un complet béotien, vu que je suis un peu habitué à LaTeX...
Merci d'avance,
L.


Commander un cadeau en ligne discrètement? [Voir la solution offerte par Internet Explorer8](http://clk.atdmt.com/FRM/go/207186971/direct/01/)

`
``
_______________________________________________
liste de diffusion lilypond-user-fr
[lilypond-user-fr@gnu.org](mailto:lilypond-user-fr@gnu.org)
[http://lists.gnu.org/mailman/listinfo/lilypond-user-fr](http://lists.gnu.org/mailman/listinfo/lilypond-user-fr)
`

Bonjour Loïc,

jette un coup d'oeil sur: --> [http://wiki.lilynet.net/index.php/Fr:contributions/Lilypond_Encyclopedia](http://wiki.lilynet.net/index.php/Fr:contributions/Lilypond_Encyclopedia)
en consultant plus précisément les rubriques "en-tête","texte" & "titre". Il existe sûrement d'autres modèles sur LSR car mon inventaire chaque jour plus complet ne le sera jamais complètement puisque tous les 2/3 jours de nouvelles contributions arrivent
sur LSR --> [http://lsr.dsi.unimi.it/](http://lsr.dsi.unimi.it/)

cordialement
François-Xavier Jean

Loïc CHAHINE a écrit :

Bonjour à tous,
Je cherche à savoir où je pourrais trouver une bonne introduction, lisible, compréhensible, pour "personnaliser" LilyPond : créer de nouvelles "commandes", et modifier celles qui existent.
Par exemple :
Mes titres de pièces sont toujours

\header { piece = \markup \fill-line \bold \large { "Entrée pour les Fleuves et les Nymphes" } }

(en grand, centrés, gras)
Je suis à peu près sûr qu'il existe un moyen pour ne pas avoir à la préciser systématiquement, mais de modifier la définition de "piece" pour que je puisse écrire directement

\header { piece = "Entrée pour les Fleuves et les Nymphes" }

Je ne vous demande pas de me le faire, mais de m'indiquer le ou les moyens qui permettent d'y arriver, pour que je puisse le refaire ensuite.
Autre exemple :
J'ai récupéré dans un fichier la commande "tempoMark" définie comme suit :

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 { \italic $markp }
#})

Mais je ne sais pas du tout comment ça se comprend, quelle est la syntaxe pour écrire ce genre de choses.

Je ne suis pas un complet béotien, vu que je suis un peu habitué à LaTeX...
Merci d'avance,
L.


Commander un cadeau en ligne discrètement? Voir la solution offerte par Internet Explorer8


---

_______________________________________________
liste de diffusion lilypond-user-fr
[lilypond-user-fr@gnu.org](mailto:lilypond-user-fr@gnu.org)
[http://lists.gnu.org/mailman/listinfo/lilypond-user-fr](http://lists.gnu.org/mailman/listinfo/lilypond-user-fr)
  

Bonjour à toute la troupe.

Les paramètres par défaut des titres sont (cf http://www.lilypond.org/doc/v2.13//Documentation/notation/custom-titles#Custom-titles) dans ../ly/titling-init.ly : bonne plngée !

JMarc

Avec `define-music-function', on définit une fonction qui construit de la musique,
ce qu'on appelle plus précisément : une expression musicale.
`define-music-function' est une construction en langage Scheme, en effet on voit
qu'elle est introduite par # : le dièse indique qu'on passe du langage LilyPond
au langage Scheme. Alors, à l'intérieur de la construction `define-music-function',
il faut construire une expression musicale en Scheme. Sans entrer dans les détails,
il y a quelques années c'était très compliqué. On était obligé de passer par les
primitives de fabrication des expression musicales, telles que `make-music', et
c'était très verbeux. À présent, c'est beaucoup plus simple : on peut utiliser
la syntaxe LilyPond à l'intérieur de la syntaxe Scheme, en utilisant #{ ... #}.
Tout ce qui se trouve entre #{ et #} sera traité comme une expression en langage
LilyPond habituel. Mieux : on peut faire référence à des variables scheme, tels
que les paramètres de `define-music-function' par exemple, dans l'expression
LilyPond à l'intérieur des #{ #}, en les précédant du caractère `$'.

Donc, l'expression suivante :

   #{ \mark \markup { \italic $markp } #}

où `markp' est l'argument de la commande, est interprétée comme si on écrivait en
langage LilyPond :

  \mark \markup { \italic \markp }

et c'est cette expression musicale qui est placée là où la function musicale
est appelée.

Voir <http://lilypond.org/doc/v2.13/Documentation/extending/music-functions&gt;

Une note au passage : cette commande \tempoMark est obsolète, depuis que la
commande \tempo accepte un markup en argument.

Nicolas

···

Le 31 mars 2010 à 16:06, Loïc CHAHINE a écrit :

J'ai récupéré dans un fichier la commande "tempoMark" définie comme suit :
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 { \italic $markp }
#})

J'ai récupéré dans un fichier la commande "tempoMark" définie comme suit :
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 { \italic $markp }
#})

Avec `define-music-function', on définit une fonction qui construit de la musique,
ce qu'on appelle plus précisément : une expression musicale.
`define-music-function' est une construction en langage Scheme, en effet on voit
qu'elle est introduite par # : le dièse indique qu'on passe du langage LilyPond
au langage Scheme. Alors, à l'intérieur de la construction `define-music-function',
il faut construire une expression musicale en Scheme. Sans entrer dans les détails,
il y a quelques années c'était très compliqué. On était obligé de passer par les
primitives de fabrication des expression musicales, telles que `make-music', et
c'était très verbeux. À présent, c'est beaucoup plus simple : on peut utiliser
la syntaxe LilyPond à l'intérieur de la syntaxe Scheme, en utilisant #{ ... #}.
Tout ce qui se trouve entre #{ et #} sera traité comme une expression en langage
LilyPond habituel. Mieux : on peut faire référence à des variables scheme, tels
que les paramètres de `define-music-function' par exemple, dans l'expression
LilyPond à l'intérieur des #{ #}, en les précédant du caractère `$'.

Donc, l'expression suivante :

  #{ \mark \markup { \italic $markp } #}

où `markp' est l'argument de la commande, est interprétée comme si on écrivait en
langage LilyPond :

\mark \markup { \italic \markp }

et c'est cette expression musicale qui est placée là où la function musicale
est appelée.

Voir <http://lilypond.org/doc/v2.13/Documentation/extending/music-functions&gt;

Une note au passage : cette commande \tempoMark est obsolète, depuis que la
commande \tempo accepte un markup en argument.

Nicolas

Merci pour ces éclaircissements, car le passage du Lilypond "classique" au Lilypond "intelligent" se faisait jusqu'à présent par essais aléatoires, et souvent échecs et abandon.

Mais à la réflexion, c'est vrai, il y a là un fossé difficile à franchir. Comment aborder Scheme ? Où trouver un tutoriel basique, puis le minimum pour l'utiliser avec Lilypond.

Pour celui qui a abandonné la programmation depuis plusieurs années, et resté au stade des langages rigoureux tels le C, la difficulté est grande.

En tout cas, il y a des promesses de belles réalisations après le B-A-BA du tutoriel de base Lilypond.

Bonne fin de nuit à tous,

Jean-François

Je ne comprends pas ce qualificatif de rigoureux appliqué à un
langage de programmation.

···

Le 1 avr. 2010 à 04:25, j-f.lucarelli a écrit :

et resté au stade des langages rigoureux tels le C

Merci à tous !
Je crois que Nicolas a trouvé exactement ce qu'il me faut. Il n'y a plus
qu'à, comme on dit.
L.

···

--
View this message in context: http://n2.nabble.com/Introduction-a-la-personnalisation-de-LilyPond-tp4831000p4839733.html
Sent from the LilyPond French Users mailing list archive at Nabble.com.

et resté au stade des langages rigoureux tels le C

Je ne comprends pas ce qualificatif de rigoureux appliqué à un
langage de programmation.

C'est vrai, tous les langages sont rigoureux pour l'ordinateur, au sens où toute ambiguité doit être inexistante. Particulièrement le C qui est proche de l'assembleur, tout en privilégiant l'aspect structuré des programmes et des données. Il était, en son temps, le langage le plus puissant, et j'ai pu réaliser sur micro-ordinateur des applications qui ne tournaient que péniblement sur des mainframes.

Pourtant, des langages tels que le c++ désorientent non pas la machine, mais le programmeur (ce fut mon cas). En effet, on crée ses propres fonctions, on réorganise le langage, avec pour résultat une relecture plus difficile pour un autre programmeur.
Un langage qui se rapproche quelque peu de la pensée humaine, certes, mais qui ne cible pas la vitesse d'exécution.

Ce n'est qu'un avis, de la part de quelqu'un qui n'a jamais pu maîtriser le c++ (mais l'âge explique peut-être ceci :-/)

Amicalement,

Jean-François