【问题标题】:Put 2 chunks of code side by side in RMarkdown or Quarto?在 RMarkdown 或 Quarto 中并排放置 2 个代码块?
【发布时间】:2022-12-11 00:31:19
【问题描述】:

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

代码

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

PDF 或 HTML 文件中所需的布局

【问题讨论】:

    标签: pdf r-markdown png pandoc quarto


    【解决方案1】:

    像这样的事情的规范方式是use 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 转换为表格,因为这是并排获取元素的最有效方式。但这需要一些heavier tools。在 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
    

    您可以通过添加来摆脱表格周围的线条

    
    enewcommand	oprule[2]
    elax
    
    enewcommandottomrule[2]
    elax
    

    在文档的开头。

    【讨论】:

    • 你好呀。有人得到这个 pdf 吗?当我尝试时,pdf 仍然是一栏布局。
    • @Ray 如果您希望完整的 PDF 有两列,请尝试使用 classoptions: twocolumn
    • 谢谢@tarleb。我试过这个选项。我的问题/任务是在onecolumntwocolumn 之间切换几次。 Latex-switch-options 在切换时引入了不需要的分页符……因此,我希望您基于lua-filter 的解决方案能够奏效:)。我还尝试了 Rmarkdown 食谱 bookdown.org/yihui/rmarkdown-cookbook/multi-column.html 中的食谱 - 那种作品,但是,我正在寻找更优雅的解决方案。
    【解决方案2】:
    ---
    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)
    ```
    
    :::
    ::::::::::::::
    

    使用This SO question as a resource。这是使用 pandoc 在 Rmarkdown HTML 输出中格式化文档

    【讨论】:

    • 它在我呈现的 PDF 上输出一列。
    • 好的,它适用于 HTML
    • 是的,如果您需要使用 PDF,请将 Rmarkdown 输出到 html_document,然后在您的网络浏览器中查看 HTML 文件,然后在需要时“打印为 PDF”以保留最佳 HTML 样式
    猜你喜欢
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    • 2017-10-19
    • 2020-09-17
    • 1970-01-01
    • 1970-01-01
    • 2018-05-31
    • 2017-12-08
    相关资源
    最近更新 更多