R kableExtra latex: добавить разрывы строк в повернутой строке заголовка - PullRequest
0 голосов
/ 27 августа 2018

Я пытаюсь создать таблицу для документа Latex-pdf.Я использую kableExtra и knitr в R.

У меня есть таблица с длинными именами столбцов.Когда я поверну строку заголовка на 90 градусов, переносы строк не будут работать.У кого-нибудь есть идеи, как я могу добиться как повернутых строк, так и разрывов строк?

Мой пример такой же, как в Наилучшая практика Хао для перевода строки в латексную таблицу , но я добавил пипетку 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] намекают, что с тегами тоже что-то не так:

enter image description here

На StackExchange TEX я нашел вопрос о ротации и переносах строк, вот чего я пытаюсь достичь: https://tex.stackexchange.com/questions/14730/big-table-with-rotated-column-labels-using-booktabs

Ответы [ 3 ]

0 голосов
/ 27 августа 2018

Я думаю, вы, вероятно, визуализировали свой документ rmarkdown в HTML ... В заголовке yaml rmarkdown написано 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\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)
```
0 голосов
/ 05 сентября 2018

Латексная упаковка makecell отсутствует.

Хао отметил, что на странице 3 этого руководства перечислены некоторые необходимые пакеты из латекса: haozhu233.github.io/kableExtra/awesome_table_in_pdf.pdf

0 голосов
/ 27 августа 2018

Вы можете использовать tableHTML:

library(tableHTML)

Заменить символ новой строки "\n" на тег HTML <br>:

headers <- c("Item\n(Name)", "Value\n(Number)") %>% 
  stringr::str_replace_all(pattern = "\\n", 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 или темы по умолчанию. Проверьте виньетки для более подробной информации:

Если вы хотите создать 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. Затем этот файл можно преобразовать в PDF, используя wkhtmltopdf .

...