如果远程文件存在则包含它,否则包含本地文件

如果远程文件存在则包含它,否则包含本地文件

这是我的 tex 文件所在的路径:

/home/me/documents/foo.tex

我这里也有一个导入文件:

/home/me/texmf/tex/latex/personal/bar.tex

但是出于安全目的,我也将其包含在本地:

/home/me/documents/bar.tex

当我将其输入到我的 tex 文件中时,例如:

\input{bar}

我注意到本地文件已在远程文件(LaTeX 个人目录)上使用

我的问题是: 我该如何处理以下声明?

  • 如果远程文件存在,则将其包含在本地文件上。
  • 如果远程文件为无,则包含本地文件。

答案1

TeX 的文件搜索策略可以配置,请参阅texmf.cnfTeX Live。示例为pdflatex

TEXINPUTS.pdflatex      = .;$TEXMF/tex/{latex,generic,}//

默认TEXMF设置为:

TEXMF = {$TEXMFCONFIG,$TEXMFVAR,$TEXMFHOME,!!$TEXMFSYSCONFIG,!!$TEXMFSYSVAR,!!$TEXMFLOCAL,!!$TEXMFDIST}

或者更简短地说,首先使用当前目录,然后使用主 texmf 树、本地 texmf 树,最后使用分发树。

当然,可以通过更改或覆盖条目来更改搜索顺序,例如

TEXINPUTS=/my/documents:

然后首先搜索目录,然后由于尾随冒号而应用配置/my/documents/的正常搜索。TEXINPUT

但是,搜索是基于目录的,单个文件的搜索顺序无法更改。在您的例子中,您有主 TeX 文件和目录中的foo.tex其他文件bar.tex相同的目录/home/me/documents/。第一个文件应该在那里找到,但后者应该先在其他地方找到:

/home/me/texmf/tex/latex/personal/bar.tex

因此改变搜索顺序不会有帮助,因为foo.tex也不应该在其他地方首先找到。

但是,在这种情况下,文件的父目录存在差异,可以在此用来区分两个版本:

\InputIfFileExists{personal/bar.tex}{%
  % File personal/bar.tex exists and is read
}{%
  % File personal/bar.tex is not found, try bar.tex
  \input{bar.tex}%
}

相关内容