如何在 LaTeX 中执行简单的文件搜索?

如何在 LaTeX 中执行简单的文件搜索?

我希望gitinfo通过减少所需的设置量来改进我的包裹。

为此,我希望能够在当前目录中搜索文件,然后在父目录中,然后在祖父目录中搜索文件...直到(a)找到文件[OK]或(b)找到名为.git[错误消息a]的目录或(c)从文件系统树的顶部掉下来[错误消息b]。

我尝试过嵌套\InputIfFileExists,但这只给我一个固定的最大级别数。

抱歉,我真的不知道最简单的方法;因此,指向要使用或复制的有用包的指针将是一个不错的选择,而不是预先简化的答案(尽管这些显然会非常受欢迎)。


读得更多一点之后,找到一个目录可能会更困难一些,所以找到一个文件.git/description就可以了。

答案1

这与pdflatex和 一起使用lualatex

\documentclass{article}
\usepackage{pdftexcmds}
\makeatletter
\newcount\Brent@level
\newcommand\BrentInput[1]{%
  \Brent@level=\z@
  \def\Brent@prefix{}%
  \Brent@Input{#1}%
}
\def\Brent@Input#1{%
  \edef\Brent@temp{\pdf@filemoddate{\Brent@prefix/.git/description}}%
  \ifx\Brent@temp\@empty
    \advance\Brent@level\@ne
    % there's no .git/description file at this level
    \expandafter\@firstoftwo
  \else
    \expandafter\@secondoftwo
  \fi
  {%
   \ifnum\Brent@level<255
     \expandafter\@firstoftwo
   \else
     \expandafter\@secondoftwo
   \fi
   {\InputIfFileExists{\Brent@prefix#1}{}
     {%
      % go up one level and retry
      \edef\Brent@prefix{../\Brent@prefix}%
      \Brent@Input{#1}%
     }%
   }
   {\errmessage{Too many levels}}
  }
  {\errmessage{.git found}}
}
\makeatother

\begin{document}
\BrentInput{file}

\BrentInput{foo}
\end{document}

我设置了一个比当前级别高 255 级的限制。使用 XeLaTeX 时必须依赖-shell-escape

由于无法找到目录(至少使用\pdffilemoddate),.git因此目录一定包含一个名为的文件description

相关内容