Encontrar un archivo en varias ubicaciones

Encontrar un archivo en varias ubicaciones

Tengo un archivo BibTeX central que tengo en mi carpeta de inicio. A veces, lo uso como un submódulo de git en la subcarpeta central-bibtex. La ubicación relativa puede variar un poco. Como quiero que mi preámbulo haga el trabajo por mí, necesito encontrarlo en un par de ubicaciones posibles. Estos incluyen:

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

Una vez que tenga una mejor sintaxis para esto, me gustaría agregar aún más:

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

Hasta ahora tengo esto 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}}
}

¿Hay alguna manera fácil de hacer esto? Estoy pensando en Python:

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

Probé TikZ y \foreach, pero \bibliographyfileno tengo nada configurado con esto:

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

Respuesta1

Dado que la \foreachvariable del bucle no sobrevive al bucle, debe expandir el valor que está intentando guardar. A continuación utilizo un \xdefpara hacer eso:

ingrese la descripción de la imagen aquí

Notas:

  • Eliminé los guiones bajos de las rutas porque eso puede causar algunos problemas, pero debería haber soluciones en este sitio que deberían ayudar.

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}

información relacionada