我有一个包含多个文件的目录。我可以使用以下命令轻松确定文件的存在与否。
\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.png
和mapTest.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
解释:如果没有匹配,序列将包含一个空项。