在html_document -css文件的输出中添加r块

时间:2017-11-15 13:32:47

标签: r yaml r-markdown

我想使用r chunk将css文件添加到我的Rmd中。例如

---
title: "Untitled"
output: 
    html_document:
        css: '`r system.file("shinydashboard.css" , package = "shinydashboard")`'
---

但我收到了错误:

pandoc: Could not fetch `r system.file(
`r system.file(: openBinaryFile: does not exist (No such file or directory)
Error: pandoc document conversion failed with error 67
Execution halted

我已阅读了相关的两个问题(thisthis),但它们未涵盖r chunk输出html_document时出现的情况(Ramnathv提及brew包,但我没有测试它,除了它发布在'14。)。

如果可以这样做,并且仍在RStudio中使用Knit按钮,那将会很棒。

谢谢,

更新

另一件事是我希望在r chunk内使用html_document从一个目录中包含所有.css文件。在这里,我想要包含www目录中的所有文件:

---
title: "Untitled"
output: 
    html_document:
        css: "`r x <- list.files(path = 'www', pattern = '*.css', full.names = T); x <- paste(x, collapse = '\', \'');z <- paste0('[ \'', paste0(x, collapse = ', '), '\' ]'); z`"
---

1 个答案:

答案 0 :(得分:3)

YAML 标头中的表达式必须使用!expr格式化(请参阅底部的注释)。

---
title: "Untitled"
output:
  html_document:
    css: !expr system.file("shinydashboard.css" , package = "shinydashboard")
---


## Header

```{r meta}
rmarkdown::metadata
```

这会产生以下输出,您可以清楚地看到 CSS 正确加载。

enter image description here

要了解渲染过程中发生的情况,查看正在运行的pandoc命令是很有价值的。对于多文件更新,我们可以运行 static dynamic 进行比较。

---
title: "Untitled"
output:
  html_document:
    css: [ 'www/file1.css', 'www/file2.css' ]
---

# /usr/lib/rstudio-server/bin/pandoc/pandoc +RTS -K512m -RTS so.utf8.md --to html4 --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash --output so.html --smart --email-obfuscation none --self-contained --standalone --section-divs --template /usr/share/R/library/rmarkdown/rmd/h/default.html --no-highlight --variable highlightjs=1 --css www/file1.css --css www/file2.css --variable 'theme:bootstrap' --include-in-header /tmp/RtmpRdKgYW/rmarkdown-str3eef4edabf99.html --mathjax --variable 'mathjax-url:https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML'     

重要的是,您会看到--css www/file1.css --css www/file2.css,并且文件会在包含 CSS 文件的情况下正确呈现。

---
title: "Untitled"
output:
  html_document:
    css: !expr x <- list.files(path = "www", pattern = "*.css", full.names = T); x <- paste(x, collapse = "\', \'"); z <- paste0("[ \'", paste0(x, collapse = ", "), "\' ]"); z
---

# /usr/lib/rstudio-server/bin/pandoc/pandoc +RTS -K512m -RTS so.utf8.md --to html4 --from markdown+autolink_bare_uris+ascii_identifiers+tex_math_single_backslash --output so.html --smart --email-obfuscation none --self-contained --standalone --section-divs --template /usr/share/R/library/rmarkdown/rmd/h/default.html --no-highlight --variable highlightjs=1 --css "[ 'www/file1.css', 'www/file2.css' ]" --variable "theme:bootstrap" --include-in-header /tmp/RtmpMStG00/rmarkdown-str423c7a02dab7.html --mathjax --variable "mathjax-url:https://mathjax.rstudio.com/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"

我们遗憾地找到了--css "[ 'www/file1.css', 'www/file2.css' ]"。我尝试了一些技巧,包括:catcapture.outputas.namenoquote没有运气。 rmarkdown可能需要进行增强,以便将所需格式提交给pandoc

  

N.B。值得注意的是,这确实是this问题的重复,其中Eli Holmes的答案演示了替代语法。他还注意到开发版本的变化,可能包括css字段。