R kableExtra latex:将换行符添加到旋转的标题行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R kableExtra latex:将换行符添加到旋转的标题行相关的知识,希望对你有一定的参考价值。

我正在尝试为Latex-pdf文档生成表。我在R中使用kableExtra和knitr

我有一个具有长列名称的表。当我将标题行旋转90度时,换行符不起作用。有谁知道如何实现旋转行和换行?

我的例子与Hao's Best Practice for newline in Latex table中的相同,但我在代码的末尾添加了管道row_spec。

documentclass[10pt,a4paper]{article}
usepackage[table]{xcolor}

egin{document}
egin{table}
<<global_options, echo=FALSE>>=
library(kableExtra)
library("dplyr")
dt_lb <- data.frame(
  Item = c("Hello
World", "This
is a cat"),
  Value = c(10, 100)
)
dt_lb %>%
  mutate_all(linebreak) %>%
  kable("latex", booktabs = T, escape = F,
        col.names = linebreak(c("Item
(Name)", "Value
(Number)"))) %>%
  row_spec(0, angle = 90, align='l', monospace=T)

@

end{table}
end{document}

我得到的是这个,但[l]标签暗示标签还有其他问题:

enter image description here

在StackExchange TEX上我发现了一个关于旋转和换行的问题,这是我正在尝试实现的:https://tex.stackexchange.com/questions/14730/big-table-with-rotated-column-labels-using-booktabs

答案

你可以使用tablehtml

library(tableHTML)

" "标签HTML替换新行字符<br>

headers <- c("Item
(Name)", "Value
(Number)") %>% 
  stringr::str_replace_all(pattern = "
", replacement = "<br>")

创建一个tableHTML对象并使用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)

结果如下:

enter image description here

注意:您可以添加更多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
World", "This
is a cat"),
  Value = c(10, 100)
)

headers <- c("Item
(Name)", "Value
(Number)") %>% 
  stringr::str_replace_all(pattern = "
", 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文件。然后可以使用PDF将此文件转换为wkhtmltopdf

另一答案

我想你可能把你的rmarkdown文档渲染成HTML ...在rmarkdown yaml标题中,它现在是否说html_document?如果是这样,您可以尝试将其更改为pdf_document .....

我用完全相同的代码渲染了一个pdf_document,我想我得到了你想要的东西......

enter image description here

---
title: "Table Sample"
output: pdf_document
---

``` {r, include = FALSE}
library(tidyverse)

library(kableExtra)
```

```{r}
dt_lb <- data.frame(
  Item = c("Hello
World", "This
is a cat"),
  Value = c(10, 100)
)
dt_lb %>%
  mutate_all(linebreak) %>%
  kable("latex", booktabs = T, escape = F,
    col.names = linebreak(c("Item
(Name)", "Value
(Number)"), align = "c")) %>%
 row_spec(0, angle = 90)
```
另一答案

胶乳包装makecell丢失了。

Hao指出,本手册的第3页列出了一些必要的Latex软件包:haozhu233.github.io/kableExtra/awesome_table_in_pdf.pdf

以上是关于R kableExtra latex:将换行符添加到旋转的标题行的主要内容,如果未能解决你的问题,请参考以下文章

有什么方法可以让R Markdown将LaTeX环境放在新的段落中?

LaTeX:表格内换行与各种居中完美解决

LaTeX:表格内换行与各种居中完美解决

与科学记数法 kableExtra table R markdown html 结合时,十进制后的数字不一致

将 LaTeX 放入 R 图中

latex中加号和等号怎么错开