进入名为目录,我有以下文件:
-> ./dir/fileA.eps
-> ./dir/fileB.eps
-> ./dir/fileC.eps
-> ./dir/filePNG-A.png
-> ./dir/filePNG-B.png
-> ./dir/filePNG-C.png
我只想加载来自目录并将\myfilelist
这些文件的列表放入命令中,执行类似如下的代码:
\newcommand{\myfilelist}{<*.eps file list>} % I don't know how to do it!!!
\foreach \file in \myfilelist
{
\tikzsetnextfilename{\file}
\begin{tikzpicture}
\node {\includegraphics[]{\file}}
\end{tikzpicture}
}
我该怎么做?
答案1
使用(非常)最新的 texlive,您可以列出目录中的文件,而无需使用同名软件包提供的文档界面--shell-escape
。l3sys-query
\documentclass{article}
\usepackage[demo]{graphicx}
\usepackage{l3sys-query}
\begin{document}
\QueryFiles{dir/*.eps}
{\begin{center}
\includegraphics[width=2cm]{#1}\\
\texttt{#1}
\end{center}}
\end{document}
生产
包括找到的所有 eps 文件,并给出它们的路径。
答案2
TeX 无法访问操作系统调用,例如目录列表,除非我们通过选项启用它们-shell-escape
。
以下是我的情况:
> ls -R
subdir/ test.aux test.log test.pdf test.tex
./subdir:
example-image-a.pdf example-image-b.pdf example-image-c.pdf
example-image-a.png example-image-b.png example-image-c.png
这是使用该选项进行编译的 LaTeX 文件-shell-escape
:
\documentclass{article}
\usepackage{catchfile,tikz}
\newcommand{\getdir}[2]{\CatchFileDef#1{|"#2"}{\endlinechar=-1 }}
\begin{document}
\getdir{\myfilelist}{ls -m ./subdir/*.pdf}
\foreach\file in\myfilelist{
\includegraphics[width=3cm]{\file}\par
}
\end{document}
图形文件是标准虚拟图像。以下是输出
您需要添加正确的 shell 命令调用。在 Unix 上,ls -m
将返回以逗号分隔的项目。
使用 的独立于操作系统的版本kpsewhich
。
\documentclass{article}
\usepackage{xparse,tikz}
\ExplSyntaxOn
\NewDocumentCommand{\getdir}{mm}
{
\adriano_getdir:Nn #1 { #2 }
}
\cs_new_protected:Nn \adriano_getdir:Nn
{
\sys_shell_get:nnN { kpsewhich ~ #2 } { } \l_tmpa_tl
\seq_set_split:NnV \l_tmpa_seq { ~ } \l_tmpa_tl
\seq_pop_right:NN \l_tmpa_seq \l_tmpa_tl
\tl_set:Nx #1 { \seq_use:Nn \l_tmpa_seq { , } }
}
\ExplSyntaxOff
\begin{document}
\getdir{\myfilelist}{./subdir/*.pdf}
\foreach\file in\myfilelist{
\includegraphics[width=3cm]{\file}\par
}
\end{document}