我选修了一门每周都会布置家庭作业的课程。我mycourse
为该课程创建了一个文件夹,每个家庭作业都有子文件夹、等。我在课程文件夹中有一个mycourse/hw1/
文件,此外每个子文件夹都包含一个文件,例如、等。此外,每个子文件夹都包含一个文件。该文件是一个 LaTeX 文档,打算用 LaTeX 排版为 pdf 文件,然后我会将其提交给教授。每个文件的结构如下:mycourse/hw2/
mycourse/urpreamble.tex
preamble.tex
mycourse/hw1/preamble.tex
mycourse/hw2/preamble.tex
answers.tex
answers.tex
\documentclass{article}
\input{preamble}
...
\begin{document}
...
\end{document}
我希望每个preamble.tex
文件都以输入 的内容开头。但是,在文件开头urpreamble.tex
写入 的简单方法不起作用:LaTeX 引擎会抱怨找不到该文件。有没有办法指示 LaTeX 引擎搜索文件夹树?我试过了,但这不起作用。但是,即使它确实有效,我还是希望有一个更通用的解决方案,可以搜索文件夹树,甚至搜索紧接在前的父级。\input{urpreamble}
preamble.tex
\input{../urpreamble}
答案1
假设您pdflatex answers.tex
从hw1
子目录运行\input{../urpreamble}
将会起作用,除非您有阻止访问的安全设置..
。
注意路径是相对于 tex 进程的工作目录,而不是相对于文件,因此如果你在父进程中运行,pdflatex hw1/answers.tex
那么它应该是\input{urpreamble}
。(这是 tex 的一个令人困惑的功能,最好始终不是通过命令行上的路径引用文件。cd
到目录然后使用本地文件名,因此进程的工作目录是包含该文件的目录,并且\input{abc}
可以被视为相对于任一目录。
例如 texlive 的 texmf.cnf 有
% Do we allow TeX \input or \openin (openin_any), or \openout
% (openout_any) on filenames starting with `.' (e.g., .rhosts) or
% outside the current tree (e.g., /etc/passwd)?
% a (any) : any file can be opened.
% r (restricted) : disallow opening dot files
% p (paranoid) : as `r' and disallow going to parent directories, and
% restrict absolute paths to be under $TEXMFOUTPUT.
openin_any = a
openout_any = p
因此默认情况下您可以读取但不能写入,..
但您可能已经改变了这一点。
否则,您无法向上搜索,但可以从任意点向下搜索,因此如果您设置
TEXINPUTS=/path/to/mycourse//:
那么无论你在哪里运行 latex,下面的任何文件mycourse
都会被找到