【问题标题】:How to enable syntax highlighting in code chunks within r markdown ioslides presentations?如何在 r markdown ioslides 演示文稿中启用代码块中的语法突出显示?
【发布时间】:2018-10-19 20:40:51
【问题描述】:

有没有办法在呈现为 ioslides_presentation 的 R markdown 文档的代码块中启用语法突出显示? 在markdown reference cheatsheet 中写道,YAML 参数highlight 不适用于 ioslides。所以我一直在寻找一种方法来通过 customized css 文件启用语法突出显示,但由于我不熟悉 css,因此我没有找到任何解决方案。

任何帮助将不胜感激。这是一个可重复的简短示例:

---
title: "example"
output: ioslides_presentation
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```

## Slide with R Output

```{r cars, echo = TRUE, eval = FALSE}
# cars' summary as an example for a comment
summary(cars)
# example for integers
cars[,1]
```

【问题讨论】:

    标签: css r r-markdown ioslides


    【解决方案1】:

    如果您导航到您的 R 安装库文件夹,您应该能够转到(请注意,您的版本号可能会有所不同):

    rmarkdown > rmd > ioslides > ioslides-13.5.1 > theme > css
    

    找到“default.css”文件。在那里,您可以向下滚动到 /*Pretty print */ 评论。在下面,您应该看到一堆以.prettyprint 开头的参数。你最好的选择可能是将它们复制到一个新的自定义 .css 文件中,这样你就可以玩一点,直到你得到你想要的突出显示。例如,我创建了一个名为slides.css 的文件,并将其放在与我的降价文档相同的文件夹中。然后,我复制了这些 css 参数并修改了颜色:

    /* Pretty print */
    
    /* line 600, ../scss/default.scss */
    .prettyprint .com {
      /* a comment */
      color: green;
      font-style: italic;
    }
    
    /* line 604, ../scss/default.scss */
    .prettyprint .lit {
      /* a literal value */
      color: black;
    }
    
    /* line 609, ../scss/default.scss */
    .prettyprint .pun,
    .prettyprint .opn,
    .prettyprint .clo {
      color: red;
    }
    
    /* line 618, ../scss/default.scss */
    .prettyprint .pln {
      color: blue;
    }
    

    然后,使用我的 ioslides 文件:

    ---
    title: "Ioslides check"
    output: 
      ioslides_presentation:
        css: slides.css
    ---
    
    ##
    
    ```{r}
    # cars[,1]  as an example for a comment
    head(cars)
    cars[1:5, 1]
    ```
    

    我的输出看起来像

    如果你想弄清楚你真正想要修改哪些元素(例如,如果你想改变代码的外观),你可以使用浏览器的检查功能(CTRL + SHIFT + I in chrome) 以突出显示 ioslides 输出的元素,以查看它们属于哪个类。例如,当我突出显示结果输出时,它告诉我可以通过使用pre(预格式化文本)标签来修改它。如果我因此向pre 添加颜色参数:

    pre {
      font-family: 'Source Code Pro', 'Courier New', monospace;
      font-size: 20px;
      color: pink;
      line-height: 28px;
      padding: 10px 0 10px 60px;
      letter-spacing: -1px;
      margin-bottom: 20px;
      width: 106%;
      left: -60px;
      position: relative;
      -webkit-box-sizing: border-box;
      -moz-box-sizing: border-box;
      box-sizing: border-box;
      /*overflow: hidden;*/
    }
    

    我也可以更改结果输出:

    但请记住,上面的许多类也包含在pre 标记中,因此如果您对未被子类覆盖的pre 进行修改,您可能会得到一些意想不到的结果。例如,如果我更改 pre 元素的 font-size

    /* line 337, ../scss/default.scss */
    pre {
      font-family: 'Source Code Pro', 'Courier New', monospace;
      font-size: 50px;
      line-height: 28px;
      padding: 10px 0 10px 60px;
      letter-spacing: -1px;
      margin-bottom: 20px;
      width: 106%;
      left: -60px;
      position: relative;
      -webkit-box-sizing: border-box;
      -moz-box-sizing: border-box;
      box-sizing: border-box;
      /*overflow: hidden;*/
    }
    

    但只改变一些子元素的字体大小

    /* line 604, ../scss/default.scss */
    .prettyprint .lit {
      /* a literal value */
      color: black;
      font-size: 20px;
    }
    

    我的输出会很不稳定:

    【讨论】:

    • 非常感谢这个详细的回答。 'prettyprint' 是我在 default.css 中寻找的流行语
    猜你喜欢
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-21
    • 2022-06-25
    • 2016-07-17
    • 2019-05-21
    • 1970-01-01
    相关资源
    最近更新 更多