Encontrar um arquivo em vários locais

Encontrar um arquivo em vários locais

Eu tenho um arquivo BibTeX central que tenho na minha pasta pessoal. Às vezes, eu o uso como um submódulo git na subpasta central-bibtex. A localização relativa pode variar um pouco. Como quero que meu preâmbulo faça o trabalho para mim, preciso encontrá-lo em alguns locais possíveis. Isso inclui:

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

Assim que tiver uma sintaxe melhor para isso, gostaria de adicionar ainda mais:

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

Até agora, eu tenho isso, que parece funcionar:

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

Existe alguma maneira fácil de fazer isso? Estou pensando em Python:

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

Eu tentei TikZ e \foreach, mas \bibliographyfilenão está definido para nada com isso:

\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}}
    {}
}

Responder1

Como a \foreachvariável do loop não sobrevive ao loop, você precisa expandir o valor que está tentando salvar. Abaixo eu uso um \xdefpara fazer isso:

insira a descrição da imagem aqui

Notas:

  • Removi os sublinhados dos caminhos porque isso pode causar alguns problemas, mas deve haver soluções neste site que devem ajudar.

Código:

\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}

informação relacionada