【问题标题】:change code block color in knitr/markdown在 knitr/markdown 中更改代码块颜色
【发布时间】:2025-12-30 15:20:12
【问题描述】:

我正在 Rstudio 中编写一个比较 Perl 和 R 的降价文档。我想要什么 能够做的是根据使用的语言有不同的代码块背景颜色。 例如

R 代码块

```{r}
dog <- 1
cat <- 2
dog + cat
```

Perl 代码块

```{r, engine='perl'}
$dog = 1;
$cat = 2;
print $dog + $cat;
```

如果您使用上述代码使用 knitr 生成 html 文件,则 r 代码块具有纯灰色背景,而代码块的输出具有白色/透明背景。

但是,Perl 代码块和输出具有白色/透明背景,看起来令人困惑。我希望在 markdown/knitr 中有一种优雅的方式来做到这一点。

【问题讨论】:

    标签: r knitr rstudio r-markdown


    【解决方案1】:

    按照亿辉的建议,我与 Rstudio 支持人员进行了交谈。他们指出,我基本上可以通过以下 R 代码告诉 R 使用我自己的样式表:

    options(rstudio.markdownToHTML = 
    function(inputFile, outputFile) {      
    require(markdown)
    markdownToHTML(inputFile, outputFile, stylesheet='custom.css')   
    }
    )
    

    'custom.css' 必须在您的工作目录中。我下载了 R studio 的 CSS 表 (link) 来寻找要修改的部分。在样式表中有一段代码

    code.r, code.cpp {   background-color: #F8F8F8;}
    

    正如 Yihui 指出的那样,这只支持 R 和 C++ 的颜色编码块。对以下内容的快速更改包括 perl: code.r,code.cpp,code.perl { 背景颜色:#F8F8F8;} 或者通过在 code.r 背景块下方添加以下内容来制作不同的颜色。

    code.perl {
    background-color: #B53389;
    }
    

    【讨论】:

    • 请注意,这种方法仍然不会语法高亮 perl 代码,因为 RStudio 插入的 javascript 只高亮 R 和 CPP 代码。
    【解决方案2】:

    我认为这是 RStudio 的问题。目前,它似乎只支持两种语言(用于语法高亮)——R 和 C++;也许您可以向他们提交功能请求,或者您可以使用 Pandoc 等其他工具呈现您的降价输出,或者只是将 md 文件放在 Github 上,它也为 Perl 进行语法突出显示,例如例如028-engine-perl.md

    【讨论】:

    • 谢谢,我与 rstudio 支持人员交谈,他们非常有帮助。
    【解决方案3】:

    发生这种情况的原因是因为 RStudio 仅捆绑了 jscss 以在运行 knit2html 时突出显示 R 代码。您可以通过在 Rmd 文件中包含以下 css 和 javascript 来启用其他语言的语法突出显示。

    <link rel="stylesheet" href="http://yandex.st/highlightjs/7.3/styles/default.min.css">
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
    <script src="http://yandex.st/highlightjs/7.3/highlight.min.js"></script>
    <script>
    $(document).ready(function() {
      $('pre code').each(function(i, e) {hljs.highlightBlock(e)});
    });
    </script>
    

    这仍然没有解决不同背景的问题,因为两者都是由主题css控制的。但是,您可以包含自定义 css 以为输出提供不同的背景。

    更新:

    添加以下附加行将有助于调整输出背景颜色(我选择了浅黄色,但您可以根据需要自定义)

    <style>
    pre code.bash {
      background: lightyellow;
    }
    </style>
    

    【讨论】:

    • 感谢这篇有用的帖子。您知道是否可以将链接样式表 only 用于非 R 代码块?与 RStudio 捆绑的 R 代码突出显示优于 highlight.js 提供的。