Dateiname und Pfad der ly-Datei

Begonnen von helmut, Dienstag, 9. Mai 2017, 11:58

« vorheriges - nächstes »

helmut

Hallo allerseits,

vor einigen Wochen bin ich auf LilyPond gestoßen und habe seit dem schon einiges ausprobiert.
Aber allmählich verliere ich leider den Überblick über meine Aktivitäten.

In den ,,snippets" (Section ,,Text") ist beschrieben, wie man das aktuelle Datum (und die Uhrzeit) einfügen kann. Das müsste doch auch mit dem Dateinamen der LilyPond.ly-Datei möglich sein, und doch auch mit dem Pfad dieser Datei. Aber wie greift man auf diese System-(?)-Variablen zu, damit man sie dann LilyPond-Variablen zuordnen kann. (Das mit dem dann noch notwendigen markup-Befehl traue ich mir mittlerweile schon selber zu, sogar in Farbe, fett und kursiv.)

Die Variable ,,sourcefilename" hält m.E. ja leider nicht, was der Name verspricht.

Gruß
Helmut


Manuela

#1
Zitat von: helmut am Dienstag,  9. Mai 2017, 11:58vor einigen Wochen bin ich auf LilyPond gestoßen und habe seit dem schon einiges ausprobiert.
Aber allmählich verliere ich leider den Überblick über meine Aktivitäten.

Du bist nicht der einzige, dem es so geht  ;)

Irgendwann habe ich folgenden Code aus dem Forum gefischt, ich habe die einzelnen Variablen mit Sternchen getrennt, damit ersichtlich ist, was was ist. Einfach speichern, kompilieren, ausprobieren und nach Bedarf anpassen

\version "2.19.56"

FootCenter = #(let*
               ((cmdl (object->string (command-line)))
                (laloc (+ (string-rindex cmdl #\space) 2))
                (cmdlen (- (string-length cmdl) 2))
                (filen (substring cmdl laloc cmdlen))
                (workdir (getcwd))
                (basename (let ((ppos (string-rindex filen #\. )))
                            (if (number? ppos) (substring filen 0 ppos) filen)))
                (lastdir (let*
                          ((dpos (string-rindex workdir (string->char-set "\\/")))
                           (laenge (string-length workdir)))
                          (if (< (+ dpos 1) laenge)
                              (string-append (substring workdir (+ dpos 1)) "/") "/"))))
               (string-append lastdir "**" basename "**" filen))

\markup \FootCenter
Danke für eure Hilfe
viele Grüße
-- Manuela

ingmar

Hier ein Diskussionbeitrag, der zumindest schonmal den Filenamen liefert. Wenn du danach die Lilypond-Doku durchsuchst, findest du vielleicht auch den Pfad in einer Variablen...

Gruß,
--ingmar

helmut

Den Code von Manuela konnte ich so verändern, dass er genau das Ergebnis erzeugt, das ich haben wollte.

Danke, Manuela.

LG
Helmut

erich

Ich finde den Hinweis von ingmar sehr nützlich; er liefert:
#(write-me "file-name " (ly:parser-output-name))
Wenn man mit frescobaldi unter Linux arbeitet und was ausprobieren will, wenn dann frescobaldi eine Datei in /tmp anlegt, findet man die Datei so sehr bequem.
Noch bequemer hätte man es, wenn nur der Ordner angegeben würde, in dem die Dateien abgelegt sind. Ich will dann häufig die SVG- und MIDI-Dateien weiter verarbeiten.
Gruß
Erich

helmut

Ich bin dem Hinweis von Erich bzw. Ingmar nun auch mal nachgegangen.


Nachdem ich  #(write-me ''file-name '' (ly:parser-output-name))    in eine vorher funktionierende LilyPond-Datei eingefügt habe, bekam ich eine Fehlermeldung!

Das Löschen des von mir als fehlerhaft angesehenen Leerzeichens hinter file-name veränderte nichts an der Fehlermeldung.

In der Notationsübersicht steht bei der Scheme-Funktion jedoch noch ein ,,parser" in kursiv dahinter. Mit dieser Ergänzung lief es dann und der Dateiname wurde im Protokoll ausgegeben.

Nun weiß ich auch, dass ,,file-name " kein zu übergebender Parameter ist, sondern einfach nur ein String der ins Protokoll ausgegeben wird. Der Aufruf klappt auch mit ,,Onkel Wülly" oder ,,Tante Käthe" und somit auch mit deutschen Umlauten (nur weil ich zu dieser Problematik auch mal was im Forum gelesen hatte).

Dafür scheint aber ,,parser" ein notwendiges Schlüsselwort für den Funktionsaufruf zu sein, dessen Bedeutung sich mir nicht erschließt.

Verwundert hat mich, dass ich den o.a. Code auch einer LilyPond-Variablen zuweisen konnte und die Ausgabe ins Protokoll auch bzw. trotzdem erfolgte. Die Variable konnte ich dann auch noch mit einem markup-Befehl ins PDF ausgeben. Da erschien dann aber nur der Dateiname ohne Begleittext.



Wo kann ich etwas über die Scheme-Funktionen nachlesen, damit ich sie verstehe und ggfs. auch anwenden kann? Wie muss ich smob oder sip oder ... anwenden oder/und damit umgehen.

ly:find-file name  z.B. does not return the absolute file name of name, sondern nur den Dateinamen, wenn ich ihn vorher als String übergebe. Aber welchen Nutzen hab ich dann von der Funktion?





Ich arbeite seit Jahren unter Windows mit Office-Produkten. Da habe ich es mir angewöhnt, in der Fußzeile immer den Dateinamen und den Pfad anzugeben. Wer weiß denn schon nach Monaten noch, wo er was gespeichert hat, wenn er ein Blatt mal wiederfindet und damit das Thema wieder interessant wird? Und genau so etwas wollte ich auf meinen ausgedruckten LilyPond-PDFs haben.



LilyPond und Frescobaldi habe ich runtergeladen und einfach vom System installieren lassen und hab dann auch einen Ordner auf dem Desktop eingerichtet, so wie es irgendwo in LilyPond beschrieben ist. Weil ich aber immer nur innerhalb bzw. unterhalb dieses LiLyPond-(Desktop-)Ordners arbeite, interessiert mich der Rattenschwanz an Pfadangaben oberhalb nicht. Ich habe deshalb den Ordner umbenannt und ein großes ,,Z" angefügt. Als Pfad lasse ich mir jetzt nur noch den Rest ausgeben oder den Hinweis, dass die Datei noch nicht gespeichert ist. Temporäre Verzeichnisse interessieren mich nicht. Bei Bedarf lege ich einen neuen Ordner an und speichere darin. Wenn ich dann mit dem Ergebnis zufrieden bin, verschiebe ich die Datei und lösche meinen Müll.

Gruß
helmut