如何在R Markdown转PDF时用flextable()减小行间距
问题描述
使用flextable 0.7.3版本时,flextable::line_spacing(space = 0)在编织为HTML文档时可正常缩小行间距,但编织为PDF时完全无效。尝试过设置固定行高,但因实际数据存在多行内容,无法固定行高;且由于需要应用条件格式,flextable比kableExtra::column_spec()更适用,因此希望找到通过flextable生成小行间距PDF表格的方法。
相关代码:
--- output: pdf_document: latex_engine: xelatex html_document: df_print: paged ---
library(tidyverse) cars %>% head(10) %>% flextable::flextable() %>% flextable::line_spacing(space = 0, part = "body", unit = "mm")
解决方案
在PDF(LaTeX)输出中,line_spacing()的space参数是相对行高的倍数,0值会被LaTeX忽略,需结合以下两个调整实现紧凑行间距:
- 将
line_spacing()的space设为小于1的正数(如0.7-0.9),缩小单元格内文本的行间距 - 用
padding()清除单元格上下内边距,消除额外的空白
修改后的代码:
library(tidyverse) library(flextable) cars %>% head(10) %>% flextable() %>% # 设置单元格内文本行间距为默认的80% line_spacing(space = 0.8, part = "body") %>% # 移除单元格上下内边距 padding(padding.top = 0, padding.bottom = 0, part = "body") %>% # 自动适配表格宽度(可选) set_table_properties(layout = "autofit")
说明
- LaTeX不支持行间距设为0,必须使用小于1的比例值控制紧凑程度,可根据需求调整
space的具体数值 - 单元格默认的上下内边距是视觉上行间距过大的主要原因之一,清除后能进一步压缩表格整体高度
- 保持
latex_engine: xelatex的设置,确保flextable的LaTeX输出正常渲染
内容的提问来源于stack exchange,提问作者MartineJ
相关产品推荐
相关产品推荐

