为什么加载了错误版本的包?

为什么加载了错误版本的包?

我正在尝试 Will Robertson 的回答这个问题无法正确编译。查看日志输出,似乎老的正在加载某个软件包的版本,而不是新的一。

更详细地说,我尝试测试的包(unicode-math)表示需要几个软件包的最新版本(这里最关键的似乎是fontspec)所以我下载了它们并把它们放到我的用户 texmf树。但是,当我编译测试文件时,系统文件被加载。尽管请求文件指定的版本比系统版本提供的版本要晚,当我这样做的时候

卡普塞维德fontspec.sty

然后我的版本已返回。

梅威瑟:

TeX Live 2009(TeX Live 2010 有正确版本的软件包,但我的发行版自带的是 2009 版),带有unicode-math, fontspec,expl3,以及xpackages来自 CTAN(根据 页面unicode-math)。

test.tex

\documentclass{article}
\usepackage{unicode-math}
\begin{document}
\end{document}

两个都

xelatex test.tex
lualatex test.tex

抱怨。稍后在加载某些字体时会出现抱怨,但考虑到fontspec加载了错误的包,我猜错误就出在那里,而不是 TeX 实际抱怨的时候。要确认位置:

tmp% kpsewhich fontspec.sty   
/home/astacey/texmf/tex/latex/bzr/unmodified/fontspec/fontspec.sty

但是 TeX 的输出(稍微压缩了一下):

tmp% xelatex test.tex
This is XeTeX, Version 3.1415926-2.2-0.9995.2 (TeX Live 2009/Debian)
 restricted \write18 enabled.
entering extended mode
(./test.tex
...
(/home/astacey/texmf/tex/latex/bzr/unmodified/unicode-math/unicode-math.sty
...
(/home/astacey/texmf/tex/latex/bzr/unmodified/xpackages/xparse.sty)
(/home/astacey/texmf/tex/latex/bzr/unmodified/xpackages/l3keys2e.sty)
(/usr/share/texmf-texlive/tex/xelatex/fontspec/fontspec.sty
...

注意一些软件包正在从我的本地树中被拉出来texmf,只有这个没有。

答案1

原来,这个问题的答案是,不同的程序向 kpathsea 引擎传递了不同的选项,决定在哪里查找它们的包。由于我调用了xelatex,所以像 这样的位置的包texmf/tex/xelatex比树中其他地方的包更受青睐texmf。当我kpsewhich在命令行上运行时,它不知道我打算使用,xelatex所以只是到处寻找。将 fontspec 包移动到 下的目录~/texmf/tex/xelatex解决了该问题。

我还看到kpsewhich可以提供选项“-engine X”来使其特定于搜索引擎。

(注意:这个特定于程序的行为似乎覆盖了 Caramdir 在问题评论中提到的按日期选择机制。

而且,这并不能解决所有问题,因为我现在遇到了字体生成问题;我目前正在下载 TL2010,看看是否能一次性解决所有问题。)

答案2

这在某种程度上依赖于 LaTeX 发行版,但碰巧的是,我也在使用 TeXLive 的一个版本。(2007,因为我已经对我的发行版进行过一些升级。)

包文件仅位于本地或用户 texmf-tree 中是不够的。您还必须使用 TeXLive 注册它们。从命令提示符运行texhash。(在 ubuntu 上,我似乎记得这需要 root 权限,所以这sudo texhash就是您所需要的。)

假如TeXLive 知道您的用户 texmf-tree 存在,运行此命令应该会导致它扫描该树以及其他地方,并了解它可以在那里找到哪些包。

如果这不起作用,那么 TeXLive 需要知道您的用户 texmf-tree。(我认为如何设置它是一个单独的问题。)或者,您可以运行sudo texhash path_to_user_texmf。但是,既然您说用户树中的某些包确实被调用了,那么这个问题似乎已经解决了。

答案3

这很奇怪...如果 kpsewhich 返回了 fontspec 的正确路径,我不明白为什么它没有被加载。也许可以尝试将旧版本的包完全移出 texmf 树,这样就只有新版本存在了?

TL2010 即将上市(现已上市这里现在它还在制作中(但正在刻录到 DVD 以供正式发布),希望能缓解这个问题。

相关内容