RMarkdown-更改内联代码颜色*无需更改工作流程*

时间:2019-05-28 21:06:47

标签: r-markdown knitr

我在RStudio(服务器)中使用R Markdown讲授统计学入门课程。我们有学生编织html_notebooks,并且经常让他们使用内联代码来报告其统计分析的各种元素。如果我们可以用不同的颜色输出内联代码,则对分级很有帮助-这样一来,我们就可以轻松查看它们是否确实在使用内联代码,或者是否将其输出中的数字复制粘贴到了代码中原始文本。

here上发布了一些解决方案的想法,但就我而言,这些想法不会奏效。这些是入门学生,通常有点怕RStudio,因此要求他们对text_specsprintf做任何复杂的事情都可能引起轻度骚动。我真的需要一些根本不会改变学生工作流程的东西。

我想知道是否有任何方法可以在RStudio Server的后端(可能是通过messing with knitr进行配置),还是可以通过序言中的某种<style>标签向导进行配置,以便内联代码将以不同的颜色打印结果。

谢谢!

2 个答案:

答案 0 :(得分:2)

对于那些寻求对简单R降价文档进行修复的用户,添加此行会将内联输出更改为蓝色。

knitr::knit_hooks$set(inline=function(x){paste0("<span style=\"color: #0000FF;\">", x,"</span>")})

答案 1 :(得分:1)

在不改变工作流程的情况下实现此目的的一种方法是创建自己的格式(例如html_notebook2),该格式源自原始格式,但会修改knitr的内联挂钩。

要开始使用,您可以查看此document

基本步骤包括

  1. 创建一个新的R包
  2. 在此项目中运行usethis::use_rmarkdown_template()。这将为您的新格式创建文件夹结构。
  3. 编辑skeleton.rmdtemplate.yaml
  4. 在具有相同名称html_notebook2.R(有点像惯例)的R文件中定义格式。

html_notebook2.R文件的内容可能是

#'@import knitr
set_hooks <- function() {
  default_hooks  <- knit_hooks$get()
  list(
    inline = function(x) {
      paste0("<span style=\"color: #FF0000;\">", x,"</span>")
  })
}

#' @importFrom rmarkdown output_format knitr_options pandoc_options html_notebook
#' @export
html_notebook2 = function() {
  output_format(
    knitr = knitr_options(knit_hooks = set_hooks()),
    pandoc = pandoc_options(to = "html"),
    clean_supporting = FALSE,
    base_format = html_notebook()
  )
}

在第一部分中,我们定义了一个新的内联挂钩,该内联挂钩仅更改字体颜色。 第二部分是新格式的定义。

在构建和安装软件包之后,您可以创建一个新的rmarkdown文档并使用output: packagename::html_notebook2作为输出格式。使用我的代码,所有内联代码输出将变为红色。这是一个示例:

---
title: "Inline"
output: cformat::html_notebook2
---

## R Markdown

`r pi`

enter image description here

我创建了这样的程序包,您可以在GitHub上找到它。随时复制并重命名(cformat是一个非常la脚的工作标题;))。

请注意,尽管您的学生仍然可以使用HTML / CSS手动更改颜色。一种解决方法是使用某种规则(显然是学生不知道的)生成某种密钥。对于每个内联块,将使用以下方式生成并嵌入密钥:

paste0("<span code=", key," style=\"color: #FF0000;\">", x,"</span>")

如果嵌入了有效密钥,则使用R生成输出,而不是简单地将其复制。