PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : \IfFileExist - Analoger Befehl für Verzeichnisse gesucht



AureusPhoenix
23-02-2014, 17:33
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

rais
24-02-2014, 07:37
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?


Falls es sowas nicht direkt geben sollte, hat jemand nen Tipp, wie man sich sowas selbst schreiben kann?

Unter Linux könnte sowas funktionieren:


\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

AureusPhoenix
24-02-2014, 09:35
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?

klops
24-02-2014, 09:42
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.

AureusPhoenix
24-02-2014, 10:28
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.

Donalduck
24-02-2014, 12:11
Du kannst natürlich unter Windows auch Slashes benutzen, es müssen keine Backslashes sein.

AureusPhoenix
24-02-2014, 12:17
Hab ich probiert. Wenn ich mit der Windows command line

mkdir pictures/temp eingebe, funktioniert es nicht. Benutze ich hingegen
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.

Donalduck
24-02-2014, 12:30
Tatsache! Die anderen Sachen funtkionieren sonst immer auch mit / :-/

klops
24-02-2014, 13:25
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.

rais
24-02-2014, 18:12
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


! 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