Beim Versuch, eines meiner Pakete zu erweitern, habe ich mich gefragt, ob es möglich ist, die Dateiliste eines Verzeichnisses in expl3 zu durchlaufen (ich habe gelesen, l3interfaces.pdf
dass expl3 über einige IO-Funktionen verfügt, diese scheinen jedoch nicht in der Lage zu sein, Verzeichnisse zu scannen).
Der Anwendungsfall ist folgender: Ich habe ein Hauptdokument. Dieses soll einige spezielle Dateien enthalten, die mit einer externen Anwendung erzeugt und in Verzeichnissen außerhalb des Pfades gespeichert wurden.
Die Frage ist also: Wie würde ein expl3
„Verzeichnisscanner“ (ich möchte nur das Verzeichnis angeben) aussehen oder muss ich hierfür Lua verwenden?
Antwort1
expl3
ist in Tex geschrieben und daher auf die von Tex bereitgestellten Funktionen beschränkt. Sie können dies daher nur tun, wenn Sie -shell-escape
oder luatex verwenden.
Dies wird beispielsweise eine Liste von Tex-Dateien im aktuellen Verzeichnis setzen, wenn dies ls *.tex
in Ihrem Betriebssystem generiert wird. (wahrscheinlich dir *.tex
unter Windows)
\documentclass{article}
\newread\zzz
\begin{document}
\def\zzpar{\par}
\openin\zzz="|ls *tex"
\loop
\read\zzz to \tmp
\ifx\tmp\zzpar\else
\par[\expandafter\detokenize\expandafter{\tmp}]%
\fi
\ifeof\zzz\else
\repeat
\end{document}
Wenn ich es ausführe, bekomme ich 105 Seiten, die aussehen wie
Antwort2
Mit TeX Live 2017 wird eine erweiterte Version von TeXOSQuery ausgeliefert, die auch in der eingeschränkten Shell läuft:
\documentclass{article}
\usepackage{texosquery}
\TeXOSQuery{\result}{-i ; .}
\show\result
\stop
Dies gibt
> \result=macro:
->dl.log;dl.tex;install-tl;LICENSE.CTAN;LICENSE.TL;osq.log;osq.tex;qrp.log;qrp.
pdf;qrp.tex;query.aux;query.log;query.pdf;query.tex;rand.log;rand.pdf;rand.tex;
release-texlive.txt;texmf-dist;texnician.log;texnician.tex;texosquery.cfg;texpu
t.log;tlpkg;tt.aux;tt.idx;tt.ilg;tt.ind;tt.log;tt.pdf;tt.tex.
Sie können dann Standardmethoden zum Aufteilen des \result
Makros in Komponenten verwenden.
Aus Sicherheitsgründen gibt es Einschränkungen hinsichtlich der Verzeichnisse, auf die Sie zugreifen können, aber untergeordnete Verzeichnisse des Arbeitsverzeichnisses sollten sicher sein.