我应该将自己的 .sty 或 .cls 文件放在哪里,以使它们可供我的所有 .tex 文件使用? - 授权(kpathsea 基础知识)

我应该将自己的 .sty 或 .cls 文件放在哪里,以使它们可供我的所有 .tex 文件使用? - 授权(kpathsea 基础知识)

为了获得非 TeXlive .sty 文件,我遵循了该问题的建议:我应该将自己的 .sty 或 .cls 文件放在哪里,以使它们可供我的所有 .tex 文件使用?

我按照指示去做了,但是 kpsewhich 找不到我的 CmathLuaTex.sty 文件,TeXmaker 和 TeXworks 也找不到。

那么错误在哪里?

答案1

在提出一个程序之前(更适合新手),让我们列出许多失败的方式(更适合知情人士):

  • 愚蠢但仍然耗时,拼写错误:使用名为 example.sty 的文件进行测试而不是 CMathLuaTeX.sty,或者可能是 CmathLuaTeX.sty 或者可能是 CmathLuaTex.sty ...
  • $TEXMFHOME 不在 $TEXMF 或 $TEXMFDBS 目录列表中(使用kpsewhich -var-value=TEXMF或检查kpsewhich -var-value=TEXMFDBS
  • $TEXMF 中的 !!$TEXMFHOME 错误,而不是 $TEXMFHOME
  • 在默认 texmf.cnf 配置文件中所做的修改,被更新清除
  • .sty 文件位置错误(不在 $TEXMFHOME/tex 层次结构中)
  • 直接在磁盘上进行搜索时,$TEXMFHOME 目录中存在 ls-R 文件,会阻止在磁盘上进行搜索(kpathsea 手册中描述,有时会遇到)
  • 使用指向 .sty 文件实际目录的符号链接直接在磁盘上使用搜索时:不考虑没有子目录的目录中的符号链接
  • 使用带有索引 ls-R 文件的搜索时:ls-R 文件缺失、过时、放错位置(不在 $TEXMFHOME 目录中)
  • 自定义 texmf.cnf 文件来覆盖错误目录中的默认 texmf.cnf 文件(例如在默认 texmf.cnf 文件的注释中推荐的位置!)

我至少遇到了三个这样的错误……

以下是可以避免所有这些陷阱的程序:

  1. 输入kpsewhich -var-value=$TEXMFHOME以了解 texmf 用户树应该去往何处(例如:/home/ad/texmf)
  2. 创建(如果不存在)$TEXMFHOME 目录下名为“tex”的子目录(例如 /home/ad/texmf/tex)以及类似 /home/ad/texmf/tex/latex 或 /home/ad/texmf/tex/mystuff 的子目录
  3. 在 $TEXMFHOME/tex 层次结构中包含您的 .sty 或 .cls 文件,或包含它们的层次结构的符号链接。
    我们现在需要通知 kpathsea 在 $TEXMFHOME 中搜索:
  4. kpsewhich -var-value=TEXMFCNF将给出 kpathsea 查找配置 texmf.cnf 文件的目录列表。顺序是有意义的:首先检查最左边的目录,如果变量已经定义,则覆盖后续文件。列表的最后一个目录中是默认的 texmf.cnf 文件。在倒数第二个目录之前的某个目录中(通常是倒数第二个目录),如果不存在 texmf.cnf 文件,则创建一个新的。您可能需要管理员权限,具体取决于目录的位置。我们将使用此文件来修改 $TEXMF 或 $TEXMFDBS 变量的定义,具体取决于我们想要的 kpathsea 搜索类型:a) 直接在磁盘上或 b) 基于 ls-R 索引文件。为避免拼写错误,最好从默认 texmf.cnf 文件(在前一个目录列表的最后一个目录中)复制 $TEXMF 或 $TEXMFDBS 变量的默认值。
  5. a) 在磁盘上搜索:在新的 texmf.cnf 中,将“$TEXMFHOME”添加到默认 texmf.cnf 文件中变量 $TEXMF 的列表中;例如:TEXMF = {$TEXMFCONFIG,$TEXMFVAR,$TEXMFSYSCONFIG,!!$TEXMFSYSVAR,!!$TEXMFLOCAL,!!$TEXMFDEBIAN,!!$TEXMFDIST,$TEXMFHOME}。这是最简单的方法,但不是最有效的。b) 根据 ls-R 索引文件搜索:在新的 texmf.cnf 中,将“$TEXMFHOME”添加到默认 texmf.cnf 文件中变量 $TEXMF 的列表中;例如:TEXMFDBS = {!!$TEXMFSYSVAR,!!$TEXMFLOCAL,!!$TEXMFDEBIAN,!!$TEXMFDIST,!!$TEXMFHOME};使用以下命令创建/更新 ls-R 文件,texhash $TEXMFHOME例如texhash /home/ad/texmf如果 $TEXMFHOME 是“/home/ad/texmf”;如果您使用了符号链接,请检查它是否位于包含子目录的 $TEXMFHOME/tex 子目录中,否则创建一个虚拟的。
  6. 检查一切是否正常:kpsewhich example.sty应该会给出文件路径。如果成功,您首选的 tex 编辑器/源应该会找到您的自定义 .sty/.cls 文件。

资料来源:kpathsea 库手册kpsewhich -var-value=TEXMFCNF,默认的 texmf.cnf 文件中的注释位于使用,版本 kpathsea 6.2.1获取的列表的最后一个目录中。

相关内容