在RMarkdown或Quarto中将两个代码块并排放置

5

如何在RMarkdown或Quarto的输出文件中将2个代码块并排放置?

代码

library(dplyr)
mtcars %>% select(gear)

library(dplyr)
select(mtcars, gear)

期望的PDF或HTML文件布局 在这里输入图片描述

2个回答

5

像这样的东西通常采用使用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 头中添加以下内容:

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

在您的文档开头。


大家好。有人能将PDF搞定吗?我尝试过,但PDF仍然是单列布局。 - Ray
@Ray 如果你想让整个PDF文件有两列,那么请尝试使用 classoptions: twocolumn - tarleb
感谢@tarleb。我尝试了这个选项。我的问题/任务是多次在“onecolumn”和“twocolumn”之间切换。当切换时,Latex-switch-options会引入不必要的分页符...因此,我希望您基于lua-filter的解决方案能够起作用:)。我还尝试了Rmarkdown食谱https://bookdown.org/yihui/rmarkdown-cookbook/multi-column.html的方法-那种方法有点奏效,但是我正在寻找更优雅的解决方案。 - Ray

3
---
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问答作为参考。 这是使用Pandoc将文档格式化为Rmarkdown HTML输出。


它在我的渲染PDF上输出了一列。 - Julien
啊,好的,它适用于HTML。 - Julien
是的,如果你需要使用PDF格式,可以将Rmarkdown输出为html_document,然后在浏览器中查看HTML文件,每当需要保留最佳的HTML样式时,再选择“打印到PDF”。 - Daniel_j_iii

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接