为什么 TEXINPUTS 不起作用?!(我该如何修复它?)

为什么 TEXINPUTS 不起作用?!(我该如何修复它?)

这让我极其沮丧。

我正在尝试使用TEXINPUTS它来查看父目录内部(我不知道如何做)。

无论我做什么,它都拒绝这样做。

举一个最简单的例子来说明这个问题:运行

mkdir -p s/
echo '\documentclass{article}\usepackage{../b}\begin{document}Hello\end{document}' > s/a.tex
echo '' > b.sty
TEXINPUTS=".:..:s:" pdflatex -interaction=nonstopmode s/a.tex

反刍

This is pdfTeX, Version 3.14159265-2.6-1.40.19 (TeX Live 2018/Arch Linux) (preloaded format=pdflatex)
 restricted \write18 enabled.
entering extended mode
(./s/a.tex
LaTeX2e <2018-12-01>
(/usr/share/texmf-dist/tex/latex/base/article.cls
Document Class: article 2018/09/03 v1.4i Standard LaTeX document class
(/usr/share/texmf-dist/tex/latex/base/size10.clo))

! LaTeX Error: File `../b.sty' not found.

哪个毫无意义由于我添加了.,,.. subTEXINPUTS

为什么会失败?我到底该写些什么才能让它\usepackage{../b}成功?

编辑:

现在我突然想到,这可能是一个“安全”功能,但为什么如果我添加--shell-escape,那么 TeX 文件——现在可以做任何它想做的事情——仍然无法读取此文件?这似乎没有任何意义...不是吗?

答案1

kpathsea 手册第 5.1 节记录了这种行为

以上所有情况的例外:如果被搜索的文件名是绝对的或明确相对的,即以 '/' 或 './' 或 '../' 开头,Kpathsea 只需检查该文件是否存在,如果需要并启用,则回退到大小写折叠匹配,如上所述。

因此../b不会沿着路径搜索,而只是在工作目录的父目录中搜索。

所以在这种情况下

\usepackage{b}

(这也是更正确的乳胶语法)就是这里所需要的。

相关内容