Поиск файла в разных местах

Поиск файла в разных местах

У меня есть центральный файл 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}

Связанный контент