首页 > 解决方案 > 使用 Rmd 块代码样式编织 Markdown 代码块

问题描述

我有很多降价文件,每个都有很多代码块,请参见下面的示例。(它们通过 pandoc 从其他文件类型转换为这种格式)

我想把这些编成 Rmd 文件。现在,代码块没有装饰器。当我编织下面的文件时,没有代码语法样式/着色。我不想评估代码,我只想将它们打印出来,因此:knitr::opts_chunk$set(warning=FALSE, message=FALSE, cache=FALSE).

假设所有代码都是 MATLAB 代码,有没有我可以添加之类的东西:knitr::opts_chunk$set(code=MATLAB),以便它们都能获得 MATLAB 代码样式/着色?

我的代码块实际上都是 MATLAB 代码,因此 MATLAB stlying/coloring 会更有帮助,但任何代码样式都会很好地使输出的 HTML/PDF 等中的代码块更易于阅读。

---
title: matlab code in blocks
output: html_document
---

# RMD file with Markdown Code Blocks

```{r global_options, include = FALSE}
knitr::opts_chunk$set(warning=FALSE, message=FALSE, cache=FALSE)
```

## Example 1

Here is a code block A

    fl_fig_wdt = 3;
    fl_fig_hgt = 2.65;

    figure('PaperPosition', [0 0 fl_fig_wdt fl_fig_hgt], 'Renderer', 'Painters');
    x = rand([10,1]);
    y = rand([10,1]);
    scatter(x, y, 'filled');
    grid on;
    grid minor;

## Section 2

Here is a code block B

    fl_fig_wdt = 5;
    fl_fig_hgt = 5.65;

    figure('PaperPosition', [0 0 fl_fig_wdt fl_fig_hgt], 'Renderer', 'Painters');
    x = rand([20,1]);
    y = rand([20,1]);
    scatter(x, y, 'filled');
    grid on;
    grid minor;

End of file.

标签: r-markdownmarkdownknitrpandoc

解决方案


如果您需要通用解决方案,则需要使用 Pandoc Lua 过滤器(我无法为您编写一个;请参阅您交叉发布的 Github 问题)。如果您只需要 HTML 输出,您可以使用 JavaScript 将类名添加到代码块中,例如,将此js代码块添加到文档的末尾:

```{js, echo=FALSE}
document.querySelectorAll('pre').forEach(function(el) {
  // the class name is the language name
  // (I'm using R here, although it's not the right name)
  if (!el.className) el.className = 'r';
});
```

输出如下所示:

语法高亮代码块


推荐阅读