TeXLive 2019/Linux:kpsewhich 无法在 $HOME/texmf 下找到符号链接路径

TeXLive 2019/Linux:kpsewhich 无法在 $HOME/texmf 下找到符号链接路径

我想知道在时隔 10 多年后,我是否可以从 Mac 切换回 Linux。我在机器上安装了 Ubuntu 衍生产品,并使用 equivs 业务安装了 TeXLive 2019 (vanilla),创建了一个名为 texlive-local 的虚拟包,这样我就可以欺骗操作系统认为 TeX 已安装。这是必要的,因为 Ubuntu LTS tex 包已经过时了。

我的路径没问题。我可以完美地执行 pdflatex 等,并且包含标准 latex 类的文档(或者更确切地说是 /usr/local/texlive/2019 下的任何内容...)都可以正常工作。

当我尝试编译任何需要我自定义创作的类(我有几个)的东西时,问题就开始了,我将其安装在 /home/user/texmf 下(请参阅下面的详细信息)。

实际上,在最初遇到问题后,我将整个 texmf-local 树从 /usr/local/texlive 复制(以用户身份,而不是 root 或 sudo cp -R)到 /home/user/texlive,并将包含我的自定义类文件的文件夹的符号链接放置在 /home/user/texmf/tex/latex/local/ 下。虽然不需要从 /usr/local/texlive 复制空树,但这样做可以确保我在 ~/texmf 下拥有正确的 TDS 树。这样做是很好的做法。因此,我有以下符号链接(ln -s):

customclass ---> ../../../../../Somepath/customclass
classone ---> ../../../../../Somepath/classone
classtwo ---> ../../../../../Somepath/classtwo

在 /home/user/texmf/tex/latex/local 下,.cls 和 .sty 文件位于上面的符号链接文件夹下。我在这里明确地写下这一点,这样就不会有人对我的 texmf 树的性质产生任何误解 - 符号链接指向包含类文件的文件夹,而不是类文件本身。

$kpsewhich -var-value=TEXMFHOME
/home/user/texmf

我曾尝试在 .bashrc 末尾明确设置 TEXMFHOME,也尝试手动导出变量,并将其添加到 /usr/local/texlive/2019/texmf.cnf。

我已经使用 LaTeX 大约 22 年了,我不记得在 Linux 下使用 LaTeX 有这么难。

在 Mac 上,这很简单 - 只需将符号链接放在 ~/Library/texmf 下即可解决所有问题。我记得以前我在 Linux 上使用 LaTeX 时也是这样(~/texmf)。显然,现在不是了。

我在 stackexchange 和其他地方搜索了几个答案,尝试了在那里找到的方法,但不起作用。使用自定义类的任何文件仍然会失败,kpsewhich 无法找到 .cls 文件。我在命令行上运行了 kpsewhich - 我的自定义类产生空白输入,而 article.cls 产生 article.cls 的路径。

编辑:是的,我已经运行 texhash ~/texmf 和 sudo texhash 多次。

我遗漏了什么?在有人提出显而易见的建议之前 - 明确将文件复制到 texmf,我不想这样做。我的包含类文件的文件夹使用 rsync 和 cron 作业的组合在多台机器上同步,我不想维护同一个文件的两个副本。符号链接是完成这项工作的正确工具。

编辑:我备份了包含我的类文件的文件夹,而不是 ~/Library/texmf(在 Mac 上)或 ~/texmf(在 Linux 上)。我只是在每个操作系统上符号链接到备份文件夹。有多台机器使用这些类文件(我运行一个实验室,我的研究生需要都在同一页面上)。

Linux 版 TeXLive 上的 kpsewhich 是否有问题,无法处理符号链接?

鉴于我在 stack exchange 上找到的各种答案与我的情况略有不同(主要是 equivs + TeXLive 安装),所以这个问题不是重复的。

编辑:我找到了答案,请参阅下面的答案。问题是 kpsewhich 很懒,除非真实的目录也位于该级别。

答案1

@cfr 你不会相信刚刚发生的事情。

我喜欢你在 texmf 下的虚拟类文件夹下创建虚拟类文件的想法。

因此,我继续做了以下事情:

$ mkdir -p ~/texmf/tex/latex/local/class
$ cd ~/texmf/tex/latex/local/class
$ touch class.cls

然后我查看了 kpsewhich 的输出:

$ kpsewhich class.cls
/home/user/texmf/tex/latex/local/class/class.cls

到目前为止一切顺利。然后,我不知道为什么,我只是有了一种预感,称其为对二叉树如何搜索的模糊记忆,我尝试了一下,没有做任何其他事情:

$kpsewhich letterwithfancieruniversityheader.cls
/home/user/texmf/tex/latex/local/letters/letterwithfancieruniversityheader.cls

!!!

那么为了完整性,

$ rm ~/texmf/tex/latex/local/class/class.cls

并且 kpsewhich 仍然可以找到我的字母类文件。

显然,texmf 需要至少一个真实的与符号链接处于同一级别的目录。如果找不到它 - 我的直觉是 kpsewhich 很懒,只会查看目录的大小来决定下一级遍历是否为空,它会停止查找。

这听起来像是 kpsewhich 中的一个错误,或者可能是一个令人讨厌的功能。无论如何,如果您在网络环境中明智地使用符号链接指向所需的模板,则需要注意 kpsewhich 的一个怪癖。

相关内容