R kableExtra 乳胶:将换行符添加到旋转的 header 行
R kableExtra latex: Add linebreaks to rotated header row
我正在尝试将 table 生成为 Latex-pdf 文档。我在 R 中使用 kableExtra 和 knitr。
我有一个具有长列名称的 table。当我将 header 行旋转 90 度时,换行符将不起作用。有谁知道如何实现旋转行和换行符?
我的示例与 Hao's Best Practice for newline in Latex table 中的示例相同,但我在代码末尾添加了管道 row_spec。
\documentclass[10pt,a4paper]{article}
\usepackage[table]{xcolor}
\begin{document}
\begin{table}
<<global_options, echo=FALSE>>=
library(kableExtra)
library("dplyr")
dt_lb <- data.frame(
Item = c("Hello\nWorld", "This\nis a cat"),
Value = c(10, 100)
)
dt_lb %>%
mutate_all(linebreak) %>%
kable("latex", booktabs = T, escape = F,
col.names = linebreak(c("Item\n(Name)", "Value\n(Number)"))) %>%
row_spec(0, angle = 90, align='l', monospace=T)
@
\end{table}
\end{document}
我得到的是这个,但是 [l] 标签暗示标签也有其他问题:
在 StackExchange TEX 上我发现了一个关于旋转和换行的问题,这就是我正在努力实现的:https://tex.stackexchange.com/questions/14730/big-table-with-rotated-column-labels-using-booktabs
你可以使用 tableHTML
:
library(tableHTML)
将换行符"\n"
替换为HTML
标签<br>
:
headers <- c("Item\n(Name)", "Value\n(Number)") %>%
stringr::str_replace_all(pattern = "\n", replacement = "<br>")
创建一个 tableHTML
object 并使用 add_css_header()
:
旋转 headers
dt_lb %>%
tableHTML(rownames = FALSE,
headers = headers,
escape = FALSE,
widths = c(100, 100),
theme = 'scientific') %>%
add_css_header(css = list(c('transform', 'height', 'text-align'),
c('rotate(-45deg)', '70px', 'center')),
headers = 1:2)
结果如下所示:
注意:您可以添加更多 css 或默认主题。查看 vignettes 了解更多详情:
如果要创建 pdf
文档,可以使用 RMarkdown
:
---
title: "tableHTML2pdf"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```
\
```{r}
library(tableHTML)
dt_lb <- data.frame(
Item = c("Hello\nWorld", "This\nis a cat"),
Value = c(10, 100)
)
headers <- c("Item\n(Name)", "Value\n(Number)") %>%
stringr::str_replace_all(pattern = "\n", replacement = "<br>")
dt_lb %>%
tableHTML(rownames = FALSE,
headers = headers,
escape = FALSE,
widths = c(100, 100),
theme = 'scientific') %>%
add_css_header(css = list(c('transform', 'height', 'text-align'),
c('rotate(-45deg)', '70px', 'center')),
headers = 1:2)
```
\
然后它将创建一个 HTML
文件。然后可以使用 wkhtmltopdf.
将此文件转换为 PDF
我认为您可能将您的 rmarkdown 文档渲染成 HTML... 在 rmarkdown yaml header 中,它现在是否显示 html_document
?如果是这样,你可以试试改成pdf_document
.......
我用完全相同的代码渲染了一个 pdf_document
,我想我得到了你想要的...
---
title: "Table Sample"
output: pdf_document
---
``` {r, include = FALSE}
library(tidyverse)
library(kableExtra)
```
```{r}
dt_lb <- data.frame(
Item = c("Hello\nWorld", "This\nis a cat"),
Value = c(10, 100)
)
dt_lb %>%
mutate_all(linebreak) %>%
kable("latex", booktabs = T, escape = F,
col.names = linebreak(c("Item\n(Name)", "Value\n(Number)"), align = "c")) %>%
row_spec(0, angle = 90)
```
Latex 包 makecell 丢失。
Hao 指出本手册的第 3 页列出了一些必要的 Latex 包:haozhu233.github.io/kableExtra/awesome_table_in_pdf.pdf
我正在尝试将 table 生成为 Latex-pdf 文档。我在 R 中使用 kableExtra 和 knitr。
我有一个具有长列名称的 table。当我将 header 行旋转 90 度时,换行符将不起作用。有谁知道如何实现旋转行和换行符?
我的示例与 Hao's Best Practice for newline in Latex table 中的示例相同,但我在代码末尾添加了管道 row_spec。
\documentclass[10pt,a4paper]{article}
\usepackage[table]{xcolor}
\begin{document}
\begin{table}
<<global_options, echo=FALSE>>=
library(kableExtra)
library("dplyr")
dt_lb <- data.frame(
Item = c("Hello\nWorld", "This\nis a cat"),
Value = c(10, 100)
)
dt_lb %>%
mutate_all(linebreak) %>%
kable("latex", booktabs = T, escape = F,
col.names = linebreak(c("Item\n(Name)", "Value\n(Number)"))) %>%
row_spec(0, angle = 90, align='l', monospace=T)
@
\end{table}
\end{document}
我得到的是这个,但是 [l] 标签暗示标签也有其他问题:
在 StackExchange TEX 上我发现了一个关于旋转和换行的问题,这就是我正在努力实现的:https://tex.stackexchange.com/questions/14730/big-table-with-rotated-column-labels-using-booktabs
你可以使用 tableHTML
:
library(tableHTML)
将换行符"\n"
替换为HTML
标签<br>
:
headers <- c("Item\n(Name)", "Value\n(Number)") %>%
stringr::str_replace_all(pattern = "\n", replacement = "<br>")
创建一个 tableHTML
object 并使用 add_css_header()
:
dt_lb %>%
tableHTML(rownames = FALSE,
headers = headers,
escape = FALSE,
widths = c(100, 100),
theme = 'scientific') %>%
add_css_header(css = list(c('transform', 'height', 'text-align'),
c('rotate(-45deg)', '70px', 'center')),
headers = 1:2)
结果如下所示:
注意:您可以添加更多 css 或默认主题。查看 vignettes 了解更多详情:
如果要创建 pdf
文档,可以使用 RMarkdown
:
---
title: "tableHTML2pdf"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
```
\
```{r}
library(tableHTML)
dt_lb <- data.frame(
Item = c("Hello\nWorld", "This\nis a cat"),
Value = c(10, 100)
)
headers <- c("Item\n(Name)", "Value\n(Number)") %>%
stringr::str_replace_all(pattern = "\n", replacement = "<br>")
dt_lb %>%
tableHTML(rownames = FALSE,
headers = headers,
escape = FALSE,
widths = c(100, 100),
theme = 'scientific') %>%
add_css_header(css = list(c('transform', 'height', 'text-align'),
c('rotate(-45deg)', '70px', 'center')),
headers = 1:2)
```
\
然后它将创建一个 HTML
文件。然后可以使用 wkhtmltopdf.
PDF
我认为您可能将您的 rmarkdown 文档渲染成 HTML... 在 rmarkdown yaml header 中,它现在是否显示 html_document
?如果是这样,你可以试试改成pdf_document
.......
我用完全相同的代码渲染了一个 pdf_document
,我想我得到了你想要的...
---
title: "Table Sample"
output: pdf_document
---
``` {r, include = FALSE}
library(tidyverse)
library(kableExtra)
```
```{r}
dt_lb <- data.frame(
Item = c("Hello\nWorld", "This\nis a cat"),
Value = c(10, 100)
)
dt_lb %>%
mutate_all(linebreak) %>%
kable("latex", booktabs = T, escape = F,
col.names = linebreak(c("Item\n(Name)", "Value\n(Number)"), align = "c")) %>%
row_spec(0, angle = 90)
```
Latex 包 makecell 丢失。
Hao 指出本手册的第 3 页列出了一些必要的 Latex 包:haozhu233.github.io/kableExtra/awesome_table_in_pdf.pdf