【问题标题】:Highlighting bash code with knitr / rmarkdown使用 knitr / rmarkdown 突出显示 bash 代码
【发布时间】:2015-07-06 23:41:49
【问题描述】:

我正在尝试使用 RStudio、R Markdown 和 knitr 生成 HTML 报告。在报告中我想显示一些bash 代码。我不想运行代码,但我希望它被突出显示。

another question 中已经提到过,但那里的建议对我不起作用。到目前为止,这是我尝试过的:

---
title: "bash highlighting?"
output: html_document
---
```{r, engine = 'bash', eval = FALSE}
for foo in (ls bar)
do
  echo $foo
done
```

```{bash, eval = FALSE}
for foo in (ls bar)
do
  echo $foo
done
```

这些都没有让我在 HTML 文档中突出显示。我知道这是可能的,因为我记得大约一周前在某个地方看到过它,但我再也找不到了!有谁知道我如何实现它?

感谢阅读,

汤姆

编辑:我刚刚找到this answer,它建议在.Rmd 中使用以下代码块

<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>

这适用于文档中的 bash 代码,但会取消 R 代码的突出显示!

## R version 3.2.0 (2015-04-16)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 14.04.2 LTS
## 
## locale:
##  [1] LC_CTYPE=en_AU.UTF-8       LC_NUMERIC=C              
##  [3] LC_TIME=en_AU.UTF-8        LC_COLLATE=en_AU.UTF-8    
##  [5] LC_MONETARY=en_AU.UTF-8    LC_MESSAGES=en_AU.UTF-8   
##  [7] LC_PAPER=en_AU.UTF-8       LC_NAME=C                 
##  [9] LC_ADDRESS=C               LC_TELEPHONE=C            
## [11] LC_MEASUREMENT=en_AU.UTF-8 LC_IDENTIFICATION=C       
## 
## attached base packages:
## [1] stats     graphics  grDevices utils     datasets  methods   base     
## 
## loaded via a namespace (and not attached):
## [1] formatR_1.2     tools_3.2.0     htmltools_0.2.6 yaml_2.1.13    
## [5] rmarkdown_0.5.1 knitr_1.10      stringr_0.6.2   digest_0.6.8   
## [9] evaluate_0.7

【问题讨论】:

  • 关于Yihui's examples on GitHub,看起来GitHub 渲染了number of languages on its own。您可以添加自己的css file。第三种选择是使用例如渲染 md 文件。 pandoc.
  • 要使用 pandoc,您可以使用 pandoc -s 027-engine-bash.md -t html -o bash.html,但请参阅 demos 了解无数选项。
  • @Roman 是的,我添加到问题中的代码使用带有highlight.js 的css 文件。它工作得很好,但来自highlight.js 的 R 突出显示不如来自RStudio 的突出显示好。我现在需要做的是让 css 文件 only 应用于非 R 代码块。再次感谢您的回复。

标签: r syntax-highlighting rstudio knitr r-markdown


【解决方案1】:

默认语法高亮主题不适用于非 R 代码块,您可以使用其他主题,例如pygments

---
title: "Bash Highlighting"
output:
  html_document:
    highlight: pygments
---

```{r, engine = 'bash', eval = FALSE}
for foo in (ls bar)
do
  echo $foo
done
```

【讨论】:

  • 比我的回答容易得多。 default theme for pandoc pygments,所以我猜我的运气只能靠运气。
【解决方案2】:

好的,感谢 cmets。似乎是 RStudio 与突出显示效果不佳。当我将中间降价文件保留为in.md:

---
title: "Bash Highlighting"
output:
  html_document:
    keep_md: true
---

```{r, engine = 'bash', eval = FALSE}
for foo in (ls bar)
do
  echo $foo
done
```

然后使用pandoc 转换为html,使用例如来自BioConductor 的CSS:

pandoc -s in.md \
    -c https://hedgehog.fhcrc.org/bioconductor/branches/RELEASE_3_1/madman/Rpacks/BiocStyle/inst/resources/html/bioconductor.css \
    -t html -o out.html

Rbash 的代码突出显示效果很好。

谢谢!

【讨论】:

    猜你喜欢
    • 2018-06-13
    • 1970-01-01
    • 2017-08-21
    • 2013-12-16
    • 2015-09-14
    • 1970-01-01
    • 2013-05-10
    • 2019-04-13
    • 2013-08-24
    相关资源
    最近更新 更多