Subject: Espacement vertical de markups

From: éric BELLOCQ <[email-masked]>
Date: Fri, 26 Aug 2022 12:44:18 +0000 (UTC)

Bonjour,
malgré mes recherches, je ne trouve pas faire, dans cet exemple :

\score {
 \new RhythmicStaff {
   \textLengthOn
  4-"11"-"22" 4-"11"-"22)" 4-"11"-" "-"33" 4-"11"-"="-"33" 4-"11"-"22"-"33" 
 }
}

pour que les markups s'alignent sur des lignes horizontales homogènes (spécialement quand il y a un vide " " qui devrait prendre la même place qu'un nombre).
C'est pour tester une sorte de tablature.

Bien à vous,
Éric

---

From: Pierre Perol-Schneider <[email-masked]>
Date: Fri, 26 Aug 2022 16:49:36 +0200

Bonjour Éric,
En espérant avoir bien compris la demande :

%%
\score {
 \new RhythmicStaff {
   \textLengthOn
  4-\markup\override #'(baseline-skip . 2.2)\center-column { 11 22 }
  4-\markup\override #'(baseline-skip . 2.2)\center-column { 11 22) }
  4-\markup\override #'(baseline-skip . 2.2)\center-column { 11 33 }
  4-\markup\override #'(baseline-skip . 2.2)\center-column { 11 = 22 }
  4-\markup\override #'(baseline-skip . 2.2)\center-column { 11 22 33 }
 }
}

%% en moins fastidieux ?
#(define-markup-command (indic layout props arg1 arg2 arg3)
    (markup?  markup? markup?)
    (interpret-markup layout props
    #{
      \markup
        \override #'(baseline-skip . 2.2)
        \center-column { #arg1 #arg2 #arg3 }
    #}))

\score {
 \new RhythmicStaff {
   \textLengthOn
  4-\markup\indic 11 22 ""
  4-\markup\indic 11 22) ""
  4-\markup\indic 11 33 ""
  4-\markup\indic 11 = 33
  4-\markup\indic 11 22 33
 }
}
%

Cordialement,
Pierre

Le ven. 26 août 2022 à 14:44, éric BELLOCQ <[email-masked]> a écrit :

> pour que les markups s'alignent sur des lignes horizontales homogènes
> (spécialement quand il y a un vide " " qui devrait prendre la même place
> qu'un nombre).

---

From: éric BELLOCQ <[email-masked]>
Date: Fri, 26 Aug 2022 20:38:11 +0000 (UTC)

Merci Pierre pour la fonction,
oui le rendu est tout à fait ce que je cherche.
Je me permets d'abuser avec une question en plus : 
est-il compliqué d'avoir un nombre d'argument variable pour éviter d'avoir à coder trop de d'arguments vides c-à-d les "" quand il y a moins de lignes que le maximum ?

Éric
     Le vendredi 26 août 2022, 16:49:51 UTC+2, Pierre Perol-Schneider <[email-masked]> a écrit :  
 
 Bonjour Éric,En espérant avoir bien compris la demande :
%%\score {
 \new RhythmicStaff {
   \textLengthOn

%% en moins fastidieux ?

\score {
 \new RhythmicStaff {
   \textLengthOn
  4-\markup\indic 11 22 "" 
}%
Cordialement,Pierre

Bonjour,

\score {
 \new RhythmicStaff {
   \textLengthOn

Bien à vous,
Éric

---

From: Jean Abou Samra <[email-masked]>
Date: Fri, 26 Aug 2022 22:56:58 +0200

Le 26/08/2022 à 22:38, éric BELLOCQ a écrit :
> est-il compliqué d'avoir un nombre d'argument variable pour éviter 
> d'avoir à coder trop de d'arguments vides c-à-d les "" quand il y a 
> moins de lignes que le maximum ?

C'est possible, en donnant à la fonction un seul argument de type
markup-list? au lieu de plusieurs arguments de type markup? . Par
contre, il faut alors mettre des accolades (logique, sinon
LilyPond ne pourrait pas savoir où les arguments se terminent).

\version "2.22.2"

#(define-markup-command (indic layout props args)
     (markup-list?)
     (interpret-markup layout props
     #{
       \markup
         \override #'(baseline-skip . 2.2)
         \center-column { #args }
     #}))

\score {
  \new RhythmicStaff {
    \textLengthOn
   4-\markup\indic { 11 22 }
   4-\markup\indic { 11 22) }
   4-\markup\indic { 11 33 }
   4-\markup\indic { 11 = 33 }
   4-\markup\indic { 11 22 33 }
  }
}

D'ailleurs, en réalité on n'a même pas besoin d'une fonction ici (mais
la technique est moins connue) :

\version "2.22.2"

\score {
  \new RhythmicStaff {
    \textLengthOn
    \override TextScript.baseline-skip = 2.2
   4-\markup \center-column { 11 22 }
   4-\markup \center-column { 11 22) }
   4-\markup \center-column { 11 33 }
   4-\markup \center-column { 11 = 33 }
   4-\markup \center-column { 11 22 33 }
  }
}

Et si vous trouvez le nom \center-column trop long, vous pouvez toujours
faire

\version "2.22.2"

%{
#(define-markup-command (cc layout props args) (markup-list?)
    (interpret-markup layout props #{ \markup \center-column { #args } #}))
%}
% ou en plus concis :
\markup cc = #center-column-markup

\score {
  \new RhythmicStaff {
    \textLengthOn
    \override TextScript.baseline-skip = 2.2
   4-\markup \cc { 11 22 }
   4-\markup \cc { 11 22) }
   4-\markup \cc { 11 33 }
   4-\markup \cc { 11 = 33 }
   4-\markup \cc { 11 22 33 }
  }
}

Bref, comme souvent, il y a beaucoup de possibilités.

La page de la documentation sur la définition de commandes pour
markup personnalisées est ici :

https://lilypond.org/doc/v2.23/Documentation/extending/new-markup-command-definition

Cordialement,
Jean

---

From: éric BELLOCQ <[email-masked]>
Date: Fri, 26 Aug 2022 22:53:36 +0000 (UTC)

Merci beaucoup Jean.
La dernière possibilité "peu connue", sans fonction est elle documenté dans le manuel ?
Je ne trouve pas.

Sinon, il y avait un souci quand le 1er argument est de hauteur très différente.
J'ai ajouté un staff.padding qui semble bien faire l'affaire :

\version "2.22.1"

\score {
 \new RhythmicStaff {
 \textLengthOn
 \override TextScript.baseline-skip = 2.5
 \override TextScript.staff-padding = 3
 4-\markup \cc { 11 22 }
 4-\markup \cc { " " 22 }
 4-\markup \cc { … 22 33 }
 4-\markup \cc { x 22 33 }
 4-\markup \cc { () 22 33 }
 4-\markup \cc { | ²22’ 33 }
 4-\markup \cc { 11 " " " " 44 }
 4-\markup \cc { 11 22 (|) 44 }
 }
}

Ce genre de saisie permettra de graver, entre autres, de la tablature allemande de luth renaissance.
Bien-sûr de façon purement graphique, sans lien avec une portée musicale, mais c'est déjà bien.
Pour un exemple de cette tablature :
http://www.sf-luth.org/?Histoire_du_Luth/Qu%27est-ce_qu%27une_Tablature_%3F

Éric
     Le vendredi 26 août 2022, 22:57:04 UTC+2, Jean Abou Samra <[email-masked]> a écrit :  

\version "2.22.2"

\score {
  \new RhythmicStaff {
    \textLengthOn

\version "2.22.2"

\score {
  \new RhythmicStaff {
    \textLengthOn

\version "2.22.2"

%{

\score {
  \new RhythmicStaff {
    \textLengthOn

Cordialement,
Jean

---

From: Pierre Perol-Schneider <[email-masked]>
Date: Sat, 27 Aug 2022 08:11:58 +0200

Bonjour Éric, bonjour Jean,
@Jean, merci pour les exemples les fonctions et les explications ;
super pédagogue !!
@ Éric : j'ai bossé sur la tablature allemande il y a quelques années.
De mémoire, ça n'était pas suffisamment au point.
L'idée -- si je me souvient bien -- était d'affecter une voix et une
tablature par corde.
Pour chaque tablature j'y associais les lettres correspondantes aux cases.
(J'avais même commencé à me faire une petite base de données
"tablatures" lié aux compositeurs.)
Voilà, si ça peut t'aiguiller pour de futures idées... Mais un markup
fait très bien l'affaire aussi :) !!
Cordialement,
Pierre

---

From: Pierre Perol-Schneider <[email-masked]>
Date: Sat, 27 Aug 2022 08:17:38 +0200

PS. voir FretLabels pour les associations lettres/case, et aussi
https://lsr.di.unimi.it/LSR/Item?id=920 par ex.

---

From: éric BELLOCQ <[email-masked]>
Date: Sat, 27 Aug 2022 08:21:57 +0000 (UTC)

Bonjour,
grand merci pour ces échanges.

Jean :
tout ce que je trouve dans le manuel des extensions de fonctionnalités est en 2.5.1 où il y a l'équivalence :
Lilypond : \markup truc
avec
Scheme : (markup truc) 

Vu mon peu de connaissance en Scheme, je n'arrive pas à réduire encore plus la saisie de ton code sans fonction : j'essaye de mettre 
-\markup \cc
dans une variable sans succès.
J'ai eu la vague idée de créer une fonction markup personalisée pour intégrer le résultat de la fonction markup-list proposée précédemment mais ça me dépasse de beaucoup.

Pierre, pour la tablature allemande :

1. je pense qu'il n'y que très peu d'intérêt à avoir la possibilité d'en produire à partir de code Lilypond standart en notes : qui de nos jours aurait besoin de cela ? Les luthistes n'utilisent cette tablature que pour lire directement les sources anciennes quand ils ont eu le courage de l'apprendre (très rare !!)

2. la création d'une sorte de \tabmode a été maintes fois et longuement discutée et bute sur 2 problématiques : d'une part le choix des enharmonies qu'une tablature ne saurait définir, et d'autre part le choix des voix de polyphonie. Ces 2 problématiques sont en fin de compte ingérables, je n'y revient pas ici. 
Même en tab. allemande, qui pourrait montrer une polyphonie stricte, les anciens n'ont jamais trouvé la même souplesse que dans la notation musicale. Dans un autre champ qui n'a rien à voir, même les tablatures d'orgues largement utilisées (Bach a possiblement appris à noter la musique en commençant par ça) on finit par abandonner face à la portée.

3. la seule chose que Lilypond pourrait facilement faire et qui pourrait séduire des luthistes ou guitaristes serait un "traducteur" tab. allemande —> tab. française sans aucune note de musique apparente (excepté le rythme et la superposabilité avec d'autres portées de musique). Il y a de nos jours pas mal de publications en tablature française qui ne font que "traduire" de la tab. allemande. Ça a existé aussi au XVIème.

4. bien-sûr la création d'un snippet pour de la tab. allemande purement graphique semble accessible facilement. Seule la saisie proposée par Jean est un peu lourde à l'usage, mais déjà "vivable".

Éric

     Le samedi 27 août 2022, 08:17:51 UTC+2, Pierre Perol-Schneider <[email-masked]> a écrit :