$TEXMFCNF 是做什么的?

$TEXMFCNF 是做什么的?

我刚刚在对这个问题的回答的评论中被告知如何在 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值覆盖了它。

那么,对于这个问题:

  1. (主要问题):设置是$TEXMFCNF好、坏还是丑?
  2. (发生了什么事):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 的目录。

相关内容