TeX Live 忽略 TEXINPUTS,可能是 kpathsea 问题

TeX Live 忽略 TEXINPUTS,可能是 kpathsea 问题

很长一段时间以来,我的 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 变量 TEXINPUTSTEXINPUTS并为其分配一个值。此外,还必须环境变量通过出口(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


  1. 在 MacOS 上,它会查找~/Library/texmf/tex

  2. 虽然 Windows 不使用相同的语法,但效果是一样的,它会在texmf\tex用户主目录的子目录中查找。

  3. 其他子目录~/texmf用于 Metafont 源、BibTeX 输入等。

相关内容