例如,假设用户的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 数据库的格式。
长话短说:在同一安装中拥有同一文件的多个版本是非常危险的。您可以做的一件事是拥有多个localtexmf
s,我认为您可以使用环境变量在它们之间切换。
答案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),它是这样的。