【问题标题】:How to indent in rmarkdown for word document output?如何在 rmarkdown 中缩进 word 文档输出?
【发布时间】:2018-10-09 14:33:10
【问题描述】:

我正在编写一个循环内的代码,如下所示:

for (i in c(1:5)) {

    cat("  ", i,".","**", "Header one","**" , " "  , sep = "\n")
    cat("A)", "Subheader one"  , sep = "\n")
    cat("B)", "Subheader two"  , sep = "\n")
    } 

我希望它在渲染文件中显示为:

  Header One  
          A) Subtitle one
          B) Subtitle two

如何做到这一点? 编辑 这旨在导出到 word .docx

【问题讨论】:

标签: r markdown r-markdown


【解决方案1】:

一些想法:

  1. 使用块选项results="asis",这告诉knitr将来自 R 的原始结果写入输出文档(假设它在降价文件中有效)(参考:https://yihui.name/knitr/options/#text-results)

  2. 您实际上不必为顶级列表强制增加数字,数字本身会被 pandoc 忽略并转换为顺序列表(参考:https://pandoc.org/MANUAL.html#ordered-lists

    李>
  3. 如果在子列表中添加太多空格,它们可能会被视为预格式化代码块,因此请小心。即8个太多,4个有效。

这行得通:

---
output: html_document
---

```{r chunk1, echo=FALSE, results="asis"}
for (i in 1:5) {
  cat("1. Header one",
      "    A) Subheader one",
      "    B) Subheader two",
      sep = "\n")
}
```

产生这个:

使用这个底层 HTML:

<ol style="list-style-type: decimal">
<li>Header one</li>
</ol>
<ol style="list-style-type: upper-alpha">
<li>Subheader one</li>
<li>Subheader two</li>
</ol>
<ol style="list-style-type: decimal">
<li>Header one</li>
</ol>
<ol style="list-style-type: upper-alpha">
<li>Subheader one</li>
<li>Subheader two</li>
...

注意事项:

  • 我发现在您的示例中有如此多的空字符串等令人困惑,因此我将它们“高效化”了。如果您有想要/需要的特定格式,那么您可以使用sprintf 执行类似的操作:

    ---
    output: html_document
    ---
    
    ```{r chunk1, echo=FALSE, results="asis"}
    for (i in 1:5) {
      cat(sprintf("1. Header %d", i),
          sprintf("    A) Subheader one - %d", i),
          "    F) Subheader two",
          sep = "\n")
    }
    ```
    

    制作这个:

  • c(1:5)1:5 相同,没有c() 要求

  • 多次调用cat 是可以的,意识到您需要密切管理单个调用部分之间的seps 以及调用cat 之间需要的任何内容(我更喜欢一次调用)

编辑

我也将它导出到 Word,其中:

---
output: word_document
---

并且子级别也正确缩进:

如果您看到一些不同的东西,那么这可能是由于 DOCX 中的样式。这通常在参考文档中进行控制,参考:https://rmarkdown.rstudio.com/word_document_format#style_reference。我在 R-3.5.1 上使用 rmarkdown-1.10,如果这对您有所不同,请考虑您的升级选项。

【讨论】:

  • 感谢您的宝贵时间。我正在使用空格,因为当我导出到 word 时,除非我创建一个空格 " " ,否则中断似乎不起作用。当我以 HTML 格式导出时,您的解决方案效果很好,但是当我导出为 word 时,子标题会缩进到与标题相同的级别。你还有什么想法吗?
  • 对我来说看起来一样,请参阅我的编辑。检查您的版本和(如果使用)参考 docx。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多