![如何正确解析“\usepackage”中的相对路径?](https://linux22.com/image/272179/%E5%A6%82%E4%BD%95%E6%AD%A3%E7%A1%AE%E8%A7%A3%E6%9E%90%E2%80%9C%5Cusepackage%E2%80%9D%E4%B8%AD%E7%9A%84%E7%9B%B8%E5%AF%B9%E8%B7%AF%E5%BE%84%EF%BC%9F.png)
我有一个用于我的项目的专用目录;其中嵌套有目录、source/
和output/
,styles/
其中包含.tex
、.pdf
和.sty
文件。
令我惊讶的是,虽然\usepackage{../styles/mystyle}
fromsource/main.tex
确实按预期工作,但我必须使用相同的内在咒语的路径styles/mystyle.sty
,不是 \usepackage{./substyle}
。
换句话说,文件中的相对路径\usepackage
似乎根据包含文件,而不是包括一个。
这似乎是有问题的,因为它将源和样式结合在一起——事实上,移动源/tmp/main.tex
会破坏文档!至少可以说,这是令人惊讶的。
我做错什么了吗?有没有一个包允许我使用\usepackage
相对路径进行等效操作包含文件?
我知道我可能可以设置环境变量和/或编辑一些 TeX 配置文件,但为了让一切都使用标准的 TeXlive/MacTex 安装,我宁愿不这样做。
答案1
的论点\usepackage
是姓名不是文件路径。传递相对文件路径时有时可以正常工作,这只是由于系统缺乏错误检查。如果包确实使用\ProvidesPackage
此类路径声明自己,则将生成名称不正确的警告。
事实上,原始\input
文件相对于初始文件工作,而不是在文档中的该点维护当前文件的概念和相对于当前文件的输入,这就是它本来的样子。它不能轻易地从 latex 的宏层改变。
答案2
最好把样式文件放在目录中
~/texmf/tex/latex/mystyles/
LaTeX 将始终查找包,而无需指定相对路径。使用
~/Library/texmf/tex/latex/mystyles/
如果您在 Mac OS X 上运行 MacTeX。如有必要,请创建目录结构。您还可以决定将符号链接放在该特殊位置,这样您就不需要在不同位置维护文件。
答案3
做这个
\usepackage{\string~"/path/to/file/<filename>"}
LaTeX 将其理解为
\usepackage{"~/path/to/file/<filename>"}
答案4
假设您的层次结构中没有冲突的包名称/版本,您可以将 TEXINPUTS 环境变量设置为类似于/path/to/main/directory//
双斜杠添加所有子目录的内容。然后您可以\usepackage{mypackage}
在文档中使用它。
设置环境变量不需要是全局的;您可以根据每次运行进行设置。它也不需要编辑任何配置文件。如果您有构建文件(例如 arara 或 latexmk),您可能可以自动执行它。