table 带有长文本、项目符号点和特定 table 宽度
table with long text, bullet points and specific table width
我希望 table 在一列中包含项目符号点并具有特定的 table 宽度(以便在呈现为 PDF 时放置在一页上)。
我如何在 rmarkdown
中使用众多软件包中的一个来实现这一目标?
到目前为止我尝试过的和拥有的:
---
output: pdf_document
---
```{r, include = FALSE}
df <- data.frame(col1 = "Some really long text here. I mean some reeeeeaaly loooong text. So long, it should be wrapped. Really.",
col2 = "* bullet point 1\n * bullet point 2", col3 = "Yes, there is still another column.")
```
# Attempt 1: kableExtra
```{r, echo = FALSE, warning = FALSE}
library(kableExtra)
df1 <- df
df1$col2 <- linebreak(df1$col2)
knitr::kable(df1, escape = FALSE) %>% column_spec(1, width = "15em")
```
# Attempt 2: pander
```{r, echo = FALSE}
pander::pander(df, keep.line.breaks = TRUE, style = 'grid', justify = 'left')
```
这呈现为:
如您所见,这两个选项都有注意事项。 kableExtra
版本确实有适合一页的特定 table 宽度,但不能很好地显示项目符号点。而 pander
解决方案很好地呈现了要点但跨越多个页面,因为我不知道如何在 pander
.
中指定 table 宽度
有没有解决方案可以同时做到这两点?
相关问题例如 and 。
使用 pandoc.table
的 split.table
参数(由 pander
在后台调用)或通过 [=15= 禁用 table 拆分]的table.split.table
,例如
pander::pander(df, keep.line.breaks = TRUE, style = 'grid', justify = 'left', split.table = Inf)
或
library(pander)
panderOptions('table.style', 'grid')
panderOptions('table.alignment.default', 'left')
panderOptions('table.split.table', Inf)
panderOptions('keep.line.breaks', TRUE)
pander(df)
基于kableExtra的替代解决方案(可选:带脚注)
此方法允许添加标题、在 table 中手动添加脚注以及固定列宽。
要创建要点列表:
- LaTex 中的“更厚”
\cdots
被用作项目符号 (alternatives see here)
- 使用
\n
强制换行(因此缩进不如@daroczig 的pander
方法好)。
MWE
library(stringi); library(kableExtra); library(dplyr)
string_short <- "Descriptor"
string_long <- substr(stri_rand_lipsum(1), 1, 50)
# add footnotes manually within table
string_bulletlist <- "$\boldsymbol{\cdot}$ bullet point 1: foo$^{a}$ \n $\boldsymbol{\cdot}$ bullet point 2: bar$^{b}$"
df <- data.frame(col1 = c(string_short, string_short),
col2 = c(string_bulletlist, string_bulletlist),
col3 = c(string_long, string_long)
)
col_names <- c("Descriptor", "Description with list", "Some comment")
# header: bold column names
colnames(df) <- paste0("\textbf{", col_names,"}")
# add footnote with kableExtra commands
names(df)[1] <- paste0(names(df)[1], footnote_marker_symbol(1))
df %>%
mutate_all(linebreak) %>% # required for linebreaks to work
kable(
"latex",
escape = F,
booktabs=TRUE,
align = "l",
caption = 'kableTable with bullet list and footnote') %>%
# kable_styling(full_width = F) %>% # makes no difference here
footnote(general = "General comment of the table.",
alphabet = c("Footnote A;", "Footnote B;"),
symbol = c("Footnote Symbol 1")) %>%
column_spec(1, width = "5em") %>% # fix width column 1
column_spec(2, width = "10em") %>% # fix width column 2
column_spec(3, width = "15em") # fix width column 3
为了[改善行间距[(https://whosebug.com/questions/53794142/increase-line-row-spacing-with-kableextra),可以在 Rmd 中的代码块前后添加以下内容:
\renewcommand{\arraystretch}{1.5} <!-- increase line spacing for the table -->
RMD CHUNK HERE
\renewcommand{\arraystretch}{1} <!-- reset row hight/line spacing -->
评论:
我也尝试了@daroczig 的pander
方法并取得了以下经验:
- 专业版: 漂亮的行间距加上“真正的项目符号列表”(与
kableExtra
方法中的 $\boldsymbol{\cdot}$
解决方法相比)。
- 缺点:项目符号列表后有一大片空白space
此外,当在使用 huskydown thesis template 的 Rmd 文件中使用 pander
方法时,脚注极大地扰乱了 table 对齐方式。
我希望 table 在一列中包含项目符号点并具有特定的 table 宽度(以便在呈现为 PDF 时放置在一页上)。
我如何在 rmarkdown
中使用众多软件包中的一个来实现这一目标?
到目前为止我尝试过的和拥有的:
---
output: pdf_document
---
```{r, include = FALSE}
df <- data.frame(col1 = "Some really long text here. I mean some reeeeeaaly loooong text. So long, it should be wrapped. Really.",
col2 = "* bullet point 1\n * bullet point 2", col3 = "Yes, there is still another column.")
```
# Attempt 1: kableExtra
```{r, echo = FALSE, warning = FALSE}
library(kableExtra)
df1 <- df
df1$col2 <- linebreak(df1$col2)
knitr::kable(df1, escape = FALSE) %>% column_spec(1, width = "15em")
```
# Attempt 2: pander
```{r, echo = FALSE}
pander::pander(df, keep.line.breaks = TRUE, style = 'grid', justify = 'left')
```
这呈现为:
如您所见,这两个选项都有注意事项。 kableExtra
版本确实有适合一页的特定 table 宽度,但不能很好地显示项目符号点。而 pander
解决方案很好地呈现了要点但跨越多个页面,因为我不知道如何在 pander
.
有没有解决方案可以同时做到这两点?
相关问题例如
使用 pandoc.table
的 split.table
参数(由 pander
在后台调用)或通过 [=15= 禁用 table 拆分]的table.split.table
,例如
pander::pander(df, keep.line.breaks = TRUE, style = 'grid', justify = 'left', split.table = Inf)
或
library(pander)
panderOptions('table.style', 'grid')
panderOptions('table.alignment.default', 'left')
panderOptions('table.split.table', Inf)
panderOptions('keep.line.breaks', TRUE)
pander(df)
基于kableExtra的替代解决方案(可选:带脚注)
此方法允许添加标题、在 table 中手动添加脚注以及固定列宽。
要创建要点列表:
- LaTex 中的“更厚”
\cdots
被用作项目符号 (alternatives see here) - 使用
\n
强制换行(因此缩进不如@daroczig 的pander
方法好)。
MWE
library(stringi); library(kableExtra); library(dplyr)
string_short <- "Descriptor"
string_long <- substr(stri_rand_lipsum(1), 1, 50)
# add footnotes manually within table
string_bulletlist <- "$\boldsymbol{\cdot}$ bullet point 1: foo$^{a}$ \n $\boldsymbol{\cdot}$ bullet point 2: bar$^{b}$"
df <- data.frame(col1 = c(string_short, string_short),
col2 = c(string_bulletlist, string_bulletlist),
col3 = c(string_long, string_long)
)
col_names <- c("Descriptor", "Description with list", "Some comment")
# header: bold column names
colnames(df) <- paste0("\textbf{", col_names,"}")
# add footnote with kableExtra commands
names(df)[1] <- paste0(names(df)[1], footnote_marker_symbol(1))
df %>%
mutate_all(linebreak) %>% # required for linebreaks to work
kable(
"latex",
escape = F,
booktabs=TRUE,
align = "l",
caption = 'kableTable with bullet list and footnote') %>%
# kable_styling(full_width = F) %>% # makes no difference here
footnote(general = "General comment of the table.",
alphabet = c("Footnote A;", "Footnote B;"),
symbol = c("Footnote Symbol 1")) %>%
column_spec(1, width = "5em") %>% # fix width column 1
column_spec(2, width = "10em") %>% # fix width column 2
column_spec(3, width = "15em") # fix width column 3
为了[改善行间距[(https://whosebug.com/questions/53794142/increase-line-row-spacing-with-kableextra),可以在 Rmd 中的代码块前后添加以下内容:
\renewcommand{\arraystretch}{1.5} <!-- increase line spacing for the table -->
RMD CHUNK HERE
\renewcommand{\arraystretch}{1} <!-- reset row hight/line spacing -->
评论:
我也尝试了@daroczig 的pander
方法并取得了以下经验:
- 专业版: 漂亮的行间距加上“真正的项目符号列表”(与
kableExtra
方法中的$\boldsymbol{\cdot}$
解决方法相比)。 - 缺点:项目符号列表后有一大片空白space
此外,当在使用 huskydown thesis template 的 Rmd 文件中使用 pander
方法时,脚注极大地扰乱了 table 对齐方式。