Как контролировать размер изменяемых объектов с большими кусками текста в rmarkdown

Мне было сложно создать таблицу с использованием flextable в RMarkdown, где для большой строки текста в таблице вывод PDF (и HTML) продолжал печатать очень маленькую таблицу. Изменение настроек в заголовке блока (например, fig.height) или использование flextable :: autofit () или flextable :: width () не помогло. Пример:

library(tidyverse) # for %>%
library(flextable)
text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quis blandit turpis cursus in hac habitasse platea dictumst quisque. Ornare massa eget egestas purus viverra accumsan in nisl. Sociis natoque penatibus et magnis dis. Odio euismod lacinia at quis. Pellentesque elit ullamcorper dignissim cras tincidunt. In egestas erat imperdiet sed euismod nisi porta lorem mollis. Convallis posuere morbi leo urna. Sit amet consectetur adipiscing elit duis tristique sollicitudin. Ac odio tempor orci dapibus ultrices in iaculis nunc. Egestas tellus rutrum tellus pellentesque eu tincidunt tortor."
df = as.data.frame(text)

text_in_box = flextable(df) %>%
  theme_box() %>%
  delete_part(part = "header") %>%
  align(align = "left", part = "all") %>%
  set_caption("Interesting text") %>% 
  autofit()
  
knitr::knit_print(text_in_box)

вывод для примера выше


person ilse pit    schedule 19.08.2020    source источник


Ответы (2)


Ответ, который я нашел, - это функция flextable :: height (). Это контролирует высоту строки, а не строки, как я ошибочно предположил. Поскольку весь текст помещается в одну строку, он сжимает текст до очень маленького размера, если по умолчанию используется height (). Поэтому вам нужно немного поработать с точной высотой, которая подходит для того количества строк, которое у вас есть, в данном случае это была высота = .6. Я могу представить, что добавление нескольких новых строк (с использованием \ n) к основному тексту также может быть полезно, если вы хотите манипулировать количеством текста в одной строке, что, в свою очередь, повлияет на высоту, которую вы, возможно, захотите установить в height ( ).

text_in_box = flextable(df) %>%
  theme_box() %>%
  delete_part(part = "header") %>%
  align(align = "left", part = "all") %>%
  set_caption("Interesting text") %>% 
  autofit() %>%
  height(height = .6)
  
knitr::knit_print(text_in_box)

введите описание изображения здесь

Надеюсь, этот ответ сэкономит кому-то время, которое мне потребовалось, чтобы понять это!

person ilse pit    schedule 19.08.2020

Возможно, вы используете старую версию flextable. Вы использовали 3-й случай, думаю, вас заинтересуют 1-й и 2-й случай:

---
output: word_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = FALSE)
library(tidyverse) # for %>%
library(flextable)
text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Quis blandit turpis cursus in hac habitasse platea dictumst quisque. Ornare massa eget egestas purus viverra accumsan in nisl. Sociis natoque penatibus et magnis dis. Odio euismod lacinia at quis. Pellentesque elit ullamcorper dignissim cras tincidunt. In egestas erat imperdiet sed euismod nisi porta lorem mollis. Convallis posuere morbi leo urna. Sit amet consectetur adipiscing elit duis tristique sollicitudin. Ac odio tempor orci dapibus ultrices in iaculis nunc. Egestas tellus rutrum tellus pellentesque eu tincidunt tortor."
df = as.data.frame(text)
```

## With `set_table_properties(layout = "autofit")`

```{r}
flextable(df) %>%
  theme_box() %>%
  delete_part(part = "header") %>%
  align(align = "left", part = "all") %>%
  set_caption("Interesting text") %>% 
  set_table_properties(layout = "autofit")
```

## With a fixed width

```{r}
flextable(df) %>%
  theme_box() %>%
  delete_part(part = "header") %>%
  align(align = "left", part = "all") %>%
  set_caption("Interesting text") %>% 
  width(width = 4) 
```

## With a fixed width and a fixed height

```{r}
flextable(df) %>%
  theme_box() %>%
  delete_part(part = "header") %>%
  align(align = "left", part = "all") %>%
  set_caption("Interesting text") %>% 
  width(width = 4) %>% 
  height(height = .6) %>% 
  hrule(rule = "exact", part = "all")
```

введите описание изображения здесь

person David Gohel    schedule 19.08.2020
comment
привет, Дэвид, я должен был упомянуть, что вяжу PDF (bookdown :: pdf_document2), и ни один из этих методов, похоже, не работает в этом случае .. См. мой результат здесь - person ilse pit; 19.08.2020