créer un lien cliquable vers un fichier intégré dans une partition

Bonjour à tous,

J'utilise régulièrement la fonction d'intégration de fichiers #(ly:note-extra-source-file "fichier.xxx"pour joindre des extraits audio ou .pdf, .mid, .ai, .psd ou encore des fichiers source. ces fichiers sont accessibles depuis des lecteurs comme Acrobat Reader (qui est peut-être le seul ?) ou des lecteurs (Acrobat là aussi) intégrés dans Safari, Firefox, Chrome ou Vivaldi et de là, ils peuvent être ouverts dans les applications qui les ont créés.

Je voudrais intégrer des liens cliquables (texte ou image) dans des docs .ly et accéder directement à ces fichiers dans leur application passer par un lecteur .pdf.

Je n'ai rien trouvé à ce sujet, celà est-il réalisable dans Lilypond et comment ? sans doute, puisque la mailto: fonctionne parfaitement.

Merci pour vos lumières.

JLouis

Le 06/08/2026 à 11:38, Jean Louis Thiry a écrit :

J'utilise régulièrement la fonction d'intégration de fichiers
|#(ly:note-extra-source-file "fichier.xxx"|...

Je voudrais intégrer des liens cliquables (texte ou image) dans des
docs .ly et accéder directement à ces fichiers dans leur application
passer par un lecteur .pdf.

Arf non seulement je n'ai pas la réponse mais je ne connais pas et ne
trouve aucune documentation sur |#(ly:note-extra-source-file
"fichier.xxx")|... Ceci m'intéresse beaucoup.

En attendant j'ai voulu mettre un lien cliquable vers un fichier
MuseScore situé dans le même répertoire que le fichier source. Ça
fonctionne mais seulement en mettant le chemin complet :

Par ex:

musescore = #"file:///home/vincent/Nextcloud/Musique/Recueils/BennyGolson/TurningPoint.mscz"
\header { composer = \markup \with-url #musescore "fichier musescore" }

J'aimerai un lien relatif mais je n'y arrive pas. J'ai essayé
file:///TurningPoint.mscz file:./TurningPoint.mscz et biens d'autre
idées biscornues sans succès.

Merci d'avance.

--
Vincent Gay
Envoyé depuis mon saxo-phone

La seule mention que je connaisse dans la doc est celle-ci : 23.4 Intégration de fichiers à la sortie PDF ¶

Merci beaucoup, je vais creuser ça
Vincent Gay
Envoyé depuis mon saxo-phone

6 août 2026 18:02:14 Jean Louis Thiry notifications@lilypond.community:

La seule mention que je connaisse dans la doc est celle-ci : 23.4 Intégration de fichiers à la sortie PDF ¶[23.4 Intégration de fichiers à la sortie PDF (GNU LilyPond – Manuel de notation)]

J'ai posté la question sur linuxfr :

--

Vincent Gay
Envoyé depuis mon saxo-phone

Je viens de passer une heure avec chatgpt, son dernier mesage est :

Nous avons maintenant bien cerné le problème et, surtout, votre objectif est parfaitement défini : un seul PDF contenant le .mscz, avec un texte cliquable qui ouvre la copie incorporée.

Je vais privilégier une solution native LilyPond 2.26, afin que votre méthode reste simple à utiliser dans vos partitions.

Puis plus rien :slight_smile:

J'ai du mal avec les AI

Par contre j'ai trouvé pour les lien avec un chemin relatif : c'est tout simplement file:monfichier ou file:monrepertoire/monfichier

J'arrive à le faire (mon dieu, me remettre à coder en Scheme réveille tellement de souvenirs…) :

\version "2.26"

#(define gen-embedded-file-id
   (let ((id -1))
     (lambda ()
       (set! id (1+ id))
       id)))

% Copied from scm/framework-ps.scm
#(define (ps-quote str)
   (fold
    (lambda (replacement-list result)
      (string-join
       (string-split
        result
        (car replacement-list))
       (cadr replacement-list)))
    str
    '((#\\ "\\\\")
      (#\nul "\\000") (#\cr "\\015") (#\newline "\\012")
      (#\( "\\(") (#\) "\\)"))))

#(define-markup-command (embed-file layout props filename reader-filename) (string? string?)
   (let* ((x-ext '(-1 . 1))
          (y-ext '(-2 . 0))
          (stream-name (format #f "ly-embed-file-markup-~a" (gen-embedded-file-id)))
          (ps-code (format #f "
mark /_objdef {~a} /type /stream /OBJ pdfmark
mark {~a} (~a) /PUT pdfmark
mark
  /Rect [currentpoint ~a ~a vector_add currentpoint ~a ~a vector_add]
  /Subtype /FileAttachment
  /FS << /Type /Filespec /F (~a) /EF << /F {~a} >> >>
  /Name /PaperclipTag
  /ANN pdfmark
"
                     stream-name stream-name
                     (ps-quote (ly:gulp-file filename))
                     (car x-ext) (car y-ext) (cdr x-ext) (cdr y-ext)
                     (ps-quote reader-filename)
                     stream-name))
          (ps-stencil (ly:make-stencil `(embedded-ps ,ps-code) x-ext y-ext)))
     (ly:stencil-translate-axis ps-stencil 1.5 Y)))

\markup {
   Double-cliquer pour accéder au code source :
  \embed-file "file.ly" "nom-fichier-enregistrement.ly"
}

La syntaxe est \embed-file "fichier-source" "nom-enregistrement"fichier-source est le nom du fichier à intégrer et nom-enregistrement est le nom qui lui sera donné dans le PDF.

En mettant l'exemple ci-dessus dans un fichier nommé file.ly, en le compilant et en ouvrant le PDF dans Firefox, j'obtiens une icône de trombone que je peux double-cliquer, ce qui ouvre une boîte de dialogue pour enregistrer le fichier source avec le nom par défaut nom-fichier-enregistrement.ly.

Par contre c'est un peu limité. On ne peut pas changer l'icône « trombone » (la seule autre option est une épingle) ni même sa taille. On ne peut pas mettre le lien sur un texte plutôt qu'une icône. Si je comprends bien la spécification PDF, le format ne permet pas de faire mieux. Et surtout, parmi les lecteurs de PDF que j'ai testés, ça ne marche bien que dans Firefox (Chrome fait comme s'il n'y avait rien ; Evince et Papers n'affichent pas d'icône, il y a néanmoins une zone invisible cliquable qui ouvre bien le fichier mais qui bizarrement se met aussi à créer une annotation).

Noter aussi que ce mécanisme est complètement indépendant des pièces jointes (l'icône n'est pas un lien vers une pièce jointe du PDF, c'est un fichier intégré séparément). En particulier, en rajoutant #(ly:set-option 'embed-source-code) dans l'exemple ci-dessus, la barre latérale de Firefox liste deux fichiers distincts file.ly et nom-fichier-enregistrement.ly. (En remplaçant "nom-fichier-enregistrement.ly" par "fichier.ly" dans le code source, il n'y en a plus qu'un parce qu'ils se retrouvent à avoir le même nom, mais je ne suis pas sûr qu'on puisse se fier à ce que dans une version future Firefox n'en affiche qu'un dans ce cas plutôt que d'afficher les deux avec un numéro par exemple.)

Bref, c'est loin d'être idéal mais je crois que c'est le mieux possible dans les limitations du format PDF et des lecteurs existants.

Le 08/08/2026 à 14:42, Jean Abou Samra a écrit :

J'arrive à le faire (mon dieu, me remettre à coder en Scheme réveille
tellement de souvenirs…) :

Salut Jean, content de te croiser de temps en temps.

J'ai testé ton code et cela a bien donné le résultat que tu décris :slightly_smiling_face: :
je peux enregistrer la pièce jointe avec le nom donné dans l'appel de la
fonction. Mais si j'ai compris ce que voudrait Jean-Louis (et en tous
cas ce que je souhaite) c'est pouvoir le lire cette pièce jointe avec le
programme par défaut associé à ce type de fichier (jouer l'extrait
audio, afficher l'image... et en ce qui me concerne ouvrir le fichier
avec MuseScore). Cela à l'air compliqué mais, dans mon cas cela m'a
donné quelques idées.

N'oublie pas de passer nous voir si tu repasse dans l'Isère

--
Vincent Gay
Envoyé depuis mon saxo-phone

Salut Vincent,

Ça, je ne peux rien y faire du côté de LilyPond : décider ce qui se passe quand on clique sur l'icône de trombone (proposer d'enregistrer le fichier ou l'ouvrir directement) est de la responsabilité du lecteur de PDF.

Entendu, mais ce n'est pas très souvent en ce moment.

Amicalement,
Jean

C'est en tout cas possible en LaTeX avec le package attachfile2 :

\begin{filecontents*}[overwrite]{file.ly}
\version "2.24.4"

melody = \relative c'' {
  c4 d e f
}

\score {
  \melody
  \layout { }
}
\end{filecontents*}

\documentclass{article}
\usepackage{attachfile2}
\attachfilesetup {color=0 0 1}
\begin{document}
\begin{itemize}
\item \attachfile{file.ly}
\item \attachfile[icon=Paperclip]{file.ly}
\item \textattachfile {file.ly} {Click on me}
\end{itemize}
\end{document}

Le fichier test.pdf (20,8 Ko), obtenu en compilant le fichier .tex précédent, ouvert dans Evince, fait apparaître des icônes et du texte qui, cliqués, ouvrent le fichier attaché (file.ly) dans l'éditeur de fichiers .ly par défaut (p. ex. Frescobaldi) et permet aussi d'enregistrer le fichier (F9 puis icône « Annotations » puis clic droit pour « Enregistrer la pièce jointe sous... ».

Merci, c'est intéressant ! Il doit donc utiliser un mécanisme différent de celui que j'ai trouvé dans la spécification du PDF, mais je ne comprends pas encore lequel. Je regarderai plus tard…