Knitr钩子来后处理pdf输出?

时间:2016-09-26 22:57:30

标签: r knitr rnw

我有foo.Rnw文件,该文件使用extrafont包生成带有使用非标准字体系列的文本元素的数字。在knitr在我的文档上调用pdflatex之后,我想在生成的extrafont::embed_fonts文件上运行foo.pdf

我可以手动执行此操作,但有没有办法在knitr中执行此操作? (例如,一些knitr包选项我可以设置为在编织我的文件并通过pdflatex运行它后自动调用extrafont::embed_fonts

1 个答案:

答案 0 :(得分:3)

this answer中所述,可以通过设置YAML选项knit来修改RStudio中“编译PDF”按钮的行为。这允许在点击“编织”按钮时运行任意代码。请注意,代码必须格式化为单行,并且您需要对字符数据使用单引号(双引号将不起作用)。

我不知道extrafont包,所以这里是一个裁剪生成的PDF的示例。调用extrafont::embed_fonts应该类似地工作:

---
knit: (function(inputFile, encoding) { rmarkdown::render(input = inputFile, encoding = encoding); knitr::plot_crop(paste0(basename(tools::file_path_sans_ext(inputFile)), '.pdf')) } )
output: pdf_document
---

```{r}
print("Hello world!")
```

实际上非常简单;最复杂的部分是组成输出文件名:(paste0(basename(tools::file_path_sans_ext(inputFile)), '.pdf')(参见here)。