特定のディレクトリ内のファイルを反復処理する

特定のディレクトリ内のファイルを反復処理する

パッケージの 1 つを拡張しようとしているときに、expl3 でディレクトリのファイル リストを反復処理できるかどうか疑問に思いました ( l3interfaces.pdfexpl3 にはいくつかの IO 機能があると読みましたが、ディレクトリをスキャンすることはできないようです)。

使用例は次のとおりです。メイン ドキュメントが 1 つあります。これには、外部アプリケーションで生成され、パス外のディレクトリに保存されるいくつかの特殊ファイルが含まれます。

そこで質問です。expl3「ディレクトリ スキャナー」(ディレクトリのみを指定したい) はどのようになるのでしょうか。それとも、この目的のために Lua を使用する必要がありますか。

答え1

expl3は tex で記述されているため、tex が提供する機能に制限されており、 -shell-escapeまたは luatex を使用しない限り、これを実行することはできません。

たとえば、ls *.texオペレーティング システムで生成される場合、現在のディレクトリにある tex ファイルのリストがタイプセットされます (おそらくdir *.texWindows の場合) 。

\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}

実行すると105ページが次のように表示されます

ここに画像の説明を入力してください

答え2

TeX Live 2017 では、制限付きシェルでも実行される TeXOSQuery の拡張バージョンが出荷されます。

\documentclass{article}
\usepackage{texosquery}

\TeXOSQuery{\result}{-i ; .}

\show\result

\stop

この出力は

> \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.

その後、標準的な方法を使用して\resultマクロをコンポーネントに分割できます。

セキュリティ上の理由から、アクセスできるディレクトリには制限がありますが、作業ディレクトリの子ディレクトリは安全であるはずです。

関連情報