Forumsadmin gesucht! Details gibt’s in diesem Thread.

 

Hauptmenü

Dateiname auf der Noten-Seite

Begonnen von Radler, Mittwoch, 1. Oktober 2025, 17:41

« vorheriges - nächstes »

Radler

Hallo Lilypondianer,
wie kann ich den Dateinamen der kompilierten Hauptdatei (also nicht den Dateinamen einer include-Datei!) auf die gedruckten Noten bekommen, ohne den Dateinamen in die Datei schreiben zu müssen?
Jemand empfahl mir
\fromproperty #'header:filenameAber das liefert einen leeren String; man muss wohl
filename=lyDateiname.lydefinieren. Aber das will ich vermeiden.
Hintergrund: In den vielen Lieder-Zetteln, die im Chor verteile, gibt es unvermeidlich Fehler. Wenn ich sie verbessern möchte, brauche ich die Hauptdatei.
Any help is appreciated!
Grüße und Dank
von Radler

Lilysetter

#1
Das Such-Stichwort lautet "input file" oder "source file". Schau dir mal folgende Funktion (gefunden in internals.pdf) an:
ly:source-files parser-smob
Return a list of input files that have been opened up to here, including the files that have
been closed already. A parser, parser-smob, may optionally be specified.

Wenn Du die komplette Path-Angabe brauchst, gibt es noch ly:find-file:
ly:find-file name strict
Return the absolute file name of name. By default, if the file is not found, return #f. If the
optional parameter strict is passed as #t, raise an error in this case instead.

Folgender Code in der Datei MyFilename.ly
\version"2.25.6"
\markup{#(ly:find-file"MyFilename.ly")}
\markup{#(ly:source-files)}
bringt kompiliert ein PDF mit dem Text:MyFilename.ly
C:/ProgramFiles/lily2256/share/lilypond/2.25.6/ly/init.ly C:/Users/MyUsername/Documents/lily/foru/MyFilename.ly
Das funktioniert genau andersherum als ich dachte. Ich hätte die Pfadangabe eigentlich bei find-file erwartet.

Existiert die Datei "MyFilename.ly" nicht, gibt es eine Fehlermeldung, da dann nicht ein erwarteter String, sondern ein #f zurückkommt.
Fehler: Keine Textbeschriftung
\markup{
        #(ly:find-file"NonExistingFilename.ly")}
Jetzt müsste man noch das init.ly samt Pfad wegschneiden.

Willst Du  nur den Dateinamen  oder  den kompletten Pfad  dargestellt haben?

Radler

Danke Lilysetter!
Kann jemand LilyPond-code zur Verfügung stellen, mit dem ich den Haupt-Dateinamen herausfummeln kann in der Art von
\markup\zauberspruch{#(ly:source-files)}
Habe hier im Forum nach ,,substring" gesucht, und nur etwas gefunden, was man im guile-prompt verwenden kann.
Was - um alles in der Welt - ist ein ,,guile-prompt"???
Grüße und Dank
von Radler

Lilysetter

#3
Guile ist das "innere System" von Lilypond mit der Sprache "Scheme".
Man startet einen Prompt mit "\Program Files\lily2258\bin\lilypond.exe" scheme-sandbox
ggf. den Pfad an Deine Version / Installation anpassen.

Probier mal
\markup#(car(cdr(ly:source-files)))
das Ergebnis von ly:source-files ist eine Liste von Strings, davon den zweiten ausgewählt und die einelementige Liste in einen String verwandelt.
Du hast meine Frage noch nicht beantwortet, ob Du nur den Dateinamen oder den kompletten Pfad dorthin mithaben willst.
Wenn nur Dateiname, dann geht sicher etwas mit regulären Ausdrücken (regular expressions = regex). Ansonsten die letzten 10 Buchstaben verwenden:
\markup#(substring(car(cdr(ly:source-files)))(-(string-length(car(cdr(ly:source-files))))10))

Schau Dir die Dateien .\share\guile\3.0\texinfo\string-utils.scm und plain-text.scm  an, dort sieht man mehrere Beispiele, wie Strings bearbeitet werden können.  regex-exec dürfte auch interssant sein, durchsuche die Datei .\share\guile\3.0\guile-procedures.txt