我刚刚在对这个问题的回答的评论中被告知如何在 Debian 或 Ubuntu 上安装“原始” TeXLive?$TEXMFCNF
,如果我自己安装 TeXLive(而不是让我的发行版为我完成),我不应该设置环境变量。
我检查了一下,在一台机器上,我在现有的 Ubuntu 发行版上安装了 TL2010,但我没有设置$TEXMFCNF
,一切都运行正常。在另一台机器上,我已经设置了$TEXMFCNF
(一切都运行正常)。两台机器的区别在于,在第一台机器上,我有管理员权限,因此将 TL2010 安装在 中,/usr/local/
而在另一台机器上,我没有管理员权限,因此将 TL2010 安装在 中$HOME/local/
。当我在第二台机器上设置和取消设置时$TEXMFCNF
,我得到的答案不同kpsewhich texmf.cnf
,但这两个答案基本位于同一位置。因此,似乎kpsewhich
可以根据...什么来推断texmf.cnf
出在哪里?我不确定有什么信息kpathsea
可以推断出的位置texmf.cnf
。
将 $TEXMFCNF 设置为$HOME/local/texlive/2010/texmf/web2c/
则kpsewhich texmf.cnf
报告$HOME/local/texlive/2010/texmf/web2c/texmf.cnf
。取消设置后则kpsewhich
报告/somewhere/else/texlive/2010/texmf.cnf
,但 $HOME/local
是一个符号链接,/somewhere/else
因此它们在同一个 TL2010 安装中。 kpsewhich
本身就在里面$HOME/local/bin
,但是文件实际上有一个指向 TL texmf-tree 某处的符号链接。
最后,我不知道为什么我开始设置$TEXMFCNF
。原因已经迷失在时间的迷雾中。我怀疑是因为很久以前我对为我提供的 TeX 安装很满意,只是我不喜欢 home texmf 树的值,所以我用自己的texmf.cnf
值覆盖了它。
那么,对于这个问题:
- (主要问题):设置是
$TEXMFCNF
好、坏还是丑? - (发生了什么事):
kpathsea
它怎么知道该去哪里找呢?它必须在某处找到一个配置文件,告诉它在哪里可以找到所有其他的东西,那么它如何推断在哪里可以找到它呢?
(集中思考最后一个问题,我相信kpsewhich
可以从它的位置推断出一些东西;所以如果我复制 kpsewhich
而不是$HOME/local/bin
符号链接那么这会破坏一切吗?)
答案1
部分答案:该文件/usr/local/texlive/2010/texmf/web2c/texmf.cnf
(在我的系统上)包含以下行
% This definition isn't used from this .cnf file itself (that would be
% paradoxical), but the compile-time default in paths.h is built from it.
% The SELFAUTO* variables are set automatically from the location of
% argv[0], in kpse_set_program_name.
%
% This main texmf.cnf file is installed, for a release YYYY, in a
% directory such as /usr/local/texlive/YYYY/texmf/web2c/texmf.cnf.
% Since this file is subject to future updates, the TeX Live installer
% or human administrator may also create a file
% /usr/local/texlive/YYYY/texmf.cnf; any settings in this latter file
% will take precedence over the distributed one under texmf/web2c.
%
% For security reasons, it is better not to include . in this path.
%
TEXMFCNF = {$SELFAUTOLOC,$SELFAUTODIR,$SELFAUTOPARENT}{,{/share/texmf{-local,}/web2c}
第一段证实了,是的,kpsewhich
它使用自己的位置来查找所有内容。(我还测试了您复制kpsewhich
到新位置的建议,发现它找不到任何东西。)
编辑:更多信息:我尝试设置 $TEXMFCNF(我的系统上没有设置)。将 $TEXMFCNF 设置为目录列表后,kpsewhich 会查找仅有的在那些目录中找不到 texmf.cnf。您可以通过将 $TEXMFCNF 设置为不包含 texmf.cnf 的目录列表来查看这一点;如果您随后运行kpsewhich texmf.cnf
,它会抱怨它无法在任何目录中找到 texmf.cnf。因此,如果您设置了 $TEXMFCNF,您需要确保它包含所有包含您希望 kpsewhich 搜索的 texmf.cnf 的目录。