我知道如何定义一个包或一个类,但我如何让它在任何时候都可用(对自己)?
比如我有一个包文件commonstuff.sty
(或myprettyclass.cls
),我想把它包含在我电脑上创建的任何.tex
文件中。我应该把它放在哪里?我需要运行一些安装程序,还是把它放在某个文件夹里就可以了?
注:我知道我可以把它放在与.tex
文件相同的文件夹中,但这不是我的目的。我正在寻找一种方法,将软件包集中安装在我的电脑上*。
你可以在你的TeX主目录下创建一个文件夹,把你的.sty
文件放在里面。在命令提示符下使用这条命令来找出位置。
kpsewhich -var-value=TEXMFHOME
在我的电脑上,它显示
C:/Users/stefan/texmf
但在Linux或Unix电脑上也可能是~/texmf/
。
按照TeX的目录结构,你应该把你的文件放在一个子目录下,比如~/texmf/tex/latex/commonstuff/
,根据Arthur'下面的评论。这样做的好处是:不需要更新软件包数据库,因为TeX直接搜索你的个人texmf
树。如果你的个人 "texmf "树中有一个 "ls-R "文件,你可以安全地删除它,因为TeX反正也不会使用它。(注意:这假设你的个人树是在本地文件系统上:远程安装的家庭文件夹的用户可能仍然需要哈希。)
关于MiKTeX,请看问题如何在MikTex(Windows)上手动安装软件包的答案中的"安装sty或cls文件"部分。
然后,你可以验证什么文件将被使用。
kpsewhich filename.sty
这将显示TeX实现所提取的文件的路径。
.sty
文件需要放在texmf树中tex/latex
的某个子目录下。 这些树有一个相当固定的结构,但它们的位置可能根据你的操作系统和TeX发行版而不同。 如果你使用Unix(包括Mac OS)和TeX Live,默认情况下有一个层次结构
/usr/local/texlive/2009/texmf
/usr/local/texlive/2009/texmf-dist
/usr/local/texlive/texmf-local
以及其他目录。 你要把它放在texmf-local
目录下,*不要放在由TeX Live安装程序管理的其他目录下;当你升级TeX Live时,你的包可能被覆盖。 texmf-local
层次结构,正如名字所暗示的,是为你管理的本地包而设的;它不会被更新所触及(这也是为什么它直接位于texlive
目录下,而不是texlive/2009
,例如)。
你也可以选择在你的主目录下创建一个名为texmf
的目录,这个软件包将只对你可见,而不是你电脑上的其他用户。
在装有MiKTeX的Windows上,我相信本地安装的目录默认为C:\Localtexmf
。
在任何情况下,无论你的发行版是什么,你都必须把.sty
文件放在.../texmf-local/tex/latex
里,而不是直接放在根目录里;否则就无法工作。
那么,如果你在你的主目录中安装了软件包,你就没有什么可做的了。 如果你在texmf-local
中,你需要运行mktexlsr
(或texhash
,它是一个别名)。