EPS-Dateien in einem Verzeichnis ausgeben

Zur Navigation springen Zur Suche springen
Mit Lilypond kann man EPS-Dateien (Encapsulated PostScript Files) in ein Markup einfügen, Lilypond kann SVG-Dateien nicht direkt verarbeiten. Das EPS-Format ist ziemlich sperrig, Inkscape kann z.B. die von ihm selbst erzeugten EPS-Dateien nicht mehr öffnen. Eine Funktion, die alle EPS-Dateien in einem Verzeichnis in eine PDF-Datei ausgibt, ist daher ziemlich hilfreich, wenn man viele EPS-Dateien erzeugt hat.

Scheme Code

Der folgende Code bildet ein PDF mit allen EPS-Dateien im angegebenen Verzeichnis, die den Text text enthalten. Der Name der EPS-Datei wird daneben geschrieben, weil es nämlich ziemlich praktisch ist zu wissen, welche Datei wie heißt.

Die Bedingung
or #t (string-match text entry)
liefert alle EPS-Dateien. Oder man übergibt einen leeren String als 2. Parameter.
#(use-modules (ice-9 regex))
#(define (proc dir-name text)
   (let ((dir (opendir dir-name))
         (eps-files (list)))
     (do ((entry (readdir dir) (readdir dir)))
       ((eof-object? entry))
       (if (and (string-suffix? "eps" entry) (or #f (string-match text entry)))
           (set! eps-files (append (list entry) eps-files))))
     (closedir dir)
     (map
      (lambda (arg) #{
        \markup \vcenter { \epsfile #Y #30 $arg \box { $arg } }
        #})
      eps-files)))

Anwendung

\version "2.19.82"
\language "deutsch"

#@(proc "/home/user/Dokumente/Lilypond/eps-Verzeichnis" "ga")
druckt alle EPS-Dateien im Verzeichnis /home/user/Dokumente/Lilypond/eps-Verzeichnis die im Dateinamen den Text ga enthalten und schreibt den Namen der Datei rechts vom Bild.

Wählbare Bildgröße

\version "2.20.0"
\language "deutsch"

#(use-modules (ice-9 regex))

#(define (proc dir-name y)
   (let ((dir (opendir dir-name))
         (eps-files (list)))
     (do ((entry (readdir dir) (readdir dir)))
       ((eof-object? entry))
       (if (and (string-suffix? "eps" entry))
           (set! eps-files (append (list entry) eps-files))))
     (closedir dir)
     (map
      (lambda (arg) #{
        \markup \vcenter {
          \epsfile #Y #y $arg \box { $arg }
        }
        #})
      eps-files)))

#@(proc "/path/to/folder" 50)
BulB.svg
Auch unter Windows müssen die Pfadnamen mit / getrennt werden, nicht mit \ wie in Windows üblich.

Probleme

Die letzte Datei im Verzeichnis wird nicht ausgegeben, für manche Dateien wird eine Fehlermeldung ausgegeben schwerer Fehler: Datei »f.eps« kann nicht gefunden werden

Links