R Markdown生成A4 PDF时如何缩小矩形与热图的间距
矩形与热图间距过大的核心原因
draw包的drawBox本质是生成独立LaTeX图形环境块,调用完成后会自动在块的前后插入LaTeX标准段落分隔、固定垂直边距;叠加你当前配置的1cm窄边距、上移正文的自定义LaTeX参数,这些自动生成的边距会被放大,最终形成几厘米级别的多余空白。- 额外间距来自两个环节的叠加:knitr生成ggplot绘图块时,默认会给代码块前后预留垂直边距,这部分距离会和draw块的自动边距累加,进一步拉大空白。
可直接落地的调整方案
- 调整绘制矩形的代码块参数,压缩冗余画布:
给调用drawBox的chunk加上对应配置,重点把块高匹配实际矩形尺寸,关掉自动边距:
这里的drawBox(你的矩形绘制参数)fig.height不要留富余空间,按照你实际画的矩形高度设置,out.extra=''会直接关掉LaTeX给嵌入图形默认添加的上下垂直边距,fig.pos='H'会强制让矩形固定在代码出现的位置,不触发LaTeX浮动排版的自动位置调整。 - 全局压低knitr绘图块的默认边距,在你最开头的setup配置块里追加全局参数:
其中knitr::opts_chunk$set( echo = FALSE, fig.margin = 0, par = list(mar = c(0,0,0,0)), fig.process = identity )fig.margin=0的作用是把ggplot绘图块和前后内容的默认间距直接压到0,从根源上减少累加的空白。 - 手动控制两个块的目标间距:在draw矩形的chunk结束后、热图chunk开始前,插入长度刚好匹配1-2行空白的垂直间距命令,替代原来自动生成的大段空白:
\vspace{3mm} - 给热图的chunk也加上固定定位参数,同样设置
fig.pos='H',强制热图放在上一段内容的下方,不触发LaTeX的浮动位置偏移。
容易忽略的踩坑细节
- 不要在两个代码块之间留多余的空行:R Markdown会把源码里的空行翻译成LaTeX的空段落,直接带出半行以上的额外间距,两个代码块直接上下相邻排布即可。
- 这两个相邻的绘图块不要设置居中对齐:居中对齐参数有时候会连带触发图形块外的额外垂直边距,统一用左对齐即可匹配你左上角矩形的排版需求。
内容的提问来源于stack exchange,提问作者TarJae
相关产品推荐
相关产品推荐

