![TeX Live 忽略 TEXINPUTS,可能是 kpathsea 问题](https://linux22.com/image/438652/TeX%20Live%20%E5%BF%BD%E7%95%A5%20TEXINPUTS%EF%BC%8C%E5%8F%AF%E8%83%BD%E6%98%AF%20kpathsea%20%E9%97%AE%E9%A2%98.png)
很长一段时间以来,我的 TeX 文件都导入了该文件~/lib/tex/mylib.tex
,使用分配TEXINPUTS=".:~/lib/tex:"
并引用该文件\input{mylib}
。
从 Suse linux 更改为 Debian 10 (buster) 后,该方法失败。
为了查明问题,我尝试了以下操作:
mkdir d1
touch d1/f1.tex
mkdir d2
touch d2/f2.tex
kpsewhich --path="d1:d2" f1.tex # A
d1/f1.tex
kpsewhich --path="d1:d2" f2.tex # B
# no result
kpsewhich --path="d2:d1" f1.tex # C
# no result
kpsewhich --path="d2:d1" f2.tex # D
d2/f2.tex
令我惊讶的是,结果取决于路径字符串中路径元素的顺序。在 B(d2/f2.tex)和 C(d1/f1.tex)情况下我该怎么做才能获得预期的结果?
信息:“kpsewhich”属于包“texlive-binaries/oldstable,now 2018.20181218.49446-1 amd64”。
答案1
我在 Debian 10 下尝试了以下操作:
export -n TEXINPUTS # cleanup
unset TEXINPUTS # cleanup
TEXINPUTS='d1/:d2/' kpsewhich f2.tex # E
d2/f2.tex
TEXINPUTS='d1/:d2/' # F
kpsewhich f2.tex
# no result
export TEXINPUTS # G
kpsewhich f2.tex
d2/f2.tex
从案例“F”可以看出,在 Debian 下创建shell 变量 TEXINPUTS
TEXINPUTS
并为其分配一个值。此外,还必须环境变量通过出口(sahttps://www.baeldung.com/linux/bash-variables-export)。
我/etc/bash.bashrc.local
仅包含步骤“F”。这在 SUSE Linux Enterprise Server (SLES) 11 SP4 (11.4) 下有效,但在 debian 下无效。我认为只有 debian 的行为才是正确的。suse 行为的原因可能是某些嵌套的 suse 脚本包含“set +o allexport”语句。
答案2
~/texmf/tex
在大多数平台上,TeX live 会在¹ 、 ² 、 ³中查找用户输入树。在大多数情况下,最简单的方法是将输入文件放在那里或其子目录中,或者如果您想将文件保存在其他地方,可以创建指向 中的其他目录的符号链接~/texmf/tex
。
在 MacOS 上,它会查找
~/Library/texmf/tex
。虽然 Windows 不使用相同的语法,但效果是一样的,它会在
texmf\tex
用户主目录的子目录中查找。其他子目录
~/texmf
用于 Metafont 源、BibTeX 输入等。