当可能存在多个版本时,如何指定 LaTeX 样式文件的优先级

当可能存在多个版本时,如何指定 LaTeX 样式文件的优先级

例如,假设用户的somepackage.sty系统上某个地方有旧版本。

/path/to/install/latex/somepackage.sty

在工作目录中放置一个(可能是不同的版本)somepackage.sty似乎会遮蔽系统/已安装的版本。

/some/other/dir/myfile.tex
/some/other/dir/somepackage.sty

但是,如果的首选版本somepackage.sty不在本地工作目录中,如何在命令行上指定它?这可能吗?在下面的示例中,我希望能够指定的非系统/非默认版本somepackage.sty

/some/path/preferred/package/versions/somepackage.sty
/my/current/project/myfile.tex

答案1

搜索 TEXMF 树的顺序在配置中的某个位置是固定的。规范顺序是:当前目录、~/texmf 中的用户 TEXMF、系统本地 TEXMF(通常称为 texmf-local),最后是 texmf 和 texmf-dist。因此,手动安装(以管理员/root 身份进入 texmf-local 或以用户身份进入 ~/texmf)始终优先。

我曾经在multiver 包,但我不确定它是否会处理不同 texmf 树中的文件。(它将尝试识别可选参数形式\usepackage[opts]{pkg}[yyyy/mm/dd vVersion]并查找 vVersion/pkg.sty。

但事实证明情况更复杂,因为如果你的“覆盖”包加载了其他包,它们可能需要或不需要是不同的版本。像 KoMa-Script 类这样的类肯定会加载其匹配的辅助包。

而如果根本不提供版本,就会导致从子目录中挑选某个版本(找到的第一个版本),因此可行的解决方案需要改变 ls-R 数据库的格式。

长话短说:在同一安装中拥有同一文件的多个版本是非常危险的。您可以做的一件事是拥有多个localtexmfs,我认为您可以使用环境变量在它们之间切换。

答案2

您可以从命令行运行:

kpsewhich -show-path tex

然后您将得到所有 TeX 将在其中搜索文件的目录作为输出*.tex|*.sty|*.cls|*.fd|*.aux|*.bbl|*.def|*.clo|*.ldf。始终将使用第一个找到的文件。如果!!在目录之前列表中出现重复项,则 TeX 会查找列出所有目录内容的文件 ls-R,而不是在该目录中进行递归搜索。

答案3

您可以在命令中指定正确的包文件的路径\usepackage,例如:

\usepackage{/Users/myname/latex/mypackage}

或使用相对路径:

\usepackage{../../latex/mypackage}

它适用于我的系统(Mac OS + TeXLive 2010 和 pdflatex)。

答案4

如果您有多个文件,您可以确保它位于环境变量中的/some/path/preferred/package/versions/当前目录之前:.TEXINPUTS

TEXINPUTS="/some/path/preferred/package/versions/:$TEXINPUTS"

(假设.已经在TEXINPUTS中)。

您可以将该行放入您的.bashrc(如果适用)。

注意:我不确定这是否是通用解决方案或某些编译器.首先使用的解决方案。至少对我而言(texlive 2016),它是这样的。

相关内容