最小示例
如果我有一个包含主要 LaTeX 源文件的目录,并且它用于\input
合并另一个文件中的某些数据,则我可以使用相对路径名。例如,对于这些文件:
~/tmp/相对路径-mwe/mwe.tex
\documentclass{article}
\begin{document}
\input{./src/ex.tex}
\end{document}
〜/ tmp /相对路径-mwe / src / ex.tex
some input
现在,从命令行,如果我在~/tmp/relative-paths-mwe
,我可以按预期进行构建:
~/tmp/relative-paths-mwe$ pdflatex mwe.tex
This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013)
...
Output written on mwe.pdf (1 page, 12192 bytes).
Transcript written on mwe.log.
但是,如果我在父目录中,~/tmp/
我无法构建,因为相对路径(据我理解,并基于症状)是根据当前工作目录而不是出现的文件解析的\input
:
~/tmp$ pdflatex relative-paths-mwe/mwe.tex
...! LaTeX Error: File `./src/ex.tex' not found.
Type X to quit or <RETURN> to proceed,
or enter new name. (Default extension: tex)
Enter file name:
有没有办法以这样的方式指定路径,即我可以使用相对路径引用其他内容,但仍然可以pdflatex
从任意目录调用?
非最小示例
我认为以上是一个完整的最小工作示例,如果我得到答案,我就可以解决我的实际问题。万一有人可以提前预测到差异,或者有人想知道为什么我正在尝试做一些不寻常的事情,需要做一些解释。我有一个项目的源代码库,它有一个 LaTeX 文档的子目录,还有一个Apache Maven项目。该文档一直使用 listings 环境来包含来自 Maven 项目的源代码,使用相对路径,如下所示
../mavenproject/src/more-path/code.extension
有一个LaTeX Maven Mojo它应该能够编译 LaTeX 文档,所以我决定尝试将文档目录移动到mavenproject/src/latex/mydoc
。现在,mavenproject/src/latex/mydoc
如果我将相对路径更改为
../../more-path/code.extension
但我无法使用 LaTeX Mojo 构建这些路径,因为它是从mavenproject
文档根目录上方几个目录运行的。我显然可以调整以处理这种情况,但我无法从mydoc
。我希望有一种方法可以指定相对于包含文档的路径名,或者指定文档根目录,并写入相对于该路径的路径。我希望上述最小示例的解决方案将转移到我的实际情况。
答案1
而不是
\input{./src/ex.tex}
通常最好这样做
\input{ex.tex}
然后使用(从任何地方)
TEXINPUTS=$HOME/tmp/relative-paths-mwe//:$TEXINPUTS: pdflatex mwe
实际上,相对路径并不是根据当前工作目录解析的,而是根据 TEXINPUTS 中的目录解析的(无论是指定为环境变量还是 texmf.cnf 文件中的 kpathsea 配置)。通过以 结尾的路径,//
您可以搜索子目录,这样就ex.tex
可以在子目录中找到src
,也可以mwe.tex
从命令行找到 。TEXINPUTS:
中的结尾确保也在标准位置搜索常见的类和包。
答案2
选择:
\documentclass{article}
\usepackage[abspath]{currfile} % ← need this package
\begin{document}
\input{\currfileabsdir/src/ex.tex} % use `\currfileabsdir`
\end{document}
它的工作原理应该非常明显。如currfile
软件包文档中所述,您需要-recorder
标志,并且如果您使用 MikTeX,您可能想要尝试\InputIfFileExists
等等(有关详细信息,请参阅该软件包的文档...)