我正在使用moderncv
类在Rmarkdown中创建CV。为了使cv具有可重现性,我在根目录中包括了.cls和.sty文件。但是,为了使根目录整洁,我希望将所有与moderncv
相关的文件保留在一个子目录(assets / tex /)中。我可以使用yaml前端问题中的相对路径访问.cls文件,但是除非它们位于根目录中,否则我无法访问.sty文件。
搜索关于stackoverflow的先前问题,我学到了以下几点:(1)不建议将.cls和.sty文件保留在嵌套目录中。我理解这一点,并且无论如何都希望这样做,以便其他人可以分叉我的项目并能够编织简历,而不必处理查找其texmk文件夹的问题。 (2)解决我的问题的方法似乎涉及使用Makefile设置TEXINPUTS
(请参见this thread和another thread)
我对Makefiles不太满意,但是只要.sty文件仍在根目录中,我就设法使我的.Rmd文件无问题地编织为pdf。这是当前的样子:
PDF_FILE=my_cv.pdf
all : $(PDF_FILE)
echo All files are now up to date
clean :
rm -f $(PDF_FILE)
%.pdf : %.Rmd
Rscript -e 'rmarkdown::render("$<")'
我的理解是,我可以使用以下方式设置TEXINPUTS
:
export TEXINPUTS=".:./assets/tex:"
其中“ assets / tex”表示.sty文件所在的子目录。我不知道如何将上述代码合并到我的makefile中,以便在子目录中识别.sty文件,而将.Rmd编织为PDF。在当前状态下,如果我从根目录中删除.sty文件,然后将其放在上述子目录中,则会出现以下错误:
! LaTeX Error: Command \fax already defined.
Or name \end... illegal, see p.192 of the manual.
我认为之所以发生是因为moderncv
类需要-并且无法找到-相关的.sty文件。
答案 0 :(得分:1)
您可以尝试在make规则中定义环境变量:
%.pdf : %.Rmd
export TEXINPUTS=".:./assets/tex:"
Rscript -e 'rmarkdown::render("$<")'
或者您可以在Rmd文件的设置块中设置环境变量:
```{r setup, include = FALSE}
Sys.setenv(TEXINPUTS=".:./assets/tex:")
```
注意:由于缺少最少的示例,因此未经过测试。