使用子目录中带有 sty 文件的 makefile 将 Rmarkdown moderncv 编织成 pdf
knit Rmarkdown moderncv to pdf using makefile with sty file in subdirectory
我正在使用 moderncv
class 在 Rmarkdown 中创建简历。为了使 cv 开箱即用,我在根目录中包含了 .cls 和 .sty 文件。但是,为了保持根目录整洁,我宁愿将所有 moderncv
相关文件保存在子目录 (assets/tex/) 中。我可以使用 yaml 前端中的相对路径访问 .cls 文件,但我无法访问 .sty 文件,除非它们位于根目录中。
在 Whosebug 上搜索以前的问题我了解到以下内容:(1) 不建议将 .cls 和 .sty 文件保存在嵌套目录中。我明白这一点,并且无论如何都想这样做,这样其他人就可以 fork 我的项目并能够编织简历,而不必处理寻找他们的 texmk 文件夹的问题。 (2) 我的问题的解决方案似乎涉及使用 Makefile 设置 TEXINPUTS
(参见 this thread and another thread)
我不太擅长使用 Makefile,但我已经设法找到一个可以毫无问题地将我的 .Rmd 文件编织成 pdf 的文件,只要 .sty 文件仍在根目录中。这是目前的样子:
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
class 需要——但无法找到——相关的 .sty 文件。
您可以尝试在 make 规则中定义环境变量:
%.pdf : %.Rmd
export TEXINPUTS=".:./assets/tex:"
Rscript -e 'rmarkdown::render("$<")'
或者您可以在 Rmd 文件的设置块中设置环境变量:
```{r setup, include = FALSE}
Sys.setenv(TEXINPUTS=".:./assets/tex:")
```
注意:由于缺少最小示例,未进行测试。
我正在使用 moderncv
class 在 Rmarkdown 中创建简历。为了使 cv 开箱即用,我在根目录中包含了 .cls 和 .sty 文件。但是,为了保持根目录整洁,我宁愿将所有 moderncv
相关文件保存在子目录 (assets/tex/) 中。我可以使用 yaml 前端中的相对路径访问 .cls 文件,但我无法访问 .sty 文件,除非它们位于根目录中。
在 Whosebug 上搜索以前的问题我了解到以下内容:(1) 不建议将 .cls 和 .sty 文件保存在嵌套目录中。我明白这一点,并且无论如何都想这样做,这样其他人就可以 fork 我的项目并能够编织简历,而不必处理寻找他们的 texmk 文件夹的问题。 (2) 我的问题的解决方案似乎涉及使用 Makefile 设置 TEXINPUTS
(参见 this thread and another thread)
我不太擅长使用 Makefile,但我已经设法找到一个可以毫无问题地将我的 .Rmd 文件编织成 pdf 的文件,只要 .sty 文件仍在根目录中。这是目前的样子:
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
class 需要——但无法找到——相关的 .sty 文件。
您可以尝试在 make 规则中定义环境变量:
%.pdf : %.Rmd
export TEXINPUTS=".:./assets/tex:"
Rscript -e 'rmarkdown::render("$<")'
或者您可以在 Rmd 文件的设置块中设置环境变量:
```{r setup, include = FALSE}
Sys.setenv(TEXINPUTS=".:./assets/tex:")
```
注意:由于缺少最小示例,未进行测试。