带有 Rmarkdown 和 custom.css 文件的 Snakemake 报告

Snakemake report with Rmarkdown and custom.css file

下面是Snakemake Rmd report with a custom.css的例子。

---
title: "Test Report"
date: "`r format(Sys.time(), '%d %B, %Y')`"
params:
   rmd: "report.Rmd"
output:
  html_document:
     css: "custom.css" 

---

## R Markdown

This is an R Markdown document.
Test include from snakemake `r snakemake@input`.

这个具体示例不起作用,因为 Snakemake 将 .rmd 文件移动到一个临时位置。

File custom.css not found in resource path
Error: pandoc document conversion failed with error 99

简单的解决方案是将 custom.css 移动到呈现 report.rmd 的位置,但我们没有这个位置。此外,我们不能在 header 上使用 snakemake 指令,因为它只能在它之后使用。

有人能解决这个问题吗?我能想到的唯一解决方案是修补 Snakemake 以接受特定的 header 参数。

我想你的语法可能有误。根据 Rmarkdown Cookbook

output:
  html_document:
    css: "style.css"

更新您的 yaml header 并查看我们是否收到 css 的其他错误,而不是您之前收到的“在资源路径中找不到文件 custom.css”我们更正了 YAML 格式

脚本文件的源目录报告为“scriptdir”。也许你可以使用它?

---
title: "Test Report"
date: "`r format(Sys.time(), '%d %B, %Y')`"
params:
  rmd: "report.Rmd"
output:
  html_document:
    css: "`r snakemake@scriptdir`/custom.css" 

---

## R Markdown

This is an R Markdown document.
Test include from snakemake `r snakemake@input`.

Snakemake 对象不可用 Rmd 序言(see here)。

我找到的解决方案是使用 css 块而不是 CSS 参数:

---
title: "Test Report"
date: "`r format(Sys.time(), '%d %B, %Y')`"
params:
   rmd: "report.Rmd"
output:
  html_document
---

```{css, echo=FALSE}
.Sidebar {
   background-image: url('logo.png');

```

## R Markdown

This is an R Markdown document.
Test include from snakemake `r snakemake@input`.

虽然这对我的用例来说效果很好,但我认为在序言中包含 snakemake 对象会很有帮助。

我想我找到了解决这个问题的比较满意的方法。由于如前所述,Rmarkdown 文档的 YAML header 中没有 snakemake object,因此我随后为文档定义了 CSS。

我在阅读 R Markdown Cookbook 中的以下页面后找到了我的解决方案:Apply custom CSS, Read external scripts into a chunk as well as Use variables in chunk options

---
title: "Test Report"
date: "`r format(Sys.time(), '%d %B, %Y')`"
params:
   rmd: "report.Rmd"
output:
   html_document
---

```{r, echo = FALSE}
css_file <- paste0(snakemake@scriptdir, "/style.css")
```

```{css, code=xfun::read_utf8(css_file), echo=FALSE}
``` 

## R Markdown

This is an R Markdown document.
Test include from snakemake `r snakemake@input`.

基本上,在第一个 r 代码块中,我访问了 snakemake object 并获取了 CSS 文件的路径。在第二个 css 代码块中,我从这个文件路径读取了外部 CSS 文件。