R Markdown文本与代码双倍行距问题解决咨询
解决R Markdown PDF中仅正文双倍行距、代码/输出单倍的问题
嘿,这个困扰太常见了!全局设置\doublespacing确实会把所有内容(包括代码块、输出结果)都改成双倍行距,不过有几个简单的办法能精准控制:
方法1:用LaTeX工具包重定义代码块环境
在你的YAML头部添加etoolbox包,它能帮我们在特定环境切换行距:
--- title: "smp" author: "XXX YYY" date: "October 9, 2019" output: pdf_document: default header-includes: - \usepackage{setspace} - \usepackage{etoolbox} - \doublespacing - \AtBeginEnvironment{verbatim}{\singlespacing} - \AtEndEnvironment{verbatim}{\doublespacing} ---
原理是:verbatim是knitr默认用来渲染代码块和输出的LaTeX环境,我们让它开始时切换成单倍行距,结束后切回双倍,完美隔离正文和代码区域。
方法2:自定义高亮代码块的行距
如果你的代码块有语法高亮(默认是开启的),knitr会用Highlighting环境,这时候可以用fancyvrb包直接重定义这个环境的行距:
--- title: "smp" author: "XXX YYY" date: "October 9, 2019" output: pdf_document: default header-includes: - \usepackage{setspace} - \usepackage{fancyvrb} - \doublespacing - \DefineVerbatimEnvironment{Highlighting}{Verbatim}{baselinestretch=1} ---
baselinestretch=1就是单倍行距的意思,你也可以根据需求调小(比如0.9)让代码更紧凑。
方法3:用knitr钩子控制输出内容
如果你想更灵活地控制输出结果的格式,可以在R代码块里设置knitr的钩子函数,把输出包裹在单倍行距环境中:
knitr::knit_hooks$set(output = function(x, options) { # 给输出内容套上singlespace环境 paste0('\\begin{singlespace}\n', x, '\\end{singlespace}\n') })
记得要确保你的LaTeX已经加载了setspace包(也就是YAML里已经加了\usepackage{setspace}和\doublespacing)。
这几种方法都能解决你的问题,选最顺手的就行~
内容的提问来源于stack exchange,提问作者Justin
相关产品推荐
相关产品推荐

