如何在RMarkdown PDF输出中避免代码块输出跨页断行?
解决RMarkdown PDF中代码块跨页拆分的问题
因为RMarkdown生成PDF的底层是LaTeX,所以可以直接用LaTeX的分页控制机制解决代码块跨页拆分的问题,替代手动加\newline的繁琐操作,以下是几种实用方法:
方法一:用LaTeX
samepage环境批量包裹代码输出
在文档开头的R代码块(setup块)中设置knitr钩子,自动给所有代码输出块加上samepage环境,强制内容不跨页:knitr::knit_hooks$set(output = function(x, options) { paste0('\\begin{samepage}\n', x, '\\end{samepage}\n') })如果只想针对特定代码块,也可以手动在代码块前后添加LaTeX命令:
\begin{samepage}# 这里是你的R代码 head(mtcars)\end{samepage}方法二:全局设置代码块的LaTeX环境参数
knitr默认使用fancyvrb包渲染代码块,你可以在文档开头的LaTeX代码块中设置全局参数,强制代码块内容尽量保持在同一页:\usepackage{fancyvrb} \fvset{samepage=true}这个设置会让所有代码块默认启用
samepage属性,只有当代码内容长度超过单页容量时才会分页,避免少量内容跨页拆分的情况。方法三:调整LaTeX的孤行控制全局参数
直接在LaTeX预导区添加全局的孤行/寡行控制命令,对整个文档的文本(包括代码块)生效:\widowpenalty=10000 \clubpenalty=10000这两个命令会大幅增加孤行(页首的单行)和寡行(页尾的单行)出现的惩罚值,LaTeX会尽量避免将少量内容拆分到不同页面。
内容的提问来源于stack exchange,提问作者Alex Essilfie
相关产品推荐
相关产品推荐

