如何指示 LaTeX 引擎从通过“输入”命令嵌入的文件中向上搜索文件夹树?

如何指示 LaTeX 引擎从通过“输入”命令嵌入的文件中向上搜索文件夹树?

我选修了一门每周都会布置家庭作业的课程。我mycourse为该课程创建了一个文件夹,每个家庭作业都有子文件夹、等。我在课程文件夹中有一个mycourse/hw1/文件,此外每个子文件夹都包含一个文件,例如、等。此外,每个子文件夹都包含一个文件。该文件是一个 LaTeX 文档,打算用 LaTeX 排版为 pdf 文件,然后我会将其提交给教授。每个文件的结构如下:mycourse/hw2/mycourse/urpreamble.texpreamble.texmycourse/hw1/preamble.texmycourse/hw2/preamble.texanswers.texanswers.tex

\documentclass{article}
\input{preamble}
...
\begin{document}
...
\end{document}

我希望每个preamble.tex文件都以输入 的内容开头。但是,在文件开头urpreamble.tex写入 的简单方法不起作用:LaTeX 引擎会抱怨找不到该文件。有没有办法指示 LaTeX 引擎搜索文件夹树?我试过了,但这不起作用。但是,即使它确实有效,我还是希望有一个更通用的解决方案,可以搜索文件夹树,甚至搜索紧接在前的父级。\input{urpreamble}preamble.tex\input{../urpreamble}

答案1

假设您pdflatex answers.texhw1子目录运行\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都会被找到

相关内容