【问题标题】:How to combine endfloat, markdown formatting and wordwrap in bookdown::pdf_document2 table如何在 bookdown::pdf_document2 表中结合 endfloat、markdown 格式和 wordwrap
【发布时间】:2020-05-23 23:14:17
【问题描述】:

我正在使用bookdown::pdf_document2 编写一个 Rmarkdown 文档,为此我有一个表格需要做几件非常具体的事情,但我根本找不到让所有这些事情同时工作的解决方案:

  1. 表格需要浮动到文档的末尾,就像使用乳胶endfloat 包一样。
  2. 表格元素具有 Markdown 粗体和斜体格式,应在最终 PDF 文档中正确显示
  3. 表格的其中一列有很多我想在表格单元格中换行的文本。

我试图让这三个选项与@​​987654323@、kableExtra::column_specpander 的各种组合一起使用,但我找不到让它们同时运行的方法。下面我将粘贴一个包含各种测试的示例 Rmarkdown 文档,但没有一个完全有效。

有没有一种简单的方法可以让桌子做我想做的事?即使是一个好的解决方法也是可以接受的......

谢谢, 大卫

---
title: "Test table formatting"
author: "David M. Kaplan"
date: "5/24/2020"
output: bookdown::pdf_document2
header-includes:
  - \usepackage[tablesfirst]{endfloat}
---

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

# Data

```{r}
df.long = data.frame(
  char = c('*this is some very long text with lots of words that will cause problems with word wrap if it is not properly handled with something like kableExtra*','**b**','~~c~~'),
  num = c(1,2,3))
```

# Kable with format=pandoc

```{r}
knitr::kable(df.long,caption="test1",format="pandoc")
```

**Result:** Handles formatting, but table does not float and no wordwrap.

# Kable with booktab

```{r}
knitr::kable(df.long,caption="test2",booktab=TRUE)
```

**Result:** Floats, but does not handle formatting or do wordwrap.


# kableExtra for wordwrap

```{r}
knitr::kable(df.long,caption="test3",booktab=TRUE) %>%
  kableExtra::column_spec(1,width="30em")
```


**Result:** Table floats and has wordwrap, but does not handle formatting.

# Pander

```{r}
pander::panderOptions("table.alignment.default","left")
pander::pander(df.long,caption="test4")
```

**Result:** Wordwrap and formatting, but does not float.

【问题讨论】:

    标签: r r-markdown bookdown kable kableextra


    【解决方案1】:

    我找到了解决这个问题的方法。它基本上包括:

    1. 在 YAML 标头中,添加一个 header-includes 条目,声明 longtable 是使用我发现的一些 LaTeX 魔法 here 的浮动风格。
    2. 使用pander格式化表格以获取自动换行

    具体来说,我在 YAML 标头中有以下内容:

    header-includes:
      - \usepackage[tablesfirst]{endfloat}
      - \DeclareDelayedFloatFlavour*{longtable}{table}
    

    然后可以用pander生成表格:

    pander::panderOptions("table.alignment.default","left")
    pander::pander(df.long,caption="test pander",split.cell=50)
    

    【讨论】:

      猜你喜欢
      • 2019-05-20
      • 1970-01-01
      • 2018-09-15
      • 1970-01-01
      • 1970-01-01
      • 2020-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多