微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。