首页 > 解决方案 > 如何让 Rchunks 在 tcolorbox 中渲染?

问题描述

我创建了一个代表来显示我的问题,但是在我正在制作的自定义 Rmd 模板中遇到了同样的问题。

我希望能够在 tcolorbox 环境中包含程式化的代码块和绘图输出。由于某些原因。当我编织 Rmarkdown 时,它不会渲染 tcolorbox 环境。

这是我的代表 .RMD:

---
title: "Untitled"
output: 
  pdf_document:
    extra_dependencies: ["tcolorbox", "tikz"]
---
```{r, include=FALSE}
library(tidyverse)
```

\begin{tcolorbox}
```{r,results='asis', eval=F}
iris %>% 
  group_by(Species) %>% 
  summarise(mean = mean(Sepal.Length), 
            sd = sd(Sepal.Width))
```

```{r,results='asis'}
ggplot(iris, aes(Sepal.Length, Sepal.Width, colors = Species)) + 
  geom_point()
```
\end{tcolorbox}

这是生成的.pdf:

在此处输入图像描述

当我删除 Rchunks 时,tcolorbox 会正确呈现。我打开了中间的 .tex 文件,看看发生了什么,看起来它正在取消 tcolorbox\textbackslash{}

\textbackslash{}begin\{tcolorbox\}

\begin{Shaded}
\begin{Highlighting}[]
\NormalTok{iris }\OperatorTok{%>%}\StringTok{ }
\StringTok{  }\KeywordTok{group_by}\NormalTok{(Species) }\OperatorTok{%>%}\StringTok{ }
\StringTok{  }\KeywordTok{summarise}\NormalTok{(}\DataTypeTok{mean =} \KeywordTok{mean}\NormalTok{(Sepal.Length), }
            \DataTypeTok{sd =} \KeywordTok{sd}\NormalTok{(Sepal.Width))}
\end{Highlighting}
\end{Shaded}

\begin{Shaded}
\begin{Highlighting}[]
\KeywordTok{ggplot}\NormalTok{(iris, }\KeywordTok{aes}\NormalTok{(Sepal.Length, Sepal.Width, }\DataTypeTok{colors =}\NormalTok{ Species)) }\OperatorTok{+}\StringTok{ }
\StringTok{  }\KeywordTok{geom_point}\NormalTok{()}
\end{Highlighting}
\end{Shaded}

\includegraphics{Untitled1_files/figure-latex/unnamed-chunk-3-1.pdf}
\textbackslash{}end\{tcolorbox\}

没有 Rchunks,它看起来很好:

\begin{tcolorbox}

\end{tcolorbox}

标签: rlatexr-markdown

解决方案


看起来这是不可能的,是 Pandoc 问题,而不是 Rmarkdown 或 knitr 问题。我在这里找到了一个 hacky 解决方案:

https://github.com/jgm/pandoc/issues/3145

您可以通过将其放置在模板 .tex 文件中来绕过它:

\let\Begin\begin
\let\End\end

然后在您的 Rmarkdown 文件中,您可以执行以下操作:

\Begin{tcolorbox}

    ```{r}
    *Rcode Here*
    ```
\End{tcolorbox}

推荐阅读