【问题标题】:Inserting new lines into kable headers将新行插入 kable 标头
【发布时间】:2018-03-29 01:47:02
【问题描述】:

问题描述:

我正在用 rMarkdown 编写文档,我需要在生成 PDF 之前格式化表格。问题是我在使用add_headers_above 命令添加的kable 标头中插入新行时遇到问题。

目前,文本“Month (persons)” - 这是使用该命令添加的第一个标题 - 显示为一行。我想打破它,以便在“月”和“(人)”之间插入一个新行。

动机只是为了节省水平页面空间,以便我可以在一张 A4 纸上按大小放置两个表格。

我的修复尝试

我尝试在add_headers_above 命令中包含\n

[...] %>% add_header_above(c(" ", 'Month \n (persons)' = 1, "TTY \n (persons)" = 1, "TTY \n (% chg.)" = 1)) 但这并没有奏效。

可重现的例子:

---
output: pdf_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
library(knitr)
library(kableExtra)
library(tibble)
```
```{r}
df <- tribble(~Location, ~Jan_Qrt, ~Jan_year, ~growth,
"New South Wales",  16000,  403300,       3.30,
"Victoria",        -21200,    134100,       3.50,
"Queensland",        2100,  100200,       3.20,
"South Australia",  19700,  117900,       5.00,
"Western Australia",   5300,   13200,     1.60,
"Tasmania",         -8900,   24300,     1.90,
"Northern Territory",    -400,    5700,    2.40,
"Australian Cap",     300,   -4300,    -3.10,
"Australia",         800,   10600,     4.80)

kable(df, format = 'latex', booktabs = T, align = 'r') %>%
  kable_styling(full_width = F, font_size = 8) %>%
  row_spec(row = 9, bold = TRUE) %>%
  add_header_above(c(" ", 'Month (persons)' = 1, "TTY (persons)" = 1, "TTY (% chg.)" = 1))

  ```

【问题讨论】:

    标签: r knitr kable


    【解决方案1】:

    现在,您必须自己编写一些原始乳胶代码。

    正如https://tex.stackexchange.com/questions/2441/how-to-add-a-forced-line-break-inside-a-table-cell 建议的答案,您可以尝试使用makecell 包。为此,您可以使用kableExtra::usepackage_latex() 加载latex 包,然后通过在add_header_above 中设置escape = F 来破解它。

    usepackage_latex("makecell")
    kable(df, format = 'latex', booktabs = T, align = 'r') %>%
      kable_styling(full_width = F, font_size = 8) %>%
      row_spec(row = 9, bold = TRUE) %>%
      add_header_above(c(" ",
                         '\\\\thead{Month\\\\\\\\(persons)}' = 1,
                         "\\\\thead{TTY\\\\\\\\(persons)}" = 1,
                         "\\\\thead{TTY\\\\\\\\(\\\\% chg.)}" = 1),
                       escape = F)
    

    更新

    别管上面的乳胶混乱了,我让它在kableExtra 的开发版本中工作。现在你就做

    library(kableExtra)
    
    mtcars[1:5, 1:5] %>%
      kable("latex", booktabs = T) %>%
      add_header_above(c(" ", "aa\na" = 2, "bbb" = 3))
    

    【讨论】:

    【解决方案2】:

    这将很难,因为 LaTeX 不喜欢表格单元格内的换行符 - 参见例如https://tex.stackexchange.com/questions/2441/how-to-add-a-forced-line-break-inside-a-table-cell 了解这有多难。为“(人)”等插入单独的行几乎肯定会更好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-18
      • 1970-01-01
      • 1970-01-01
      • 2023-02-17
      • 2019-05-20
      相关资源
      最近更新 更多