在不同位置查找文件

在不同位置查找文件

我的主文件夹中有一个中心 BibTeX 文件。有时,我会将其用作子文件夹中的 git 子模块central-bibtex。相对位置可能会有所不同。由于我希望序言能帮我完成工作,因此我需要它在几个可能的位置找到它。这些包括:

  • ../../central-bibtex/Central
  • central-bibtex/Central
  • ../../zentrale_BibTeX/Central

一旦我有了更好的语法,我就会添加更多:

  • ../central-bibtex/Central
  • ../zentrale_BibTeX/Central
  • ../../../zentrale_BibTeX/Central

到目前为止,我有这个,它似乎有效:

\IfFileExists{../../central-bibtex/Central}
{\newcommand{\bibliographyfile}{../../central-bibtex/Central}}
{
    \IfFileExists{central-bibtex/Central}
    {\newcommand{\bibliographyfile}{central-bibtex/Central}}
    {\newcommand{\bibliographyfile}{../../zentrale_BibTeX/Central}}
}

有什么简单的方法可以做到这一点吗?我在 Python 中思考:

dirs = ['../../central-bibtex', 'central-bibtex', '../../zentrale_BibTeX']
for dir in dirs:
    if os.path.isfile(dir + '/Central'):
        bibliographyfile = dir + '/Central'

我已经尝试过 TikZ 和\foreach,但\bibliographyfile没有设置任何东西:

\newcommand\bibliographyfile{None}

\foreach \path in {
    ../../central-bibtex/Central,
    central-bibtex/Central,
    ../../zentrale_BibTeX/Central,
    /home/mu/Dokumente/Studium/zentrale_BibTeX/Central.bib
}
{
    \AtEndDocument{\path}
    \IfFileExists{\path}
    {\renewcommand\bibliographyfile{\path}}
    {}
}

答案1

由于\foreach循环变量无法在循环中存活,因此您需要扩展要保存的值。下面我使用一个\xdef来做到这一点:

在此处输入图片描述

笔记:

  • 我从路径中删除了下划线,因为这可能会导致一些问题,但这个网站上应该有可以提供帮助的解决方案。

代码:

\documentclass{article}
\usepackage{tikz}

\newcommand\bibliographyfile{}

\foreach \FileNameWithPath in {
    ../central-bibtex/Central.bib,
    central-bibtex/Central.bib,
    ../../zentrale-BibTeX/Central.bib,
    /home/mu/Dokumente/Studium/zentrale-BibTeX/Central.bib
}{%
    %\AtEndDocument{\path}% <-- not sure what this was for
    \IfFileExists{\FileNameWithPath}{%
        %\xdef\bibliographyfile{\FileNameWithPath}%
        % Per egreg's suggestions, replaced the above with:
        \expandafter\gdef\expandafter\bibliographyfile\expandafter{\FileNameWithPath}
    }{}%
}

\begin{document}

Located file: \bibliographyfile

\end{document}

相关内容