在嘗試增強我的一個包時,我想知道是否可以迭代 expl3 中的目錄文件列表(我讀到l3interfaces.pdf
expl3 有一些 IO 設施,但它們似乎無法掃描目錄)。
用例如下:我有一個主要文件。這應包括一些由外部應用程式產生並儲存在路徑之外的目錄中的特殊檔案。
所以問題是:expl3
「目錄掃描器」(我只想指定目錄)看起來如何,或者我必須使用 Lua 來實現此目的?
答案1
expl3
-shell-escape
是用 tex 編寫的,因此僅限於 tex 提供的功能,因此除非您使用或 luatex,否則您無法執行此操作 。
例如,這將在目前目錄中排版 tex 檔案清單(如果這是ls *.tex
在作業系統中產生的檔案)。 (可能dir *.tex
在 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}
如果我運行它,我會得到 105 頁,看起來像
答案2
TeX Live 2017 將發布 TeXOSQuery 的增強版本,它也在受限 shell 中運行:
\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
巨集拆分為元件。
出於安全原因,您可以存取的目錄受到限制,但工作目錄的子目錄應該是安全的。