如何在rmarkdown中使用大块文本控制可伸缩对象的大小

问题描述

在RMarkdown中使用flextable创建表时,我很费力,其中对于表中的一大串文本,PDF(和HTML)输出始终打印出很小的表。更改块标题中的设置(例如图高度)或使用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)

output for the example above

解决方法

我找到的答案是flextable :: height()函数。正如我错误地假设的那样,这控制了而不是 line 的高度。当所有文本都放入一行时,如果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)

enter image description here

希望这个答案节省了我花时间解决这个问题的时间!

,

也许您使用的是旧版本的flextable。您使用的是第三种情况,我想您会对第一种情况和第二种情况感兴趣:

---
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")
```

enter image description here

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...