【问题标题】:Missing horizontal scroll bar in R Markdown HTML code chunks and outputR Markdown HTML代码块和输出中缺少水平滚动条
【发布时间】:2016-03-26 02:00:30
【问题描述】:

在生成 HTML 文档时,如何使编织的 .Rmd 文档不包装代码?每当我编织我的文件时,我都会得到如下输出:

您可以看到包含cbind 调用的第一行已被换行。这是由以下 Rmd 代码生成的。基本上,我希望看到生成的 HTML 文件看起来像在 StackOverflow 上的样子(即带有水平滚动条)。

---
title: "Title"
author: "Author"
date: "March 25, 2016"
output: html_document
---

```{r}
myveryveryveryveryverylongvariablenameanditsdataaaaaaaaaaaaaaaaaaaaaaaaaaa <- cbind(iris, iris, iris, iris, iris, iris, iris)
head(myveryveryveryveryverylongvariablenameanditsdataaaaaaaaaaaaaaaaaaaaaaaaaaa )
```

那么,我该如何为第二行的文本输出做到这一点?我试过options(width=...) 但这似乎只会使输出更加混乱。我也希望它看起来和 StackOverflow 上的一样(没有换行,带有水平滚动条):

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species Sepal.Length Sepal.Width Petal.Length Petal.Width Species Sepal.Length Sepal.Width Petal.Length Petal.Width Species Sepal.Length Sepal.Width Petal.Length Petal.Width
1          5.1         3.5          1.4         0.2  setosa          5.1         3.5          1.4         0.2  setosa          5.1         3.5          1.4         0.2  setosa          5.1         3.5          1.4         0.2
2          4.9         3.0          1.4         0.2  setosa          4.9         3.0          1.4         0.2  setosa          4.9         3.0          1.4         0.2  setosa          4.9         3.0          1.4         0.2
3          4.7         3.2          1.3         0.2  setosa          4.7         3.2          1.3         0.2  setosa          4.7         3.2          1.3         0.2  setosa          4.7         3.2          1.3         0.2
4          4.6         3.1          1.5         0.2  setosa          4.6         3.1          1.5         0.2  setosa          4.6         3.1          1.5         0.2  setosa          4.6         3.1          1.5         0.2
5          5.0         3.6          1.4         0.2  setosa          5.0         3.6          1.4         0.2  setosa          5.0         3.6          1.4         0.2  setosa          5.0         3.6          1.4         0.2
6          5.4         3.9          1.7         0.4  setosa          5.4         3.9          1.7         0.4  setosa          5.4         3.9          1.7         0.4  setosa          5.4         3.9          1.7         0.4

【问题讨论】:

  • @jenesaisquoi,您通过 CSS 解决我的问题的第一部分是完美的——我希望这是 HTML 输出的默认样式。至于第二个,您使用DT 包的建议有效,但仅适用于data.tables 和data.frames。您知道通用解决方案吗?如果我想避免 summary(myveryveryveryveryverylongvariablenameanditsdataaaaaaaaaaaaaaaaaaaaaaaaaaa) 输出的文本换行怎么办?
  • 我认为我们已经接近了——这让我获得了块输出的水平滚动条,但输出文本现在都一起运行,并且似乎没有保持它所具有的间距和换行符在 R 控制台中。

标签: r knitr r-markdown


【解决方案1】:

在 cmets 人员的帮助下,我能够拼凑出一个解决方案。有两个步骤:

  1. 在 .Rmd YAML 标头中包含自定义样式表:

    css: report_styles.css

    其中包含这些样式:

    pre, code {white-space:pre !important; overflow-x:scroll !important}

    这使得回显的代码块不会换行,并且它们具有水平滚动条。它还会让块输出在调整浏览器窗口大小时不会进一步换行。

  2. 现在,为了让块输出最初不换行,我们需要按照this question 设置options(width=a-big-number)

【讨论】:

  • 这可能是个人喜好,但我认为将此行为作为默认设置会很好。至少,我认为(1)应该可以通过块/全局块选项直接访问(如果还没有的话,不知何故)。
  • 好答案!但是,设置scroll 选项会为所有代码块添加一个滚动条。我最终使用了overflow-x: auto;,因为它仅在需要时添加滚动条。
  • 你真的可以分享一个指向你的 report_styles.css 文件的链接吗?
【解决方案2】:

这基本上是@JeffKeller 的答案,但您可以在.Rmd 文件中编写CSS 作为代码sn-p,而不是拥有一个单独的CSS 文件并在YAML 标题中摆弄!例如,

```{css, echo=FALSE}
pre, code {white-space:pre !important; overflow-x:auto}
```

我倾向于在我进行其他设置的早期阶段执行此操作,例如

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```

(也许这更像是一条评论,但我无法真正格式化它。不过,从另一个答案的 cmets 来看,我认为有些人可能会觉得这很有用。)

【讨论】:

    【解决方案3】:

    两个答案的另一种选择 - 使用 html 在 YAML 标头之后编写 css:

    <style>
    pre {
      white-space: pre-wrap;
      background: #F5F5F5;
      max-width: 100%;
      overflow-x: auto;
    }
    
    </style>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-10-18
      • 2020-10-28
      • 1970-01-01
      • 2010-10-02
      • 1970-01-01
      • 2019-07-10
      相关资源
      最近更新 更多