将R Markdown转换为pdf时的受防护代码块

时间:2016-01-15 16:16:51

标签: r markdown knitr

当我将R Markdown文档编译为HTML文档时,非R代码块的格式很好。但是当我将以下R Markdown文档编译为pdf时,唯一添加的代码格式是字体。没有阴影,围栏,突出显示等。

---
output: pdf_document
---

```
code
```

我不想对输出进行微观管理,我只是想添加一些常识格式以清楚地将代码与散文分开。我正在MAc上使用TeXShop和下面的引擎。

#!/bin/bash
/Library/Frameworks/R.framework/Versions/Current/Resources/bin/Rscript -e "rmarkdown::render(\"$1\", encoding='UTF-8')"

1 个答案:

答案 0 :(得分:3)

使用```,您会引入简单的markdown代码块,但不会引入knitr代码块。但是您期望的输出(屏蔽,突出显示,着色)是样式knitr添加到其代码块中。

因此,使用```{r}将代码包装在knitr块中(如果您不希望对代码进行评估,请使用eval = FALSE)。这也可以用于非R代码块:只要不评估代码,语言无关紧要。

但是,对于非R代码,这将导致语法突出显示错误或丢失。要获得正确的语法突出显示,请使用option engine(如果语言属于supported language engines

下面的示例显示了一个痛苦的降价块,一个经过评估和未经评估的R代码块,一个没有突出显示的(未评估的)Python块,最后是两个(未评估的)具有正确突出显示的Python块。

---
output:
  pdf_document
---

```
Plain markdown code block.
```


```{r}
print("This is a knitr code chunk.")
```

```{r, eval = FALSE}
print("This is a knitr code chunk that isn't evaluated.")
```


Chunk with Python code (borrowed from http://stackoverflow.com/q/231767/2706569), *wrong* (no) highlighting:
```{r, eval = FALSE}
if self._leftchild and distance - max_dist < self._median:
      yield self._leftchild
```

Chunk with Python code, *correct* highlighting:
```{r, eval = FALSE, engine = "python"}
if self._leftchild and distance - max_dist < self._median:
      yield self._leftchild
```

Chunk with Python code, *correct* highlighting (alternative notation):
```{python, eval = FALSE}
if self._leftchild and distance - max_dist < self._median:
      yield self._leftchild
```

Output