【问题标题】:Knitr hook to postprocess pdf output?用于后处理 pdf 输出的 Knitr 挂钩?
【发布时间】:2017-02-04 10:24:20
【问题描述】:

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

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

【问题讨论】:

  • 如何编织文档?使用 RStudio 中的“编译 PDF”按钮?
  • 是的。我就是这样做的。

标签: r knitr rnw


【解决方案1】:

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

我不知道 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)。

【讨论】:

  • 非常适合 .Rmd。没有 YAML 标头的 .Rnw 有什么可比的吗?
  • @jgilligan 哦,抱歉,我错过了您问题上的rnw 标签。目前我不知道如何将其应用于 RNW,但我会一直记在脑后。
猜你喜欢
  • 1970-01-01
  • 2014-09-10
  • 2017-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 2013-09-04
相关资源
最近更新 更多