fan
fan

Reputation: 11

Knit Markdown code blocks with Rmd Chunk Code Styling

I have many markdown files, each with many codeblocks, see an example below. (They were converted to this format via pandoc from other file types)

I would like to knit these in as Rmd files. Right now, the codeblocks have no decorators. When I knit the file below, there is no code syntax styling/coloring. I do not want to evaluate the code, I just want to print them out, hence: knitr::opts_chunk$set(warning=FALSE, message=FALSE, cache=FALSE).

Suppose all the code are MATLAB code, is there something I can add like: knitr::opts_chunk$set(code=MATLAB), so that they would all get MATLAB code styling/coloring?

My code chunks are actually all MATLAB code, so MATLAB stlying/coloring would be more helpful, but any code styling would be great to make the code chunks in outputted HTML/PDF etc easier to read.

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

Upvotes: 0

Views: 442

Answers (1)

Yihui Xie
Yihui Xie

Reputation: 30124

If you need a general solution, you need to use a Pandoc Lua filter (I'm not able to write one for you; see the Github issue that you cross-posted). If you only need HTML output, you may use JavaScript to add a class name to the code blocks, e.g., add this js code chunk to the end of your document:

```{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';
});
```

The output looks like this:

syntax highlight code blocks

Upvotes: 0

Related Questions