检查 LaTeX 中以特定字符串开头的文件是否存在

检查 LaTeX 中以特定字符串开头的文件是否存在

我有一个包含多个文件的目录。我可以使用以下命令轻松确定文件的存在与否。

\IfFileExists{sample.png}{....}{}

但是我如何检查以特定字符串开头的文件是否存在。例如,假设我的文件夹中有以下文件:

mapScan.png
mapTest.png
sample.tex

我将设置一个 If 条件,检查是否存在以以下内容开头的文件地图

观点:我应该用pdflatex作为 LaTeX 编译器。

答案1

这需要启用 shell-escape。

\documentclass{article}

\ExplSyntaxOn

\NewDocumentCommand{\IfGenericFileExistsTF}{mmm}
 {
  \sys_get_shell:nnN { kpsewhich~#1 } { \cctab_select:N \c_code_cctab } \l_tmpa_tl
  \tl_if_blank:VTF \l_tmpa_tl { #3 } { #2 }
 }

\ExplSyntaxOff

\IfGenericFileExistsTF{map*.png}{\typeout{YES}}{\typeout{NO}}

\IfGenericFileExistsTF{Map*.png}{\typeout{YES}}{\typeout{NO}}

\stop

在我的测试设置中,有两个文件mapScan.pngmapTest.png,但没有以 开头的文件Map。控制台将打印

YES
NO

对于所示的两个命令。的设置\c_code_cctab用于忽略空格(和换行符)。

您可以在第二个和第三个参数中使用您想要的任何命令集\IfGenericFileExistsTF

替代实施方案l3sys-shell

\documentclass{article}
\usepackage{l3sys-shell}

\ExplSyntaxOn

\NewDocumentCommand{\IfGenericFileExistsTF}{mmm}
 {
  \sys_shell_split_ls:nN { #1 } \l_tmpa_seq
  \tl_if_blank:eTF { \seq_item:Nn \l_tmpa_seq { 1 } } { #3 } { #2 }
 }

\ExplSyntaxOff

\IfGenericFileExistsTF{map*.png}{\typeout{YES}}{\typeout{NO}}

\IfGenericFileExistsTF{Map*.png}{\typeout{YES}}{\typeout{NO}}

\stop

解释:如果没有匹配,序列将包含一个空项。

相关内容