以简洁的方式显示多个代码块

Display several code chunks in a concise way

我正在用 blogdown 创建一个博客,我在其中比较了 R 代码和 Stata 代码。我想展示这两个代码,以便用户可以比较它是如何在 R 和 Stata 中完成的。但是,将两个或多个块放在一行中(R 的代码,Stata 的代码 + 输出)会使阅读变得非常不舒服。

我想到了几个布局,包括几个块,但我不知道它们是否已经实现,或者是否有可能实现。


有一个按钮到 display/hide 个区块(一个按钮 每个区块

一个想法是:

This person and this person 在 blogdown 中成功折叠了他们的代码块,但显然它默认隐藏或显示每个块。我怎样才能默认只隐藏一些块?是否有隐藏或显示 blogdown 中的代码块的选项(如选项 evalecho...)?


块 "tabs"

这部分的标题不言自明:是否可以在一个块中包含选项卡,以便我们可以从一个代码切换到另一个代码(例如,就像网络浏览器中的选项卡一样)?


并排显示两个块

在某些 blogdown 主题中(也许是全部,我不知道),宽度缩小了很多,边上还有一些未使用的 space。因此,是否可以增加文章某些部分的宽度,并排显示两个块?

想知道其中一种布局是否可以在 blogdown 中实现吗?

由于我之前的回答有点乱,而且不是很详细,所以我做了一个新的回答,这个回答正好符合我想做的事情(即可以折叠一些代码块)。

解决方案是使用 Jonathan Sidi 的 details package, as pointed out by this answer。最初,这个包的目的是隐藏一些需要大量space的输出,例如sessionInfo,在用R Markdown制作的HTML文档中(因此也用R Blogdown) .这是一个示例(取自软件包的网站):

---
title: "Test"
output: html_document
---

```{r}
library(details)

sessioninfo::session_info()%>%
  details::details(summary = 'current session info')
```

不过,我要隐藏的不是某些R代码的输出,而是Stata代码的输出(这不是运行),以便读者可以将R代码与Stata代码进行比较,如果他们想要。因此,我们必须使用一些HTML来这样做:

---
title: "Test"
output: html_document
---

## Regression with R and Stata

```{r, eval=FALSE}
lm(mpg ~ drat, data = mtcars)
```

<details>
<summary> Stata </summary>
```stata
regress y x
```
</details>

现在,读者想看 Stata 代码就可以看,不想看的人也不会被太多的代码块分心。这也适用于 Blogdown 文章(因为它是 "just" 网站上的一些 R Markdown)。

包的网站上详细介绍了更多功能(例如 customize the hidden chunks)。

我找到了另一种选择,这似乎是迄今为止最好的选择:使用 {xaringanExtra}.

的面板集

Panelsets 适用于 {xaringan} 演示文稿以及 R Markdown(因此 {blogdown})输出。有关更多选项和详细信息,请参阅 here。这是一个小演示:

---
title: Title
output:
  blogdown::html_page
---

```{r include = FALSE}
library(xaringanExtra)
# enable panelset
use_panelset()
```

## Title 

Here's a simple way to display several code chunks in a concise way:


::::: {.panelset}

<!-- First panel -->
::: {.panel}
[R code]{.panel-name}

Check the R code below:
```{r echo = TRUE, eval = FALSE}
lm(mpg ~ drat, data = mtcars)
```
:::

<!-- Second panel -->
::: {.panel}
[Stata code]{.panel-name}

```
regress y x

```
:::

<!-- Third panel -->
::: {.panel}
[R output]{.panel-name}
```{r echo = FALSE, eval = TRUE}
lm(mpg ~ drat, data = mtcars)
```
:::

::::