如何在单独的子文件夹中保存一个包含自定义 .cls、.sty、.bst 文件的干净文档文件夹?

如何在单独的子文件夹中保存一个包含自定义 .cls、.sty、.bst 文件的干净文档文件夹?

我正在使用 Makefile 从其 tex 源生成文档。整个项目由自己的输入文件(.tex、、、...)和非预安装的静态输入文件(、、 )组成,并保存在版本控制 (git) 下以.bib供协作编写。我尽量避免弄乱主文件夹,并使用子目录来存放输出和不同类型的输入文件。TeX Live 中不可用的所有文件都应位于存储库中,以便每个人都能简单地创建文档。我的问题是:是否有任何方便的方法可以让我将所有、、放入文档树中的文件夹中:.eps.cls.sty.bstgit clonemake.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 代码。latexmkrclatexmkrc

因此,在此工作流程中,如果类文件已存在,则./texmf可以将以下行添加到本地latexmkrc

$ENV{'TEXINPUTS'}='./texmf//:' . $ENV{'TEXINPUTS'};

这在我的 Mac 上有效,我假设在任何以这种方式使用环境变量的 unix 机器上都有效。对于 windows,实际上对于任何平台,latexmk作者 John Collins 有一个解决方案,网址为他的回答类似的问题

相关内容