在尝试增强我的一个包时,我想知道是否可以在 expl3 中迭代目录的文件列表(我读到l3interfaces.pdf
expl3 有一些 IO 功能,但它们似乎无法扫描目录)。
用例如下:我有一个主文档。这将包括一些使用外部应用程序生成并存储在路径之外的目录中的特殊文件。
所以问题是:expl3
“目录扫描器”(我只想指定目录)是什么样子的,或者我是否必须为此使用 Lua?
答案1
expl3
-shell-escape
是用 tex 编写的,因此仅限于 tex 提供的功能,所以除非您使用或 luatex,否则您无法执行此操作 。
ls *.tex
例如,如果这是在您的操作系统中生成的,这将在当前目录中排版 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
宏拆分为组件。
出于安全原因,对您可以访问的目录有限制,但工作目录的子目录应该是安全的。