我正在使用 Makefile 从其 tex 源生成文档。整个项目由自己的输入文件(.tex
、、、...)和非预安装的静态输入文件(、、 )组成,并保存在版本控制 (git) 下以.bib
供协作编写。我尽量避免弄乱主文件夹,并使用子目录来存放输出和不同类型的输入文件。TeX Live 中不可用的所有文件都应位于存储库中,以便每个人都能简单地创建文档。我的问题是:是否有任何方便的方法可以让我将所有、、放入文档树中的文件夹中:.eps
.cls
.sty
.bst
git clone
make
.cls
.sty
.bst
./texmf
document-folder
├── .git/...
├── graphics/fig1-<...>.eps
├── graphics/fig2-<...>.eps
├── graphics/...
├── output/docname.pdf
├── output/docname.aux
├── output/...
├── texmf/docclass.cls
├── texmf/custom-package.sty
├── texmf/...
├── docname.tex
├── docname.bib
└── Makefile
Makefile 如下所示
LATEX := pdflatex
ODIR := ./output
LATEXOPTS:= --output-dir=$(ODIR)
$(TEXFILE).pdf: $(TEXFILE).tex $(TEXFILE).bib
$(LATEX) $(LATEXOPTS) $(TEXFILE).tex
以下解决方案有效,但由于合作者每次都必须.bashrc
为此项目调整环境变量,所以我对此并不满意:
$ export TEXINPUTS=".:./texmf:~/texmf:$TEXINPUTS"
$ make
据我所知,无法在 Makefile 中更改环境变量。
答案1
实际上,您可以在 Makefile 中使用该环境变量(仅使用 GNU make 测试)。您需要执行以下操作:
export VAR=value without quotes
如果引用同一变量的先前值,则需要使用赋值:=
,这会立即扩展该值。通常的做法=
是每次使用时都扩展该值,这将导致递归赋值,这make
会检测并报告为错误。值周围不需要引号,使用它们可能会导致麻烦。此外,变量必须${VAR}
在右侧写为 ,而不是$VAR
。
因此,您最好在 Makefile 的开头添加以下行:
export TEXINPUTS:=.:./texmf:~/texmf:${TEXINPUTS}
答案2
我用latexmk
对于一些文档构建,我一直想要这样的东西。特别是当我有文档和版本控制下的类。
我发现您可以使用文档目录中的 latexmk
本地文件进行配置。文件只是 perl 代码。latexmkrc
latexmkrc
因此,在此工作流程中,如果类文件已存在,则./texmf
可以将以下行添加到本地latexmkrc
:
$ENV{'TEXINPUTS'}='./texmf//:' . $ENV{'TEXINPUTS'};
这在我的 Mac 上有效,我假设在任何以这种方式使用环境变量的 unix 机器上都有效。对于 windows,实际上对于任何平台,latexmk
作者 John Collins 有一个解决方案,网址为他的回答到类似的问题。