[英]Put 2 chunks of code side by side in RMarkdown or Quarto?
---
title: "Untitled"
output: html_document
---
:::::::::::::: {.columns}
::: {.column width="50%"}
```{r warning=FALSE,message=FALSE}
library(dplyr)
mtcars %>% select(gear)
```
:::
::: {.column width="50%"}
```{r warning=FALSE,message=FALSE}
library(dplyr)
select(mtcars, gear)
```
:::
::::::::::::::
使用这个 SO question 作为资源。 这是使用 pandoc 格式化 Rmarkdown HTML output 中的文档
像这样的规范方法是使用column
divs :
::::: columns
::: column
```r
library(dplyr)
mtcars %>% select(gear)
```
:::
::: column
```r
library(dplyr)
select(mtcars, gear)
```
:::
:::::
这将适用于 HTML、reveal.js、Beamer 和 Powerpoint。 默认结果在 HTML 中看起来有点难看,因为两个块之间没有空间,但我们可以用一点点 CSS 来解决这个问题。 我们可以直接放到文档中:
<style>
.column { padding-right: 1ex }
.column + .column { padding-left: 1ex }
</style>
如果我们希望对 PDF 做同样的事情,事情会变得更加复杂。 我们需要将 div 转换为表格,因为这是并排获取元素的最有效方式。 但这需要一些 更重的工具。 在 YAML header 中,添加
output:
pdf_document:
pandoc_args:
- "--lua-filter=columns-to-table.lua"
然后将以下代码保存到文件column-to-table.lua
中。
function Div (div)
if div.classes:includes 'columns' then
local columns = div.content
:filter(function (x)
return x.classes and x.classes[1] == 'column'
end)
:map(function (x)
return x.content
end)
local aligns = {}
local widths = {}
local headers = {}
for i, k in ipairs(columns) do
aligns[i] = 'AlignDefault'
widths[i] = 0.98/ #columns
end
return pandoc.utils.from_simple_table(
pandoc.SimpleTable('', aligns, widths, headers, {columns})
)
end
end
您可以通过添加来摆脱桌子周围的线条
\renewcommand\toprule[2]\relax
\renewcommand\bottomrule[2]\relax
在文档的开头。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.