从目录中具有不同扩展名的文件中,如何使用 \foreach latex 命令按扩展名加载文件列表?

从目录中具有不同扩展名的文件中,如何使用 \foreach latex 命令按扩展名加载文件列表?

进入名为目录,我有以下文件:

-> ./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-escapel3sys-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}

相关内容