我有一个文档,编译得很好。我试图将其重构为单独的文件,但input
命令似乎将其路径建立在相对于构建目录而不是源目录。
我的目录结构:
project/src/main.tex
project/build/
main.tex 最初看起来像这样,简化了
\documentclass[a4paper,12pt]{book}
\renewcommand{\thesection}{\thechapter.\arabic{section}}
\begin{document}
...
\end{document}
如果我这样做
$> cd project/build
$> pdflatex ../src/main.tex
然后我得到了所需的输出,project/build/
并且没有添加任何垃圾project/src
,太好了。
现在进入\renewcommand...
并project/src/commands.tex
编辑main.tex
\documentclass[a4paper,12pt]{book}
\input{commmands}
\begin{document}
...
\end{document}
现在,当我运行时,pdflatex
它在第二行停止:
! LaTeX Error: File `commands.tex' not found.
如果我main.tex
这样编辑:
\documentclass[a4paper,12pt]{book}
\input{../src/commands}
\begin{document}
...
\end{document}
然后它就可以编译成功。
这显然是愚蠢的。源代码不应该关心编译器调用的工作目录。
我该如何编写main.tex
才能包含所有其他文件相对于其自身路径(并且这种行为适用于包含的包含等等)以便我可以在源代码外编译文档?
答案1
只需使用
\documentclass[a4paper,12pt]{book}
\input{commands}
\begin{document}
...
\end{document}
或者更好地调用文件而commands.sty
不是commands.tex
使用
\documentclass[a4paper,12pt]{book}
\usepackage{commands}
\begin{document}
...
\end{document}
调用顺序为
cd project/build
TEXINPUTS=../src//:
pdflatex main.tex