Anzeige:
Ergebnis 1 bis 10 von 10

Thema: \IfFileExist - Analoger Befehl für Verzeichnisse gesucht

  1. #1
    Registrierter Benutzer Avatar von AureusPhoenix
    Registriert seit
    20.02.2010
    Beiträge
    91

    \IfFileExist - Analoger Befehl für Verzeichnisse gesucht

    Hi Leute,
    kann mir jemand sagen, ob es einen Befehl gibt, der Analog zu \IfFileExist funktioniert, jedoch prüft, ob ein Verzeichnis vorhanden ist? Falls es sowas nicht direkt geben sollte, hat jemand nen Tipp, wie man sich sowas selbst schreiben kann?


    Vielen Dank im Voraus!
    Beste Grüße,
    AureusPhoenix

  2. #2
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.862
    Zitat Zitat von AureusPhoenix Beitrag anzeigen
    kann mir jemand sagen, ob es einen Befehl gibt, der Analog zu \IfFileExist funktioniert, jedoch prüft, ob ein Verzeichnis vorhanden ist?
    mir ist kein derartiger Befehl bekannt. Warum testest Du nicht auf eine Datei im zu testenden Verzeichnis? Oder wozu brauchst Du einen Test auf ein Verzeichnis auf LaTeX-Ebene?
    Zitat Zitat von AureusPhoenix Beitrag anzeigen
    Falls es sowas nicht direkt geben sollte, hat jemand nen Tipp, wie man sich sowas selbst schreiben kann?
    Unter Linux könnte sowas funktionieren:
    Code:
    \documentclass{article}
    \begin{filecontents*}{\jobname-ifpath.sh}
    if [ -d $1 ]; then #$
      echo "\\pathfoundtrue"
    else
      echo "\\pathfoundfalse"
    fi
    \end{filecontents*}
    
    \newif\ifpathfound
    \newcommand*\IfPathExists[3]{%
      \IfFileExists{./\jobname-ifpath.sh}{%
        \input{|". ./\jobname-ifpath.sh #1"}%
        \ifpathfound#2\else#3\fi
      }{\typeout{\string\IfPathExists kann so nicht arbeiten...}}%
    }
    \begin{document}
    ./test: \IfPathExists{./test}{}{nicht} vorhanden
    
    ./jibbetnich: \IfPathExists{./jibbetnich}{}{nicht} vorhanden
    \end{document}
    (benötigt --shell-escape beim (pdf)LaTeX-Aufruf)

    MfG
    Rainer
    There's nothing a good whack with a hammer won't fix!

  3. #3
    Registrierter Benutzer Avatar von AureusPhoenix
    Registriert seit
    20.02.2010
    Beiträge
    91
    Hi,
    kurze Erklärung zu dem was ich tue:
    Ich schreibe mir gerade ein kleines Paket (welches unter Linux und Windows laufen soll), das mit InkScape svg's in pdf's umwandelt und danach einbindet. Da ich hier noch einige weitere nützliche Funktionen einbauen möchte, die viele Zwischendateien benötigen, lasse ich ein Verzeichnis "temp" relativ zum Bildpfad anlegen.

    Mit der Abfrage, ob das Verzeichnis schon da ist, möchte ich nur vermeiden, das ständig versucht wird das Verzeichnis anzulegen, obwohl es schon da ist. Eine Datei liegt zu Anfang noch nicht im Verzeichnis. Also kann ich darauf nicht prüfen.

    Meine aktuellen Ideen, das Ganze in den Griff zu bekommen, wären:
    • Beim Anlegen des Verzeichnisses eine readme.txt oder ähnliches zu erzeugen, deren existenz ich abfragen kann
    • Das Verzeichnis nicht relativ zum Bildpfad anlegen sondern im Hauptverzeichnis erstellen. So kann ich das mkdir außerhalb von \includesvg unterbringen.


    Gibt es alternative Ideen?

  4. #4
    Registrierter Benutzer
    Registriert seit
    09.12.2005
    Beiträge
    1.327
    Wie legst Du denn das Verzeichnis an? Da TeX selbst keine Verzeichnisfunktionen bietet, ist die Frage vielleicht nicht verkehrt. Denn wenn Du ein TeX mit Verzeichnisfunktionen hast, dann kannst Du darüber sicher Verzeichnisse auch nur dann anlegen lassen, wenn sie noch nicht existieren.

  5. #5
    Registrierter Benutzer Avatar von AureusPhoenix
    Registriert seit
    20.02.2010
    Beiträge
    91
    Hi,
    das Verzeichnis lege ich mit \write18 und mkdir an. Ich habe auch gerade festgestellt, das es wohl sinnvoller sein wird, den temp-Ordner im Hauptverzeichnis anzulegen. Sonst kommt eine Windows-Slash/Backslash Orgie auf mich zu. Insbesondere, da das Paket auch unter Linux funktionieren soll. Wenn ich es im Hauptverzeichnis anlege, dann brauche ich mkdir auch nur einmal im Compiliervorgang aufrufen. Damit erübrigt sich die Abfrage, ob der Ordner bereits existiert, da die Rückmeldung 'Ordner existiert bereits' nicht für jedes einzelne Bild generiert wird.

  6. #6
    Registrierter Benutzer Avatar von Donalduck
    Registriert seit
    08.05.2007
    Ort
    Augsburg
    Beiträge
    754
    Du kannst natürlich unter Windows auch Slashes benutzen, es müssen keine Backslashes sein.

  7. #7
    Registrierter Benutzer Avatar von AureusPhoenix
    Registriert seit
    20.02.2010
    Beiträge
    91
    Hab ich probiert. Wenn ich mit der Windows command line
    Code:
    mkdir pictures/temp
    eingebe, funktioniert es nicht. Benutze ich hingegen
    Code:
    mkdir pictures\temp
    , geht es.

    TeX-Interna funktionieren natürlich auch mit slash. Oder vielmehr nur mit slash. Aber write18{} gibt die Sachen ja an die command line weiter. Da muss man sich schon an die richtige Syntax halten.

  8. #8
    Registrierter Benutzer Avatar von Donalduck
    Registriert seit
    08.05.2007
    Ort
    Augsburg
    Beiträge
    754
    Tatsache! Die anderen Sachen funtkionieren sonst immer auch mit / :-/

  9. #9
    Registrierter Benutzer
    Registriert seit
    09.12.2005
    Beiträge
    1.327
    In TeX funktioniert / als Pfadtrenner. mkdir wird aber nicht von TeX selbst, sondern von einer Windows-Shell ausgeführt und dort funktioniert / aufgrund eines Anachronismus nicht als Pfadtrenner.

    BTW: \write18 erfordert aktivierte shell-escapes. Da diese aus Sicherheitsgründen nicht allgemein aktiviert sind (sind könnte ja jemand auch mal eben den Inhalt deines Benutzerverzeichnisses löschen …), betrachte ich Pakete, die darauf angewiesen sind, nur bedingt als Erleichterung für Anwender. Wenn Du das voraussetzt, kannst Du auch gleich LuaLaTeX voraussetzen. Dort hast Du OS-unabhängige Möglichkeiten zur Erzeugung von Verzeichnissen.

  10. #10
    Registrierter Benutzer Avatar von rais
    Registriert seit
    18.07.2005
    Beiträge
    5.862
    Eine Alternative mag sein, per filecontents-Umgebung unter dem zu testenden Pfad eine Datei anlegen zu wollen: ist der Pfad nicht vorhanden, kann die Datei nicht angelegt werden; wenn einem die Fehlermeldung
    Code:
    ! I can't write on file `woauchimmer/wieauchimmer.tex'
    nichts sagt bzw. wenn sowas wie `-interaction nonstopmode' im Spiel sein sollte, könnte man immer noch per \IfFileExists{woauchimmer/wieauchimmer.tex}{}{} aufs (nicht) Vorhandensein dieser Testdatei prüfen ...

    OTOH: ganz schlechte Karten hättest Du, wenn der Pfad zwar vorhanden, aber von Dir (bzw. Deinem Nutzer) nicht beschreibbar ist.

    MfG
    Rainer
    There's nothing a good whack with a hammer won't fix!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •