我正在尝试自动化 pdftex 来生成文档。我陷入了某种困境,TeX 认为人们想要使用绝对路径或工作目录。
我有文件 main.tex。它从子目录导入几个文件:
\include{one/one}
\include{two/two}
我pdftex /path/to/main.tex
从另一个目录调用,并且 tex 始终尝试导入相对于调用“pdftex”的目录而不是 main.tex 的目录。
我无法预测在不同机器上使用的绝对路径是什么。只有当前工作目录中还有另一个 TeX 文件,并且知道 main.tex 的绝对路径是什么时,“导入”包才会起作用。有没有办法让 main.tex 使用相对路径,而不必在 TeX 文件中包含绝对路径?我只希望文件使用相对于该文件所在位置的路径,而不是相对于工作目录或月相的路径。
(作为一个小小的好处,至少这些包含的 TeX 文件都不需要包含其他文件或图形,因为那会是它自己的问题。)
答案1
.tex
请注意,使用时不应包含扩展名,与使用\include
不同,它与使用默认值不同,它会找到相同的 tex 文件,但生成不同的 aux 文件(如果文件系统允许)而不是。\input
.tex
one.tex.aux
one.aux
通常情况下,使用本地文件名而不是路径效果最好。
只要
\include{one}
\include{two}
然后使用命令行
TEXINPUTS=/path/to//: pdftex main
(或其他命令行中的等效命令,以上命令在 bash 中有效)
如上所述设置 TEXINPUTS 会将 TeX 输入路径设置为/path/to
及其所有子目录(尾随的//
和标准搜索路径(因为最后的:
),然后main
在命令行上查找/path/to/main.tex
、\include{one}
查找/path/to/main/one/one.tex
和\include{two}
查找,/path/to/main/two/two.tex
而不管运行命令的当前目录如何。
答案2
您可以尝试常见问题解答中提到的其中一个套餐https://texfaq.org/FAQ-docotherdir。
但我的建议是:不要从其他目录启动 pdflatex。编写脚本或任何要“自动”生成文档的操作,以便它首先切换到主文件的目录。您显然知道从当前目录到主文件的路径,那么为什么不先使用它呢cd
?